@tanglemedia/svelte-starter-directus-api 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth.d.ts +2 -1
- package/dist/auth.js +33 -6
- package/dist/client.d.ts +2 -1
- package/dist/client.js +31 -4
- package/dist/load-directus-api-povider.d.ts +2 -1
- package/dist/load-directus-api-povider.js +5 -3
- package/package.json +5 -1
- package/src/auth.ts +36 -6
- package/src/client.ts +32 -2
- package/src/load-directus-api-povider.ts +3 -3
package/dist/auth.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { DirectusClient, RestClient } from '@directus/sdk';
|
|
2
2
|
declare class ApiAuthDirectus {
|
|
3
3
|
private baseURL;
|
|
4
|
+
private storageMode;
|
|
4
5
|
private directus;
|
|
5
|
-
constructor(baseURL: string);
|
|
6
|
+
constructor(baseURL: string, storageMode?: 'json' | 'cookie');
|
|
6
7
|
private init;
|
|
7
8
|
getConfig<T extends object>(): DirectusClient<T> & RestClient<object>;
|
|
8
9
|
refresh<T>(): Promise<T>;
|
package/dist/auth.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { authentication, createDirectus, readMe, refresh, rest, updateMe, memoryStorage } from '@directus/sdk';
|
|
2
|
-
import {
|
|
2
|
+
import { BROWSER } from 'esm-env';
|
|
3
|
+
import cookie from 'js-cookie';
|
|
3
4
|
const localDirectusStorage = (storageKey = 'access_token_directus') => {
|
|
4
|
-
if (!
|
|
5
|
+
if (!BROWSER || !window.localStorage) {
|
|
5
6
|
console.warn('Defaulting to memory storage');
|
|
6
7
|
return memoryStorage();
|
|
7
8
|
}
|
|
@@ -21,24 +22,50 @@ const localDirectusStorage = (storageKey = 'access_token_directus') => {
|
|
|
21
22
|
}
|
|
22
23
|
};
|
|
23
24
|
};
|
|
25
|
+
const cookieDirectusStorage = (cookieKey = 'access_token_directus') => {
|
|
26
|
+
return {
|
|
27
|
+
get: async () => {
|
|
28
|
+
const data = JSON.parse(cookie.get(cookieKey)) || '{}';
|
|
29
|
+
return data ? data : null;
|
|
30
|
+
},
|
|
31
|
+
set: async (value) => {
|
|
32
|
+
cookie.set(cookieKey, JSON.stringify(value));
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
};
|
|
24
36
|
const authenticationConfig = {
|
|
25
37
|
storage: localDirectusStorage(),
|
|
26
38
|
autoRefresh: true,
|
|
27
39
|
msRefreshBeforeExpires: 30000,
|
|
28
40
|
credentials: 'include'
|
|
29
41
|
};
|
|
42
|
+
const authenticationCookieConfig = {
|
|
43
|
+
storage: cookieDirectusStorage(),
|
|
44
|
+
autoRefresh: true,
|
|
45
|
+
msRefreshBeforeExpires: 30000,
|
|
46
|
+
credentials: 'include'
|
|
47
|
+
};
|
|
30
48
|
class ApiAuthDirectus {
|
|
31
49
|
baseURL;
|
|
50
|
+
storageMode;
|
|
32
51
|
directus;
|
|
33
|
-
constructor(baseURL) {
|
|
52
|
+
constructor(baseURL, storageMode = 'json') {
|
|
34
53
|
this.baseURL = baseURL;
|
|
54
|
+
this.storageMode = storageMode;
|
|
35
55
|
this.init();
|
|
36
56
|
}
|
|
37
57
|
init() {
|
|
38
58
|
try {
|
|
39
|
-
this.
|
|
40
|
-
.
|
|
41
|
-
|
|
59
|
+
if (this.storageMode === 'json') {
|
|
60
|
+
this.directus = createDirectus(this.baseURL)
|
|
61
|
+
.with(rest({ credentials: 'include' }))
|
|
62
|
+
.with(authentication('json', authenticationConfig));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.directus = createDirectus(this.baseURL)
|
|
66
|
+
.with(rest({ credentials: 'include' }))
|
|
67
|
+
.with(authentication('cookie', authenticationCookieConfig));
|
|
68
|
+
}
|
|
42
69
|
}
|
|
43
70
|
catch (error) {
|
|
44
71
|
console.error(`Error initializing Directus:`, error);
|
package/dist/client.d.ts
CHANGED
|
@@ -3,8 +3,9 @@ type BaseApiMethods = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
|
3
3
|
type ApiId = string | number;
|
|
4
4
|
declare class ApiClientDirectus implements ApiAdapterInterface {
|
|
5
5
|
private baseURL;
|
|
6
|
+
private storageMode;
|
|
6
7
|
private directus;
|
|
7
|
-
constructor(baseURL: string);
|
|
8
|
+
constructor(baseURL: string, storageMode?: 'json' | 'cookie');
|
|
8
9
|
private init;
|
|
9
10
|
getConfig<T extends object>(configuration?: unknown): BaseApiAdapterConfig;
|
|
10
11
|
request<T>(method: BaseApiMethods, url: string, query?: Record<string, unknown>): Promise<T>;
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { aggregate, authentication, createDirectus, createItem, deleteItem, readItem, readItems, rest, updateItem, uploadFiles, memoryStorage } from '@directus/sdk';
|
|
2
2
|
import { browser } from '$app/environment';
|
|
3
|
+
import cookie from 'js-cookie';
|
|
3
4
|
const localDirectusStorage = (storageKey = 'access_token_directus') => {
|
|
4
5
|
if (!browser || !window.localStorage) {
|
|
5
6
|
console.warn('Defaulting to memory storage');
|
|
@@ -21,24 +22,50 @@ const localDirectusStorage = (storageKey = 'access_token_directus') => {
|
|
|
21
22
|
}
|
|
22
23
|
};
|
|
23
24
|
};
|
|
25
|
+
const cookieDirectusStorage = (cookieKey = 'access_token_directus') => {
|
|
26
|
+
return {
|
|
27
|
+
get: async () => {
|
|
28
|
+
const data = JSON.parse(cookie.get(cookieKey)) || '{}';
|
|
29
|
+
return data ? data : null;
|
|
30
|
+
},
|
|
31
|
+
set: async (value) => {
|
|
32
|
+
cookie.set(cookieKey, JSON.stringify(value));
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
};
|
|
24
36
|
const authenticationConfig = {
|
|
25
37
|
storage: localDirectusStorage(),
|
|
26
38
|
autoRefresh: true,
|
|
27
39
|
msRefreshBeforeExpires: 30000,
|
|
28
40
|
credentials: 'include'
|
|
29
41
|
};
|
|
42
|
+
const authenticationCookieConfig = {
|
|
43
|
+
storage: cookieDirectusStorage(),
|
|
44
|
+
autoRefresh: true,
|
|
45
|
+
msRefreshBeforeExpires: 30000,
|
|
46
|
+
credentials: 'include'
|
|
47
|
+
};
|
|
30
48
|
class ApiClientDirectus {
|
|
31
49
|
baseURL;
|
|
50
|
+
storageMode;
|
|
32
51
|
directus;
|
|
33
|
-
constructor(baseURL) {
|
|
52
|
+
constructor(baseURL, storageMode = 'json') {
|
|
34
53
|
this.baseURL = baseURL;
|
|
54
|
+
this.storageMode = storageMode;
|
|
35
55
|
this.init();
|
|
36
56
|
}
|
|
37
57
|
init() {
|
|
38
58
|
try {
|
|
39
|
-
this.
|
|
40
|
-
.
|
|
41
|
-
|
|
59
|
+
if (this.storageMode === 'json') {
|
|
60
|
+
this.directus = createDirectus(this.baseURL)
|
|
61
|
+
.with(rest({ credentials: 'include' }))
|
|
62
|
+
.with(authentication('json', authenticationConfig));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.directus = createDirectus(this.baseURL)
|
|
66
|
+
.with(rest({ credentials: 'include' }))
|
|
67
|
+
.with(authentication('cookie', authenticationCookieConfig));
|
|
68
|
+
}
|
|
42
69
|
}
|
|
43
70
|
catch (error) {
|
|
44
71
|
console.error(`Error initializing Directus:`, error);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type ApiAdapterProviderInterface, type ApiAdapterInterface, type ApiAdapterRequestConfig, type BaseApiAdapterConfig, type Config, type ApiConfigSchema } from '@tanglemedia/svelte-starter-core';
|
|
2
2
|
declare class LoadDirectusApiProvider implements ApiAdapterProviderInterface {
|
|
3
3
|
private readonly configLoader;
|
|
4
|
+
private storageMode;
|
|
4
5
|
constructor(configLoader: () => Promise<Config<{
|
|
5
6
|
api?: ApiConfigSchema;
|
|
6
|
-
}
|
|
7
|
+
}>>, storageMode?: 'json' | 'cookie');
|
|
7
8
|
loadAdapter(key?: string | undefined): Promise<ApiAdapterInterface<BaseApiAdapterConfig, ApiAdapterRequestConfig, string>>;
|
|
8
9
|
}
|
|
9
10
|
export { LoadDirectusApiProvider };
|
|
@@ -3,8 +3,10 @@ import { ApiStaticDirectus } from './static';
|
|
|
3
3
|
import {} from '@tanglemedia/svelte-starter-core';
|
|
4
4
|
class LoadDirectusApiProvider {
|
|
5
5
|
configLoader;
|
|
6
|
-
|
|
6
|
+
storageMode;
|
|
7
|
+
constructor(configLoader, storageMode = 'json') {
|
|
7
8
|
this.configLoader = configLoader;
|
|
9
|
+
this.storageMode = storageMode;
|
|
8
10
|
}
|
|
9
11
|
async loadAdapter(key) {
|
|
10
12
|
const conf = await this.configLoader();
|
|
@@ -21,7 +23,7 @@ class LoadDirectusApiProvider {
|
|
|
21
23
|
if (directusType === 'client') {
|
|
22
24
|
const protocol = config(`api.adapters.${apiAdapterKey}.protocol`) || '';
|
|
23
25
|
const host = config(`api.adapters.${apiAdapterKey}.host`) || '';
|
|
24
|
-
return new ApiClientDirectus(`${protocol}://${host}`.trim());
|
|
26
|
+
return new ApiClientDirectus(`${protocol}://${host}`.trim(), this.storageMode);
|
|
25
27
|
}
|
|
26
28
|
else {
|
|
27
29
|
console.log('static');
|
|
@@ -35,7 +37,7 @@ class LoadDirectusApiProvider {
|
|
|
35
37
|
console.log('client');
|
|
36
38
|
const protocol = config(`api.adapters.${apiAdapterKey}.protocol`) || '';
|
|
37
39
|
const host = config(`api.adapters.${apiAdapterKey}.host`) || '';
|
|
38
|
-
return new ApiClientDirectus(`${protocol}://${host}`.trim());
|
|
40
|
+
return new ApiClientDirectus(`${protocol}://${host}`.trim(), this.storageMode);
|
|
39
41
|
}
|
|
40
42
|
console.log('This should be unreachable');
|
|
41
43
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanglemedia/svelte-starter-directus-api",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"main": "src/index.ts",
|
|
5
5
|
"types": "src/index.ts",
|
|
6
6
|
"description": "directus API wrapper for all the directus sdk functionality",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"@testing-library/jest-dom": "^6.2.0",
|
|
29
29
|
"@testing-library/svelte": "^4.0.5",
|
|
30
30
|
"@vitest/coverage-v8": "^1.2.0",
|
|
31
|
+
"js-cookie": "^3.0.5",
|
|
31
32
|
"jsdom": "^23.2.0",
|
|
32
33
|
"msw": "^2.1.0",
|
|
33
34
|
"svelte": "^4.2.8",
|
|
@@ -38,6 +39,7 @@
|
|
|
38
39
|
},
|
|
39
40
|
"dependencies": {
|
|
40
41
|
"@directus/sdk": "^14.0.0",
|
|
42
|
+
"esm-env": "^1.0.0",
|
|
41
43
|
"@tanglemedia/svelte-starter-core": "0.0.15"
|
|
42
44
|
},
|
|
43
45
|
"peerDependencies": {
|
|
@@ -50,6 +52,8 @@
|
|
|
50
52
|
"lint": "prettier --check --ignore-path=../../.prettierignore . && eslint \".\" --ignore-path=../../.prettierignore",
|
|
51
53
|
"format": "prettier --write --ignore-path=../../.prettierignore . && eslint \".\" --ignore-path=../../.prettierignore",
|
|
52
54
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
55
|
+
"test": "vitest",
|
|
56
|
+
"test:debug": "vitest --test-timeout=0 --reporter=verbose --coverage",
|
|
53
57
|
"clean": "rimraf ./dist && rimraf ./coverage"
|
|
54
58
|
}
|
|
55
59
|
}
|
package/src/auth.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AuthenticationConfig, AuthenticationData } from '@directus/sdk';
|
|
1
|
+
import type { AuthenticationClient, AuthenticationConfig, AuthenticationData } from '@directus/sdk';
|
|
2
2
|
import {
|
|
3
3
|
authentication,
|
|
4
4
|
createDirectus,
|
|
@@ -11,10 +11,12 @@ import {
|
|
|
11
11
|
|
|
12
12
|
import type { DirectusClient, RestClient } from '@directus/sdk';
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { BROWSER } from 'esm-env';
|
|
15
|
+
|
|
16
|
+
import cookie from 'js-cookie';
|
|
15
17
|
|
|
16
18
|
const localDirectusStorage = (storageKey: string = 'access_token_directus') => {
|
|
17
|
-
if (!
|
|
19
|
+
if (!BROWSER || !window.localStorage) {
|
|
18
20
|
console.warn('Defaulting to memory storage');
|
|
19
21
|
return memoryStorage();
|
|
20
22
|
}
|
|
@@ -36,6 +38,19 @@ const localDirectusStorage = (storageKey: string = 'access_token_directus') => {
|
|
|
36
38
|
};
|
|
37
39
|
};
|
|
38
40
|
|
|
41
|
+
const cookieDirectusStorage = (cookieKey: string = 'access_token_directus') => {
|
|
42
|
+
return {
|
|
43
|
+
get: async (): Promise<AuthenticationData | null> => {
|
|
44
|
+
const data = JSON.parse(cookie.get(cookieKey)) || '{}';
|
|
45
|
+
return data ? (data as AuthenticationData) : null;
|
|
46
|
+
|
|
47
|
+
},
|
|
48
|
+
set: async (value: AuthenticationData | null): Promise<void> => {
|
|
49
|
+
cookie.set(cookieKey, JSON.stringify(value))
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
39
54
|
const authenticationConfig: AuthenticationConfig = {
|
|
40
55
|
storage: localDirectusStorage(),
|
|
41
56
|
autoRefresh: true,
|
|
@@ -43,20 +58,35 @@ const authenticationConfig: AuthenticationConfig = {
|
|
|
43
58
|
credentials: 'include'
|
|
44
59
|
};
|
|
45
60
|
|
|
61
|
+
const authenticationCookieConfig: AuthenticationConfig = {
|
|
62
|
+
storage: cookieDirectusStorage(),
|
|
63
|
+
autoRefresh: true,
|
|
64
|
+
msRefreshBeforeExpires: 30000,
|
|
65
|
+
credentials: 'include'
|
|
66
|
+
};
|
|
67
|
+
|
|
46
68
|
class ApiAuthDirectus {
|
|
47
69
|
private baseURL: string;
|
|
48
|
-
private
|
|
70
|
+
private storageMode: 'json' | 'cookie';
|
|
71
|
+
private directus: DirectusClient<object> & RestClient<object> & AuthenticationClient<object>;
|
|
49
72
|
|
|
50
|
-
constructor(baseURL: string) {
|
|
73
|
+
constructor(baseURL: string, storageMode: 'json' | 'cookie' = 'json') {
|
|
51
74
|
this.baseURL = baseURL;
|
|
75
|
+
this.storageMode = storageMode;
|
|
52
76
|
this.init();
|
|
53
77
|
}
|
|
54
78
|
|
|
55
79
|
private init<T extends object>(): void {
|
|
56
80
|
try {
|
|
57
|
-
this.
|
|
81
|
+
if(this.storageMode === 'json'){
|
|
82
|
+
this.directus = createDirectus<T>(this.baseURL)
|
|
58
83
|
.with(rest({ credentials: 'include' }))
|
|
59
84
|
.with(authentication('json', authenticationConfig));
|
|
85
|
+
}else {
|
|
86
|
+
this.directus = createDirectus<T>(this.baseURL)
|
|
87
|
+
.with(rest({ credentials: 'include' }))
|
|
88
|
+
.with(authentication('cookie', authenticationCookieConfig));
|
|
89
|
+
}
|
|
60
90
|
} catch (error) {
|
|
61
91
|
console.error(`Error initializing Directus:`, error);
|
|
62
92
|
throw error;
|
package/src/client.ts
CHANGED
|
@@ -22,6 +22,8 @@ import type {
|
|
|
22
22
|
|
|
23
23
|
import { browser } from '$app/environment';
|
|
24
24
|
|
|
25
|
+
import cookie from 'js-cookie';
|
|
26
|
+
|
|
25
27
|
const localDirectusStorage = (storageKey: string = 'access_token_directus') => {
|
|
26
28
|
if (!browser || !window.localStorage) {
|
|
27
29
|
console.warn('Defaulting to memory storage');
|
|
@@ -45,6 +47,19 @@ const localDirectusStorage = (storageKey: string = 'access_token_directus') => {
|
|
|
45
47
|
};
|
|
46
48
|
};
|
|
47
49
|
|
|
50
|
+
const cookieDirectusStorage = (cookieKey: string = 'access_token_directus') => {
|
|
51
|
+
return {
|
|
52
|
+
get: async (): Promise<AuthenticationData | null> => {
|
|
53
|
+
const data = JSON.parse(cookie.get(cookieKey)) || '{}';
|
|
54
|
+
return data ? (data as AuthenticationData) : null;
|
|
55
|
+
|
|
56
|
+
},
|
|
57
|
+
set: async (value: AuthenticationData | null): Promise<void> => {
|
|
58
|
+
cookie.set(cookieKey, JSON.stringify(value))
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
48
63
|
const authenticationConfig: AuthenticationConfig = {
|
|
49
64
|
storage: localDirectusStorage(),
|
|
50
65
|
autoRefresh: true,
|
|
@@ -52,24 +67,39 @@ const authenticationConfig: AuthenticationConfig = {
|
|
|
52
67
|
credentials: 'include'
|
|
53
68
|
};
|
|
54
69
|
|
|
70
|
+
const authenticationCookieConfig: AuthenticationConfig = {
|
|
71
|
+
storage: cookieDirectusStorage(),
|
|
72
|
+
autoRefresh: true,
|
|
73
|
+
msRefreshBeforeExpires: 30000,
|
|
74
|
+
credentials: 'include'
|
|
75
|
+
};
|
|
76
|
+
|
|
55
77
|
type BaseApiMethods = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
56
78
|
|
|
57
79
|
type ApiId = string | number;
|
|
58
80
|
|
|
59
81
|
class ApiClientDirectus implements ApiAdapterInterface {
|
|
60
82
|
private baseURL: string;
|
|
83
|
+
private storageMode: 'json' | 'cookie';
|
|
61
84
|
private directus: DirectusClient<object> & RestClient<object>;
|
|
62
85
|
|
|
63
|
-
constructor(baseURL: string) {
|
|
86
|
+
constructor(baseURL: string, storageMode: 'json' | 'cookie' = 'json') {
|
|
64
87
|
this.baseURL = baseURL;
|
|
88
|
+
this.storageMode = storageMode;
|
|
65
89
|
this.init();
|
|
66
90
|
}
|
|
67
91
|
|
|
68
92
|
private init<T extends object>(): void {
|
|
69
93
|
try {
|
|
70
|
-
this.
|
|
94
|
+
if(this.storageMode === 'json'){
|
|
95
|
+
this.directus = createDirectus<T>(this.baseURL)
|
|
71
96
|
.with(rest({ credentials: 'include' }))
|
|
72
97
|
.with(authentication('json', authenticationConfig));
|
|
98
|
+
}else {
|
|
99
|
+
this.directus = createDirectus<T>(this.baseURL)
|
|
100
|
+
.with(rest({ credentials: 'include' }))
|
|
101
|
+
.with(authentication('cookie', authenticationCookieConfig));
|
|
102
|
+
}
|
|
73
103
|
} catch (error) {
|
|
74
104
|
console.error(`Error initializing Directus:`, error);
|
|
75
105
|
throw error;
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
} from '@tanglemedia/svelte-starter-core';
|
|
11
11
|
|
|
12
12
|
class LoadDirectusApiProvider implements ApiAdapterProviderInterface {
|
|
13
|
-
constructor(private readonly configLoader: () => Promise<Config<{ api?: ApiConfigSchema }
|
|
13
|
+
constructor(private readonly configLoader: () => Promise<Config<{ api?: ApiConfigSchema }>>, private storageMode: 'json' | 'cookie' = 'json') {}
|
|
14
14
|
|
|
15
15
|
async loadAdapter(
|
|
16
16
|
key?: string | undefined
|
|
@@ -31,7 +31,7 @@ class LoadDirectusApiProvider implements ApiAdapterProviderInterface {
|
|
|
31
31
|
if (directusType === 'client') {
|
|
32
32
|
const protocol: string = config(`api.adapters.${apiAdapterKey}.protocol`) || '';
|
|
33
33
|
const host: string = config(`api.adapters.${apiAdapterKey}.host`) || '';
|
|
34
|
-
return new ApiClientDirectus(`${protocol}://${host}`.trim());
|
|
34
|
+
return new ApiClientDirectus(`${protocol}://${host}`.trim(), this.storageMode);
|
|
35
35
|
} else {
|
|
36
36
|
console.log('static');
|
|
37
37
|
const protocol: string = config(`api.adapters.${apiAdapterKey}.protocol`) || '';
|
|
@@ -43,7 +43,7 @@ class LoadDirectusApiProvider implements ApiAdapterProviderInterface {
|
|
|
43
43
|
console.log('client');
|
|
44
44
|
const protocol: string = config(`api.adapters.${apiAdapterKey}.protocol`) || '';
|
|
45
45
|
const host: string = config(`api.adapters.${apiAdapterKey}.host`) || '';
|
|
46
|
-
return new ApiClientDirectus(`${protocol}://${host}`.trim());
|
|
46
|
+
return new ApiClientDirectus(`${protocol}://${host}`.trim(), this.storageMode);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
console.log('This should be unreachable');
|