From 761d0574a989169a201de4a6cc57fec3e1be5ddf Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 30 Oct 2023 14:39:22 +0800 Subject: [PATCH] add state to the integration handler request payload --- packages/integration-handler/src/index.ts | 5 ++-- .../src/integrations/integration.ts | 9 ++++++- .../src/integrations/pocket.ts | 25 +++++++++++++++---- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/packages/integration-handler/src/index.ts b/packages/integration-handler/src/index.ts index 4d739c8de..4b594d1f3 100644 --- a/packages/integration-handler/src/index.ts +++ b/packages/integration-handler/src/index.ts @@ -6,13 +6,14 @@ import * as jwt from 'jsonwebtoken' import { DateTime } from 'luxon' import { v4 as uuidv4 } from 'uuid' import { getIntegrationClient, updateIntegration } from './integrations' +import { State } from './integrations/integration' import { search } from './item' interface IntegrationRequest { integrationId: string syncAt: number // unix timestamp in milliseconds integrationName: string - includeArchived?: boolean + state?: State } interface Claims { @@ -230,7 +231,7 @@ export const importer = Sentry.GCPFunction.wrapHttpFunction( token: claims.token, since, offset, - includeArchived: req.body.includeArchived, + state: req.body.state, }) syncedAt = retrieved.since || Date.now() retrievedData = retrieved.data diff --git a/packages/integration-handler/src/integrations/integration.ts b/packages/integration-handler/src/integrations/integration.ts index d501f88bd..83a50fe80 100644 --- a/packages/integration-handler/src/integrations/integration.ts +++ b/packages/integration-handler/src/integrations/integration.ts @@ -1,5 +1,12 @@ import { Item } from '../item' +export enum State { + ARCHIVED = 'ARCHIVED', + UNREAD = 'UNREAD', + UNARCHIVED = 'UNARCHIVED', + ALL = 'ALL', +} + export interface RetrievedData { url: string labels?: string[] @@ -16,7 +23,7 @@ export interface RetrieveRequest { since?: number // unix timestamp in milliseconds count?: number offset?: number - includeArchived?: boolean + state?: State } export abstract class IntegrationClient { diff --git a/packages/integration-handler/src/integrations/pocket.ts b/packages/integration-handler/src/integrations/pocket.ts index 1a68d4fe4..a8720cf1d 100644 --- a/packages/integration-handler/src/integrations/pocket.ts +++ b/packages/integration-handler/src/integrations/pocket.ts @@ -3,6 +3,7 @@ import { IntegrationClient, RetrievedResult, RetrieveRequest, + State, } from './integration' interface PocketResponse { @@ -60,7 +61,8 @@ export class PocketClient extends IntegrationClient { accessToken: string, since: number, // unix timestamp in seconds count = 100, - offset = 0 + offset = 0, + state = 'all' ): Promise => { const url = `${this.apiUrl}/get` try { @@ -69,7 +71,7 @@ export class PocketClient extends IntegrationClient { { consumer_key: process.env.POCKET_CONSUMER_KEY, access_token: accessToken, - state: 'all', + state, detailType: 'complete', since, sort: 'oldest', @@ -95,13 +97,25 @@ export class PocketClient extends IntegrationClient { since = 0, count = 100, offset = 0, - includeArchived = false, + state = State.UNARCHIVED, }: RetrieveRequest): Promise => { + let pocketItemState = 'all' + + switch (state) { + case State.ARCHIVED: + pocketItemState = 'archive' + break + case State.UNREAD: + pocketItemState = 'unread' + break + } + const pocketData = await this.retrievePocketData( token, since / 1000, count, - offset + offset, + pocketItemState ) if (!pocketData) { throw new Error('Error retrieving pocket data') @@ -125,7 +139,8 @@ export class PocketClient extends IntegrationClient { if (item.state === 'DELETED') { return false } - return includeArchived || item.state !== 'ARCHIVED' + + return state !== State.UNARCHIVED || item.state !== 'ARCHIVED' }) if (pocketData.error) {