1.2.21 • Published 11 months ago

@malevich-studio/strapi-sdk-typescript v1.2.21

Weekly downloads
-
License
ISC
Repository
github
Last release
11 months ago

Strapi SDK for TypeScript

A TypeScript SDK for interacting with Strapi APIs.

⚠️ This SDK is designed specifically for Strapi 5. It will not work with previous versions of Strapi. ⚠️

🚀 Installation

To install the SDK, run:

npm install @malevich-studio/strapi-sdk-typescript

🛠 Configuration

Create a .env file with your Strapi base URL and API token:

STRAPI_URL=http://localhost:1337
STRAPI_TOKEN=<your_strapi_token>

Generating API Token

To interact with the Strapi API, you need to create an API token with at least Content-Type Builder permissions. Navigate to:

<your_strapi_base_url>/admin/settings/api-tokens/create

Generating API Class

Run the following command to generate TypeScript types based on your Strapi schema:

npx generate-strapi-types

📌 Usage

Basic Example

Create strapi.ts to initialize the API class:

import Strapi from "./strapi"; // strapi.ts file

const api = new Strapi(process.env.STRAPI_URL || '', process.env.STRAPI_TOKEN || '');

const articles = api.articles({
  fields: ["documentId", "title", "text"],
  populate: {
    seo: {
      fields: ["slug", "metaTitle", "metaDescription"],
      populate: {
        openGraph: {
          fields: ["title", "description", "url", "type"],
          populate: {
            image: {
              fields: ["url", "width", "height"]
            }
          }
        }
      }
    }
  }
});

Using in Next.js with Caching

If using Next.js, you can integrate caching for better performance:

import Strapi from "@/strapi"; // strapi.ts file

const api = new Strapi(process.env.STRAPI_URL || '', process.env.STRAPI_TOKEN || '');

const articles = api.articles(
  {
    fields: ["documentId", "title", "text"],
    populate: {
      seo: {
        fields: ["slug", "metaTitle", "metaDescription"],
        populate: {
          openGraph: {
            fields: ["title", "description", "url", "type"],
            populate: {
              image: {
                fields: ["url", "width", "height"]
              }
            }
          }
        }
      }
    }
  },
  // Cache Options
  {
    cache: "force-cache",
    next: {
      revalidate: 24 * 3600, // Revalidate every 24 hours
      tags: ["contact", "regions"]
    }
  }
);

Login Example

Next.js

'use server';

import Strapi from '@/strapi';
import { cookies } from 'next/headers';

export async function login(email: string, password: string) {
  const strapi = new Strapi(process.env.STRAPI_URL || '');
  const response = await strapi.login(email, password);

  if (!response.error) {
    (await cookies()).set('access_token', response.jwt, {
      httpOnly: true,
      secure: process.env.NODE_ENV === 'production',
      sameSite: 'lax',
      path: '/',
      maxAge: 3600 * 24 * 365 * 10,
    });
  }

  return response;
}

📌 TODO List

  • Add authentication features:
    • Log In functionality
    • User Registration
    • User privileges check
  • Add localization features
  • Refactor src/generator/index.ts for better maintainability
  • Enable passing Strapi credentials via CLI parameters
  • Allow customization of API class path
  • Resolve naming conflicts between Components and Content Types
  • Support custom attributes in src/generator/attributes/index.ts:15:
    • Define attributes by project code
    • Auto-load attributes from other npm packages by scanning node_modules

📌 Contributions are welcome! If you encounter issues or have feature requests, feel free to open a pull request or an issue. 🚀

📦 View on NPM 🔗 GitHub Repository

1.2.21

11 months ago

1.2.20

11 months ago

1.2.19

11 months ago

1.2.18

11 months ago

1.2.17

11 months ago

1.2.16

1 year ago

1.2.15

1 year ago

1.2.14

1 year ago

1.2.13

1 year ago

1.2.12

1 year ago

1.2.11

1 year ago

1.2.10

1 year ago

1.2.9

1 year ago

1.2.8

1 year ago

1.2.7

1 year ago

1.2.6

1 year ago

1.2.5

1 year ago

1.2.4

1 year ago

1.2.3

1 year ago

1.2.2

1 year ago

1.2.1

1 year ago

1.2.0

1 year ago

1.1.2

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago