@jsondrop/drupal 0.1.0 → 0.1.1
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/account.d.ts +7 -0
- package/dist/account.d.ts.map +1 -1
- package/dist/account.js +20 -2
- package/dist/account.js.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +2 -1
- package/dist/router.js.map +1 -1
- package/package.json +2 -2
- package/src/account.ts +23 -4
- package/src/router.ts +3 -2
package/dist/account.d.ts
CHANGED
|
@@ -46,6 +46,13 @@ export declare function login(client: JsonApiClient, credentials: {
|
|
|
46
46
|
export declare function logout(client: JsonApiClient, session: Pick<SessionLogin, 'cookie' | 'logoutToken'>): Promise<void>;
|
|
47
47
|
/** Whether the session is still logged in (`/user/login_status`). */
|
|
48
48
|
export declare function isLoggedIn(client: JsonApiClient, cookie: string): Promise<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* A CSRF token (`/session/token`), for the `X-CSRF-Token` header that
|
|
51
|
+
* Drupal requires on writes to core REST resources (webform_rest, for
|
|
52
|
+
* one) when a session cookie authenticates them. Requests with a bearer
|
|
53
|
+
* token, or anonymous ones, do not need it.
|
|
54
|
+
*/
|
|
55
|
+
export declare function getCsrfToken(client: JsonApiClient, cookie?: string): Promise<string>;
|
|
49
56
|
/**
|
|
50
57
|
* Mails a password reset link (`/user/password`). Answers the same whether
|
|
51
58
|
* or not the account exists, so it does not reveal accounts.
|
package/dist/account.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAG7H;AAED,qEAAqE;AACrE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKhL;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,IAAI,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACxD,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAG7H;AAED,qEAAqE;AACrE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKhL;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,IAAI,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACxD,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAarH;AAED,0FAA0F;AAC1F,wBAAsB,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxH;AAED,qEAAqE;AACrE,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASxF;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO1F;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7H"}
|
package/dist/account.js
CHANGED
|
@@ -28,8 +28,9 @@ export async function login(client, credentials) {
|
|
|
28
28
|
auth: false,
|
|
29
29
|
query: { params: { _format: 'json' } },
|
|
30
30
|
headers: JSON_HEADERS,
|
|
31
|
+
parse: 'json',
|
|
31
32
|
});
|
|
32
|
-
const body = response.
|
|
33
|
+
const body = response.data ?? {};
|
|
33
34
|
const cookie = sessionCookieOf(response.headers);
|
|
34
35
|
if (!cookie) {
|
|
35
36
|
throw new Error('Drupal answered the login without a session cookie. Log in from the server, not the browser.');
|
|
@@ -42,6 +43,7 @@ export async function logout(client, session) {
|
|
|
42
43
|
auth: sessionCookie(session.cookie),
|
|
43
44
|
query: { params: { _format: 'json', token: session.logoutToken } },
|
|
44
45
|
headers: JSON_HEADERS,
|
|
46
|
+
parse: 'json',
|
|
45
47
|
});
|
|
46
48
|
}
|
|
47
49
|
/** Whether the session is still logged in (`/user/login_status`). */
|
|
@@ -50,9 +52,24 @@ export async function isLoggedIn(client, cookie) {
|
|
|
50
52
|
auth: sessionCookie(cookie),
|
|
51
53
|
query: { params: { _format: 'json' } },
|
|
52
54
|
headers: JSON_HEADERS,
|
|
55
|
+
parse: 'json',
|
|
53
56
|
});
|
|
54
57
|
// Drupal answers a bare `1` or `0`.
|
|
55
|
-
return Number(response.
|
|
58
|
+
return Number(response.data) === 1;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A CSRF token (`/session/token`), for the `X-CSRF-Token` header that
|
|
62
|
+
* Drupal requires on writes to core REST resources (webform_rest, for
|
|
63
|
+
* one) when a session cookie authenticates them. Requests with a bearer
|
|
64
|
+
* token, or anonymous ones, do not need it.
|
|
65
|
+
*/
|
|
66
|
+
export async function getCsrfToken(client, cookie) {
|
|
67
|
+
const response = await client.get(client.siteUrl('/session/token'), {
|
|
68
|
+
auth: cookie ? sessionCookie(cookie) : false,
|
|
69
|
+
headers: { Accept: 'text/plain' },
|
|
70
|
+
parse: 'text',
|
|
71
|
+
});
|
|
72
|
+
return response.data.trim();
|
|
56
73
|
}
|
|
57
74
|
/**
|
|
58
75
|
* Mails a password reset link (`/user/password`). Answers the same whether
|
|
@@ -63,6 +80,7 @@ export async function requestPasswordReset(client, account) {
|
|
|
63
80
|
auth: false,
|
|
64
81
|
query: { params: { _format: 'json' } },
|
|
65
82
|
headers: JSON_HEADERS,
|
|
83
|
+
parse: 'json',
|
|
66
84
|
});
|
|
67
85
|
}
|
|
68
86
|
/** Drupal's session cookie(s) from a response, as a `Cookie` header value. */
|
package/dist/account.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmD,MAAM,gBAAgB,CAAC;AAGhG;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAW,MAAqB,EAAE,UAAkC,EAAE;IACxG,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAe,CAAC,CAAC,CAAC,IAAI,CAAC;AACjF,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAqB,EAAE,UAAwF,EAAE;IACtJ,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1F,MAAM,EAAE,GAAI,QAAQ,CAAC,IAAI,CAAC,KAAyD,EAAE,EAAE,CAAC;IACxF,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;AAC9B,CAAC;AAsBD,MAAM,YAAY,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;AAExF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,MAAqB,EAAE,WAA2C;IAC5F,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEhH,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,wCAAwC;QACxC,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,cAAc,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;CACpB;AAED,KAAK,WAAW,GAAG,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAC,CAAC;AAE3G;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEhH,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,wCAAwC;QACxC,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,cAAc,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;CACpB;AAED,KAAK,WAAW,GAAG,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAC,CAAC;AAE3G;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAgBlI;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAUhK"}
|
package/dist/router.js
CHANGED
|
@@ -9,8 +9,9 @@ export async function translatePath(client, path, options = {}) {
|
|
|
9
9
|
...options,
|
|
10
10
|
query: { params: { path, _format: 'json' } },
|
|
11
11
|
headers: { Accept: 'application/json', ...headersObject(options.headers) },
|
|
12
|
+
parse: 'json',
|
|
12
13
|
});
|
|
13
|
-
return response.
|
|
14
|
+
return response.data;
|
|
14
15
|
}
|
|
15
16
|
catch (error) {
|
|
16
17
|
if (isJsonApiError(error) && error.status === 404) {
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAkE,MAAM,gBAAgB,CAAC;AAqChH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAqB,EAAE,IAAY,EAAE,UAAuB,EAAE;IAChG,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAkE,MAAM,gBAAgB,CAAC;AAqChH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAqB,EAAE,IAAY,EAAE,UAAuB,EAAE;IAChG,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;YACrH,GAAG,OAAO;YACV,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1E,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAe,MAAqB,EAAE,IAAY,EAAE,UAAkC,EAAE;IAC7H,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;QAC/B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACxE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,OAAgC;IACrD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsondrop/drupal",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Drupal core entity types and helpers (decoupled_router, menus, views, images) for @jsondrop/core.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"drupal",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"build": "tsc -p tsconfig.build.json"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@jsondrop/core": "^0.1.
|
|
47
|
+
"@jsondrop/core": "^0.1.1"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@jsondrop/core": "*"
|
package/src/account.ts
CHANGED
|
@@ -49,12 +49,13 @@ const JSON_HEADERS = { 'Content-Type': 'application/json', Accept: 'application/
|
|
|
49
49
|
* The error's `message` is Drupal's explanation.
|
|
50
50
|
*/
|
|
51
51
|
export async function login(client: JsonApiClient, credentials: { name: string; pass: string }): Promise<SessionLogin> {
|
|
52
|
-
const response = await client.post(client.siteUrl('/user/login'), credentials, {
|
|
52
|
+
const response = await client.post<{ current_user?: SessionLogin['user']; csrf_token?: string; logout_token?: string } | null>(client.siteUrl('/user/login'), credentials, {
|
|
53
53
|
auth: false,
|
|
54
54
|
query: { params: { _format: 'json' } },
|
|
55
55
|
headers: JSON_HEADERS,
|
|
56
|
+
parse: 'json',
|
|
56
57
|
});
|
|
57
|
-
const body = response.
|
|
58
|
+
const body = response.data ?? {};
|
|
58
59
|
const cookie = sessionCookieOf(response.headers);
|
|
59
60
|
if (!cookie) {
|
|
60
61
|
throw new Error('Drupal answered the login without a session cookie. Log in from the server, not the browser.');
|
|
@@ -68,18 +69,35 @@ export async function logout(client: JsonApiClient, session: Pick<SessionLogin,
|
|
|
68
69
|
auth: sessionCookie(session.cookie),
|
|
69
70
|
query: { params: { _format: 'json', token: session.logoutToken } },
|
|
70
71
|
headers: JSON_HEADERS,
|
|
72
|
+
parse: 'json',
|
|
71
73
|
});
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
/** Whether the session is still logged in (`/user/login_status`). */
|
|
75
77
|
export async function isLoggedIn(client: JsonApiClient, cookie: string): Promise<boolean> {
|
|
76
|
-
const response = await client.get(client.siteUrl('/user/login_status'), {
|
|
78
|
+
const response = await client.get<number | string | null>(client.siteUrl('/user/login_status'), {
|
|
77
79
|
auth: sessionCookie(cookie),
|
|
78
80
|
query: { params: { _format: 'json' } },
|
|
79
81
|
headers: JSON_HEADERS,
|
|
82
|
+
parse: 'json',
|
|
80
83
|
});
|
|
81
84
|
// Drupal answers a bare `1` or `0`.
|
|
82
|
-
return Number(response.
|
|
85
|
+
return Number(response.data) === 1;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* A CSRF token (`/session/token`), for the `X-CSRF-Token` header that
|
|
90
|
+
* Drupal requires on writes to core REST resources (webform_rest, for
|
|
91
|
+
* one) when a session cookie authenticates them. Requests with a bearer
|
|
92
|
+
* token, or anonymous ones, do not need it.
|
|
93
|
+
*/
|
|
94
|
+
export async function getCsrfToken(client: JsonApiClient, cookie?: string): Promise<string> {
|
|
95
|
+
const response = await client.get<string>(client.siteUrl('/session/token'), {
|
|
96
|
+
auth: cookie ? sessionCookie(cookie) : false,
|
|
97
|
+
headers: { Accept: 'text/plain' },
|
|
98
|
+
parse: 'text',
|
|
99
|
+
});
|
|
100
|
+
return response.data.trim();
|
|
83
101
|
}
|
|
84
102
|
|
|
85
103
|
/**
|
|
@@ -91,6 +109,7 @@ export async function requestPasswordReset(client: JsonApiClient, account: { nam
|
|
|
91
109
|
auth: false,
|
|
92
110
|
query: { params: { _format: 'json' } },
|
|
93
111
|
headers: JSON_HEADERS,
|
|
112
|
+
parse: 'json',
|
|
94
113
|
});
|
|
95
114
|
}
|
|
96
115
|
|
package/src/router.ts
CHANGED
|
@@ -41,12 +41,13 @@ type PathOptions = Pick<ResourceRequestOptions, 'locale' | 'auth' | 'headers' |
|
|
|
41
41
|
*/
|
|
42
42
|
export async function translatePath(client: JsonApiClient, path: string, options: PathOptions = {}): Promise<TranslatedPath | null> {
|
|
43
43
|
try {
|
|
44
|
-
const response = await client.get(client.siteUrl('/router/translate-path', undefined, options.locale), {
|
|
44
|
+
const response = await client.get<TranslatedPath>(client.siteUrl('/router/translate-path', undefined, options.locale), {
|
|
45
45
|
...options,
|
|
46
46
|
query: { params: { path, _format: 'json' } },
|
|
47
47
|
headers: { Accept: 'application/json', ...headersObject(options.headers) },
|
|
48
|
+
parse: 'json',
|
|
48
49
|
});
|
|
49
|
-
return response.
|
|
50
|
+
return response.data;
|
|
50
51
|
}
|
|
51
52
|
catch (error) {
|
|
52
53
|
if (isJsonApiError(error) && error.status === 404) {
|