@deepintel-ltd/farmpro-contracts

中文文档
1.36.11发布于 2026/10/27ISCTypeScriptES Module近 30 天下载 3877

Type-safe API contracts for FarmPro API

原始使用文档
文档目录33 节
  1. Overview
  2. Installation
  3. Structure
  4. Usage
  5. Backend (NestJS)
  6. Frontend
  7. API Modules
  8. Authentication
  9. Users
  10. Farms
  11. Fields
  12. Tasks
  13. Inventory
  14. Finance
  15. Harvest
  16. Soil Tests
  17. Weather
  18. Team
  19. Equipment
  20. Documents
  21. Suppliers
  22. Analytics
  23. Common Features
  24. Pagination
  25. Date Range Filtering
  26. GeoJSON Support
  27. Error Responses
  28. Type Safety
  29. Development
  30. Building
  31. Type Checking
  32. Publishing
  33. License

FarmPro API Contracts

Type-safe API contracts for FarmPro API using ts-rest and Zod.

Overview

This package provides comprehensive, type-safe API contracts for all FarmPro modules. The contracts follow RESTful principles and use Zod schemas for runtime validation.

Installation

npm install @farmpro/contracts

Structure

The contracts are organized into modules:

src/
├── index.ts                 # Main exports
├── routes/                  # API route definitions
│   ├── index.ts            # Main contract combining all routers
│   ├── farms.routes.ts
│   ├── fields.routes.ts
│   ├── tasks.routes.ts
│   ├── inventory.routes.ts
│   ├── finance.routes.ts
│   ├── harvest.routes.ts
│   ├── soil-tests.routes.ts
│   ├── weather.routes.ts
│   ├── team.routes.ts
│   ├── equipment.routes.ts
│   ├── documents.routes.ts
│   ├── suppliers.routes.ts
│   └── analytics.routes.ts
└── schemas/                 # Zod schemas
    ├── common.schemas.ts   # Shared schemas (pagination, errors, GeoJSON)
    ├── farms.schemas.ts
    ├── fields.schemas.ts
    ├── tasks.schemas.ts
    ├── inventory.schemas.ts
    ├── finance.schemas.ts
    ├── harvest.schemas.ts
    ├── soil-tests.schemas.ts
    ├── weather.schemas.ts
    ├── team.schemas.ts
    ├── equipment.schemas.ts
    ├── documents.schemas.ts
    ├── suppliers.schemas.ts
    └── analytics.schemas.ts

Usage

Backend (NestJS)

import { apiContract } from '@farmpro/contracts';
import { TsRestHandler, tsRestHandler } from '@ts-rest/nest';

@Controller()
export class FarmsController {
  @TsRestHandler(apiContract.farms)
  async handler() {
    return tsRestHandler(apiContract.farms, {
      listFarms: async ({ query }) => {
        // Implementation
      },
      createFarm: async ({ body }) => {
        // Implementation
      },
      // ... other handlers
    });
  }
}

Frontend

import { initClient } from '@ts-rest/core';
import { apiContract } from '@farmpro/contracts';

const client = initClient(apiContract, {
  baseUrl: 'http://localhost:3000/api',
  baseHeaders: {
    'Content-Type': 'application/json',
  },
});

// Use the client
const farms = await client.farms.listFarms({ query: { page: 1, limit: 20 } });
const farm = await client.farms.createFarm({ body: { name: 'My Farm', location: 'Kano' } });

API Modules

Authentication

  • POST /auth/login - Login with email and password
  • POST /auth/signup - Register new user
  • POST /auth/google/initiate - Initiate Google OAuth flow
  • POST /auth/google/callback - Handle Google OAuth callback
  • POST /auth/refresh - Refresh access token
  • POST /auth/logout - Logout user
  • POST /auth/password/reset-request - Request password reset
  • POST /auth/password/reset - Reset password with token
  • POST /auth/password/change - Change password (authenticated)
  • POST /auth/email/verify - Verify email address
  • POST /auth/email/resend-verification - Resend verification email

Users

  • GET /user/profile - Get current user profile
  • PATCH /user/profile - Update user profile

Farms

  • GET /farms - List farms
  • POST /farms - Create farm
  • GET /farms/:id - Get farm
  • PATCH /farms/:id - Update farm
  • DELETE /farms/:id - Delete farm

Fields

  • GET /farms/:farmId/fields - List fields
  • POST /farms/:farmId/fields - Create field
  • GET /farms/:farmId/fields/:id - Get field
  • PATCH /farms/:farmId/fields/:id - Update field
  • DELETE /farms/:farmId/fields/:id - Delete field

Tasks

  • GET /farms/:farmId/tasks - List tasks
  • POST /farms/:farmId/tasks - Create task
  • GET /farms/:farmId/tasks/:id - Get task
  • PATCH /farms/:farmId/tasks/:id - Update task
  • POST /farms/:farmId/tasks/:id/complete - Complete task
  • DELETE /farms/:farmId/tasks/:id - Delete task
  • POST /farms/:farmId/tasks/:id/notes - Add task note

Inventory

  • GET /farms/:farmId/inventory - List inventory items
  • POST /farms/:farmId/inventory - Create inventory item
  • GET /farms/:farmId/inventory/:id - Get inventory item
  • PATCH /farms/:farmId/inventory/:id - Update inventory item
  • DELETE /farms/:farmId/inventory/:id - Delete inventory item
  • POST /farms/:farmId/inventory/purchase - Log purchase

Finance

  • Budget: GET, POST, PATCH, DELETE /farms/:farmId/budget
  • Expenses: GET, POST, PATCH, DELETE /farms/:farmId/expenses
  • Revenue: GET, POST, PATCH, DELETE /farms/:farmId/revenue
  • GET /farms/:farmId/finance/summary - Finance summary

Harvest

  • GET /farms/:farmId/harvests - List harvests
  • POST /farms/:farmId/harvests - Create harvest
  • GET /farms/:farmId/harvests/:id - Get harvest
  • PATCH /farms/:farmId/harvests/:id - Update harvest
  • DELETE /farms/:farmId/harvests/:id - Delete harvest

Soil Tests

  • GET /farms/:farmId/soil-tests - List soil tests
  • POST /farms/:farmId/soil-tests - Create soil test
  • GET /farms/:farmId/soil-tests/:id - Get soil test
  • PATCH /farms/:farmId/soil-tests/:id - Update soil test
  • DELETE /farms/:farmId/soil-tests/:id - Delete soil test

Weather

  • GET /farms/:farmId/weather - Get weather data

Team

  • GET /farms/:farmId/team - List team members
  • POST /farms/:farmId/team - Create team member
  • GET /farms/:farmId/team/:id - Get team member
  • PATCH /farms/:farmId/team/:id - Update team member
  • DELETE /farms/:farmId/team/:id - Delete team member

Equipment

  • GET /farms/:farmId/equipment - List equipment
  • POST /farms/:farmId/equipment - Create equipment
  • GET /farms/:farmId/equipment/:id - Get equipment
  • PATCH /farms/:farmId/equipment/:id - Update equipment
  • DELETE /farms/:farmId/equipment/:id - Delete equipment
  • POST /farms/:farmId/equipment/:id/maintenance - Add maintenance record

Documents

  • GET /farms/:farmId/documents - List documents
  • POST /farms/:farmId/documents - Create document
  • GET /farms/:farmId/documents/:id - Get document
  • PATCH /farms/:farmId/documents/:id - Update document
  • DELETE /farms/:farmId/documents/:id - Delete document

Suppliers

  • Suppliers: GET, POST, PATCH, DELETE /farms/:farmId/suppliers
  • Buyers: GET, POST, PATCH, DELETE /farms/:farmId/buyers

Analytics

  • GET /farms/:farmId/analytics - Get analytics data

Common Features

Pagination

Most list endpoints support pagination:

{
  page?: number;  // Default: 1
  limit?: number; // Default: 20, Max: 100
}

Date Range Filtering

Many endpoints support date range filtering:

{
  startDate?: string; // ISO datetime
  endDate?: string;   // ISO datetime
}

GeoJSON Support

Farms and fields support GeoJSON geometry for boundaries:

{
  type: 'Polygon' | 'MultiPolygon' | 'Point' | 'LineString';
  coordinates: number[][][] | number[][] | number[];
}

Error Responses

All endpoints return standardized error responses:

{
  message: string;
  code?: string;
  errors?: Array<{
    field?: string;
    message: string;
  }>;
}

Type Safety

All schemas export TypeScript types:

import type {
  FarmResponse,
  CreateFarmInput,
  FieldResponse,
  TaskResponse,
  // ... etc
} from '@farmpro/contracts';

Development

Building

npm run build

Type Checking

npm run type-check

Publishing

npm run prepublishOnly  # Builds and validates
npm publish

License

ISC

版本与发布记录

@deepintel-ltd/farmpro-contracts 共发布 148 个版本,首次发布于 2025/11/08;过去 12 个月发布了 138 个版本。

版本发布日期距今
1.36.11latest2026/10/2716 天前
1.36.102026/10/2418 天前
1.36.92026/10/2418 天前
1.36.82026/10/2419 天前
1.36.72026/10/2319 天前
1.36.62026/10/2319 天前

关于 @deepintel-ltd/farmpro-contracts 的常见问题

@deepintel-ltd/farmpro-contracts 是什么?

Type-safe API contracts for FarmPro API

如何安装 @deepintel-ltd/farmpro-contracts?

在项目目录运行 npm install @deepintel-ltd/farmpro-contracts,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:zod(^3.25.0)、@ts-rest/core(^3.52.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@deepintel-ltd/farmpro-contracts 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@deepintel-ltd/farmpro-contracts 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@deepintel-ltd/farmpro-contracts 可以商用吗?

@deepintel-ltd/farmpro-contracts 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@deepintel-ltd/farmpro-contracts 的下载量有多少?

根据 npm 官方下载统计,@deepintel-ltd/farmpro-contracts 在 2026/10/12 – 2026/11/10 这 30 天内被下载 3,877 次,日均约 129 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@deepintel-ltd/farmpro-contracts 还在维护吗?

最新版本 1.36.11 发布于 2026/10/27(16 天前);至今共发布 148 个版本,其中过去 12 个月发布了 138 个;首次发布于 2025/11/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。