Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions docs/install/reference/breaking-changes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,16 @@ Runs for a project assigned to a worker group used to fall back to the shared qu

If you assign projects to worker groups, keep at least one worker online per assigned group. If a group is down, reassign the project to another group or unassign it (set its `workerGroupId` to `null`) — any assignment change moves the project's waiting runs to the new queue.

#### Airtable's Find Record returns up to 1000 matches and the Record picker lists up to 500 records

Find Record used to return only the first page Airtable sent back, 100 records, and silently dropped the rest. It now follows Airtable's paging and returns up to 1000 matching records. The Record dropdown on Get Record by ID listed the first 50 records of a table; it now lists up to 500.

Update Record and Clean Record now send `typecast: true`, as Create Record always has. Airtable then converts text into the field's type instead of rejecting it: a date typed as text is parsed, a select value that does not exist yet is created as a new option, and a linked-record name is resolved to the record. Before, those requests failed with `INVALID_VALUE_FOR_COLUMN`.

#### What you need to do

Nothing to configure or migrate. Check any Update Record or Clean Record step that writes to a single-select or multiple-select field: a value that used to fail because the option did not exist now creates that option in Airtable. Review flows that loop over Find Record's output or count its rows: a search that matched more than 100 records now returns more rows than before, and each extra page is one more request against Airtable's limit of 5 requests per second per base.

## 0.90.4

### What has changed?
Expand Down
2 changes: 1 addition & 1 deletion packages/pieces/community/airtable/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@activepieces/piece-airtable",
"version": "0.8.0",
"version": "0.9.0",
"main": "./dist/src/index.js",
"types": "./dist/src/index.d.ts",
"dependencies": {
Expand Down
68 changes: 38 additions & 30 deletions packages/pieces/community/airtable/src/i18n/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,20 @@
"Update Field (Agent)": "Update Field (Agent)",
"List Record Comments (Agent)": "List Record Comments (Agent)",
"Custom API Call": "Custom API Call",
"Adds a record into an airtable": "Adds a record into an airtable",
"Find a record in airtable": "Find a record in airtable",
"Update a record in airtable": "Update a record in airtable",
"Clears fields in a record. Empty values will clear the corresponding fields.": "Clears fields in a record. Empty values will clear the corresponding fields.",
"Deletes a record in airtable": "Deletes a record in airtable",
"Uploads a file to attachment type column.": "Uploads a file to attachment type column.",
"Adds a new record to a table.": "Adds a new record to a table.",
"Returns up to 1000 records whose field contains a value.": "Returns up to 1000 records whose field contains a value.",
"Changes the fields you fill in on an existing record.": "Changes the fields you fill in on an existing record.",
"Updates a record and empties every field you leave blank.": "Updates a record and empties every field you leave blank.",
"Deletes a record from a table.": "Deletes a record from a table.",
"Uploads a file to an attachment field of a record.": "Uploads a file to an attachment field of a record.",
"Adds a comment to an existing record.": "Adds a comment to an existing record.",
"Create a new base with a specified table structure.": "Create a new base with a specified table structure.",
"Create a new table in an existing base.": "Create a new table in an existing base.",
"Find a base by its name or a keyword.": "Find a base by its name or a keyword.",
"Get a table's details and schema using its ID.": "Get a table's details and schema using its ID.",
"Retrieve a single record from a table by its unique ID.": "Retrieve a single record from a table by its unique ID.",
"Find a table in a given base by its name.": "Find a table in a given base by its name.",
"Retrieve the schema for a specific base, including all its tables and fields.": "Retrieve the schema for a specific base, including all its tables and fields.",
"Lists every table in a base with its fields and views.": "Lists every table in a base with its fields and views.",
"Adds a record to an Airtable table.": "Adds a record to an Airtable table.",
"Retrieve a single Airtable record by its ID.": "Retrieve a single Airtable record by its ID.",
"Update fields on an existing Airtable record by its ID.": "Update fields on an existing Airtable record by its ID.",
Expand All @@ -70,6 +70,7 @@
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Base": "Base",
"Table": "Table",
"Fields": "Fields",
"Search Field": "Search Field",
"Search Value": "Search Value",
"View": "View",
Expand All @@ -78,15 +79,13 @@
"File": "File",
"File Content Type": "File Content Type",
"File Name": "File Name",
"Comment Text": "Comment Text",
"Comment": "Comment",
"Parent Comment ID": "Parent Comment ID",
"Workspace": "Workspace",
"Base Name": "Base Name",
"Tables": "Tables",
"Table Name": "Table Name",
"Description": "Description",
"Fields": "Fields",
"Base Name or Keyword": "Base Name or Keyword",
"Record": "Record",
"Base ID": "Base ID",
"Table ID or Name": "Table ID or Name",
Expand All @@ -102,6 +101,7 @@
"Typecast": "Typecast",
"Record IDs": "Record IDs",
"Match Mode": "Match Mode",
"Comment Text": "Comment Text",
"Workspace ID": "Workspace ID",
"New Name": "New Name",
"New Description": "New Description",
Expand All @@ -116,24 +116,26 @@
"Query Parameters": "Query Parameters",
"Body Type": "Body Type",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Response is Binary": "Response is Binary",
"Return Error as Output": "Return Error as Output",
"Timeout": "Timeout",
"Follow redirects": "Follow redirects",
"The ID of the record.": "The ID of the record.",
"The ID of the record to which you want to upload the file.": "The ID of the record to which you want to upload the file.",
"The file to be uploaded, which can be provided either as a public file URL or in Base64 encoded format.": "The file to be uploaded, which can be provided either as a public file URL or in Base64 encoded format.",
"Specifies the MIME type of the file being uploaded (e.g., 'image/png', 'application/pdf').": "Specifies the MIME type of the file being uploaded (e.g., 'image/png', 'application/pdf').",
"The name of the file as it should appear after upload.": "The name of the file as it should appear after upload.",
"The content of the comment. To mention a user, use the format `@[userId]` or `@[userEmail]`.": "The content of the comment. To mention a user, use the format `@[userId]` or `@[userEmail]`.",
"Optional. The ID of a parent comment to create a threaded reply.": "Optional. The ID of a parent comment to create a threaded reply.",
"The name for the new base.": "The name for the new base.",
"Define the tables for the new base. Use the default value as a template. The first field for each table will be its primary field.": "Define the tables for the new base. Use the default value as a template. The first field for each table will be its primary field.",
"The name for the new table.": "The name for the new table.",
"An optional description for the new table.": "An optional description for the new table.",
"A JSON array of fields for the new table. The first field in the array will become the primary field.": "A JSON array of fields for the new table. The first field in the array will become the primary field.",
"The name or keyword to search for within your base names.": "The name or keyword to search for within your base names.",
"The exact name of the table you want to find.": "The exact name of the table you want to find.",
"Case-sensitive. Records whose field contains this text are returned.": "Case-sensitive. Records whose field contains this text are returned.",
"Only records in this view are used. Empty: the whole table.": "Only records in this view are used. Empty: the whole table.",
"Starts with rec. Copy it from the record URL or an earlier step.": "Starts with rec. Copy it from the record URL or an earlier step.",
"Only attachment-type fields are listed.": "Only attachment-type fields are listed.",
"A file from an earlier step or a public URL.": "A file from an earlier step or a public URL.",
"MIME type of the file.": "MIME type of the file.",
"Name shown in Airtable. Empty: the uploaded file's own name.": "Name shown in Airtable. Empty: the uploaded file's own name.",
"Mention someone with @[userId] or @[userEmail].": "Mention someone with @[userId] or @[userEmail].",
"Reply in this comment's thread. Empty: a new top-level comment.": "Reply in this comment's thread. Empty: a new top-level comment.",
"Listed by ID because Airtable has no workspace name API.": "Listed by ID because Airtable has no workspace name API.",
"Tables to create. The first field of each table is its primary field.": "Tables to create. The first field of each table is its primary field.",
"Shown under the table name in Airtable.": "Shown under the table name in Airtable.",
"Fields for the table. The first one becomes the primary field.": "Fields for the table. The first one becomes the primary field.",
"Bases whose name contains this text are returned.": "Bases whose name contains this text are returned.",
"Lists the first 500 records by their primary field.": "Lists the first 500 records by their primary field.",
"Exact table name. Case does not matter.": "Exact table name. Case does not matter.",
"The Airtable base ID (e.g. \"appXXXXXXXXXXXXXX\"). Resolve it with List Bases (Agent).": "The Airtable base ID (e.g. \"appXXXXXXXXXXXXXX\"). Resolve it with List Bases (Agent).",
"The table ID (e.g. \"tblXXXXXXXXXXXXXX\") or its exact name. Resolve it with Get Base Schema (Agent).": "The table ID (e.g. \"tblXXXXXXXXXXXXXX\") or its exact name. Resolve it with Get Base Schema (Agent).",
"A JSON object mapping field names to values, e.g. {\"Name\": \"Acme\", \"Status\": \"Active\"}. Use Get Base Schema (Agent) to learn field names and types. Linked-record and multi-select fields take arrays of ids/strings; attachment fields take an array of objects like [{\"url\": \"https://...\"}]. Values are sent with typecast enabled so plain strings are coerced where possible.": "A JSON object mapping field names to values, e.g. {\"Name\": \"Acme\", \"Status\": \"Active\"}. Use Get Base Schema (Agent) to learn field names and types. Linked-record and multi-select fields take arrays of ids/strings; attachment fields take an array of objects like [{\"url\": \"https://...\"}]. Values are sent with typecast enabled so plain strings are coerced where possible.",
Expand Down Expand Up @@ -163,9 +165,11 @@
"The record ID (e.g. \"recXXXXXXXXXXXXXX\") to comment on.": "The record ID (e.g. \"recXXXXXXXXXXXXXX\") to comment on.",
"The comment content. Mention a user with @[userId] or @[userEmail].": "The comment content. Mention a user with @[userId] or @[userEmail].",
"Optional ID of a parent comment to reply to (creates a threaded reply). Find IDs with List Record Comments (Agent).": "Optional ID of a parent comment to reply to (creates a threaded reply). Find IDs with List Record Comments (Agent).",
"The name for the new table.": "The name for the new table.",
"Optional description for the new table.": "Optional description for the new table.",
"A JSON array of field definitions; the first entry becomes the primary field. Each entry is {\"name\": \"...\", \"type\": \"singleLineText\", \"description\"?: \"...\"}. Select fields need {\"type\": \"singleSelect\", \"options\": {\"choices\": [{\"name\": \"Todo\"}]}}.": "A JSON array of field definitions; the first entry becomes the primary field. Each entry is {\"name\": \"...\", \"type\": \"singleLineText\", \"description\"?: \"...\"}. Select fields need {\"type\": \"singleSelect\", \"options\": {\"choices\": [{\"name\": \"Todo\"}]}}.",
"The workspace ID (e.g. \"wspXXXXXXXXXXXXXX\") to create the base in. Airtable has no list-workspaces API; get it from a base's metadata or the Airtable UI URL.": "The workspace ID (e.g. \"wspXXXXXXXXXXXXXX\") to create the base in. Airtable has no list-workspaces API; get it from a base's metadata or the Airtable UI URL.",
"The name for the new base.": "The name for the new base.",
"A JSON array of tables for the new base. Each table is {\"name\": \"...\", \"fields\": [{\"name\": \"Name\", \"type\": \"singleLineText\"}, ...]}. The first field of each table becomes its primary field.": "A JSON array of tables for the new base. Each table is {\"name\": \"...\", \"fields\": [{\"name\": \"Name\", \"type\": \"singleLineText\"}, ...]}. The first field of each table becomes its primary field.",
"Optional new name for the table.": "Optional new name for the table.",
"Optional new description for the table.": "Optional new description for the table.",
Expand All @@ -181,7 +185,11 @@
"Optional number of comments per page (max 100).": "Optional number of comments per page (max 100).",
"Optional pagination offset returned by a previous call to fetch the next page.": "Optional pagination offset returned by a previous call to fetch the next page.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Appended to the URL as ?key=value.": "Appended to the URL as ?key=value.",
"Enable for files like PDFs, images, etc.": "Enable for files like PDFs, images, etc.",
"On a failed request, output the error instead of failing the step.": "On a failed request, output the error instead of failing the step.",
"Seconds to wait for a response. Empty: up to the flow limit (10 min).": "Seconds to wait for a response. Empty: up to the flow limit (10 min).",
"Follow 3xx redirects instead of returning them as the response.": "Follow 3xx redirects instead of returning them as the response.",
"Contains": "Contains",
"Exact": "Exact",
"GET": "GET",
Expand All @@ -197,7 +205,7 @@
"New Record": "New Record",
"New or Updated Record": "New or Updated Record",
"Triggers when a new record is added to the selected table.": "Triggers when a new record is added to the selected table.",
"Triggers when a record is created or updated in selected table.": "Triggers when a record is created or updated in selected table.",
"Trigger field": "Trigger field",
"**Last Modified Time** field will be used to watch new or updated records.Please create **Last Modified Time** field in your schema,if you don't have any timestamp field.": "**Last Modified Time** field will be used to watch new or updated records.Please create **Last Modified Time** field in your schema,if you don't have any timestamp field."
"Triggers when a record is created or changed in the selected table.": "Triggers when a record is created or changed in the selected table.",
"Trigger Field": "Trigger Field",
"A Last Modified Time field of the table. Add one if none exists.": "A Last Modified Time field of the table. Add one if none exists."
}
2 changes: 1 addition & 1 deletion packages/pieces/community/airtable/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export const airtable = createPiece({
displayName: 'Airtable',
description: 'Low‒code platform to build apps.',

minimumSupportedRelease: '0.86.4',
minimumSupportedRelease: '0.88.2',
logoUrl: 'https://cdn.activepieces.com/pieces/airtable.png',
authors: [
'kanarelo',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,17 @@ export const airtableAddCommentToRecordAction = createAction({
tableId: airtableCommon.tableId,
recordId: airtableCommon.recordId,
text: Property.LongText({
displayName: 'Comment Text',
description:
'The content of the comment. To mention a user, use the format `@[userId]` or `@[userEmail]`.',
displayName: 'Comment',
description: 'Mention someone with @[userId] or @[userEmail].',
required: true,
}),
parentCommentId: Property.ShortText({
displayName: 'Parent Comment ID',
description:
'Optional. The ID of a parent comment to create a threaded reply.',
"Reply in this comment's thread. Empty: a new top-level comment.",
placeholder: 'comXXXXXXXXXXXXXX',
required: false,
advanced: true,
}),
},
async run(context) {
Expand Down
Loading
Loading