[1.2.11]
Update grist-core to 1.7.21
Full Changelog
The home page's "Import document" file picker now offers .json files, which could already be imported by choosing "any file type" (#2609)
The "Invite multiple" dialog accepts emails separated by commas, semicolons, or spaces as well as one per line, and checks each address the way the server will (#2613)
getAccessToken() accepts a route option that limits the token to one endpoint, method, and set of query parameters (commit)
Fixed two problems with Redis on a single server after upgrading to 1.7.18 or later. Documents could fail to open because of a worker left registered at http://0.0.0.0:<port> by an older version, and copying, comparing, or replacing documents could fail with "File can't be found at the requested URL". The second is fixed when GRIST_ORG_IN_PATH or GRIST_SINGLE_ORG is set. Otherwise, setting APP_DOC_INTERNAL_URL avoids it (#2621)
Exports with header=colId use the column's own ID for Reference columns, rather than the ID of a hidden helper column such as gristHelper_Display. Applies to CSV, TSV, XLSX, and table-schema exports. Based on an approach by @mayuriphad (#2612)
"Download all attachments" no longer fails with a 502 when a file for an attachment no longer used in the document is missing. Unused attachments are left out of the archive (#2620)
Access tokens for disabled users no longer work (commit)
The "Select by" menu could wrongly offer or hide a two-way link on a page where one widget already selects another (commit)
Tools now respect access rules when reading document structure, so a restricted user can no longer learn the names of tables, pages, columns, or attachments they are denied (commit)
Asking about linking widgets no longer fails with "Table N not found" (commit)