import type { DynamoDBClient } from '@aws-sdk/client-dynamodb'; import type { BatchGetCommandInput, DeleteCommandInput, DynamoDBDocumentClient, GetCommandInput, PutCommandInput, QueryCommandInput, ScanCommandInput, UpdateCommandInput } from '@aws-sdk/lib-dynamodb'; import { CMS_ENVIRONMENTS } from "../bsp/_constants.js"; import type { CopyObjectCommandInput, DeleteObjectCommandInput, HeadObjectCommandInput, ListObjectsCommandInput, PutObjectCommandInput, S3Client, StorageClass } from '@aws-sdk/client-s3'; import type { GetSecretValueCommandInput, SecretsManagerClient } from '@aws-sdk/client-secrets-manager'; import type { SSMClient } from '@aws-sdk/client-ssm'; import type { STSClient } from '@aws-sdk/client-sts'; import type Cloudflare from 'cloudflare'; import type { CachePurgeParams } from 'cloudflare/resources/cache/cache'; import type { Client as NotionClient } from '@notionhq/client'; import type { QueryDatabaseParameters } from '@notionhq/client/build/src/api-endpoints'; import { WebClient } from '@slack/web-api'; import type { CacheGenerator, FilePath } from "./misc.js"; import type { AWSAssumableRole, AWSCapitalCredentials, AWSCredentials, AWSProfileName, AWSS3Location } from "./aws.js"; import type { CloudflarePurgeZonesKey } from "./cloudflare.js"; import type { BSPClient, BSPContentType, BSPGenericEmbed } from "./bsp.js"; import type { TDateISO } from "./dates.js"; import { DomoClient } from "./domo.js"; import { NotionPropertyParsers } from "./notion.js"; type BaseParams

= { client: DynamoDBClient; docClient: DynamoDBDocumentClient; table: string; } & Partial

; export interface DDBBatchGetDocumentsParams extends BaseParams { docs: Record[]; } export interface DDBDeleteDocumentsParams extends BaseParams { doc: Record; } export interface DDBGetDocumentParams extends BaseParams { doc: Record; } export interface DDBGetDocumentFromIndexParams extends BaseParams { index: string; doc: Record; } export interface DDBPutDocumentParams extends BaseParams { doc: Record; } export interface DDBQueryParams extends BaseParams { } export interface DDBScanParams extends BaseParams { } export interface UpdateAttributeOptions { append?: boolean; } export interface DDBUpdateDocumentParams extends BaseParams { doc: Record; updates?: Record; attributeOptions?: Record; } type S3Base = { client: S3Client; bucket: string; key: string; }; export type S3CopyParams = { client: S3Client; source: string; } & AWSS3Location & Partial; export interface S3DeleteObjectParams extends S3Base, Partial { } export interface S3DownloadObjectParams extends S3Base { responseContentType?: string; } export interface S3GetEtagParams extends S3Base { } export interface S3ExistsParams extends S3Base { } export interface S3HeadParams extends S3Base, Partial { } export interface S3ListParams extends Omit, Partial { prefix?: string; delimiter?: string; } export interface S3UploadParams extends S3Base, Partial { body: PutObjectCommandInput['Body']; contentType?: string; cacheControl?: string; storageClass?: StorageClass; metadata?: Record; } export type AWSGetJSONSecretParams = { client: SecretsManagerClient; id: string; } & Partial; export type SSMGetParametersParams = { client: SSMClient; names: string[]; format?: 'json' | 'raw'; }; export type STSAssumeConfiguredRoleParams = { client: STSClient; role: AWSAssumableRole; }; export type STSGetCallerIdentityParams = { client: STSClient; }; export type AWSGetCredentialsParams = { profile?: AWSProfileName; credentials?: AWSCredentials | AWSCapitalCredentials; credentialsFilepath?: FilePath; }; export type BSPFetchParams = { client: BSPClient; type: BSPContentType; method?: 'GET' | 'POST' | 'PUT' | 'DELETE'; body?: Record; endpoint?: string; query?: Record; }; export type BSPArticleGetParams = { client: BSPClient; id: string; }; export type BSPArticleCreateParams = { client: BSPClient; site?: string; headline: string; }; export type BSPArticleListParams = { client: BSPClient; start: TDateISO; end?: TDateISO; batchSize?: number; }; export type BSPEmbedCreateParams = { client: BSPClient; embed: BSPGenericEmbed; }; export type BSPEmbedUpdateParams = { client: BSPClient; id: string; embed: BSPGenericEmbed; }; export type BSPEmbedGetParams = { client: BSPClient; id: string; }; export type CreateBrightspotServiceParams = { token?: string; env?: keyof typeof CMS_ENVIRONMENTS; }; export type CreateCloudflareServiceParams = { token?: string; }; export type CloudflarePurgeParams = { client: Cloudflare; zone: string; prefixes?: CachePurgeParams.CachePurgeFlexPurgeByPrefixes['prefixes']; files?: CachePurgeParams.CachePurgeSingleFile['files']; }; export type DomoQueryParams = { client: DomoClient; dataset: string; query: string; version?: string; raw?: boolean; }; export type NotionGetPageBlocksParams = { client: NotionClient; page: string; }; export type NotionGetDatabaseDataParams = { client: NotionClient; database: string; parsers?: NotionPropertyParsers; metadata?: boolean; } & Omit & { database_id?: string; }; export type NotionWriteHeadingParams = { client: NotionClient; page: string; content: string; }; export type NotionWriteTextParams = { client: NotionClient; page: string; content: string; newLine?: boolean; }; export type SlackFindUserParams = { client: WebClient; name?: string; email?: string; id?: string; }; export type SlackIsUserActivatedParams = { client: WebClient; email: string; }; export type SyncParams = { source: string; destination: string; bucket: string; cache?: CacheGenerator | string; ignore?: string[]; deleteRemoved?: boolean; invalidate?: boolean; credentials?: AWSCredentials; profile?: AWSProfileName; assumedAs?: AWSAssumableRole; purge?: CloudflarePurgeZonesKey; }; export type PublishParams = { bucket?: string; production?: boolean; ignore?: string[]; deleteRemoved?: boolean; credentials?: AWSCredentials; profile?: AWSProfileName; cache?: string | ((params: any) => string); assumedAs?: AWSAssumableRole; }; export {};