import { type Action } from 'react-sweet-state'; import { useDatasourceClientExtension } from '@atlaskit/link-client-extension'; import type { ActionsDiscoveryRequest, AtomicActionExecuteRequest, AtomicActionExecuteResponse, AtomicActionInterface } from '@atlaskit/linking-types'; import { type DatasourceOperationFailedAttributesType, type EventKey } from '../../../src/analytics/generated/analytics.types'; import type createEventPayload from '../../../src/analytics/generated/create-event-payload'; type IntegrationKey = string; type FieldKey = string; /** * Atomic actions available for an integration (by field) * @example * ```ts * { * jira: { * summary: { * actionKey: 'atlassian:work-item:update:summary', * type: 'string' * }, * status: { * actionKey: 'atlassian:work-item:update:status', * type: 'string', * fetchAction: { * actionKey: 'atlassian:work-item:get:statuses', * type: 'string', * inputs: { * issueId: { * type: 'string' * } * } * } * } * } * } * ``` */ type IntegrationActions = Record & { fetchAction?: Pick; }>>; /** * Permissions available for a target */ type TargetPermissions = Record; /** * User permissions for actions on target (ARI) properties * @example * ```ts * { * 'ari:cloud:jira:63cecfe3-16fa-4ee1-8e8d-047cc4b18980:issue/1': { * summary: { * isEditable: true * } * } * } * ``` */ type ARI = string; type Permissions = Record; export interface ActionsStoreState { actionsByIntegration: IntegrationActions; permissions: Permissions; } interface Client { getDatasourceActionsAndPermissions: ReturnType['getDatasourceActionsAndPermissions']; } type AnalyticsCaptureError = (errorLocation: DatasourceOperationFailedAttributesType['errorLocation'], error: unknown) => void; type AnalyticsFireEvent = (...params: Parameters>) => void; interface UseDiscoverActionsProps { captureError: AnalyticsCaptureError; fireEvent: AnalyticsFireEvent; } export declare const actions: { discoverActions: (captureError: AnalyticsCaptureError, fireEvent: AnalyticsFireEvent, api: Client, request: ActionsDiscoveryRequest) => Action; }; export declare const ActionsStore: import("react-sweet-state").Store Action; }>; export declare const useDiscoverActions: ({ captureError, fireEvent }: UseDiscoverActionsProps) => { discoverActions: (request: ActionsDiscoveryRequest) => void | Promise; }; /** * Retrieves the action schema for a given ARI + fieldKey + integrationKey */ export declare const useAtomicUpdateActionSchema: import("react-sweet-state").HookFunction<{ schema?: undefined; fetchSchema?: undefined; } | { schema: Pick & { fetchAction?: Pick; }; fetchSchema: Pick | undefined; }, import("react-sweet-state").BoundActions Action; }>, { ari: string; fieldKey: string; integrationKey: string; }>; export type ExecuteFetch = (inputs: AtomicActionExecuteRequest['parameters']['inputs']) => Promise; /** * Given an ARI + fieldKey + integrationKey * Returns an executable action that updates a field on the entity if the user has permissions to do so * * @example * ```tsx * const { execute } = useExecuteAtomicAction({ ari, fieldKey: 'summary', integrationKey: 'jira' }); * * return ; * ``` */ export declare const useExecuteAtomicAction: ({ ari, fieldKey, integrationKey, }: { ari: string; fieldKey: string; integrationKey: string; }) => { execute?: (value: string | number) => Promise>; executeFetch?: ExecuteFetch; }; export {};