@jacebenson/jsn 4.3.2 → 4.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.
- package/package.json +1 -1
- package/src/sdk.js +30 -16
package/package.json
CHANGED
package/src/sdk.js
CHANGED
|
@@ -6,6 +6,24 @@ import { getStringField } from './helpers.js';
|
|
|
6
6
|
|
|
7
7
|
const DEFAULT_TIMEOUT = 30000;
|
|
8
8
|
|
|
9
|
+
function collectSetCookies(cookieJar, response) {
|
|
10
|
+
const values = response.headers.getSetCookie?.() || [];
|
|
11
|
+
const raw = Array.isArray(values) && values.length
|
|
12
|
+
? values
|
|
13
|
+
: [response.headers.get('set-cookie')].filter(Boolean);
|
|
14
|
+
for (const value of raw) {
|
|
15
|
+
const pair = value.split(';', 1)[0].trim();
|
|
16
|
+
const separator = pair.indexOf('=');
|
|
17
|
+
if (separator > 0) {
|
|
18
|
+
cookieJar.set(pair.slice(0, separator), pair.slice(separator + 1));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function serializeCookies(cookieJar) {
|
|
24
|
+
return [...cookieJar].map(([name, value]) => `${name}=${value}`).join('; ');
|
|
25
|
+
}
|
|
26
|
+
|
|
9
27
|
// Build the sys.scripts.do POST body for background script execution.
|
|
10
28
|
// Extracted for testability (issue #177): maps script-mode options to the
|
|
11
29
|
// form fields on ServiceNow's Script Background form. Defaults preserve the
|
|
@@ -798,28 +816,24 @@ export class SDKClient {
|
|
|
798
816
|
try {
|
|
799
817
|
const creds = await this.authProvider.getCredentials();
|
|
800
818
|
if (creds.auth_method === 'oauth') {
|
|
801
|
-
|
|
802
|
-
const collectCookies = (resp) => {
|
|
803
|
-
const values = resp.headers.getSetCookie?.() || [];
|
|
804
|
-
const raw = Array.isArray(values) ? values : [resp.headers.get('set-cookie')].filter(Boolean);
|
|
805
|
-
const next = raw.map(value => value.split(';', 1)[0]).filter(Boolean);
|
|
806
|
-
if (next.length) cookies = [...new Set(`${cookies}; ${next.join('; ')}`.split(';').map(v => v.trim()).filter(Boolean))].join('; ');
|
|
807
|
-
};
|
|
819
|
+
const cookieJar = new Map();
|
|
808
820
|
const login = `${this.baseURL}/angular.do?sysparm_type=get_user`;
|
|
809
|
-
|
|
821
|
+
collectSetCookies(cookieJar, await fetch(new Request(login, { method: 'POST' })));
|
|
810
822
|
const scopeEndpoint = `${this.baseURL}/api/now/table/sys_scope?sysparm_fields=sys_id%2Csys_class_name&sysparm_limit=1`;
|
|
811
|
-
|
|
823
|
+
collectSetCookies(cookieJar, await this._fetchWithAuth(scopeEndpoint, {
|
|
812
824
|
method: 'GET',
|
|
813
|
-
headers:
|
|
825
|
+
headers: serializeCookies(cookieJar) ? { Cookie: serializeCookies(cookieJar) } : {},
|
|
814
826
|
}));
|
|
815
|
-
|
|
827
|
+
collectSetCookies(cookieJar, await this._fetchWithAuth(login, {
|
|
816
828
|
method: 'POST',
|
|
817
|
-
headers:
|
|
829
|
+
headers: serializeCookies(cookieJar) ? { Cookie: serializeCookies(cookieJar) } : {},
|
|
818
830
|
}));
|
|
831
|
+
const cookies = serializeCookies(cookieJar);
|
|
819
832
|
this.oauthCookies = cookies;
|
|
820
833
|
return cookies;
|
|
821
834
|
}
|
|
822
835
|
const endpoint = `${this.baseURL}/angular.do`;
|
|
836
|
+
const cookieJar = new Map();
|
|
823
837
|
const loginResp = await this._fetchWithAuth(`${endpoint}?sysparm_type=view_form.login`, {
|
|
824
838
|
method: 'POST',
|
|
825
839
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
@@ -830,14 +844,14 @@ export class SDKClient {
|
|
|
830
844
|
user_password: creds.password,
|
|
831
845
|
}).toString(),
|
|
832
846
|
});
|
|
833
|
-
|
|
834
|
-
const raw = Array.isArray(values) ? values : [loginResp.headers.get('set-cookie')].filter(Boolean);
|
|
835
|
-
const cookies = raw.map(value => value.split(';', 1)[0]).filter(Boolean).join('; ');
|
|
847
|
+
collectSetCookies(cookieJar, loginResp);
|
|
836
848
|
const refreshResp = await this._fetchWithAuth(`${endpoint}?sysparm_type=get_user`, {
|
|
837
849
|
method: 'POST',
|
|
838
|
-
headers:
|
|
850
|
+
headers: serializeCookies(cookieJar) ? { Cookie: serializeCookies(cookieJar) } : {},
|
|
839
851
|
});
|
|
852
|
+
collectSetCookies(cookieJar, refreshResp);
|
|
840
853
|
this.sessionUserToken = refreshResp.headers.get('x-usertoken-response') || '';
|
|
854
|
+
const cookies = serializeCookies(cookieJar);
|
|
841
855
|
this.oauthCookies = cookies;
|
|
842
856
|
return cookies;
|
|
843
857
|
} catch {
|