UNPKG

@microsoft/agents-hosting

Version:

Microsoft 365 Agents SDK for JavaScript

87 lines (78 loc) 3.07 kB
/** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ import { TurnContext } from '../turnContext' /** * Represents an item to be stored in a storage provider. * Each item can contain arbitrary data along with an optional eTag for optimistic concurrency control. */ export interface StoreItem { /** * Optional eTag used for optimistic concurrency control. * When set to '*', it indicates that the write should proceed regardless of existing data. * When comparing eTags, exact string matching is used to determine if data has changed. */ eTag?: string; /** * Additional properties can be stored in the item. * Each storage provider may have specific requirements or limitations on property names and values. */ [key: string]: any; } /** * Represents a collection of store items indexed by key. * Used as the return type for storage read operations. */ export interface StoreItems { /** * Keys are the storage item identifiers, and values are the stored items. * If a requested key is not found during a read operation, it will not appear in this collection. */ [key: string]: any; } /** * A factory function to generate storage keys based on the conversation context. * Allows different storage strategies based on the conversation state. * * @param context The TurnContext for the current turn of conversation * @returns A string key for storage that uniquely identifies where to store the data */ export type StorageKeyFactory = (context: TurnContext) => string | Promise<string> /** * Defines the interface for storage operations in the Agents platform. * * @remarks * Storage providers persist state data across conversation turns, enabling * agents to maintain context over time. Different implementations may store * data in memory, databases, blob storage, or other persistence mechanisms. * * The interface is designed to be simple with just three core operations: * read, write, and delete. All operations are asynchronous to support both * in-memory and remote storage providers. */ export interface Storage { /** * Reads store items from storage. * * @param keys The keys of the items to read * @returns A promise that resolves to the store items. Items that don't exist in storage will not be included in the result. * @throws If the keys array is empty or undefined */ read: (keys: string[]) => Promise<StoreItem>; /** * Writes store items to storage. * * @param changes The items to write to storage, indexed by key * @returns A promise that resolves when the write operation is complete * @throws If the changes object is empty or undefined, or if an eTag conflict occurs and optimistic concurrency is enabled */ write: (changes: StoreItem) => Promise<void>; /** * Deletes store items from storage. * * @param keys The keys of the items to delete * @returns A promise that resolves when the delete operation is complete */ delete: (keys: string[]) => Promise<void>; }