Get new files

Trigger script to periodically get the newly uploaded files.

Script· trigger gdrive Verified

by adam186 · 12/20/2022

The script

Submitted by adam186 Deno
Verified 367 days ago
1
import {
2
  getState,
3
  setState,
4
} from "https://deno.land/x/[email protected]/mod.ts";
5
import { drive } from "npm:@googleapis/drive@4";
6

7
const PAGE_SIZE = 500 as const;
8

9
/**
10
 * @returns A list of newly uploaded files in ascending order
11
 * of creation date.
12
 * Maximum number of returned items is set to `500` for each run.
13
 */
14
type Gdrive = {
15
  token: string;
16
};
17
export async function main(auth: Gdrive) {
18
  const client = drive({
19
    version: "v3",
20
    headers: {
21
      Authorization: `Bearer ${auth.token}`,
22
    },
23
  });
24

25
  const lastCheck = await getState();
26
  await setState(new Date().toISOString());
27
  const response = await client.files.list({
28
    q: lastCheck ? `createdTime > '${lastCheck}'` : undefined,
29
    orderBy: "createdTime asc",
30
    pageSize: PAGE_SIZE,
31
  });
32
  if (response.data.nextPageToken && response?.data?.files?.at(-1)) {
33
    const lastItem = await client.files.get({
34
      fileId: response.data.files.at(-1)?.id || undefined,
35
      fields: "createdTime",
36
    });
37
    const date = lastItem?.data?.createdTime;
38
    if (date) {
39
      await setState(date);
40
    }
41
  }
42

43
  return response.data.files;
44
}
45