1.2.21 • Published 6 months ago

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

Weekly downloads
-
License
ISC
Repository
github
Last release
6 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

6 months ago

1.2.20

6 months ago

1.2.19

6 months ago

1.2.18

6 months ago

1.2.17

6 months ago

1.2.16

8 months ago

1.2.15

8 months ago

1.2.14

8 months ago

1.2.13

8 months ago

1.2.12

8 months ago

1.2.11

8 months ago

1.2.10

8 months ago

1.2.9

8 months ago

1.2.8

8 months ago

1.2.7

8 months ago

1.2.6

8 months ago

1.2.5

8 months ago

1.2.4

8 months ago

1.2.3

8 months ago

1.2.2

9 months ago

1.2.1

9 months ago

1.2.0

9 months ago

1.1.2

9 months ago

1.1.1

9 months ago

1.1.0

9 months ago

1.0.17

9 months ago

1.0.16

9 months ago

1.0.15

9 months ago

1.0.14

9 months ago

1.0.13

9 months ago

1.0.12

9 months ago

1.0.11

9 months ago

1.0.10

10 months ago

1.0.9

10 months ago

1.0.8

10 months ago

1.0.7

10 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago