sap-wm-mcp 0.3.2 → 0.3.3

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.
Files changed (2) hide show
  1. package/lib/s4hClient.js +14 -7
  2. package/package.json +1 -1
package/lib/s4hClient.js CHANGED
@@ -43,13 +43,20 @@ async function refreshCsrf() {
43
43
  const token = res.headers.get('x-csrf-token');
44
44
  if (!token) throw new Error('CSRF token fetch failed — no token in response headers');
45
45
 
46
- const raw = res.headers.raw?.()['set-cookie'] ?? res.headers.get('set-cookie');
47
- const cookie = Array.isArray(raw)
48
- ? raw.map(c => c.split(';')[0]).join('; ')
49
- : (raw ?? '').split(',').map(c => c.trim().split(';')[0]).join('; ');
46
+ // node-fetch v3 removed headers.raw() — collect Set-Cookie values correctly.
47
+ // getSetCookie() is WHATWG spec (Node 18+); forEach is the node-fetch v3 fallback.
48
+ let cookieParts;
49
+ if (typeof res.headers.getSetCookie === 'function') {
50
+ cookieParts = res.headers.getSetCookie().map(c => c.split(';')[0].trim());
51
+ } else {
52
+ cookieParts = [];
53
+ res.headers.forEach((value, key) => {
54
+ if (key.toLowerCase() === 'set-cookie') cookieParts.push(value.split(';')[0].trim());
55
+ });
56
+ }
50
57
 
51
58
  _csrfToken = token;
52
- _cookieHeader = cookie;
59
+ _cookieHeader = cookieParts.join('; ');
53
60
  log('debug', 'csrf_refreshed');
54
61
  }
55
62
 
@@ -115,8 +122,8 @@ export async function s4hPost(path, body) {
115
122
  try {
116
123
  response = await doPost();
117
124
 
118
- // CSRF token expired — refresh once and retry
119
- if (response.status === 403) {
125
+ // CSRF token expired or session mismatch SAP returns 403 or 401 depending on ICM config
126
+ if (response.status === 403 || response.status === 401) {
120
127
  log('warn', 'csrf_expired_retry', { url });
121
128
  _csrfToken = null;
122
129
  _cookieHeader = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sap-wm-mcp",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "MCP server for SAP Classic Warehouse Management — connects AI agents to S/4HANA WM via a custom RAP OData V4 service. For systems where EWM is not active.",
5
5
  "type": "module",
6
6
  "main": "index.js",