18.0.0 • Published 8 months ago

@directus/sdk v18.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

Directus JavaScript SDK

Features

  • TypeScript first: The SDK provides a robust and type-safe development experience.
  • Modular architecture: The SDK is split into separate modules, giving you granular control over which features to include and which can be pruned at build-time.
  • Lightweight and dependency-free: It does not require external libraries, ensuring a lighter bundle and streamlined experience.

Composable Client

The client is split up in separate features you can mix and match to compose a client with only the features you need or want.

const client = createDirectus<Schema>('https://api.directus.io');

This client is currently an empty wrapper without any functionality. Before you can do anything with it you'll need to add some features. The following composables are available/in progress:

  • rest() REST request functions
    • adds .request(...) on the client
  • graphql() GraphQL request functions
    • adds .query(...) on the client
  • staticToken() authentication functions
    • adds .getToken() and .setToken() on the client
  • authenticate() authentication functions
    • adds .login({ email, password }), .logout(), .refresh() on the client
    • adds .getToken() and .setToken() on the client
  • realtime() websocket connectivity
    • adds .subscribe(...), .sendMessage(...), .onWebsocket('message', (message) => {}) on the client

For this example we'll build a client including rest and graphql:

const client = createDirectus<Schema>('https://api.directus.io').with(rest()).with(graphql());

// do a REST request
const restResult = await client.request(readItems('articles'));

// do a GraphQL request
const gqlResult = await client.query<OutputType>(`
    query {
        articles {
            id
            title
            author {
                first_name
            }
        }
    }
`);

Authentication

const client = createDirectus<Schema>('https://api.directus.io').with(rest()).with(authentication('json'));

await client.login('admin@example.com', 'd1r3ctu5');

// do authenticated requests
const client = createDirectus<Schema>('https://api.directus.io').with(rest()).with(staticToken('super-secure-token'));

// do authenticated requests

Real-Time

The realtime() extension allows you to work with a Directus REST WebSocket.

Subscribing to updates:

const client = createDirectus<Schema>('https://api.directus.io').with(
	realtime({
		authMode: 'public',
	}),
);

const { subscription, unsubscribe } = await client.subscribe('test', {
	query: { fields: ['*'] },
});

for await (const item of subscription) {
	console.log('subscription', { item });
}

// unsubscribe()

Receive/Send messages:

const client = createDirectus<Schema>('https://api.directus.io').with(
	realtime({
		authMode: 'public',
	}),
);

const stop = client.onWebSocket('message', (message) => {
	if ('type' in message && message['type'] === 'pong') {
		console.log('PONG received');
		stop();
	}
});

client.sendMessage({ type: 'ping' });

Build Your Schema

// The main schema type containing all collections available
interface MySchema {
	collection_a: CollectionA[]; // regular collections are array types
	collection_b: CollectionB[];
	collection_c: CollectionC; // this is a singleton
	// junction collections are collections too
	collection_a_b_m2m: CollectionAB_Many[];
	collection_a_b_m2a: CollectionAB_Any[];
}

// collection A
interface CollectionA {
	id: number;
	status: string;
	// relations
	m2o: number | CollectionB;
	o2m: number[] | CollectionB[];
	m2m: number[] | CollectionAB_Many[];
	m2a: number[] | CollectionAB_Any[];
}

// Many-to-Many junction table
interface CollectionAB_Many {
	id: number;
	collection_a_id: CollectionA;
	collection_b_id: CollectionB;
}

// Many-to-Any junction table
interface CollectionAB_Any {
	id: number;
	collection_a_id: CollectionA;
	collection: 'collection_b' | 'collection_c';
	item: string | CollectionB | CollectionC;
}

// collection B
interface CollectionB {
	id: number;
	value: string;
}

// singleton collection
interface CollectionC {
	id: number;
	app_settings: string;
	something: string;
}
@reachoutlabs/sdk@elecerp/directus-extension-elecmarket-module@elecerp/directus-extension-energysee-module@elecerp/directus-extension-eleciq-module@infinitebrahmanuniverse/nolb-_dir@everything-registry/sub-chunk-245term-gptvd2hcvue-directus@directus/gatsby-source-directus@directus-labs/calculated-fields-bundle@directus/cli@collectivo/collectivo@collectivo/core@digitalway/mba-auth@digitalway/nuxt-directus@premieroctet/directus-extension-sql-panelir-vuex-directusjobs-paragon-backendkitchentemplatestx-libtraffy-connectorumain-tandtraffy@altipla/directus-drizzle@altipla/directus-drizzle-schema@bg-dev/nuxt-directus@binpar/directus-extension-dynamic-trees@chikore/directus-authprovider@citrineos/util@deconz-community/cli@danielohling/nuxt-directus@fidt/config@fidt/service-configuration@elecerp/directus-extension-elecerp-module@egorvas/node-red-contrib-chatbot@indirectus/cli@localazy/components@mv-data-core/cli@mv-data-core/gatsby-source-mv-data-core@n0safe/indirectus@nodeworks/expo-starter@maslio/kit@maslio/sdk@maslio/stack@jsbrain/refine-directus@okam/refine-directus@sandpiper-studio/blocks-skeleton@rezolabs/astro-boilerplate@nuxtus/cli@nuxtus/generator@nuxtus/nuxt-module@silexlabs/eleventy-plugin-directus@silexlabs/silex-directus-storage@resilien/directus-to-markdownnuxt-directus-nextnuxt-directus-sdknuxt-directus-seopc-directus-interfacesequence-profile-directusnode-red-contrib-chatbotppagentsh-erp-clientskeells-schemasilex-website-buildersilex-directus-storageinflewental-directus-interfaceliste-kraken-schemaliste-kraken-sdklynx-uiloopback-connector-directus@wiboo/ezishop-api@webcreators/nuxt-dynamic-layer@workatease/refine-directus@thirdrocktechno/directus-extension-directusgpt@tspvivek/refine-directus@urga-smart/ui-publish@struq.io/nextauth-adapter-directus@tanglemedia/svelte-starter-directus-api@tanglemedia/svelte-starter-tiptap-editoraderugy-studio-aicheck_if_owner_of_personal_category_before_createing_sitedcb-tree-viewdirectus-extension-m2mdirectus-extension-refresh-on-changeddirectus-piniadirectus-schema-syncdirectus-schema-toolsdirectus-syncdirectus-template-clidirectus-to-datadirectusptdirectus-componentdirectus-cutdirectus-extension-ag-grid-interfacedirectus-extension-apple-trade-importerdirectuspt-libecommerce-sdkfive59-nuxt-toolkitfari-directus-parser
18.0.0

8 months ago

16.1.1

12 months ago

16.1.0

1 year ago

16.1.2

10 months ago

16.2.0-rc.1

11 months ago

17.0.2

8 months ago

16.2.0-rc.0

12 months ago

17.0.1

9 months ago

17.0.0

10 months ago

16.0.2

1 year ago

16.0.1

1 year ago

16.0.0

1 year ago

15.1.0

1 year ago

15.0.3

1 year ago

15.0.2

1 year ago

15.0.1

1 year ago

15.0.0

1 year ago

14.0.0

1 year ago

12.0.0

2 years ago

12.0.1

2 years ago

10.3.4

2 years ago

10.3.5

2 years ago

13.0.2

2 years ago

13.0.0

2 years ago

13.0.1

2 years ago

11.0.0-beta.2

2 years ago

11.0.0-beta.3

2 years ago

11.0.0-beta.4

2 years ago

11.0.0-beta.5

2 years ago

11.0.0-beta.6

2 years ago

11.0.2

2 years ago

11.0.3

2 years ago

11.0.0

2 years ago

11.0.1

2 years ago

12.1.0

2 years ago

11.0.0-beta.1

2 years ago

10.3.2

2 years ago

10.3.3

2 years ago

10.3.1

2 years ago

10.2.0

3 years ago

10.1.5

3 years ago

10.3.0

3 years ago

10.0.0

3 years ago

10.0.1

3 years ago

9.14.2

3 years ago

9.14.0

3 years ago

9.12.2

3 years ago

9.14.1

3 years ago

10.1.4

3 years ago

10.1.0

3 years ago

10.1.1

3 years ago

10.1.2

3 years ago

10.1.3

3 years ago

9.13.0

3 years ago

9.12.0

3 years ago

9.12.1

3 years ago

9.10.0

3 years ago

9.11.1

3 years ago

9.11.0

3 years ago

9.9.0

3 years ago

9.9.1

3 years ago

9.8.0

3 years ago

9.7.1

3 years ago

9.7.0

3 years ago

9.6.0

3 years ago

9.4.3

3 years ago

9.4.2

3 years ago

9.4.1

3 years ago

9.4.0

3 years ago

9.5.2

3 years ago

9.5.1

3 years ago

9.5.0

3 years ago

9.3.0

3 years ago

9.2.2

4 years ago

9.2.1

4 years ago

9.1.1

4 years ago

9.1.0

4 years ago

9.1.2

4 years ago

9.2.0

4 years ago

9.0.0-rc.100

4 years ago

9.0.0-rc.101

4 years ago

9.0.1

4 years ago

9.0.0

4 years ago

9.0.0-rc.99

4 years ago

9.0.0-rc.98

4 years ago

9.0.0-rc.97

4 years ago

9.0.0-rc.96

4 years ago

9.0.0-rc.95

4 years ago

9.0.0-rc.94

4 years ago

9.0.0-rc.93

4 years ago

9.0.0-rc.92

4 years ago

9.0.0-rc.91

4 years ago

9.0.0-rc.90

4 years ago

9.0.0-rc.89

4 years ago

9.0.0-rc.88

4 years ago

9.0.0-rc.87

4 years ago

9.0.0-rc.86

4 years ago

9.0.0-rc.84

4 years ago

9.0.0-rc.85

4 years ago

9.0.0-rc.83

4 years ago

9.0.0-rc.82

4 years ago

9.0.0-rc.81

4 years ago

9.0.0-rc.79

4 years ago

9.0.0-rc.78

4 years ago

9.0.0-rc.80

4 years ago

9.0.0-rc.77

4 years ago

9.0.0-rc.76

4 years ago

9.0.0-rc.73

4 years ago

9.0.0-rc.72

4 years ago

9.0.0-rc.75

4 years ago

9.0.0-rc.74

4 years ago

9.0.0-rc.71

4 years ago

9.0.0-rc.70

4 years ago

9.0.0-rc.66

4 years ago

9.0.0-rc.65

4 years ago

9.0.0-rc.68

4 years ago

9.0.0-rc.67

4 years ago

9.0.0-rc.62

4 years ago

9.0.0-rc.61

4 years ago

9.0.0-rc.64

4 years ago

9.0.0-rc.63

4 years ago

9.0.0-rc.60

4 years ago

9.0.0-rc.69

4 years ago

9.0.0-rc.59

4 years ago

9.0.0-rc.58

4 years ago

9.0.0-rc.57

4 years ago

9.0.0-rc.56

4 years ago

9.0.0-rc.55

4 years ago

9.0.0-rc.54

4 years ago

9.0.0-rc.53

4 years ago