latchkey 3.2.1 → 3.3.0
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/README.md +2 -1
- package/dist/src/cliCommands.d.ts.map +1 -1
- package/dist/src/cliCommands.js +91 -7
- package/dist/src/cliCommands.js.map +1 -1
- package/dist/src/configDataStore.d.ts +18 -0
- package/dist/src/configDataStore.d.ts.map +1 -1
- package/dist/src/configDataStore.js +10 -0
- package/dist/src/configDataStore.js.map +1 -1
- package/dist/src/serviceRegistry.d.ts.map +1 -1
- package/dist/src/serviceRegistry.js +25 -2
- package/dist/src/serviceRegistry.js.map +1 -1
- package/dist/src/services/core/base.d.ts +25 -3
- package/dist/src/services/core/base.d.ts.map +1 -1
- package/dist/src/services/core/base.js +32 -10
- package/dist/src/services/core/base.js.map +1 -1
- package/dist/src/services/core/loginFlows/base.d.ts +75 -0
- package/dist/src/services/core/loginFlows/base.d.ts.map +1 -0
- package/dist/src/services/core/loginFlows/base.js +47 -0
- package/dist/src/services/core/loginFlows/base.js.map +1 -0
- package/dist/src/services/core/loginFlows/cookieCapture.d.ts +55 -0
- package/dist/src/services/core/loginFlows/cookieCapture.d.ts.map +1 -0
- package/dist/src/services/core/loginFlows/cookieCapture.js +244 -0
- package/dist/src/services/core/loginFlows/cookieCapture.js.map +1 -0
- package/dist/src/services/core/loginFlows/registry.d.ts +30 -0
- package/dist/src/services/core/loginFlows/registry.d.ts.map +1 -0
- package/dist/src/services/core/loginFlows/registry.js +56 -0
- package/dist/src/services/core/loginFlows/registry.js.map +1 -0
- package/dist/src/services/core/registered.d.ts +38 -2
- package/dist/src/services/core/registered.d.ts.map +1 -1
- package/dist/src/services/core/registered.js +37 -2
- package/dist/src/services/core/registered.js.map +1 -1
- package/dist/src/services/google/gmail.d.ts.map +1 -1
- package/dist/src/services/google/gmail.js +1 -6
- package/dist/src/services/google/gmail.js.map +1 -1
- package/dist/src/services/google/people.d.ts.map +1 -1
- package/dist/src/services/google/people.js +1 -4
- package/dist/src/services/google/people.js.map +1 -1
- package/dist/src/services/index.d.ts +3 -0
- package/dist/src/services/index.d.ts.map +1 -1
- package/dist/src/services/index.js +3 -0
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/tests/cli.test.js +178 -2
- package/dist/tests/cli.test.js.map +1 -1
- package/dist/tests/cookieCapture.test.d.ts +10 -0
- package/dist/tests/cookieCapture.test.d.ts.map +1 -0
- package/dist/tests/cookieCapture.test.js +221 -0
- package/dist/tests/cookieCapture.test.js.map +1 -0
- package/dist/tests/serviceRegistry.test.js +29 -8
- package/dist/tests/serviceRegistry.test.js.map +1 -1
- package/dist/tests/servicesAgainstRecordings.test.js +5 -9
- package/dist/tests/servicesAgainstRecordings.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the generic cookie-capturing browser login used by registered
|
|
3
|
+
* services.
|
|
4
|
+
*
|
|
5
|
+
* Everything goes through the public path a real login takes — a flow, the
|
|
6
|
+
* service it is registered on, and the session that service hands out — with
|
|
7
|
+
* responses fed in by hand instead of by a browser.
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it, expect } from 'vitest';
|
|
10
|
+
import { CookieCaptureLoginFlow } from '../src/services/core/loginFlows/cookieCapture.js';
|
|
11
|
+
import { formatLoginFlowsHelp, LOGIN_FLOWS, resolveLoginFlow, UnknownLoginFlowError, } from '../src/services/core/loginFlows/registry.js';
|
|
12
|
+
import { LoginFlowParamsInvalidError } from '../src/services/core/loginFlows/base.js';
|
|
13
|
+
import { buildRegisteredServiceOptions, RegisteredService, } from '../src/services/core/registered.js';
|
|
14
|
+
import { ServiceSession, SimpleServiceSession, TELEGRAM } from '../src/services/index.js';
|
|
15
|
+
const LOGIN_URL = 'https://example.com/login';
|
|
16
|
+
/** A response carrying nothing but the `Set-Cookie` headers under test. */
|
|
17
|
+
function responseWith(setCookieHeaders, url) {
|
|
18
|
+
return {
|
|
19
|
+
url: () => url,
|
|
20
|
+
headersArray: () => Promise.resolve([
|
|
21
|
+
{ name: 'Content-Type', value: 'text/html' },
|
|
22
|
+
...setCookieHeaders.map((value) => ({ name: 'set-cookie', value })),
|
|
23
|
+
]),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async function headerFrom(credentials) {
|
|
27
|
+
if (credentials === null) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const curlArguments = await credentials.injectIntoCurlCall([]);
|
|
31
|
+
return curlArguments[1] ?? null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A login in progress for a service registered with these parameters: responses
|
|
35
|
+
* go in, and out comes the `Cookie` header stored so far, or null.
|
|
36
|
+
*/
|
|
37
|
+
function startLogin(cookieKeys, cookieUrl) {
|
|
38
|
+
const service = new RegisteredService('my-service', 'https://example.com/api/', {
|
|
39
|
+
loginUrl: LOGIN_URL,
|
|
40
|
+
loginFlow: new CookieCaptureLoginFlow({ cookieKeys: [...cookieKeys], cookieUrl }),
|
|
41
|
+
});
|
|
42
|
+
const session = service.getSession('latchkey');
|
|
43
|
+
if (!(session instanceof SimpleServiceSession)) {
|
|
44
|
+
throw new TypeError('the cookie-capture flow should hand out a SimpleServiceSession');
|
|
45
|
+
}
|
|
46
|
+
return async (setCookieHeaders, responseUrl = LOGIN_URL) => {
|
|
47
|
+
await session.onResponse(responseWith(setCookieHeaders, responseUrl));
|
|
48
|
+
return headerFrom(session.capturedCredentials);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
describe('cookie capture', () => {
|
|
52
|
+
it('is not complete before the cookie is set', async () => {
|
|
53
|
+
const respond = startLogin(['sessionid']);
|
|
54
|
+
expect(await respond([])).toBeNull();
|
|
55
|
+
});
|
|
56
|
+
it('captures a cookie from a Set-Cookie header', async () => {
|
|
57
|
+
const respond = startLogin(['sessionid']);
|
|
58
|
+
expect(await respond(['sessionid=abc123; Path=/; HttpOnly'])).toBe('Cookie: sessionid=abc123');
|
|
59
|
+
});
|
|
60
|
+
it('ignores unrelated names, empty values and other domains', async () => {
|
|
61
|
+
const respond = startLogin(['sessionid']);
|
|
62
|
+
expect(await respond(['sessionid=wrong-domain; Path=/'], 'https://identity-provider.example.net/sso')).toBeNull();
|
|
63
|
+
expect(await respond(['other=irrelevant; Path=/', 'sessionid=; Path=/'])).toBeNull();
|
|
64
|
+
});
|
|
65
|
+
it('waits for every requested cookie, across responses', async () => {
|
|
66
|
+
const respond = startLogin(['sessionid', 'csrftoken']);
|
|
67
|
+
expect(await respond(['sessionid=abc; Path=/'])).toBeNull();
|
|
68
|
+
expect(await respond(['csrftoken=xyz; Path=/'])).toBe('Cookie: sessionid=abc; csrftoken=xyz');
|
|
69
|
+
});
|
|
70
|
+
it('keeps every scope when one name is set for several domains', async () => {
|
|
71
|
+
const respond = startLogin(['sessionid'], 'https://app.example.com/');
|
|
72
|
+
// A browser would send both, so both are kept rather than one being guessed.
|
|
73
|
+
expect(await respond(['sessionid=host-only; Path=/', 'sessionid=domain-wide; Domain=example.com; Path=/'], 'https://app.example.com/login')).toBe('Cookie: sessionid=host-only; sessionid=domain-wide');
|
|
74
|
+
});
|
|
75
|
+
it('looks for the cookies at the login URL when the parameters name no other', async () => {
|
|
76
|
+
const respond = startLogin(['sessionid']);
|
|
77
|
+
expect(await respond(['sessionid=abc; Path=/'])).toBe('Cookie: sessionid=abc');
|
|
78
|
+
});
|
|
79
|
+
it('matches against an explicit cookie URL when given', async () => {
|
|
80
|
+
const respond = startLogin(['sessionid'], 'https://api.example.com/');
|
|
81
|
+
// Set on the SSO host: applies to the API host only via the Domain attribute.
|
|
82
|
+
expect(await respond(['sessionid=sso-only; Path=/'], 'https://sso.example.com/login')).toBeNull();
|
|
83
|
+
expect(await respond(['sessionid=shared; Domain=example.com; Path=/'], 'https://sso.example.com/login')).toBe('Cookie: sessionid=shared');
|
|
84
|
+
});
|
|
85
|
+
it('defaults a cookie without Path to the directory that set it', async () => {
|
|
86
|
+
const setAtLoginPage = ['sessionid=abc'];
|
|
87
|
+
// The login page is /login, so a cookie without Path applies to / only
|
|
88
|
+
// because that is its directory; one set deeper does not reach the root.
|
|
89
|
+
expect(await startLogin(['sessionid'])(setAtLoginPage)).toBe('Cookie: sessionid=abc');
|
|
90
|
+
expect(await startLogin(['sessionid'])(setAtLoginPage, 'https://example.com/account/settings')).toBeNull();
|
|
91
|
+
});
|
|
92
|
+
it('applies a Domain cookie to subdomains, with or without the leading dot', async () => {
|
|
93
|
+
for (const domainAttribute of ['Domain=example.com', 'Domain=.example.com']) {
|
|
94
|
+
const respond = startLogin(['sessionid'], 'https://api.example.com/');
|
|
95
|
+
expect(await respond([`sessionid=abc; ${domainAttribute}; Path=/`], 'https://sso.example.com/in')).toBe('Cookie: sessionid=abc');
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
it('ignores header values that are not a cookie assignment', async () => {
|
|
99
|
+
const respond = startLogin(['sessionid']);
|
|
100
|
+
expect(await respond(['not-a-cookie', '=orphan-value'])).toBeNull();
|
|
101
|
+
});
|
|
102
|
+
it('replaces a cookie set again before the login finishes', async () => {
|
|
103
|
+
const respond = startLogin(['sessionid', 'csrftoken']);
|
|
104
|
+
expect(await respond(['sessionid=first; Path=/'])).toBeNull();
|
|
105
|
+
expect(await respond(['sessionid=second; Path=/'])).toBeNull();
|
|
106
|
+
expect(await respond(['csrftoken=xyz; Path=/'])).toBe('Cookie: sessionid=second; csrftoken=xyz');
|
|
107
|
+
});
|
|
108
|
+
it('drops a cookie that is cleared again', async () => {
|
|
109
|
+
for (const clearingHeader of [
|
|
110
|
+
'sessionid=; Path=/',
|
|
111
|
+
'sessionid=abc; Max-Age=0; Path=/',
|
|
112
|
+
'sessionid=abc; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Path=/',
|
|
113
|
+
]) {
|
|
114
|
+
const respond = startLogin(['sessionid', 'csrftoken']);
|
|
115
|
+
await respond(['sessionid=abc; Path=/']);
|
|
116
|
+
await respond([clearingHeader]);
|
|
117
|
+
expect(await respond(['csrftoken=xyz; Path=/'])).toBeNull();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
it('keeps a cookie whose expiry is still in the future', async () => {
|
|
121
|
+
const expires = new Date(Date.now() + 60_000).toUTCString();
|
|
122
|
+
const respond = startLogin(['sessionid']);
|
|
123
|
+
expect(await respond([`sessionid=abc; Expires=${expires}; Path=/`])).toBe('Cookie: sessionid=abc');
|
|
124
|
+
});
|
|
125
|
+
it('stops capturing once the login is complete', async () => {
|
|
126
|
+
const respond = startLogin(['sessionid']);
|
|
127
|
+
expect(await respond(['sessionid=first; Path=/'])).toBe('Cookie: sessionid=first');
|
|
128
|
+
// The session is done; a later response cannot change what was captured.
|
|
129
|
+
expect(await respond(['sessionid=second; Path=/'])).toBe('Cookie: sessionid=first');
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe('the login flow registry', () => {
|
|
133
|
+
it('builds the register help text from the registered flows', () => {
|
|
134
|
+
const help = formatLoginFlowsHelp();
|
|
135
|
+
// Generated, not hand-written: a flow added later documents itself.
|
|
136
|
+
for (const flow of LOGIN_FLOWS) {
|
|
137
|
+
expect(help).toContain(flow.flowName);
|
|
138
|
+
expect(help).toContain(flow.summary);
|
|
139
|
+
for (const detailLine of flow.details.split('\n').filter((line) => line !== '')) {
|
|
140
|
+
expect(help).toContain(detailLine);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
expect(help).toContain('--login-flow-params');
|
|
144
|
+
});
|
|
145
|
+
it('rejects an unknown flow', () => {
|
|
146
|
+
expect(() => resolveLoginFlow('nonexistent', {})).toThrow(UnknownLoginFlowError);
|
|
147
|
+
});
|
|
148
|
+
it('rejects parameters that do not match the flow schema', () => {
|
|
149
|
+
const invalidParameterSets = [
|
|
150
|
+
{},
|
|
151
|
+
{ cookieKeys: [] },
|
|
152
|
+
{ cookieKeys: 'sessionid' },
|
|
153
|
+
{ cookieKeys: ['sessionid'], cookieUrl: 'example.com' },
|
|
154
|
+
{ cookieKeys: ['sessionid'], typo: true },
|
|
155
|
+
];
|
|
156
|
+
for (const params of invalidParameterSets) {
|
|
157
|
+
expect(() => resolveLoginFlow('cookie-capture', params)).toThrow(LoginFlowParamsInvalidError);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
it('accepts valid cookie-capture parameters', () => {
|
|
161
|
+
const flow = resolveLoginFlow('cookie-capture', {
|
|
162
|
+
cookieKeys: ['sessionid'],
|
|
163
|
+
cookieUrl: 'https://api.example.com/',
|
|
164
|
+
});
|
|
165
|
+
expect(flow.describe(LOGIN_URL)).toContain(LOGIN_URL);
|
|
166
|
+
expect(flow.describe(LOGIN_URL)).toContain('sessionid');
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
describe('RegisteredService with a login flow', () => {
|
|
170
|
+
const cookieFlow = () => resolveLoginFlow('cookie-capture', { cookieKeys: ['sessionid'] });
|
|
171
|
+
it('exposes the flow as its browser login', () => {
|
|
172
|
+
const service = new RegisteredService('my-service', 'https://example.com/api/', {
|
|
173
|
+
loginUrl: LOGIN_URL,
|
|
174
|
+
loginFlow: cookieFlow(),
|
|
175
|
+
});
|
|
176
|
+
expect(service.getSession).toBeDefined(); // eslint-disable-line @typescript-eslint/unbound-method
|
|
177
|
+
expect(service.getSession('latchkey')).toBeInstanceOf(ServiceSession);
|
|
178
|
+
expect(service.info).toContain(LOGIN_URL);
|
|
179
|
+
expect(service.info).toContain('sessionid');
|
|
180
|
+
});
|
|
181
|
+
// The two combinations that used to be checked at runtime — a flow without a
|
|
182
|
+
// page to open, and a flow alongside a family service — are now rejected by
|
|
183
|
+
// the options type. These assertions fail the build if that stops being true,
|
|
184
|
+
// since an unused @ts-expect-error is itself an error.
|
|
185
|
+
it('rejects a login flow without a login URL at compile time', () => {
|
|
186
|
+
// @ts-expect-error -- a login flow requires a loginUrl to start from
|
|
187
|
+
const service = new RegisteredService('my-service', 'https://example.com/api/', {
|
|
188
|
+
loginFlow: cookieFlow(),
|
|
189
|
+
});
|
|
190
|
+
expect(service.getSession).toBeUndefined(); // eslint-disable-line @typescript-eslint/unbound-method
|
|
191
|
+
});
|
|
192
|
+
it('rejects a login flow combined with a family service at compile time', () => {
|
|
193
|
+
const service = new RegisteredService('my-service', 'https://example.com/api/', {
|
|
194
|
+
familyService: TELEGRAM,
|
|
195
|
+
loginUrl: LOGIN_URL,
|
|
196
|
+
// @ts-expect-error -- a family service brings its own login
|
|
197
|
+
loginFlow: cookieFlow(),
|
|
198
|
+
});
|
|
199
|
+
expect(service.getSession).toBeUndefined(); // eslint-disable-line @typescript-eslint/unbound-method
|
|
200
|
+
});
|
|
201
|
+
it('rejects a bare service in place of the options at compile time', () => {
|
|
202
|
+
// @ts-expect-error -- Service overlaps structurally, but is not options
|
|
203
|
+
const service = new RegisteredService('my-service', 'https://example.com/api/', TELEGRAM);
|
|
204
|
+
expect(service.getSession).toBeUndefined(); // eslint-disable-line @typescript-eslint/unbound-method
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
describe('buildRegisteredServiceOptions', () => {
|
|
208
|
+
const cookieFlow = () => resolveLoginFlow('cookie-capture', { cookieKeys: ['sessionid'] });
|
|
209
|
+
it('prefers the family service when both are somehow present', () => {
|
|
210
|
+
const options = buildRegisteredServiceOptions(TELEGRAM, LOGIN_URL, cookieFlow());
|
|
211
|
+
expect(options?.familyService).toBe(TELEGRAM);
|
|
212
|
+
expect(options?.loginFlow).toBeUndefined();
|
|
213
|
+
});
|
|
214
|
+
it('drops a login flow that has no login URL', () => {
|
|
215
|
+
expect(buildRegisteredServiceOptions(undefined, undefined, cookieFlow())).toBeUndefined();
|
|
216
|
+
});
|
|
217
|
+
it('returns no options when there is no login at all', () => {
|
|
218
|
+
expect(buildRegisteredServiceOptions(undefined, undefined, undefined)).toBeUndefined();
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
//# sourceMappingURL=cookieCapture.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookieCapture.test.js","sourceRoot":"","sources":["../../tests/cookieCapture.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -123,22 +123,30 @@ describe('ServiceRegistry', () => {
|
|
|
123
123
|
describe('addService', () => {
|
|
124
124
|
it('should add a service to the registry', () => {
|
|
125
125
|
const registry = new ServiceRegistry([SLACK]);
|
|
126
|
-
const registered = new RegisteredService('my-gitlab', 'https://gitlab.mycompany.com/api/',
|
|
126
|
+
const registered = new RegisteredService('my-gitlab', 'https://gitlab.mycompany.com/api/', {
|
|
127
|
+
familyService: GITLAB,
|
|
128
|
+
});
|
|
127
129
|
registry.addService(registered);
|
|
128
130
|
expect(registry.getByName('my-gitlab')).toBe(registered);
|
|
129
131
|
expect(primaryServiceForUrl(registry, 'https://gitlab.mycompany.com/api/v4/user')).toBe(registered);
|
|
130
132
|
});
|
|
131
133
|
it('should throw DuplicateServiceNameError for existing built-in name', () => {
|
|
132
134
|
const registry = new ServiceRegistry([SLACK]);
|
|
133
|
-
const duplicate = new RegisteredService('slack', 'https://slack.mycompany.com/api/',
|
|
135
|
+
const duplicate = new RegisteredService('slack', 'https://slack.mycompany.com/api/', {
|
|
136
|
+
familyService: SLACK,
|
|
137
|
+
});
|
|
134
138
|
expect(() => {
|
|
135
139
|
registry.addService(duplicate);
|
|
136
140
|
}).toThrow(DuplicateServiceNameError);
|
|
137
141
|
});
|
|
138
142
|
it('should throw DuplicateServiceNameError for existing registered name', () => {
|
|
139
143
|
const registry = new ServiceRegistry([GITLAB]);
|
|
140
|
-
const first = new RegisteredService('my-gitlab', 'https://gitlab.mycompany.com/api/',
|
|
141
|
-
|
|
144
|
+
const first = new RegisteredService('my-gitlab', 'https://gitlab.mycompany.com/api/', {
|
|
145
|
+
familyService: GITLAB,
|
|
146
|
+
});
|
|
147
|
+
const second = new RegisteredService('my-gitlab', 'https://gitlab.other.com/api/', {
|
|
148
|
+
familyService: GITLAB,
|
|
149
|
+
});
|
|
142
150
|
registry.addService(first);
|
|
143
151
|
expect(() => {
|
|
144
152
|
registry.addService(second);
|
|
@@ -191,12 +199,17 @@ describe('ServiceRegistry', () => {
|
|
|
191
199
|
});
|
|
192
200
|
describe('RegisteredService', () => {
|
|
193
201
|
it('should not expose getSession when no loginUrl is provided', () => {
|
|
194
|
-
const registered = new RegisteredService('my-gitlab', 'https://gitlab.mycompany.com/api/',
|
|
202
|
+
const registered = new RegisteredService('my-gitlab', 'https://gitlab.mycompany.com/api/', {
|
|
203
|
+
familyService: GITLAB,
|
|
204
|
+
});
|
|
195
205
|
expect(registered.getSession).toBeUndefined(); // eslint-disable-line @typescript-eslint/unbound-method
|
|
196
206
|
expect(registered.loginUrl).toBe('');
|
|
197
207
|
});
|
|
198
208
|
it('should expose getSession when loginUrl is provided and family supports it', () => {
|
|
199
|
-
const registered = new RegisteredService('my-slack', 'https://slack.mycompany.com/api/',
|
|
209
|
+
const registered = new RegisteredService('my-slack', 'https://slack.mycompany.com/api/', {
|
|
210
|
+
familyService: SLACK,
|
|
211
|
+
loginUrl: 'https://slack.mycompany.com/signin',
|
|
212
|
+
});
|
|
200
213
|
expect(registered.getSession).toBeDefined(); // eslint-disable-line @typescript-eslint/unbound-method
|
|
201
214
|
expect(registered.loginUrl).toBe('https://slack.mycompany.com/signin');
|
|
202
215
|
});
|
|
@@ -208,12 +221,20 @@ describe('ServiceRegistry', () => {
|
|
|
208
221
|
expect(registered.setCredentialsExample('my-api')).toContain('latchkey auth set my-api');
|
|
209
222
|
});
|
|
210
223
|
it('should not expose getSession when loginUrl is provided but no family', () => {
|
|
211
|
-
|
|
224
|
+
// A login URL on its own is not a login: the options type requires it to
|
|
225
|
+
// come with either a family service or a login flow.
|
|
226
|
+
// @ts-expect-error -- loginUrl alone is not a valid option
|
|
227
|
+
const registered = new RegisteredService('my-api', 'https://api.example.com/', {
|
|
228
|
+
loginUrl: 'https://api.example.com/login',
|
|
229
|
+
});
|
|
212
230
|
expect(registered.getSession).toBeUndefined(); // eslint-disable-line @typescript-eslint/unbound-method
|
|
213
231
|
});
|
|
214
232
|
it('should not expose getSession when loginUrl is provided but family lacks it', () => {
|
|
215
233
|
// TELEGRAM has no getSession
|
|
216
|
-
const registered = new RegisteredService('my-telegram', 'https://telegram.mycompany.com/bot',
|
|
234
|
+
const registered = new RegisteredService('my-telegram', 'https://telegram.mycompany.com/bot', {
|
|
235
|
+
familyService: TELEGRAM,
|
|
236
|
+
loginUrl: 'https://telegram.mycompany.com/login',
|
|
237
|
+
});
|
|
217
238
|
expect(registered.getSession).toBeUndefined(); // eslint-disable-line @typescript-eslint/unbound-method
|
|
218
239
|
});
|
|
219
240
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceRegistry.test.js","sourceRoot":"","sources":["../../tests/serviceRegistry.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"serviceRegistry.test.js","sourceRoot":"","sources":["../../tests/serviceRegistry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,OAAO,EACP,MAAM,EACN,MAAM,EACN,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,SAAS,EACT,MAAM,EACN,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,OAAO,GACR,MAAM,0BAA0B,CAAC;AAGlC;;;GAGG;AACH,SAAS,oBAAoB,CAAC,QAAyB,EAAE,GAAW;IAClE,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,MAAM,aAAa,GAAG;YACpB,CAAC,OAAO,EAAE,KAAK,CAAC;YAChB,CAAC,SAAS,EAAE,OAAO,CAAC;YACpB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAClB,CAAC,SAAS,EAAE,OAAO,CAAC;YACpB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAClB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAClB,CAAC,cAAc,EAAE,YAAY,CAAC;YAC9B,CAAC,iBAAiB,EAAE,eAAe,CAAC;YACpC,CAAC,cAAc,EAAE,YAAY,CAAC;YAC9B,CAAC,eAAe,EAAE,aAAa,CAAC;YAChC,CAAC,aAAa,EAAE,WAAW,CAAC;YAC5B,CAAC,eAAe,EAAE,aAAa,CAAC;YAChC,CAAC,eAAe,EAAE,aAAa,CAAC;YAChC,CAAC,WAAW,EAAE,SAAS,CAAC;YACxB,CAAC,KAAK,EAAE,GAAG,CAAC;YACZ,CAAC,UAAU,EAAE,QAAQ,CAAC;YACtB,CAAC,MAAM,EAAE,IAAI,CAAC;YACd,CAAC,SAAS,EAAE,OAAO,CAAC;SACZ,CAAC;QAEX,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,aAAa,EAAE,CAAC;YAC5C,EAAE,CAAC,eAAe,IAAI,UAAU,EAAE,GAAG,EAAE;gBACrC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,MAAM,WAAW,GAAG;YAClB,CAAC,iCAAiC,EAAE,KAAK,CAAC;YAC1C,CAAC,sCAAsC,EAAE,OAAO,CAAC;YACjD,CAAC,6BAA6B,EAAE,MAAM,CAAC;YACvC,CAAC,wDAAwD,EAAE,OAAO,CAAC;YACnE,CAAC,gCAAgC,EAAE,MAAM,CAAC;YAC1C,CAAC,wDAAwD,EAAE,YAAY,CAAC;YACxE,CAAC,0DAA0D,EAAE,eAAe,CAAC;YAC7E,CAAC,2CAA2C,EAAE,YAAY,CAAC;YAC3D,CAAC,+CAA+C,EAAE,aAAa,CAAC;YAChE,CAAC,8CAA8C,EAAE,WAAW,CAAC;YAC7D,CAAC,oDAAoD,EAAE,aAAa,CAAC;YACrE,CAAC,4CAA4C,EAAE,aAAa,CAAC;YAC7D,CAAC,oCAAoC,EAAE,MAAM,CAAC;YAC9C,CAAC,oCAAoC,EAAE,SAAS,CAAC;YACjD,CAAC,yCAAyC,EAAE,SAAS,CAAC;YACtD,CAAC,qDAAqD,EAAE,GAAG,CAAC;YAC5D,CAAC,8CAA8C,EAAE,GAAG,CAAC;YACrD,CAAC,gDAAgD,EAAE,IAAI,CAAC;YACxD,CAAC,yCAAyC,EAAE,OAAO,CAAC;SAC5C,CAAC;QAEX,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE,CAAC;YACzC,EAAE,CAAC,eAAe,OAAO,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,GAAG,EAAE;gBACnD,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,CACJ,oBAAoB,CAClB,gBAAgB,EAChB,qEAAqE,CACtE,CACF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACf,MAAM,CACJ,oBAAoB,CAAC,gBAAgB,EAAE,+CAA+C,CAAC,CACxF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,+BAA+B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3F,MAAM,CACJ,oBAAoB,CAAC,gBAAgB,EAAE,oCAAoC,CAAC,CAC7E,CAAC,QAAQ,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,UAAU,GAAG,gBAAgB,CAAC,kBAAkB,CACpD,sDAAsD,CACvD,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC5C,yEAAyE;YACzE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,UAAU,GAAG,gBAAgB,CAAC,kBAAkB,CACpD,uDAAuD,CACxD,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,cAAc,GAAG,IAAI,eAAe,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,WAAW,EAAE,mCAAmC,EAAE;gBACzF,aAAa,EAAE,MAAM;aACtB,CAAC,CAAC;YACH,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAEhC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC,CAAC,IAAI,CACrF,UAAU,CACX,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC3E,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,kCAAkC,EAAE;gBACnF,aAAa,EAAE,KAAK;aACrB,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,EAAE;gBACV,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC7E,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,WAAW,EAAE,mCAAmC,EAAE;gBACpF,aAAa,EAAE,MAAM;aACtB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,WAAW,EAAE,+BAA+B,EAAE;gBACjF,aAAa,EAAE,MAAM;aACtB,CAAC,CAAC;YAEH,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,EAAE;gBACV,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,WAAW,EAAE,mCAAmC,EAAE;gBACzF,aAAa,EAAE,MAAM;aACtB,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,wDAAwD;YACvG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;YACnF,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,UAAU,EAAE,kCAAkC,EAAE;gBACvF,aAAa,EAAE,KAAK;gBACpB,QAAQ,EAAE,oCAAoC;aAC/C,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,wDAAwD;YACrG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;YAC/E,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,wDAAwD;YACvG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YACrD,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,yEAAyE;YACzE,qDAAqD;YACrD,2DAA2D;YAC3D,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B,EAAE;gBAC7E,QAAQ,EAAE,+BAA+B;aAC1C,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,wDAAwD;QACzG,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;YACpF,6BAA6B;YAC7B,MAAM,UAAU,GAAG,IAAI,iBAAiB,CACtC,aAAa,EACb,oCAAoC,EACpC;gBACE,aAAa,EAAE,QAAQ;gBACvB,QAAQ,EAAE,sCAAsC;aACjD,CACF,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,wDAAwD;QACzG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YACtD,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,wBAAwB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YACtD,wBAAwB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,wBAAwB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -98,16 +98,12 @@ async function testServiceWithRecording(service, recordingDirectory) {
|
|
|
98
98
|
for (const entry of recordingEntries) {
|
|
99
99
|
const mockRequest = createMockRequest(entry.request);
|
|
100
100
|
const mockResponse = createMockResponse(entry.response, mockRequest);
|
|
101
|
-
// Call onResponse which internally calls getApiCredentialsFromResponse
|
|
102
|
-
session
|
|
103
|
-
//
|
|
104
|
-
await
|
|
101
|
+
// Call onResponse which internally calls getApiCredentialsFromResponse.
|
|
102
|
+
// Awaiting it means no sleeping: the session is done with this entry before
|
|
103
|
+
// the next one goes in.
|
|
104
|
+
await session.onResponse(mockResponse);
|
|
105
105
|
}
|
|
106
|
-
|
|
107
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
108
|
-
// Access the apiCredentials via the session (it's protected but accessible for testing)
|
|
109
|
-
const apiCredentials = session
|
|
110
|
-
.apiCredentials;
|
|
106
|
+
const apiCredentials = session.capturedCredentials;
|
|
111
107
|
if (apiCredentials !== null) {
|
|
112
108
|
return apiCredentials;
|
|
113
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servicesAgainstRecordings.test.js","sourceRoot":"","sources":["../../tests/servicesAgainstRecordings.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"servicesAgainstRecordings.test.js","sourceRoot":"","sources":["../../tests/servicesAgainstRecordings.test.ts"],"names":[],"mappings":"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"}
|