@corsair-dev/airtable 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.test.d.ts +2 -0
- package/dist/api.test.d.ts.map +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/endpoints/bases.d.ts +1 -1
- package/dist/endpoints/bases.d.ts.map +1 -1
- package/dist/endpoints/records.d.ts +1 -1
- package/dist/endpoints/records.d.ts.map +1 -1
- package/dist/endpoints/webhook-payloads.d.ts +1 -1
- package/dist/endpoints/webhook-payloads.d.ts.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/tsup.config copy.d.ts +3 -0
- package/dist/tsup.config copy.d.ts.map +1 -0
- package/dist/webhooks/event.d.ts +1 -1
- package/dist/webhooks/event.d.ts.map +1 -1
- package/dist/webhooks/types.d.ts +1 -1
- package/dist/webhooks/types.d.ts.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.test.d.ts","sourceRoot":"","sources":["../api.test.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"AAGA,qBAAa,gBAAiB,SAAQ,KAAK;aAGzB,IAAI,CAAC,EAAE,MAAM;gBAD7B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA;CAK9B;AAID,wBAAsB,mBAAmB,CAAC,CAAC,EAC1C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAEd,OAAO,GAAE;IACR,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CACzD,GACJ,OAAO,CAAC,CAAC,CAAC,CAmCZ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AirtableEndpoints } from '
|
|
1
|
+
import type { AirtableEndpoints } from '../index';
|
|
2
2
|
export declare const getMany: AirtableEndpoints['basesGetMany'];
|
|
3
3
|
export declare const getSchema: AirtableEndpoints['basesGetSchema'];
|
|
4
4
|
//# sourceMappingURL=bases.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bases.d.ts","sourceRoot":"","sources":["../../endpoints/bases.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bases.d.ts","sourceRoot":"","sources":["../../endpoints/bases.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAgCrD,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,gBAAgB,CAoBzD,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AirtableEndpoints } from '
|
|
1
|
+
import type { AirtableEndpoints } from '../index';
|
|
2
2
|
export declare const create: AirtableEndpoints['recordsCreate'];
|
|
3
3
|
export declare const createOrUpdate: AirtableEndpoints['recordsCreateOrUpdate'];
|
|
4
4
|
export declare const deleteRecord: AirtableEndpoints['recordsDelete'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../endpoints/records.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../endpoints/records.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,eAAe,CAmCrD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,uBAAuB,CAoCpE,CAAC;AAEH,eAAO,MAAM,YAAY,EAAE,iBAAiB,CAAC,eAAe,CAyB3D,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,iBAAiB,CAAC,YAAY,CA6B/C,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,eAAe,CAsCrD,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,eAAe,CAwCrD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-payloads.d.ts","sourceRoot":"","sources":["../../endpoints/webhook-payloads.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webhook-payloads.d.ts","sourceRoot":"","sources":["../../endpoints/webhook-payloads.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAGzE,KAAK,wBAAwB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,2BAA2B,GAAG,+BAA+B,CAAC;AAEnE,eAAO,MAAM,WAAW,GACvB,KAAK,eAAe,EACpB,OAAO,wBAAwB,KAC7B,OAAO,CAAC,2BAA2B,CA0HrC,CAAC;AAEF,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAU,GAChB,OAAO,CAAC,+BAA+B,CAAC,CAE1C"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { BindEndpoints, BindWebhooks, CorsairEndpoint, CorsairErrorHandler, CorsairPlugin, CorsairPluginContext, CorsairWebhook, KeyBuilderContext, PluginPermissionsConfig } from 'corsair/core';
|
|
2
|
-
import type { AuthTypes, PickAuth } from 'corsair/core';
|
|
1
|
+
import type { AuthTypes, BindEndpoints, BindWebhooks, CorsairEndpoint, CorsairErrorHandler, CorsairPlugin, CorsairPluginContext, CorsairWebhook, KeyBuilderContext, PickAuth, PluginPermissionsConfig } from 'corsair/core';
|
|
3
2
|
import type { AirtableEndpointInputs, AirtableEndpointOutputs } from './endpoints/types';
|
|
4
3
|
import { AirtableSchema } from './schema';
|
|
5
4
|
import type { AirtableEvent, AirtableWebhookOutputs } from './webhooks/types';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,iBAAiB,
|
|
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{logEventFromContext as w}from"corsair/core";import{request as J}from"corsair/http";var R=class extends Error{constructor(o,a){super(o);this.code=a;this.name="AirtableAPIError"}},Z="https://api.airtable.com/v0";async function c(r,t,o={}){let{method:a="GET",body:n,query:i}=o,h={BASE:Z,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:t,HEADERS:{"Content-Type":"application/json",Authorization:`Bearer ${t}`}},d={method:a,url:r,body:a==="POST"||a==="PUT"||a==="PATCH"?n:void 0,mediaType:"application/json; charset=utf-8",query:a==="GET"||a==="DELETE"?i:void 0};try{return await J(h,d)}catch(l){throw l instanceof Error?new R(l.message):new R("Unknown error")}}var O=async(r,t)=>{let o=await c("meta/bases",r.key,{method:"GET",query:{offset:t.offset}});if(o.bases&&r.db.bases)try{for(let a of o.bases)await r.db.bases.upsertByEntityId(a.id,{...a})}catch(a){console.warn("Failed to save bases to database:",a)}return await w(r,"airtable.bases.getMany",{...t},"completed"),o},x=async(r,t)=>{let o=await c(`meta/bases/${t.baseId}/tables`,r.key,{method:"GET",query:{include:t.include?.join(",")}});return await w(r,"airtable.bases.getSchema",{...t},"completed"),o};import{logEventFromContext as f}from"corsair/core";var C=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}`,r.key,{method:"POST",body:{records:[{fields:t.fields}],typecast:t.typecast}});if(o.records&&r.db.records)try{for(let a of o.records)await r.db.records.upsertByEntityId(a.id,{...a,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.create",{...t},"completed"),o},B=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}`,r.key,{method:"PATCH",body:{records:[{fields:t.fields}],performUpsert:{fieldsToMergeOn:t.fieldsToMergeOn},typecast:t.typecast}});if(o.records&&r.db.records)try{for(let a of o.records)await r.db.records.upsertByEntityId(a.id,{...a,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.createOrUpdate",{...t},"completed"),o},P=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}/${t.recordId}`,r.key,{method:"DELETE"});if(r.db.records&&o.deleted&&o.id)try{await r.db.records.deleteByEntityId(o.id)}catch(a){console.warn("Failed to delete records from database:",a)}return await f(r,"airtable.records.delete",{...t},"completed"),o},v=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}/${t.recordId}`,r.key,{method:"GET",query:{returnFieldsByFieldId:t.returnFieldsByFieldId}});if(r.db.records)try{await r.db.records.upsertByEntityId(o.id,{...o,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.get",{...t},"completed"),o},T=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}`,r.key,{method:"GET",query:{...t,sort:t.sort?.map(a=>`${a.field}:${a.direction}`).join(","),fields:t.fields?.join(",")}});if(o.records&&r.db.records)try{for(let a of o.records)await r.db.records.upsertByEntityId(a.id,{...a,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.search",{...t},"completed"),o},G=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}`,r.key,{method:"PATCH",body:{records:[{id:t.recordId,fields:t.fields}],typecast:t.typecast}});if(o.records&&r.db.records)try{for(let a of o.records)await r.db.records.upsertByEntityId(a.id,{...a,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.update",{...t},"completed"),o};import*as k from"crypto";import{z as s}from"zod";var W=s.object({source:s.string().optional(),sourceMetadata:s.object({user:s.object({id:s.string(),email:s.string().optional(),name:s.string().optional()}).optional()}).optional()}),Q=s.object({base:s.object({id:s.string()}),webhook:s.object({id:s.string()}),timestamp:s.string(),actionMetadata:W.optional()}),M=s.object({base:s.object({id:s.string()}),webhook:s.object({id:s.string()}),timestamp:s.string(),actionMetadata:W.optional()}),j=Q,X=s.object({path:s.object({tableId:s.string().optional(),recordId:s.string().optional(),fieldId:s.string().optional()}).optional(),cellValuesByFieldId:s.record(s.unknown()).optional()}).passthrough(),Y=s.object({timestamp:s.string(),baseTransactionNumber:s.number().optional(),changes:s.array(X).optional(),changedTablesById:s.record(s.unknown()).optional()}).passthrough(),U=s.object({cursorForNextPayload:s.number().optional(),payloads:s.array(Y).default([])});function ee(r){return typeof r=="string"?JSON.parse(r):r}function F(){return r=>{let t=ee(r.body);return typeof t=="object"&&t!==null&&"base"in t&&"webhook"in t}}function N(r,t){if(!t)return{valid:!1,error:"Missing webhook secret"};let o=r.rawBody;if(!o)return{valid:!1,error:"Missing raw body for signature verification"};let a=r.headers,n=Array.isArray(a["x-airtable-content-mac"])?a["x-airtable-content-mac"][0]:a["x-airtable-content-mac"];if(!n)return{valid:!1,error:"Missing x-airtable-content-mac header"};try{let i=Buffer.from(t,"base64"),d=`hmac-sha256=${k.createHmac("sha256",i).update(o).digest("hex")}`;return k.timingSafeEqual(Buffer.from(n),Buffer.from(d))?{valid:!0}:{valid:!1,error:"Invalid signature"}}catch{return{valid:!1,error:"Invalid signature"}}}var _=async(r,t)=>{let o=await c(`bases/${t.baseId}/webhooks/${t.webhookId}/payloads`,r.key,{method:"GET",query:{cursor:t.cursor??0}}),a=U.parse(o);if(a.payloads&&r.db.records)try{for(let n of a.payloads){if(n.changes)for(let i of n.changes)i.path?.recordId&&i.cellValuesByFieldId&&await r.db.records.upsertByEntityId(i.path.recordId,{id:i.path.recordId,baseId:t.baseId,tableId:i.path.tableId,fields:{...i.cellValuesByFieldId}});if(n.changedTablesById)for(let[i,h]of Object.entries(n.changedTablesById)){let d=h;if(d.changedRecordsById){let l=d.changedRecordsById;for(let[y,E]of Object.entries(l)){let g=E;g.cellValuesByFieldId&&await r.db.records.upsertByEntityId(y,{id:y,baseId:t.baseId,tableId:i,fields:{...g.cellValuesByFieldId}})}}if(d.createdRecordsById){let l=d.createdRecordsById;for(let[y,E]of Object.entries(l)){let g=E;g.cellValuesByFieldId&&await r.db.records.upsertByEntityId(y,{id:y,baseId:t.baseId,tableId:i,fields:{...g.cellValuesByFieldId}})}}if(d.destroyedRecordIds){let l=Array.isArray(d.destroyedRecordIds)?d.destroyedRecordIds:[d.destroyedRecordIds];for(let y of l)typeof y=="string"&&await r.db.records.deleteByEntityId(y)}}}}catch(n){console.warn("Failed to save webhook payload records to database:",n)}return a};import{z as e}from"zod";var te=e.object({offset:e.string().optional()}),re=e.object({baseId:e.string(),include:e.array(e.enum(["visibleFieldIds","fieldIdsInSynced"])).optional()}),oe=e.object({baseId:e.string(),tableIdOrName:e.string(),fields:e.record(e.unknown()),typecast:e.boolean().optional()}),ae=e.object({baseId:e.string(),tableIdOrName:e.string(),fields:e.record(e.unknown()),fieldsToMergeOn:e.array(e.string()),typecast:e.boolean().optional()}),se=e.object({baseId:e.string(),tableIdOrName:e.string(),recordId:e.string()}),ne=e.object({baseId:e.string(),tableIdOrName:e.string(),recordId:e.string(),returnFieldsByFieldId:e.boolean().optional()}),ie=e.object({baseId:e.string(),tableIdOrName:e.string(),fields:e.array(e.string()).optional(),filterByFormula:e.string().optional(),maxRecords:e.number().optional(),pageSize:e.number().optional(),sort:e.array(e.object({field:e.string(),direction:e.enum(["asc","desc"]).optional()})).optional(),view:e.string().optional(),cellFormat:e.enum(["json","string"]).optional(),timeZone:e.string().optional(),userLocale:e.string().optional(),returnFieldsByFieldId:e.boolean().optional(),offset:e.string().optional()}),de=e.object({baseId:e.string(),tableIdOrName:e.string(),recordId:e.string(),fields:e.record(e.unknown()),typecast:e.boolean().optional()}),ce=e.object({baseId:e.string(),webhookId:e.string(),cursor:e.number().optional()}),b={basesGetMany:te,basesGetSchema:re,recordsCreate:oe,recordsCreateOrUpdate:ae,recordsDelete:se,recordsGet:ne,recordsSearch:ie,recordsUpdate:de,webhookGetPayloads:ce},A=e.object({id:e.string(),createdTime:e.string(),fields:e.record(e.unknown())}).passthrough(),pe=e.object({id:e.string(),name:e.string(),permissionLevel:e.string()}).passthrough(),le=e.object({id:e.string(),type:e.string(),name:e.string(),description:e.string().optional(),options:e.record(e.unknown()).optional()}).passthrough(),be=e.object({id:e.string(),type:e.string(),name:e.string(),personalForCreator:e.boolean().optional()}).passthrough(),ue=e.object({id:e.string(),name:e.string(),primaryFieldId:e.string(),description:e.string().optional(),fields:e.array(le),views:e.array(be)}).passthrough(),ye=e.object({bases:e.array(pe),offset:e.string().optional()}).passthrough(),he=e.object({tables:e.array(ue)}).passthrough(),me=e.object({records:e.array(A)}).passthrough(),fe=e.object({records:e.array(A)}).passthrough(),ge=e.object({id:e.string(),deleted:e.boolean()}).passthrough(),Ae=A,Ie=e.object({records:e.array(A),offset:e.string().optional()}).passthrough(),Re=e.object({records:e.array(A)}).passthrough(),ke=e.object({cursorForNextPayload:e.number().optional(),payloads:e.array(e.unknown()).default([])}).passthrough(),u={basesGetMany:ye,basesGetSchema:he,recordsCreate:me,recordsCreateOrUpdate:fe,recordsDelete:ge,recordsGet:Ae,recordsSearch:Ie,recordsUpdate:Re,webhookGetPayloads:ke};var S={getMany:O,getSchema:x},m={create:C,createOrUpdate:B,delete:P,get:v,search:T,update:G},z={getPayloads:_};import{ApiError as I}from"corsair/http";var D={RATE_LIMIT_ERROR:{match:(r,t)=>{if(r instanceof I&&r.status===429)return!0;let o=r.message.toLowerCase();return o.includes("rate_limited")||o.includes("ratelimited")||r.message.includes("429")},handler:async(r,t)=>{let o;return r instanceof I&&r.retryAfter!==void 0&&(o=r.retryAfter),{maxRetries:5,headersRetryAfterMs:o}}},AUTH_ERROR:{match:(r,t)=>{if(r instanceof I&&r.status===401)return!0;let o=r.message.toLowerCase();return o.includes("invalid_auth")||o.includes("unauthorized")||o.includes("authentication_required")||o.includes("invalid_api_key")},handler:async(r,t)=>(console.error(`[AIRTABLE:${t.operation}] Authentication failed - check your API key`),{maxRetries:0})},PERMISSION_ERROR:{match:(r,t)=>{if(r instanceof I&&r.status===403)return!0;let o=r.message.toLowerCase();return o.includes("permission_denied")||o.includes("forbidden")||o.includes("access_denied")||o.includes("invalid_permissions")},handler:async(r,t)=>(console.warn(`[AIRTABLE:${t.operation}] Permission denied: ${r.message}`),{maxRetries:0})},NETWORK_ERROR:{match:(r,t)=>{let o=r.message.toLowerCase();return o.includes("network")||o.includes("connection")||o.includes("econnrefused")||o.includes("enotfound")||o.includes("etimedout")||o.includes("fetch failed")||o.includes("network error")},handler:async(r,t)=>(console.warn(`[AIRTABLE:${t.operation}] Network error: ${r.message}`),{maxRetries:3})},NOT_FOUND_ERROR:{match:(r,t)=>{if(r instanceof I&&r.status===404)return!0;let o=r.message.toLowerCase();return o.includes("not_found")||o.includes("model_not_found")||o.includes("table_not_found")||o.includes("record_not_found")},handler:async(r,t)=>(console.warn(`[AIRTABLE:${t.operation}] Resource not found: ${r.message}`),{maxRetries:0})},DEFAULT:{match:(r,t)=>!0,handler:async(r,t)=>(console.error(`[AIRTABLE:${t.operation}] Unhandled error: ${r.message}`),{maxRetries:0})}};import{z as p}from"zod";var L=p.object({id:p.string(),fields:p.record(p.unknown()).optional(),createdTime:p.string().optional(),baseId:p.string().optional(),tableId:p.string().optional()}),$=p.object({id:p.string(),name:p.string().optional(),permissionLevel:p.string().optional()});var H={version:"1.0.0",entities:{records:L,bases:$}};import{logEventFromContext as q}from"corsair/core";var K={match:F(),handler:async(r,t)=>{let o=r.key,a=N(t,o);if(!a.valid)return{success:!1,statusCode:401,error:a.error||"Signature verification failed"};let n=t.payload;if(!n||typeof n!="object"||!("base"in n)||!("webhook"in n))return{success:!0,data:void 0};let i="";try{let d=await r.endpoints.webhooks.getPayloads({baseId:n.base.id,webhookId:n.webhook.id,cursor:void 0});await q(r,"airtable.webhook.event",{...n,payloads:[...d.payloads]},"completed")}catch(h){console.warn("Failed to fetch webhook payloads from Airtable:",h),await q(r,"airtable.webhook.event",{...n},"completed")}return{success:!0,corsairEntityId:i,data:n}}};var V={event:K};var Ee={bases:{getMany:S.getMany,getSchema:S.getSchema},records:{create:m.create,createOrUpdate:m.createOrUpdate,delete:m.delete,get:m.get,search:m.search,update:m.update},webhooks:{getPayloads:z.getPayloads}},Se={events:{event:V.event}},we={"bases.getMany":{input:b.basesGetMany,output:u.basesGetMany},"bases.getSchema":{input:b.basesGetSchema,output:u.basesGetSchema},"records.create":{input:b.recordsCreate,output:u.recordsCreate},"records.createOrUpdate":{input:b.recordsCreateOrUpdate,output:u.recordsCreateOrUpdate},"records.delete":{input:b.recordsDelete,output:u.recordsDelete},"records.get":{input:b.recordsGet,output:u.recordsGet},"records.search":{input:b.recordsSearch,output:u.recordsSearch},"records.update":{input:b.recordsUpdate,output:u.recordsUpdate}},Oe={"events.event":{description:"On new Airtable event \u2014 fires when records or tables change",payload:j,response:M}},xe="api_key",Ce={"bases.getMany":{riskLevel:"read",description:"List all accessible bases"},"bases.getSchema":{riskLevel:"read",description:"Get the schema (tables, fields, views) of a base"},"records.create":{riskLevel:"write",description:"Create a record in a table"},"records.createOrUpdate":{riskLevel:"write",description:"Create or update a record using upsert"},"records.delete":{riskLevel:"destructive",description:"Delete a record from a table [DESTRUCTIVE]"},"records.get":{riskLevel:"read",description:"Get a single record by ID"},"records.search":{riskLevel:"read",description:"Search and list records with optional filters"},"records.update":{riskLevel:"write",description:"Update fields on an existing record"}},ut={api_key:{account:["one"]}};function yt(r={}){let t={...r,authType:r.authType??xe};return{id:"airtable",schema:H,options:t,hooks:t.hooks,webhookHooks:t.webhookHooks,endpoints:Ee,webhooks:Se,endpointMeta:Ce,endpointSchemas:we,webhookSchemas:Oe,pluginWebhookMatcher:o=>"x-airtable-content-mac"in o.headers,errorHandlers:{...D,...t.errorHandlers},keyBuilder:async(o,a)=>{if(a==="webhook"&&t.webhookSecret)return t.webhookSecret;if(a==="webhook"){let n=await o.keys.get_webhook_signature();return n||""}if(a==="endpoint"&&t.key)return t.key;if(a==="endpoint"&&o.authType==="api_key"){let n=await o.keys.get_api_key();return n||""}return""}}}export{yt as airtable,ut as airtableAuthConfig,we as airtableEndpointSchemas};
|
|
1
|
+
import{logEventFromContext as S}from"corsair/core";import{request as J}from"corsair/http";var R=class extends Error{constructor(o,a){super(o);this.code=a;this.name="AirtableAPIError"}},Z="https://api.airtable.com/v0";async function c(r,t,o={}){let{method:a="GET",body:n,query:i}=o,y={BASE:Z,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:t,HEADERS:{"Content-Type":"application/json",Authorization:`Bearer ${t}`}},d={method:a,url:r,body:a==="POST"||a==="PUT"||a==="PATCH"?n:void 0,mediaType:"application/json; charset=utf-8",query:a==="GET"||a==="DELETE"?i:void 0};try{return await J(y,d)}catch(l){throw l instanceof Error?new R(l.message):new R("Unknown error")}}var O=async(r,t)=>{let o=await c("meta/bases",r.key,{method:"GET",query:{offset:t.offset}});if(o.bases&&r.db.bases)try{for(let a of o.bases)await r.db.bases.upsertByEntityId(a.id,{...a})}catch(a){console.warn("Failed to save bases to database:",a)}return await S(r,"airtable.bases.getMany",{...t},"completed"),o},x=async(r,t)=>{let o=await c(`meta/bases/${t.baseId}/tables`,r.key,{method:"GET",query:{include:t.include?.join(",")}});return await S(r,"airtable.bases.getSchema",{...t},"completed"),o};import{logEventFromContext as f}from"corsair/core";var C=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}`,r.key,{method:"POST",body:{records:[{fields:t.fields}],typecast:t.typecast}});if(o.records&&r.db.records)try{for(let a of o.records)await r.db.records.upsertByEntityId(a.id,{...a,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.create",{...t},"completed"),o},B=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}`,r.key,{method:"PATCH",body:{records:[{fields:t.fields}],performUpsert:{fieldsToMergeOn:t.fieldsToMergeOn},typecast:t.typecast}});if(o.records&&r.db.records)try{for(let a of o.records)await r.db.records.upsertByEntityId(a.id,{...a,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.createOrUpdate",{...t},"completed"),o},P=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}/${t.recordId}`,r.key,{method:"DELETE"});if(r.db.records&&o.deleted&&o.id)try{await r.db.records.deleteByEntityId(o.id)}catch(a){console.warn("Failed to delete records from database:",a)}return await f(r,"airtable.records.delete",{...t},"completed"),o},v=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}/${t.recordId}`,r.key,{method:"GET",query:{returnFieldsByFieldId:t.returnFieldsByFieldId}});if(r.db.records)try{await r.db.records.upsertByEntityId(o.id,{...o,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.get",{...t},"completed"),o},T=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}`,r.key,{method:"GET",query:{...t,sort:t.sort?.map(a=>`${a.field}:${a.direction}`).join(","),fields:t.fields?.join(",")}});if(o.records&&r.db.records)try{for(let a of o.records)await r.db.records.upsertByEntityId(a.id,{...a,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.search",{...t},"completed"),o},G=async(r,t)=>{let o=await c(`${t.baseId}/${t.tableIdOrName}`,r.key,{method:"PATCH",body:{records:[{id:t.recordId,fields:t.fields}],typecast:t.typecast}});if(o.records&&r.db.records)try{for(let a of o.records)await r.db.records.upsertByEntityId(a.id,{...a,baseId:t.baseId,tableId:t.tableIdOrName})}catch(a){console.warn("Failed to save records to database:",a)}return await f(r,"airtable.records.update",{...t},"completed"),o};import*as k from"crypto";import{z as s}from"zod";var W=s.object({source:s.string().optional(),sourceMetadata:s.object({user:s.object({id:s.string(),email:s.string().optional(),name:s.string().optional()}).optional()}).optional()}),Q=s.object({base:s.object({id:s.string()}),webhook:s.object({id:s.string()}),timestamp:s.string(),actionMetadata:W.optional()}),M=s.object({base:s.object({id:s.string()}),webhook:s.object({id:s.string()}),timestamp:s.string(),actionMetadata:W.optional()}),j=Q,X=s.object({path:s.object({tableId:s.string().optional(),recordId:s.string().optional(),fieldId:s.string().optional()}).optional(),cellValuesByFieldId:s.record(s.unknown()).optional()}).passthrough(),Y=s.object({timestamp:s.string(),baseTransactionNumber:s.number().optional(),changes:s.array(X).optional(),changedTablesById:s.record(s.unknown()).optional()}).passthrough(),U=s.object({cursorForNextPayload:s.number().optional(),payloads:s.array(Y).default([])});function ee(r){return typeof r=="string"?JSON.parse(r):r}function F(){return r=>{let t=ee(r.body);return typeof t=="object"&&t!==null&&"base"in t&&"webhook"in t}}function N(r,t){if(!t)return{valid:!1,error:"Missing webhook secret"};let o=r.rawBody;if(!o)return{valid:!1,error:"Missing raw body for signature verification"};let a=r.headers,n=Array.isArray(a["x-airtable-content-mac"])?a["x-airtable-content-mac"][0]:a["x-airtable-content-mac"];if(!n)return{valid:!1,error:"Missing x-airtable-content-mac header"};try{let i=Buffer.from(t,"base64"),d=`hmac-sha256=${k.createHmac("sha256",i).update(o).digest("hex")}`;return k.timingSafeEqual(Buffer.from(n),Buffer.from(d))?{valid:!0}:{valid:!1,error:"Invalid signature"}}catch{return{valid:!1,error:"Invalid signature"}}}var _=async(r,t)=>{let o=await c(`bases/${t.baseId}/webhooks/${t.webhookId}/payloads`,r.key,{method:"GET",query:{cursor:t.cursor??0}}),a=U.parse(o);if(a.payloads&&r.db.records)try{for(let n of a.payloads){if(n.changes)for(let i of n.changes)i.path?.recordId&&i.cellValuesByFieldId&&await r.db.records.upsertByEntityId(i.path.recordId,{id:i.path.recordId,baseId:t.baseId,tableId:i.path.tableId,fields:{...i.cellValuesByFieldId}});if(n.changedTablesById)for(let[i,y]of Object.entries(n.changedTablesById)){let d=y;if(d.changedRecordsById){let l=d.changedRecordsById;for(let[h,E]of Object.entries(l)){let g=E;g.cellValuesByFieldId&&await r.db.records.upsertByEntityId(h,{id:h,baseId:t.baseId,tableId:i,fields:{...g.cellValuesByFieldId}})}}if(d.createdRecordsById){let l=d.createdRecordsById;for(let[h,E]of Object.entries(l)){let g=E;g.cellValuesByFieldId&&await r.db.records.upsertByEntityId(h,{id:h,baseId:t.baseId,tableId:i,fields:{...g.cellValuesByFieldId}})}}if(d.destroyedRecordIds){let l=Array.isArray(d.destroyedRecordIds)?d.destroyedRecordIds:[d.destroyedRecordIds];for(let h of l)typeof h=="string"&&await r.db.records.deleteByEntityId(h)}}}}catch(n){console.warn("Failed to save webhook payload records to database:",n)}return a};import{z as e}from"zod";var te=e.object({offset:e.string().optional()}),re=e.object({baseId:e.string(),include:e.array(e.enum(["visibleFieldIds","fieldIdsInSynced"])).optional()}),oe=e.object({baseId:e.string(),tableIdOrName:e.string(),fields:e.record(e.unknown()),typecast:e.boolean().optional()}),ae=e.object({baseId:e.string(),tableIdOrName:e.string(),fields:e.record(e.unknown()),fieldsToMergeOn:e.array(e.string()),typecast:e.boolean().optional()}),se=e.object({baseId:e.string(),tableIdOrName:e.string(),recordId:e.string()}),ne=e.object({baseId:e.string(),tableIdOrName:e.string(),recordId:e.string(),returnFieldsByFieldId:e.boolean().optional()}),ie=e.object({baseId:e.string(),tableIdOrName:e.string(),fields:e.array(e.string()).optional(),filterByFormula:e.string().optional(),maxRecords:e.number().optional(),pageSize:e.number().optional(),sort:e.array(e.object({field:e.string(),direction:e.enum(["asc","desc"]).optional()})).optional(),view:e.string().optional(),cellFormat:e.enum(["json","string"]).optional(),timeZone:e.string().optional(),userLocale:e.string().optional(),returnFieldsByFieldId:e.boolean().optional(),offset:e.string().optional()}),de=e.object({baseId:e.string(),tableIdOrName:e.string(),recordId:e.string(),fields:e.record(e.unknown()),typecast:e.boolean().optional()}),ce=e.object({baseId:e.string(),webhookId:e.string(),cursor:e.number().optional()}),b={basesGetMany:te,basesGetSchema:re,recordsCreate:oe,recordsCreateOrUpdate:ae,recordsDelete:se,recordsGet:ne,recordsSearch:ie,recordsUpdate:de,webhookGetPayloads:ce},A=e.object({id:e.string(),createdTime:e.string(),fields:e.record(e.unknown())}).passthrough(),pe=e.object({id:e.string(),name:e.string(),permissionLevel:e.string()}).passthrough(),le=e.object({id:e.string(),type:e.string(),name:e.string(),description:e.string().optional(),options:e.record(e.unknown()).optional()}).passthrough(),be=e.object({id:e.string(),type:e.string(),name:e.string(),personalForCreator:e.boolean().optional()}).passthrough(),ue=e.object({id:e.string(),name:e.string(),primaryFieldId:e.string(),description:e.string().optional(),fields:e.array(le),views:e.array(be)}).passthrough(),he=e.object({bases:e.array(pe),offset:e.string().optional()}).passthrough(),ye=e.object({tables:e.array(ue)}).passthrough(),me=e.object({records:e.array(A)}).passthrough(),fe=e.object({records:e.array(A)}).passthrough(),ge=e.object({id:e.string(),deleted:e.boolean()}).passthrough(),Ae=A,Ie=e.object({records:e.array(A),offset:e.string().optional()}).passthrough(),Re=e.object({records:e.array(A)}).passthrough(),ke=e.object({cursorForNextPayload:e.number().optional(),payloads:e.array(e.unknown()).default([])}).passthrough(),u={basesGetMany:he,basesGetSchema:ye,recordsCreate:me,recordsCreateOrUpdate:fe,recordsDelete:ge,recordsGet:Ae,recordsSearch:Ie,recordsUpdate:Re,webhookGetPayloads:ke};var w={getMany:O,getSchema:x},m={create:C,createOrUpdate:B,delete:P,get:v,search:T,update:G},z={getPayloads:_};import{ApiError as I}from"corsair/http";var D={RATE_LIMIT_ERROR:{match:(r,t)=>{if(r instanceof I&&r.status===429)return!0;let o=r.message.toLowerCase();return o.includes("rate_limited")||o.includes("ratelimited")||r.message.includes("429")},handler:async(r,t)=>{let o;return r instanceof I&&r.retryAfter!==void 0&&(o=r.retryAfter),{maxRetries:5,headersRetryAfterMs:o}}},AUTH_ERROR:{match:(r,t)=>{if(r instanceof I&&r.status===401)return!0;let o=r.message.toLowerCase();return o.includes("invalid_auth")||o.includes("unauthorized")||o.includes("authentication_required")||o.includes("invalid_api_key")},handler:async(r,t)=>(console.error(`[AIRTABLE:${t.operation}] Authentication failed - check your API key`),{maxRetries:0})},PERMISSION_ERROR:{match:(r,t)=>{if(r instanceof I&&r.status===403)return!0;let o=r.message.toLowerCase();return o.includes("permission_denied")||o.includes("forbidden")||o.includes("access_denied")||o.includes("invalid_permissions")},handler:async(r,t)=>(console.warn(`[AIRTABLE:${t.operation}] Permission denied: ${r.message}`),{maxRetries:0})},NETWORK_ERROR:{match:(r,t)=>{let o=r.message.toLowerCase();return o.includes("network")||o.includes("connection")||o.includes("econnrefused")||o.includes("enotfound")||o.includes("etimedout")||o.includes("fetch failed")||o.includes("network error")},handler:async(r,t)=>(console.warn(`[AIRTABLE:${t.operation}] Network error: ${r.message}`),{maxRetries:3})},NOT_FOUND_ERROR:{match:(r,t)=>{if(r instanceof I&&r.status===404)return!0;let o=r.message.toLowerCase();return o.includes("not_found")||o.includes("model_not_found")||o.includes("table_not_found")||o.includes("record_not_found")},handler:async(r,t)=>(console.warn(`[AIRTABLE:${t.operation}] Resource not found: ${r.message}`),{maxRetries:0})},DEFAULT:{match:(r,t)=>!0,handler:async(r,t)=>(console.error(`[AIRTABLE:${t.operation}] Unhandled error: ${r.message}`),{maxRetries:0})}};import{z as p}from"zod";var $=p.object({id:p.string(),fields:p.record(p.unknown()).optional(),createdTime:p.string().optional(),baseId:p.string().optional(),tableId:p.string().optional()}),L=p.object({id:p.string(),name:p.string().optional(),permissionLevel:p.string().optional()});var H={version:"1.0.0",entities:{records:$,bases:L}};import{logEventFromContext as q}from"corsair/core";var K={match:F(),handler:async(r,t)=>{let o=r.key,a=N(t,o);if(!a.valid)return{success:!1,statusCode:401,error:a.error||"Signature verification failed"};let n=t.payload;if(!n||typeof n!="object"||!("base"in n)||!("webhook"in n))return{success:!0,data:void 0};let i="";try{let d=await r.endpoints.webhooks.getPayloads({baseId:n.base.id,webhookId:n.webhook.id,cursor:void 0});await q(r,"airtable.webhook.event",{...n,payloads:[...d.payloads]},"completed")}catch(y){console.warn("Failed to fetch webhook payloads from Airtable:",y),await q(r,"airtable.webhook.event",{...n},"completed")}return{success:!0,corsairEntityId:i,data:n}}};var V={event:K};var Ee={bases:{getMany:w.getMany,getSchema:w.getSchema},records:{create:m.create,createOrUpdate:m.createOrUpdate,delete:m.delete,get:m.get,search:m.search,update:m.update},webhooks:{getPayloads:z.getPayloads}},we={events:{event:V.event}},Se={"bases.getMany":{input:b.basesGetMany,output:u.basesGetMany},"bases.getSchema":{input:b.basesGetSchema,output:u.basesGetSchema},"records.create":{input:b.recordsCreate,output:u.recordsCreate},"records.createOrUpdate":{input:b.recordsCreateOrUpdate,output:u.recordsCreateOrUpdate},"records.delete":{input:b.recordsDelete,output:u.recordsDelete},"records.get":{input:b.recordsGet,output:u.recordsGet},"records.search":{input:b.recordsSearch,output:u.recordsSearch},"records.update":{input:b.recordsUpdate,output:u.recordsUpdate}},Oe={"events.event":{description:"On new Airtable event \u2014 fires when records or tables change",payload:j,response:M}},xe="api_key",Ce={"bases.getMany":{riskLevel:"read",description:"List all accessible bases"},"bases.getSchema":{riskLevel:"read",description:"Get the schema (tables, fields, views) of a base"},"records.create":{riskLevel:"write",description:"Create a record in a table"},"records.createOrUpdate":{riskLevel:"write",description:"Create or update a record using upsert"},"records.delete":{riskLevel:"destructive",description:"Delete a record from a table [DESTRUCTIVE]"},"records.get":{riskLevel:"read",description:"Get a single record by ID"},"records.search":{riskLevel:"read",description:"Search and list records with optional filters"},"records.update":{riskLevel:"write",description:"Update fields on an existing record"}},ut={api_key:{account:["one"]}};function ht(r={}){let t={...r,authType:r.authType??xe};return{id:"airtable",schema:H,options:t,hooks:t.hooks,webhookHooks:t.webhookHooks,endpoints:Ee,webhooks:we,endpointMeta:Ce,endpointSchemas:Se,webhookSchemas:Oe,pluginWebhookMatcher:o=>"x-airtable-content-mac"in o.headers,errorHandlers:{...D,...t.errorHandlers},keyBuilder:async(o,a)=>{let n=o.authType;if(a==="webhook"&&t.webhookSecret)return t.webhookSecret;if(a==="webhook"){let i=await o.keys.get_webhook_signature();if(!i)throw new Error("[auth-missing:airtable:webhook_signature]: Airtable webhook signature is missing");return i}if(a==="endpoint"&&t.key)return t.key;if(a==="endpoint"&&o.authType==="api_key"){let i=await o.keys.get_api_key();if(!i)throw new Error("[auth-missing:airtable:api_key]: Airtable API Key is missing");return i}throw new Error(`[auth-missing:airtable:${n}]: Airtable key is missing`)}}}export{ht as airtable,ut as airtableAuthConfig,Se as airtableEndpointSchemas};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const _default: import("tsup").Options | import("tsup").Options[] | ((overrideOptions: import("tsup").Options) => import("tsup").Options | import("tsup").Options[] | Promise<import("tsup").Options | import("tsup").Options[]>);
|
|
2
|
+
export default _default;
|
|
3
|
+
//# sourceMappingURL=tsup.config%20copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsup.config copy.d.ts","sourceRoot":"","sources":["../tsup.config copy.ts"],"names":[],"mappings":";AAEA,wBAYG"}
|
package/dist/webhooks/event.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../webhooks/event.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0B,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../webhooks/event.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0B,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGzE,eAAO,MAAM,KAAK,EAAE,gBAAgB,CAAC,OAAO,CA6D3C,CAAC"}
|
package/dist/webhooks/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
1
|
import type { CorsairWebhookMatcher, WebhookRequest } from 'corsair/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
3
|
export declare const AirtableActionMetadataSchema: z.ZodObject<{
|
|
4
4
|
source: z.ZodOptional<z.ZodString>;
|
|
5
5
|
sourceMetadata: z.ZodOptional<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../webhooks/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../webhooks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,qBAAqB,EAErB,cAAc,EACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAavC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC3C,OAAO,4BAA4B,CACnC,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC3C,OAAO,4BAA4B,CACnC,CAAC;AAIF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIhE,MAAM,MAAM,sBAAsB,GAAG;IACpC,KAAK,EAAE,aAAa,CAAC;CACrB,CAAC;AAIF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA+B,CAAC;AA0BvE,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGhD,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,qCAAqC,CAC5C,CAAC;AASF,wBAAgB,mBAAmB,IAAI,qBAAqB,CAW3D;AAGD,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,EAChC,MAAM,EAAE,MAAM,GACZ;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA+CpC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@corsair-dev/airtable",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Airtable plugin for Corsair",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,10 +18,12 @@
|
|
|
18
18
|
"zod": "^3.0.0"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
+
"@types/jest": "^29.5.14",
|
|
22
|
+
"ts-jest": "^29.4.9",
|
|
21
23
|
"tsup": "^8.0.1",
|
|
22
24
|
"typescript": "^5.9.3",
|
|
23
25
|
"zod": "^3.25.76",
|
|
24
|
-
"corsair": "0.1.
|
|
26
|
+
"corsair": "0.1.67"
|
|
25
27
|
},
|
|
26
28
|
"keywords": [
|
|
27
29
|
"corsair",
|
|
@@ -33,8 +35,12 @@
|
|
|
33
35
|
"files": [
|
|
34
36
|
"dist"
|
|
35
37
|
],
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"jest": "^29.7.0"
|
|
40
|
+
},
|
|
36
41
|
"scripts": {
|
|
37
42
|
"build": "rm -rf dist && tsc --build --force && tsup",
|
|
38
|
-
"typecheck": "tsc --noEmit"
|
|
43
|
+
"typecheck": "tsc --noEmit",
|
|
44
|
+
"test": "jest"
|
|
39
45
|
}
|
|
40
46
|
}
|