{"version":3,"sources":["../src/client/gtd-client.ts"],"sourcesContent":["/**\n * Platform-agnostic GTD API Client\n * \n * This client can be used in any JavaScript/TypeScript environment:\n * - Next.js\n * - Vite\n * - CLI tools\n * - Node.js applications\n * - React Native\n * \n * Features type-safe API contracts and standardized error handling.\n */\n\nimport { HttpClient } from './http-client';\nimport {\n  ListResponse,\n  ListQueryParams,\n  GTDInboxItemDTO,\n  GTDProjectDTO,\n  GTDNextActionDTO,\n  CaptureInboxItemRequest,\n  RefineInboxItemRequest,\n  ClarifyInboxItemRequest,\n  CreateProjectRequest,\n  CreateNextActionRequest,\n  AssignNextActionRequest,\n  InboxQueryFilters,\n  ProjectQueryFilters,\n  NextActionQueryFilters,\n  ProcessInboxItemRequest,\n  ProcessInboxResponse,\n  WeeklyReviewResponse,\n} from '../contracts';\n\nimport {\n  BackendInboxListResponse,\n  BackendProjectsListResponse,\n  BackendCreateInboxItemRequest,\n  BackendCreateInboxItemResponse,\n  BackendInboxListResponseSchema,\n  BackendProjectsListResponseSchema,\n  isBackendSuccessResponse,\n  BackendApiError,\n  ApiValidationError,\n} from '../contracts/api/backend-response-types';\n\nimport {\n  classifyError,\n  withRetry,\n  defaultErrorLogger,\n  ErrorLogger,\n} from '../contracts/api/error-handling';\n\nexport interface GTDClientConfig {\n  enableValidation?: boolean;\n  enableRetry?: boolean;\n  errorLogger?: ErrorLogger;\n}\n\nexport class GTDClient {\n  private readonly config: GTDClientConfig;\n\n  constructor(\n    private http: HttpClient,\n    private basePath = '/api/productivity/gtd',\n    config: GTDClientConfig = {}\n  ) {\n    this.config = {\n      enableValidation: true,\n      enableRetry: true,\n      errorLogger: defaultErrorLogger,\n      ...config,\n    };\n  }\n\n  private async executeRequest<T>(operation: () => Promise<T>): Promise<T> {\n    try {\n      if (this.config.enableRetry) {\n        return await withRetry(operation);\n      }\n      return await operation();\n    } catch (error) {\n      const standardError = classifyError(error);\n      this.config.errorLogger?.logError(standardError);\n      throw standardError;\n    }\n  }\n\n  private validateResponse<T>(data: unknown, schema: any, operationName: string): T {\n    if (!this.config.enableValidation) {\n      return data as T;\n    }\n\n    const result = schema.safeParse(data);\n    if (!result.success) {\n      throw new ApiValidationError(\n        `Invalid response format for ${operationName}`,\n        result.error.issues\n      );\n    }\n    return result.data;\n  }\n\n  // Inbox Operations\n  async getInboxItems(\n    filters?: InboxQueryFilters & ListQueryParams\n  ): Promise<ListResponse<GTDInboxItemDTO>> {\n    return this.executeRequest(async () => {\n      const queryParams = filters ? new URLSearchParams(\n        Object.entries(filters)\n          .filter(([_, value]) => value !== undefined)\n          .reduce((acc, [key, value]) => ({ ...acc, [key]: String(value) }), {} as Record<string, string>)\n      ).toString() : '';\n      \n      const url = queryParams ? `${this.basePath}/inbox?${queryParams}` : `${this.basePath}/inbox`;\n      const rawResponse = await this.http.get<BackendInboxListResponse>(url, { \n        headers: { 'Content-Type': 'application/json' }\n      });\n      \n      // Validate response format\n      const validatedResponse = this.validateResponse<BackendInboxListResponse>(\n        rawResponse,\n        BackendInboxListResponseSchema,\n        'getInboxItems'\n      );\n      \n      // Handle error response\n      if (!isBackendSuccessResponse(validatedResponse)) {\n        throw BackendApiError.fromBackendError(validatedResponse);\n      }\n      \n      const { data } = validatedResponse;\n      \n      // Transform to standardized format with proper typing including required fields\n      return {\n        items: data.items.map(item => ({\n          id: item.id,\n          originalContent: item.content || item.text || item.title || '',\n          capturedAt: item.capturedAt,\n          capturedByPersonId: item.capturedBy || 'unknown',\n          processingStatus: item.status === 'processed' ? 'processed' as const : 'unprocessed' as const,\n          clarification: item.clarification || undefined,\n          isActionable: item.isActionable || undefined,\n          // These fields are not available in backend response yet - use undefined for now\n          lastRefinedAt: undefined,\n          refinedByPersonId: undefined,\n        })),\n        pagination: {\n          totalCount: data.total,\n          // Add more pagination info if available\n        },\n        totalCount: data.total,\n      };\n    });\n  }\n\n  async getInboxItem(id: string): Promise<GTDInboxItemDTO | null> {\n    const response = await this.http.get<any>(`${this.basePath}/inbox/${id}`);\n    return response.item || null;\n  }\n\n  async captureInboxItem(request: CaptureInboxItemRequest): Promise<GTDInboxItemDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/inbox`, request);\n    return response.item || response;\n  }\n\n  async refineInboxItem(id: string, request: RefineInboxItemRequest): Promise<GTDInboxItemDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/inbox/${id}/refine`, request);\n    return response.item || response;\n  }\n\n  async clarifyInboxItem(id: string, request: ClarifyInboxItemRequest): Promise<GTDInboxItemDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/inbox/${id}/clarify`, request);\n    return response.item || response;\n  }\n\n  async processInboxItem(id: string, request: ProcessInboxItemRequest): Promise<ProcessInboxResponse> {\n    return this.http.post(`${this.basePath}/inbox/${id}/process`, request);\n  }\n\n  async deleteInboxItem(id: string): Promise<void> {\n    await this.http.delete(`${this.basePath}/inbox/${id}`);\n  }\n\n  // Project Operations\n  async getProjects(\n    filters?: ProjectQueryFilters & ListQueryParams\n  ): Promise<ListResponse<GTDProjectDTO>> {\n    const queryParams = filters ? new URLSearchParams(\n      Object.entries(filters)\n        .filter(([_, value]) => value !== undefined)\n        .reduce((acc, [key, value]) => ({ ...acc, [key]: String(value) }), {} as Record<string, string>)\n    ).toString() : '';\n    \n    const url = queryParams ? `${this.basePath}/projects?${queryParams}` : `${this.basePath}/projects`;\n    const response = await this.http.get<any>(url);\n    \n    // Transform backend response to standardized format\n    if (response.items && response.total !== undefined) {\n      return {\n        items: response.items,\n        pagination: {\n          totalCount: response.total,\n          page: response.meta?.page,\n          pageSize: response.meta?.limit,\n        },\n        totalCount: response.total\n      };\n    }\n    \n    // Handle array response\n    const items = Array.isArray(response) ? response : [];\n    return {\n      items,\n      pagination: { totalCount: items.length },\n      totalCount: items.length\n    };\n  }\n\n  async getProject(id: string): Promise<GTDProjectDTO | null> {\n    const response = await this.http.get<any>(`${this.basePath}/projects/${id}`);\n    return response.item || null;\n  }\n\n  async createProject(request: CreateProjectRequest): Promise<GTDProjectDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/projects`, request);\n    return response.item || response;\n  }\n\n  async completeProject(id: string, completedBy?: string, completionNotes?: string): Promise<GTDProjectDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/projects/${id}/complete`, {\n      completedBy,\n      completionNotes\n    });\n    return response.item || response;\n  }\n\n  async deferProject(id: string): Promise<GTDProjectDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/projects/${id}/defer`);\n    return response.item || response;\n  }\n\n  async activateProject(id: string): Promise<GTDProjectDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/projects/${id}/activate`);\n    return response.item || response;\n  }\n\n  async cancelProject(id: string): Promise<GTDProjectDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/projects/${id}/cancel`);\n    return response.item || response;\n  }\n\n  async deleteProject(id: string): Promise<void> {\n    await this.http.delete(`${this.basePath}/projects/${id}`);\n  }\n\n  // Next Action Operations\n  async getNextActions(\n    filters?: NextActionQueryFilters & ListQueryParams\n  ): Promise<ListResponse<GTDNextActionDTO>> {\n    const queryParams = filters ? new URLSearchParams(\n      Object.entries(filters)\n        .filter(([_, value]) => value !== undefined)\n        .reduce((acc, [key, value]) => ({ ...acc, [key]: String(value) }), {} as Record<string, string>)\n    ).toString() : '';\n    \n    const url = queryParams ? `${this.basePath}/actions?${queryParams}` : `${this.basePath}/actions`;\n    const response = await this.http.get<any>(url);\n    \n    // Transform backend response to standardized format\n    if (response.items && response.total !== undefined) {\n      return {\n        items: response.items,\n        pagination: {\n          totalCount: response.total,\n          page: response.meta?.page,\n          pageSize: response.meta?.limit,\n        },\n        totalCount: response.total\n      };\n    }\n    \n    // Handle array response\n    const items = Array.isArray(response) ? response : [];\n    return {\n      items,\n      pagination: { totalCount: items.length },\n      totalCount: items.length\n    };\n  }\n\n  async getNextAction(id: string): Promise<GTDNextActionDTO | null> {\n    const response = await this.http.get<any>(`${this.basePath}/actions/${id}`);\n    return response.item || null;\n  }\n\n  async createNextAction(request: CreateNextActionRequest): Promise<GTDNextActionDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/actions`, request);\n    return response.item || response;\n  }\n\n  async assignNextAction(id: string, request: AssignNextActionRequest): Promise<GTDNextActionDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/actions/${id}/assign`, request);\n    return response.item || response;\n  }\n\n  async unassignNextAction(id: string): Promise<GTDNextActionDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/actions/${id}/unassign`);\n    return response.item || response;\n  }\n\n  async completeNextAction(id: string): Promise<GTDNextActionDTO> {\n    const response = await this.http.post<any>(`${this.basePath}/actions/${id}/complete`);\n    return response.item || response;\n  }\n\n  async deleteNextAction(id: string): Promise<void> {\n    await this.http.delete(`${this.basePath}/actions/${id}`);\n  }\n\n  // Convenience methods that match the existing frontend API\n  async getActionsByProject(projectId: string): Promise<ListResponse<GTDNextActionDTO>> {\n    return this.getNextActions({ projectId });\n  }\n\n  async getActionsByContext(context: string): Promise<ListResponse<GTDNextActionDTO>> {\n    return this.getNextActions({ context });\n  }\n\n  async getContexts(): Promise<ListResponse<string>> {\n    const response = await this.http.get<string[]>(`${this.basePath}/contexts`);\n    const contexts = Array.isArray(response) ? response : [];\n    return {\n      items: contexts,\n      pagination: { totalCount: contexts.length },\n      totalCount: contexts.length\n    };\n  }\n\n  // Weekly Review\n  async getWeeklyReview(reviewedBy: string): Promise<WeeklyReviewResponse> {\n    const queryParams = new URLSearchParams({ reviewedBy }).toString();\n    const response = await this.http.get<any>(`${this.basePath}/weekly-review?${queryParams}`, {\n      headers: { 'Content-Type': 'application/json' }\n    });\n    return response.review || response;\n  }\n}"],"mappings":"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","names":["GTDClient","config","http","basePath","enableValidation","enableRetry","errorLogger","defaultErrorLogger","executeRequest","operation","withRetry","error","standardError","classifyError","logError","validateResponse","data","schema","operationName","result","safeParse","success","ApiValidationError","issues","getInboxItems","filters","queryParams","URLSearchParams","Object","entries","filter","_","value","undefined","reduce","acc","key","String","toString","url","rawResponse","get","headers","validatedResponse","BackendInboxListResponseSchema","isBackendSuccessResponse","BackendApiError","fromBackendError","items","map","item","id","originalContent","content","text","title","capturedAt","capturedByPersonId","capturedBy","processingStatus","status","clarification","isActionable","lastRefinedAt","refinedByPersonId","pagination","totalCount","total","getInboxItem","response","captureInboxItem","request","post","refineInboxItem","clarifyInboxItem","processInboxItem","deleteInboxItem","delete","getProjects","page","meta","pageSize","limit","Array","isArray","length","getProject","createProject","completeProject","completedBy","completionNotes","deferProject","activateProject","cancelProject","deleteProject","getNextActions","getNextAction","createNextAction","assignNextAction","unassignNextAction","completeNextAction","deleteNextAction","getActionsByProject","projectId","getActionsByContext","context","getContexts","contexts","getWeeklyReview","reviewedBy","review"]}