@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 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.
@@ -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,CAYrH;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,CAMxH;AAED,qEAAqE;AACrE,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxF;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,CAM7H"}
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.document;
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.document) === 1;
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. */
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
@@ -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,CAelI;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"}
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.document;
14
+ return response.data;
14
15
  }
15
16
  catch (error) {
16
17
  if (isJsonApiError(error) && error.status === 404) {
@@ -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,CAAC,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;YACrG,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;SAC3E,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,QAAqC,CAAC;IACxD,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"}
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.0",
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.0"
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.document as unknown as { current_user?: SessionLogin['user']; csrf_token?: string; logout_token?: string };
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.document) === 1;
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.document as unknown as TranslatedPath;
50
+ return response.data;
50
51
  }
51
52
  catch (error) {
52
53
  if (isJsonApiError(error) && error.status === 404) {