@robinpath/airtable
Advanced tools
| /** | ||
| * RobinPath Airtable Module (Node port) | ||
| * | ||
| * Airtable API v0 — record CRUD against tables in a base, plus base-schema | ||
| * management. Mirror of packages/php/airtable/src/index.php for the | ||
| * WordPress plugin; shares the same credential contract, metadata shape, | ||
| * and error taxonomy so the visual editor can render both identically. | ||
| * | ||
| * Authentication uses the RobinPath credential vault. Every handler takes | ||
| * a credential slug as its first argument. The host registers a | ||
| * CredentialStore (file/http/env) on the runtime and this module resolves | ||
| * tokens at call time via the injected ModuleHost. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - airtable : { token, default_base? } → Bearer auth with a Personal Access Token | ||
| */ | ||
| import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core"; | ||
| export declare function configureAirtable(h: ModuleHost): void; | ||
| export declare const AirtableFunctions: Record<string, BuiltinHandler>; | ||
| export declare const AirtableCredentialTypes: CredentialTypeSchema[]; | ||
| export declare const AirtableFunctionMetadata: Record<string, FunctionMetadata>; | ||
| export declare const AirtableModuleMetadata: ModuleMetadata; | ||
| //# sourceMappingURL=airtable.d.ts.map |
| {"version":3,"file":"airtable.d.ts","sourceRoot":"","sources":["../src/airtable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAezB,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAErD;AAsZD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAiB5D,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,EA0BzD,CAAC;AAkEF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAulBrE,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,cAoBpC,CAAC"} |
+1109
| /** | ||
| * RobinPath Airtable Module (Node port) | ||
| * | ||
| * Airtable API v0 — record CRUD against tables in a base, plus base-schema | ||
| * management. Mirror of packages/php/airtable/src/index.php for the | ||
| * WordPress plugin; shares the same credential contract, metadata shape, | ||
| * and error taxonomy so the visual editor can render both identically. | ||
| * | ||
| * Authentication uses the RobinPath credential vault. Every handler takes | ||
| * a credential slug as its first argument. The host registers a | ||
| * CredentialStore (file/http/env) on the runtime and this module resolves | ||
| * tokens at call time via the injected ModuleHost. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - airtable : { token, default_base? } → Bearer auth with a Personal Access Token | ||
| */ | ||
| // ── Module-local state (populated by configure hook) ──────────────────── | ||
| const state = {}; | ||
| function host() { | ||
| if (!state.host) { | ||
| throw new Error("Airtable module not initialized. Pass the adapter to rp.registerModule() via loadModule so its configure() hook runs first."); | ||
| } | ||
| return state.host; | ||
| } | ||
| export function configureAirtable(h) { | ||
| state.host = h; | ||
| } | ||
| // ── Constants ────────────────────────────────────────────────────────── | ||
| const API_BASE = "https://api.airtable.com/v0"; | ||
| const CREDENTIAL_TYPE = "airtable"; | ||
| function errorReturn(error, code, extra = {}) { | ||
| return { error, code, ...extra }; | ||
| } | ||
| async function resolveBase(credentialSlug, baseIdArg) { | ||
| if (!credentialSlug) { | ||
| return errorReturn("Credential slug is required.", "credential_not_found"); | ||
| } | ||
| let fields; | ||
| try { | ||
| fields = await host().credentials.get(credentialSlug); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "credential_not_found"); | ||
| } | ||
| if (!fields) { | ||
| return errorReturn(`Credential '${credentialSlug}' not found.`, "credential_not_found"); | ||
| } | ||
| const token = String(fields.token ?? ""); | ||
| if (!token) { | ||
| return errorReturn("Credential has no `token` field.", "token_missing"); | ||
| } | ||
| const baseId = baseIdArg !== "" ? baseIdArg : String(fields.default_base ?? ""); | ||
| if (!baseId) { | ||
| return errorReturn("No baseId provided and the credential has no `default_base`.", "base_missing"); | ||
| } | ||
| return { token, baseId }; | ||
| } | ||
| async function resolveToken(credentialSlug) { | ||
| if (!credentialSlug) { | ||
| return errorReturn("Credential slug is required.", "credential_not_found"); | ||
| } | ||
| const fields = await host().credentials.get(credentialSlug); | ||
| if (!fields) { | ||
| return errorReturn(`Credential '${credentialSlug}' not found.`, "credential_not_found"); | ||
| } | ||
| const token = String(fields.token ?? ""); | ||
| if (!token) | ||
| return errorReturn("Credential has no `token` field.", "token_missing"); | ||
| return { token }; | ||
| } | ||
| // ── HTTP helper (normalized envelope, never throws for API errors) ───── | ||
| async function http(token, method, pathAndQuery, body) { | ||
| const init = { | ||
| method, | ||
| headers: { | ||
| Authorization: `Bearer ${token}`, | ||
| ...(body !== undefined ? { "Content-Type": "application/json" } : {}), | ||
| }, | ||
| }; | ||
| if (body !== undefined) | ||
| init.body = JSON.stringify(body); | ||
| let response; | ||
| try { | ||
| response = await fetch(`${API_BASE}${pathAndQuery}`, init); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| const raw = await response.text(); | ||
| let decoded; | ||
| try { | ||
| decoded = raw ? JSON.parse(raw) : null; | ||
| } | ||
| catch { | ||
| decoded = { raw }; | ||
| } | ||
| if (response.status >= 200 && response.status < 300) { | ||
| return decoded ?? { ok: true }; | ||
| } | ||
| const errObj = (decoded && typeof decoded === "object" && "error" in decoded) | ||
| ? decoded.error | ||
| : decoded; | ||
| let message = `Airtable returned HTTP ${response.status}.`; | ||
| if (errObj && typeof errObj === "object" && "message" in errObj) { | ||
| message = String(errObj.message); | ||
| } | ||
| else if (typeof errObj === "string") { | ||
| message = errObj; | ||
| } | ||
| let code = "airtable_error"; | ||
| if (response.status === 429) | ||
| code = "rate_limited"; | ||
| else if (response.status === 404) | ||
| code = "not_found"; | ||
| return errorReturn(message, code, { | ||
| status: response.status, | ||
| airtable_error: decoded, | ||
| }); | ||
| } | ||
| // ── Query / body helpers ─────────────────────────────────────────────── | ||
| function buildListQuery(opts) { | ||
| const params = new URLSearchParams(); | ||
| if (opts.view !== undefined) | ||
| params.set("view", String(opts.view)); | ||
| if (opts.filterByFormula !== undefined) | ||
| params.set("filterByFormula", String(opts.filterByFormula)); | ||
| if (opts.pageSize !== undefined) { | ||
| const n = Math.max(1, Math.min(100, Number(opts.pageSize) | 0)); | ||
| params.set("pageSize", String(n)); | ||
| } | ||
| if (opts.offset !== undefined) | ||
| params.set("offset", String(opts.offset)); | ||
| if (opts.maxRecords !== undefined) | ||
| params.set("maxRecords", String(Number(opts.maxRecords) | 0)); | ||
| if (opts.cellFormat !== undefined) | ||
| params.set("cellFormat", String(opts.cellFormat)); | ||
| if (opts.timeZone !== undefined) | ||
| params.set("timeZone", String(opts.timeZone)); | ||
| if (opts.userLocale !== undefined) | ||
| params.set("userLocale", String(opts.userLocale)); | ||
| if (Array.isArray(opts.sort)) { | ||
| opts.sort.forEach((s, i) => { | ||
| if (!s || typeof s !== "object") | ||
| return; | ||
| const o = s; | ||
| if (o.field !== undefined) | ||
| params.append(`sort[${i}][field]`, String(o.field)); | ||
| if (o.direction !== undefined) | ||
| params.append(`sort[${i}][direction]`, String(o.direction)); | ||
| }); | ||
| } | ||
| if (Array.isArray(opts.fields)) { | ||
| for (const f of opts.fields) | ||
| params.append("fields[]", String(f)); | ||
| } | ||
| const qs = params.toString(); | ||
| return qs ? `?${qs}` : ""; | ||
| } | ||
| function buildCreateBody(input, opts) { | ||
| let records = []; | ||
| if (Array.isArray(input)) { | ||
| const first = input[0]; | ||
| if (first && typeof first === "object" && "fields" in first) { | ||
| records = input; | ||
| } | ||
| else { | ||
| records = [{ fields: input }]; | ||
| } | ||
| } | ||
| else if (input && typeof input === "object" && "fields" in input) { | ||
| records = [input]; | ||
| } | ||
| else if (input && typeof input === "object") { | ||
| records = [{ fields: input }]; | ||
| } | ||
| const body = { records }; | ||
| if (opts.typecast) | ||
| body.typecast = Boolean(opts.typecast); | ||
| if (opts.returnFieldsByFieldId) | ||
| body.returnFieldsByFieldId = Boolean(opts.returnFieldsByFieldId); | ||
| return body; | ||
| } | ||
| // ── Handlers ─────────────────────────────────────────────────────────── | ||
| const listRecords = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const table = String(args[2] ?? ""); | ||
| const opts = (args[3] && typeof args[3] === "object" ? args[3] : {}); | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const query = buildListQuery(opts); | ||
| const path = `/${encodeURIComponent(resolved.baseId)}/${encodeURIComponent(table)}${query}`; | ||
| return (await http(resolved.token, "GET", path)); | ||
| }; | ||
| const getRecord = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const table = String(args[2] ?? ""); | ||
| const recordId = String(args[3] ?? ""); | ||
| if (!recordId) | ||
| return errorReturn("Record ID is required.", "record_id_missing"); | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const path = `/${encodeURIComponent(resolved.baseId)}/${encodeURIComponent(table)}/${encodeURIComponent(recordId)}`; | ||
| return (await http(resolved.token, "GET", path)); | ||
| }; | ||
| const createRecord = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const table = String(args[2] ?? ""); | ||
| const input = args[3]; | ||
| const opts = (args[4] && typeof args[4] === "object" ? args[4] : {}); | ||
| if (input === undefined || input === null) { | ||
| return errorReturn("`fields` is required.", "fields_missing"); | ||
| } | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const body = buildCreateBody(input, opts); | ||
| const path = `/${encodeURIComponent(resolved.baseId)}/${encodeURIComponent(table)}`; | ||
| return (await http(resolved.token, "POST", path, body)); | ||
| }; | ||
| const createRecords = async (args) => { | ||
| // Bulk alias. PHP normalizes via buildCreateBody; same here — caller passes an array. | ||
| return createRecord(args); | ||
| }; | ||
| const updateRecord = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const table = String(args[2] ?? ""); | ||
| const recordId = String(args[3] ?? ""); | ||
| const fields = (args[4] && typeof args[4] === "object" ? args[4] : {}); | ||
| const opts = (args[5] && typeof args[5] === "object" ? args[5] : {}); | ||
| if (!recordId) | ||
| return errorReturn("Record ID is required.", "record_id_missing"); | ||
| if (Object.keys(fields).length === 0) { | ||
| return errorReturn("No fields to update.", "fields_missing"); | ||
| } | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const method = opts.mode === "replace" ? "PUT" : "PATCH"; | ||
| const body = { fields }; | ||
| if (opts.typecast) | ||
| body.typecast = Boolean(opts.typecast); | ||
| const path = `/${encodeURIComponent(resolved.baseId)}/${encodeURIComponent(table)}/${encodeURIComponent(recordId)}`; | ||
| return (await http(resolved.token, method, path, body)); | ||
| }; | ||
| const updateRecords = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const table = String(args[2] ?? ""); | ||
| const records = args[3]; | ||
| const opts = (args[4] && typeof args[4] === "object" ? args[4] : {}); | ||
| if (!Array.isArray(records)) { | ||
| return errorReturn("`records` must be an array.", "fields_missing"); | ||
| } | ||
| if (records.length > 10) { | ||
| return errorReturn("Bulk update supports up to 10 records at a time.", "batch_too_large"); | ||
| } | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const method = opts.mode === "replace" ? "PUT" : "PATCH"; | ||
| const body = { records }; | ||
| if (opts.typecast) | ||
| body.typecast = Boolean(opts.typecast); | ||
| const path = `/${encodeURIComponent(resolved.baseId)}/${encodeURIComponent(table)}`; | ||
| return (await http(resolved.token, method, path, body)); | ||
| }; | ||
| const replaceRecord = async (args) => { | ||
| return updateRecord([args[0], args[1], args[2], args[3], args[4], { mode: "replace" }]); | ||
| }; | ||
| const deleteRecord = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const table = String(args[2] ?? ""); | ||
| const recordId = String(args[3] ?? ""); | ||
| if (!recordId) | ||
| return errorReturn("Record ID is required.", "record_id_missing"); | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const path = `/${encodeURIComponent(resolved.baseId)}/${encodeURIComponent(table)}/${encodeURIComponent(recordId)}`; | ||
| return (await http(resolved.token, "DELETE", path)); | ||
| }; | ||
| const deleteRecords = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const table = String(args[2] ?? ""); | ||
| const recordIds = args[3]; | ||
| if (!Array.isArray(recordIds)) { | ||
| return errorReturn("`recordIds` must be an array.", "fields_missing"); | ||
| } | ||
| if (recordIds.length > 10) { | ||
| return errorReturn("Bulk delete supports up to 10 records at a time.", "batch_too_large"); | ||
| } | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const qs = recordIds.map((id) => `records[]=${encodeURIComponent(String(id))}`).join("&"); | ||
| const path = `/${encodeURIComponent(resolved.baseId)}/${encodeURIComponent(table)}?${qs}`; | ||
| return (await http(resolved.token, "DELETE", path)); | ||
| }; | ||
| const listTables = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const result = await http(resolved.token, "GET", `/meta/bases/${encodeURIComponent(resolved.baseId)}/tables`); | ||
| if (result && typeof result === "object" && "tables" in result) { | ||
| return result.tables; | ||
| } | ||
| return result; | ||
| }; | ||
| const listBases = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const opts = (args[1] && typeof args[1] === "object" ? args[1] : {}); | ||
| const resolved = await resolveToken(cred); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const q = opts.offset ? `?offset=${encodeURIComponent(String(opts.offset))}` : ""; | ||
| return (await http(resolved.token, "GET", `/meta/bases${q}`)); | ||
| }; | ||
| const getBaseSchema = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| return (await http(resolved.token, "GET", `/meta/bases/${encodeURIComponent(resolved.baseId)}/tables`)); | ||
| }; | ||
| const createTable = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const name = String(args[2] ?? ""); | ||
| const fields = args[3]; | ||
| if (!name) | ||
| return errorReturn("Table name is required.", "fields_missing"); | ||
| if (!Array.isArray(fields)) { | ||
| return errorReturn("Fields must be an array of field definitions.", "fields_missing"); | ||
| } | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| return (await http(resolved.token, "POST", `/meta/bases/${encodeURIComponent(resolved.baseId)}/tables`, { name, fields })); | ||
| }; | ||
| const updateTable = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const tableId = String(args[2] ?? ""); | ||
| const opts = (args[3] && typeof args[3] === "object" ? args[3] : {}); | ||
| if (!tableId) | ||
| return errorReturn("Table ID is required.", "fields_missing"); | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const body = {}; | ||
| if (opts.name !== undefined) | ||
| body.name = String(opts.name); | ||
| if (opts.description !== undefined) | ||
| body.description = String(opts.description); | ||
| return (await http(resolved.token, "PATCH", `/meta/bases/${encodeURIComponent(resolved.baseId)}/tables/${encodeURIComponent(tableId)}`, body)); | ||
| }; | ||
| const createField = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const tableId = String(args[2] ?? ""); | ||
| const name = String(args[3] ?? ""); | ||
| const type = String(args[4] ?? ""); | ||
| const opts = (args[5] && typeof args[5] === "object" ? args[5] : {}); | ||
| if (!tableId) | ||
| return errorReturn("Table ID is required.", "fields_missing"); | ||
| if (!name) | ||
| return errorReturn("Field name is required.", "fields_missing"); | ||
| if (!type) | ||
| return errorReturn("Field type is required.", "fields_missing"); | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const body = { name, type }; | ||
| if (opts.description !== undefined) | ||
| body.description = String(opts.description); | ||
| if (opts.options !== undefined) | ||
| body.options = opts.options; | ||
| return (await http(resolved.token, "POST", `/meta/bases/${encodeURIComponent(resolved.baseId)}/tables/${encodeURIComponent(tableId)}/fields`, body)); | ||
| }; | ||
| const updateField = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const baseIdArg = String(args[1] ?? ""); | ||
| const tableId = String(args[2] ?? ""); | ||
| const fieldId = String(args[3] ?? ""); | ||
| const opts = (args[4] && typeof args[4] === "object" ? args[4] : {}); | ||
| if (!tableId) | ||
| return errorReturn("Table ID is required.", "fields_missing"); | ||
| if (!fieldId) | ||
| return errorReturn("Field ID is required.", "fields_missing"); | ||
| const resolved = await resolveBase(cred, baseIdArg); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| const body = {}; | ||
| if (opts.name !== undefined) | ||
| body.name = String(opts.name); | ||
| if (opts.description !== undefined) | ||
| body.description = String(opts.description); | ||
| return (await http(resolved.token, "PATCH", `/meta/bases/${encodeURIComponent(resolved.baseId)}/tables/${encodeURIComponent(tableId)}/fields/${encodeURIComponent(fieldId)}`, body)); | ||
| }; | ||
| // ── Exports: functions map ───────────────────────────────────────────── | ||
| export const AirtableFunctions = { | ||
| listRecords, | ||
| getRecord, | ||
| createRecord, | ||
| createRecords, | ||
| updateRecord, | ||
| updateRecords, | ||
| replaceRecord, | ||
| deleteRecord, | ||
| deleteRecords, | ||
| listTables, | ||
| listBases, | ||
| getBaseSchema, | ||
| createTable, | ||
| updateTable, | ||
| createField, | ||
| updateField, | ||
| }; | ||
| // ── Exports: credential types ────────────────────────────────────────── | ||
| export const AirtableCredentialTypes = [ | ||
| { | ||
| slug: CREDENTIAL_TYPE, | ||
| title: "Airtable", | ||
| icon: "database", | ||
| fields: [ | ||
| { | ||
| name: "token", | ||
| title: "Personal Access Token", | ||
| type: "password", | ||
| required: true, | ||
| placeholder: "pat…", | ||
| description: "Create one at airtable.com/create/tokens. Grant `data.records:read/write` and `schema.bases:read` scopes for the relevant bases.", | ||
| pattern: "^pat[A-Za-z0-9]+\\.", | ||
| }, | ||
| { | ||
| name: "default_base", | ||
| title: "Default Base ID", | ||
| type: "text", | ||
| required: false, | ||
| placeholder: "app…", | ||
| description: "Optional. Used as a fallback when scripts pass an empty baseId.", | ||
| }, | ||
| ], | ||
| }, | ||
| ]; | ||
| // ── Exports: metadata ────────────────────────────────────────────────── | ||
| const credentialParam = { | ||
| name: "credential", | ||
| title: "Credential", | ||
| description: "Slug of a saved `airtable` credential.", | ||
| dataType: "string", | ||
| formInputType: "resource", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "my_airtable", | ||
| resource: { | ||
| type: "credential", | ||
| listFn: "credential.list", | ||
| modes: ["list", "expression"], | ||
| searchable: true, | ||
| filter: { type: CREDENTIAL_TYPE }, | ||
| }, | ||
| }; | ||
| const baseIdParam = { | ||
| name: "baseId", | ||
| title: "Base", | ||
| description: "Base ID (`app…`). Pass empty string to use the credential's `default_base`.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: false, | ||
| allowExpression: true, | ||
| placeholder: "appAbCdEfGhIjKlMn", | ||
| }; | ||
| const tableParam = { | ||
| name: "table", | ||
| title: "Table", | ||
| description: "Table name OR table ID (`tbl…`).", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "Submissions", | ||
| }; | ||
| const recordIdParam = { | ||
| name: "recordId", | ||
| title: "Record ID", | ||
| description: "Airtable Record ID (`rec…`).", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "rec…", | ||
| validation: { pattern: "^rec" }, | ||
| }; | ||
| const commonErrors = { | ||
| credential_not_found: "No credential with that slug exists in the vault.", | ||
| token_missing: "The credential exists but has no `token` field.", | ||
| base_missing: "No baseId provided and the credential has no `default_base`.", | ||
| transport: "Network failure calling api.airtable.com.", | ||
| airtable_error: "Airtable returned an error — see `airtable_error.error`.", | ||
| rate_limited: "Airtable rate limited (5 req/sec/base).", | ||
| not_found: "Record or table not found.", | ||
| }; | ||
| export const AirtableFunctionMetadata = { | ||
| listRecords: { | ||
| title: "List records", | ||
| summary: "List records with optional filtering, sorting, and view", | ||
| description: "Calls `GET /{baseId}/{table}`. Returns up to 100 records per page with `.offset` for pagination.", | ||
| group: "records", | ||
| action: "query", | ||
| icon: "list", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "records", "query"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| tableParam, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n view : view name or ID\n filterByFormula : Airtable formula, e.g. \"AND({Status}='Active', {Score}>50)\"\n sort : [{field, direction: 'asc'|'desc'}]\n fields : ['Name','Email'] — projection\n pageSize : 1–100 (default 100)\n offset : pagination cursor returned by previous call\n maxRecords : total cap (across pages)\n cellFormat : 'json' (default) | 'string'\n timeZone, userLocale (with cellFormat=string)", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 6, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ records: [{id, createdTime, fields: {…}}], offset?: string }", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Active customers", | ||
| code: 'airtable.listRecords "my_airtable" "appXYZ" "Customers" {\n filterByFormula: "{Status} = \'Active\'",\n sort: [{field: "Name", direction: "asc"}],\n pageSize: 50\n}', | ||
| }, | ||
| ], | ||
| example: 'airtable.listRecords "my_airtable" "" "Customers"', | ||
| }, | ||
| getRecord: { | ||
| title: "Get record", | ||
| summary: "Retrieve a single record by ID", | ||
| description: "Calls `GET /{baseId}/{table}/{recordId}`.", | ||
| group: "records", | ||
| action: "read", | ||
| icon: "file-text", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "record", "read"], | ||
| parameters: [credentialParam, baseIdParam, tableParam, recordIdParam], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'airtable.getRecord "my_airtable" "appXYZ" "Customers" "recABC"', | ||
| }, | ||
| createRecord: { | ||
| title: "Create record(s)", | ||
| summary: "Create one or many records", | ||
| description: "Calls `POST /{baseId}/{table}`. Pass a `fields` object for one record, or an array of `{fields: {…}}` objects for up to 10 at once.", | ||
| group: "records", | ||
| action: "write", | ||
| icon: "plus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "create", "insert"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| tableParam, | ||
| { | ||
| name: "fields", | ||
| title: "Fields or records", | ||
| description: "ONE of:\n • {Name: 'Ada', Email: 'ada@x.com'} — single record\n • [{fields: {Name: 'Ada'}}, {fields: {Name: 'Bob'}}] — up to 10 at once\n\nFor linked records, pass an array of record IDs: {Customer: ['recABC']}.", | ||
| dataType: "any", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 6, | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n typecast: bool — auto-convert types (e.g. string → date)\n returnFieldsByFieldId: bool", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ records: [{id, createdTime, fields: {…}}] }", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Log form submission", | ||
| code: 'airtable.createRecord "my_airtable" "appXYZ" "Submissions" {\n Email: {{ form.email }},\n Name: {{ form.name }},\n Submitted: {{ now }}\n}', | ||
| }, | ||
| ], | ||
| example: 'airtable.createRecord "my_airtable" "appXYZ" "Customers" {Name: "Ada"}', | ||
| }, | ||
| createRecords: { | ||
| title: "Create records (bulk)", | ||
| summary: "Bulk create up to 10 records", | ||
| description: "Like `createRecord` but requires an array of `{fields: {…}}` objects (max 10 per call).", | ||
| group: "records", | ||
| action: "write", | ||
| icon: "plus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "create", "bulk"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| tableParam, | ||
| { | ||
| name: "records", | ||
| title: "Records", | ||
| description: "Array of {fields: {…}} objects, max 10.", | ||
| dataType: "array", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 6, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ records: [{id, createdTime, fields}, …] }", | ||
| errors: commonErrors, | ||
| example: 'airtable.createRecords "my_airtable" "appXYZ" "Customers" [{fields: {Name: "Ada"}}]', | ||
| }, | ||
| updateRecord: { | ||
| title: "Update record", | ||
| summary: "Patch fields on an existing record", | ||
| description: "Calls `PATCH /{baseId}/{table}/{recordId}`. Only fields you supply are changed (use `mode: 'replace'` for PUT-style replacement).", | ||
| group: "records", | ||
| action: "write", | ||
| icon: "edit-3", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "update"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| tableParam, | ||
| recordIdParam, | ||
| { | ||
| name: "fields", | ||
| title: "Fields", | ||
| description: "Object of field name → new value.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n mode : 'patch' (default, partial) | 'replace' (PUT-style)\n typecast: bool", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'airtable.updateRecord "my_airtable" "appXYZ" "Customers" "recABC" {Status: "Active"}', | ||
| }, | ||
| updateRecords: { | ||
| title: "Update records (bulk)", | ||
| summary: "Bulk update up to 10 records", | ||
| description: "Like `updateRecord` but takes an array of `{id, fields}` objects (max 10).", | ||
| group: "records", | ||
| action: "write", | ||
| icon: "edit-3", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "update", "bulk"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| tableParam, | ||
| { | ||
| name: "records", | ||
| title: "Records", | ||
| description: "Array of {id, fields} objects, max 10.", | ||
| dataType: "array", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 6, | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n mode : 'patch' (default) | 'replace'\n typecast: bool", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'airtable.updateRecords "my_airtable" "appXYZ" "Customers" [{id: "recABC", fields: {Status: "Active"}}]', | ||
| }, | ||
| replaceRecord: { | ||
| title: "Replace record", | ||
| summary: "PUT-style replace: clears fields not supplied", | ||
| description: "Convenience wrapper around `updateRecord` with `mode: 'replace'`.", | ||
| group: "records", | ||
| action: "write", | ||
| icon: "refresh-cw", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "replace"], | ||
| parameters: [credentialParam, baseIdParam, tableParam, recordIdParam, { | ||
| name: "fields", | ||
| title: "Fields", | ||
| description: "Complete object of field values — any unspecified fields will be cleared.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| }], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'airtable.replaceRecord "my_airtable" "appXYZ" "Customers" "recABC" {Name: "New", Status: "Active"}', | ||
| }, | ||
| deleteRecord: { | ||
| title: "Delete record", | ||
| summary: "Permanently delete a record", | ||
| description: "Calls `DELETE /{baseId}/{table}/{recordId}`.", | ||
| group: "records", | ||
| action: "delete", | ||
| icon: "trash-2", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "delete"], | ||
| parameters: [credentialParam, baseIdParam, tableParam, recordIdParam], | ||
| returnType: "object", | ||
| returnDescription: '{ deleted: true, id: "rec…" }', | ||
| errors: commonErrors, | ||
| example: 'airtable.deleteRecord "my_airtable" "appXYZ" "Customers" "recABC"', | ||
| }, | ||
| deleteRecords: { | ||
| title: "Delete records (bulk)", | ||
| summary: "Bulk delete up to 10 records", | ||
| description: "Pass an array of record IDs (max 10).", | ||
| group: "records", | ||
| action: "delete", | ||
| icon: "trash-2", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "delete", "bulk"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| tableParam, | ||
| { | ||
| name: "recordIds", | ||
| title: "Record IDs", | ||
| description: "Array of Airtable record IDs (`rec…`), max 10.", | ||
| dataType: "array", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'airtable.deleteRecords "my_airtable" "appXYZ" "Customers" ["recABC", "recDEF"]', | ||
| }, | ||
| listTables: { | ||
| title: "List tables in a base", | ||
| summary: "Get base schema — tables, fields, views", | ||
| description: "Calls `GET /meta/bases/{baseId}/tables`. Useful for dynamic field discovery and editor pickers.", | ||
| group: "schema", | ||
| action: "query", | ||
| icon: "table", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "schema", "tables"], | ||
| parameters: [credentialParam, baseIdParam], | ||
| returnType: "array", | ||
| returnDescription: "Array of table objects with `{id, name, fields, views, primaryFieldId}`.", | ||
| errors: commonErrors, | ||
| example: 'airtable.listTables "my_airtable" "appXYZ"', | ||
| }, | ||
| listBases: { | ||
| title: "List accessible bases", | ||
| summary: "Enumerate all bases visible to this token", | ||
| description: "Calls `GET /meta/bases`. Useful to build a picker UI of bases.", | ||
| group: "schema", | ||
| action: "query", | ||
| icon: "database", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "schema", "bases"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n offset: pagination cursor", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ bases: [{id, name, permissionLevel}], offset?: string }", | ||
| errors: commonErrors, | ||
| example: 'airtable.listBases "my_airtable"', | ||
| }, | ||
| getBaseSchema: { | ||
| title: "Get base schema", | ||
| summary: "Alias for listTables", | ||
| description: "Returns the full schema envelope `{tables: […]}` instead of just the table array.", | ||
| group: "schema", | ||
| action: "query", | ||
| icon: "layers", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "schema"], | ||
| parameters: [credentialParam, baseIdParam], | ||
| returnType: "object", | ||
| returnDescription: "{ tables: […] }", | ||
| errors: commonErrors, | ||
| example: 'airtable.getBaseSchema "my_airtable" "appXYZ"', | ||
| }, | ||
| createTable: { | ||
| title: "Create table", | ||
| summary: "Create a new table with field definitions", | ||
| description: "Calls `POST /meta/bases/{baseId}/tables`.", | ||
| group: "schema", | ||
| action: "write", | ||
| icon: "plus-square", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "schema", "table"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| { | ||
| name: "name", | ||
| title: "Table name", | ||
| dataType: "string", | ||
| description: "Name of the new table.", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "Projects", | ||
| }, | ||
| { | ||
| name: "fields", | ||
| title: "Fields", | ||
| description: "Array of field definitions: [{name, type, options?}]. See Airtable docs for supported types.", | ||
| dataType: "array", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 8, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "The created table object with `id`, `name`, `fields`.", | ||
| errors: commonErrors, | ||
| example: 'airtable.createTable "my_airtable" "appXYZ" "Projects" [{name: "Name", type: "singleLineText"}]', | ||
| }, | ||
| updateTable: { | ||
| title: "Update table", | ||
| summary: "Rename a table or change its description", | ||
| description: "Calls `PATCH /meta/bases/{baseId}/tables/{tableId}`.", | ||
| group: "schema", | ||
| action: "write", | ||
| icon: "edit-3", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "schema", "table"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| { | ||
| name: "tableId", | ||
| title: "Table ID", | ||
| description: "Table ID (`tbl…`). Must use ID, not name.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "tbl…", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Changes", | ||
| description: "Recognized keys:\n name : new table name\n description: new description", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'airtable.updateTable "my_airtable" "appXYZ" "tblABC" {name: "Renamed"}', | ||
| }, | ||
| createField: { | ||
| title: "Create field", | ||
| summary: "Add a new field to an existing table", | ||
| description: "Calls `POST /meta/bases/{baseId}/tables/{tableId}/fields`.", | ||
| group: "schema", | ||
| action: "write", | ||
| icon: "columns", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "schema", "field"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| { | ||
| name: "tableId", | ||
| title: "Table ID", | ||
| dataType: "string", | ||
| description: "Table ID (`tbl…`).", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "tbl…", | ||
| }, | ||
| { | ||
| name: "name", | ||
| title: "Field name", | ||
| dataType: "string", | ||
| description: "Name of the new field.", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "Priority", | ||
| }, | ||
| { | ||
| name: "type", | ||
| title: "Field type", | ||
| dataType: "string", | ||
| description: "Airtable field type, e.g. `singleLineText`, `number`, `singleSelect`, `multipleSelects`, `checkbox`, `date`, `dateTime`.", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "singleLineText", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Type options", | ||
| description: "Recognized keys (field-type specific):\n description : string\n options : object — type-specific options (e.g. `{choices: [{name: 'High'}]}` for select fields)", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "The created field object with `id`, `name`, `type`.", | ||
| errors: commonErrors, | ||
| example: 'airtable.createField "my_airtable" "appXYZ" "tblABC" "Priority" "singleLineText"', | ||
| }, | ||
| updateField: { | ||
| title: "Update field", | ||
| summary: "Rename a field or change its description", | ||
| description: "Calls `PATCH /meta/bases/{baseId}/tables/{tableId}/fields/{fieldId}`. Only `name` and `description` are mutable.", | ||
| group: "schema", | ||
| action: "write", | ||
| icon: "edit-3", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["airtable", "schema", "field"], | ||
| parameters: [ | ||
| credentialParam, | ||
| baseIdParam, | ||
| { | ||
| name: "tableId", | ||
| title: "Table ID", | ||
| dataType: "string", | ||
| description: "Table ID (`tbl…`).", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "tbl…", | ||
| }, | ||
| { | ||
| name: "fieldId", | ||
| title: "Field ID", | ||
| dataType: "string", | ||
| description: "Field ID (`fld…`).", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "fld…", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Changes", | ||
| description: "Recognized keys:\n name : new field name\n description: new description", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'airtable.updateField "my_airtable" "appXYZ" "tblABC" "fldXYZ" {name: "Renamed"}', | ||
| }, | ||
| }; | ||
| export const AirtableModuleMetadata = { | ||
| slug: "airtable", | ||
| title: "Airtable", | ||
| summary: "Read and write Airtable records — light-weight database for non-spreadsheet workflows", | ||
| description: "Airtable as a backend or staging area: log form submissions, sync customer data, manage editorial calendars.\n\nEvery operation takes the base ID + table name (or ID) explicitly. The credential's `default_base` is used when the script passes an empty baseId. For complex queries, use `filterByFormula` (Airtable formula syntax).", | ||
| category: "productivity", | ||
| icon: "icon.svg", | ||
| color: "#FCB400", | ||
| version: "0.2.0", | ||
| docsUrl: "https://docs.robinpath.com/modules/airtable", | ||
| status: "stable", | ||
| requires: [], | ||
| minNodeVersion: "18.0.0", | ||
| credentialsType: CREDENTIAL_TYPE, | ||
| operationGroups: { | ||
| records: { title: "Records", description: "CRUD operations on records.", order: 1 }, | ||
| schema: { title: "Schema", description: "Bases, tables, fields.", order: 2 }, | ||
| }, | ||
| methods: Object.keys(AirtableFunctions), | ||
| }; | ||
| //# sourceMappingURL=airtable.js.map |
| {"version":3,"file":"airtable.js","sourceRoot":"","sources":["../src/airtable.ts"],"names":[],"mappings":"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"} |
| import type { ModuleAdapter } from "@robinpath/core"; | ||
| declare const AirtableModule: ModuleAdapter; | ||
| export default AirtableModule; | ||
| export { AirtableModule }; | ||
| export { AirtableFunctions, AirtableFunctionMetadata, AirtableModuleMetadata, AirtableCredentialTypes, } from "./airtable.js"; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,QAAA,MAAM,cAAc,EAAE,aAQrB,CAAC;AAEF,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,eAAe,CAAC"} |
| import { AirtableFunctions, AirtableFunctionMetadata, AirtableModuleMetadata, AirtableCredentialTypes, configureAirtable, } from "./airtable.js"; | ||
| const AirtableModule = { | ||
| name: "airtable", | ||
| functions: AirtableFunctions, | ||
| functionMetadata: AirtableFunctionMetadata, | ||
| moduleMetadata: AirtableModuleMetadata, | ||
| credentialTypes: AirtableCredentialTypes, | ||
| configure: configureAirtable, | ||
| global: false, | ||
| }; | ||
| export default AirtableModule; | ||
| export { AirtableModule }; | ||
| export { AirtableFunctions, AirtableFunctionMetadata, AirtableModuleMetadata, AirtableCredentialTypes, } from "./airtable.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,MAAM,cAAc,GAAkB;IACpC,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,iBAAiB;IAC5B,gBAAgB,EAAE,wBAAwB;IAC1C,cAAc,EAAE,sBAAsB;IACtC,eAAe,EAAE,uBAAuB;IACxC,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,eAAe,CAAC"} |
+19
-7
| { | ||
| "name": "@robinpath/airtable", | ||
| "version": "0.1.2", | ||
| "version": "0.3.0", | ||
| "publishConfig": { | ||
@@ -23,11 +23,16 @@ "access": "public" | ||
| "peerDependencies": { | ||
| "@robinpath/core": ">=0.20.0" | ||
| "@robinpath/core": ">=0.40.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@robinpath/core": "^0.30.1", | ||
| "@robinpath/core": "^0.40.0", | ||
| "typescript": "^5.6.0" | ||
| }, | ||
| "description": "Airtable module for RobinPath.", | ||
| "description": "Airtable integration — list, get, create, update, delete records, plus base/table/field schema management. Uses the encrypted credential vault for personal access tokens.", | ||
| "keywords": [ | ||
| "airtable", | ||
| "database", | ||
| "spreadsheet", | ||
| "records", | ||
| "tables", | ||
| "no-code", | ||
| "productivity" | ||
@@ -38,7 +43,14 @@ ], | ||
| "category": "productivity", | ||
| "type": "integration", | ||
| "auth": "bearer-token", | ||
| "type": "module", | ||
| "auth": "credential-vault", | ||
| "credentialType": "airtable", | ||
| "functionCount": 16, | ||
| "baseUrl": "https://api.airtable.com/v0" | ||
| "baseUrl": "https://api.airtable.com/v0", | ||
| "language": "nodejs", | ||
| "platforms": [ | ||
| "cloud", | ||
| "cli", | ||
| "desktop" | ||
| ] | ||
| } | ||
| } |
+1
-1
@@ -22,3 +22,3 @@ # @robinpath/airtable | ||
| ```bash | ||
| npm install @robinpath/airtable | ||
| robinpath add @robinpath/airtable | ||
| ``` | ||
@@ -25,0 +25,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Empty package
Supply chain riskPackage does not contain any code. It may be removed, is name squatting, or the result of a faulty package publish.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
86046
1722.24%10
400%1150
Infinity%2
100%