set = async (
  { recordID, recordTable = 'block', spaceID = getSpaceID(), path = [] },
  recordValue = {}
) => {
  spaceID = standardiseUUID(await spaceID);
  recordID = standardiseUUID(recordID);
  const json = await fs.getJSON('https://www.notion.so/api/v3/saveTransactions', {
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      requestId: fmt.uuidv4(),
      transactions: [
        {
          id: fmt.uuidv4(),
          spaceId: spaceID,
          operations: [
            {
              pointer: {
                table: recordTable,
                id: recordID,
                spaceId: spaceID,
              },
              path,
              command: path.length ? 'set' : 'update',
              args: recordValue,
            },
          ],
        },
      ],
    }),
    method: 'POST',
  });
  return json.errorId ? json : true;
}
unofficial content api: update a property/the content of an existing record
(requires user to be signed in or content to be public).
TEST THIS THOROUGHLY. misuse can corrupt a record, leading the notion client
to be unable to parse and render content properly and throw errors.
why not use the official api?
1. cors blocking prevents use on the client
2. the majority of blocks are still 'unsupported'
@param {object} pointer - the record being updated
@param {object} recordValue - the new raw data values to set to the record.
for examples, use notion.get to fetch an existing block record.
to use this to update content, set pointer.path to ['properties', 'title]
and recordValue to an array of rich text segments. a segment is an array
where the first value is the displayed text and the second value
is an array of decorations. a decoration is an array where the first value
is a modifier and the second value specifies it. e.g.
[
  ['bold text', [['b']]],
  [' '],
  ['an italicised link', [['i'], ['a', 'https://github.com']]],
  [' '],
  ['highlighted text', [['h', 'pink_background']]],
]
more examples can be creating a block with the desired content/formatting,
then find the value of blockRecord.properties.title using notion.get.
type definitions can be found here: https://github.com/NotionX/react-notion-x/blob/master/packages/notion-types/src/core.ts
@param {string} pointer.recordID - uuidv4 record id
@param {string=} pointer.recordTable - record type (default: 'block').
may also be 'collection', 'collection_view', 'space', 'notion_user', 'discussion', or 'comment'
@param {string=} pointer.property - the record property to update.
for record content, it will be the default: 'title'.
for page properties, it will be the property id (the key used in pageRecord.properties).
other possible values are unknown/untested
@param {string=} pointer.spaceID - uuidv4 workspace id
@param {string=} pointer.path - the path to the key to be set within the record
(default: [], the root of the record's values)
@returns {boolean|object} true if success, else an error object