🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@robinpath/airtable

Package Overview
Dependencies
Maintainers
4
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@robinpath/airtable - npm Package Compare versions

Comparing version
0.1.2
to
0.3.0
+23
dist/airtable.d.ts
/**
* 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"}
/**
* 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"
]
}
}

@@ -22,3 +22,3 @@ # @robinpath/airtable

```bash
npm install @robinpath/airtable
robinpath add @robinpath/airtable
```

@@ -25,0 +25,0 @@