latchkey 3.10.1 → 3.11.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.
@@ -6,7 +6,7 @@
6
6
  * service it is registered on, and the session that service hands out — with
7
7
  * responses fed in by hand instead of by a browser.
8
8
  */
9
- import { describe, it, expect } from 'vitest';
9
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
10
10
  import { TokenCaptureLoginFlow } from '../src/services/core/loginFlows/tokenCapture.js';
11
11
  import { LOGIN_FLOWS, resolveLoginFlow } from '../src/services/core/loginFlows/registry.js';
12
12
  import { LoginFlowParamsInvalidError } from '../src/services/core/loginFlows/base.js';
@@ -33,7 +33,7 @@ async function headerFrom(credentials) {
33
33
  * A login in progress for a service registered with these parameters: responses
34
34
  * go in, and out comes the header stored so far, or null.
35
35
  */
36
- function startLogin(params) {
36
+ function registerSession(params) {
37
37
  const service = new RegisteredService('my-service', 'https://app.example.com/backend-api/', {
38
38
  loginUrl: LOGIN_URL,
39
39
  loginFlow: new TokenCaptureLoginFlow({
@@ -46,6 +46,10 @@ function startLogin(params) {
46
46
  if (!(session instanceof SimpleServiceSession)) {
47
47
  throw new TypeError('the token-capture flow should hand out a SimpleServiceSession');
48
48
  }
49
+ return session;
50
+ }
51
+ function startLogin(params) {
52
+ const session = registerSession(params);
49
53
  return async (body, responseUrl = TOKEN_URL) => {
50
54
  await session.onResponse(responseWith(body, responseUrl));
51
55
  return headerFrom(session.capturedCredentials);
@@ -101,6 +105,103 @@ describe('token capture', () => {
101
105
  expect(await respond('{"accessToken": "tok"}')).toBe('X-Auth-Token: tok');
102
106
  });
103
107
  });
108
+ /**
109
+ * A browser parked at `pageUrl`, answering each request for the endpoint with
110
+ * the next canned reply: a body, null for a request the endpoint refused, or an
111
+ * Error the request rejects with.
112
+ *
113
+ * The last reply repeats, so a test that only cares about the first request
114
+ * need not say what a second would get.
115
+ */
116
+ function pageAt(pageUrl, replies) {
117
+ let requestCount = 0;
118
+ const page = {
119
+ url: () => pageUrl,
120
+ evaluate: () => {
121
+ const reply = replies[Math.min(requestCount, replies.length - 1)] ?? null;
122
+ requestCount += 1;
123
+ return reply instanceof Error ? Promise.reject(reply) : Promise.resolve(reply);
124
+ },
125
+ };
126
+ return { page, requestCount: () => requestCount };
127
+ }
128
+ async function headerAfterWaiting(session, page) {
129
+ await session.whileWaitingForLogin(page);
130
+ return headerFrom(session.capturedCredentials);
131
+ }
132
+ /**
133
+ * Asking, rather than waiting to overhear.
134
+ *
135
+ * A web app calls its own mint endpoint when it wants a token and not
136
+ * otherwise, so a login that only listens can wait forever on a service that is
137
+ * working perfectly — which is what chatgpt.com does.
138
+ */
139
+ describe('token capture by request', () => {
140
+ const START_TIME = new Date('2026-01-01T00:00:00Z').getTime();
141
+ // Comfortably past the interval between requests, whatever it is set to.
142
+ const WELL_PAST_THE_INTERVAL_MS = 10_000;
143
+ beforeEach(() => {
144
+ vi.useFakeTimers();
145
+ vi.setSystemTime(START_TIME);
146
+ });
147
+ afterEach(() => {
148
+ vi.useRealTimers();
149
+ });
150
+ it('asks the endpoint when the app never calls it', async () => {
151
+ const session = registerSession({});
152
+ const { page } = pageAt('https://app.example.com/', ['{"accessToken": "tok-123"}']);
153
+ expect(await headerAfterWaiting(session, page)).toBe('Authorization: Bearer tok-123');
154
+ });
155
+ // Mid-login the browser is commonly on an identity provider, where there is
156
+ // nothing to ask and a cross-origin read would be refused anyway.
157
+ it('does not ask while the browser is on another origin', async () => {
158
+ const session = registerSession({});
159
+ const { page, requestCount } = pageAt('https://identity-provider.example.net/consent', [
160
+ '{"accessToken": "tok-123"}',
161
+ ]);
162
+ expect(await headerAfterWaiting(session, page)).toBeNull();
163
+ expect(requestCount()).toBe(0);
164
+ });
165
+ it('does not ask again before the interval has passed', async () => {
166
+ const session = registerSession({});
167
+ const { page, requestCount } = pageAt('https://app.example.com/', ['{}']);
168
+ await session.whileWaitingForLogin(page);
169
+ await session.whileWaitingForLogin(page);
170
+ expect(requestCount()).toBe(1);
171
+ });
172
+ // A signed-out visitor gets the same endpoint answering `{}`, so asking early
173
+ // and often has to stay harmless.
174
+ it('keeps asking until the endpoint has a token', async () => {
175
+ const session = registerSession({});
176
+ const { page } = pageAt('https://app.example.com/', ['{}', '{"accessToken": "tok-123"}']);
177
+ expect(await headerAfterWaiting(session, page)).toBeNull();
178
+ vi.setSystemTime(START_TIME + WELL_PAST_THE_INTERVAL_MS);
179
+ expect(await headerAfterWaiting(session, page)).toBe('Authorization: Bearer tok-123');
180
+ });
181
+ // The page navigates out from under a request all the time during a login.
182
+ it('keeps waiting when a request fails', async () => {
183
+ const session = registerSession({});
184
+ const { page } = pageAt('https://app.example.com/', [
185
+ new Error('Execution context was destroyed'),
186
+ '{"accessToken": "tok-123"}',
187
+ ]);
188
+ expect(await headerAfterWaiting(session, page)).toBeNull();
189
+ vi.setSystemTime(START_TIME + WELL_PAST_THE_INTERVAL_MS);
190
+ expect(await headerAfterWaiting(session, page)).toBe('Authorization: Bearer tok-123');
191
+ });
192
+ it('captures nothing from a request the endpoint refused', async () => {
193
+ const session = registerSession({});
194
+ const { page } = pageAt('https://app.example.com/', [null]);
195
+ expect(await headerAfterWaiting(session, page)).toBeNull();
196
+ });
197
+ // Both paths write the same field, and the login keeps the first token.
198
+ it('leaves a token already captured from a response alone', async () => {
199
+ const session = registerSession({});
200
+ await session.onResponse(responseWith('{"accessToken": "from-response"}', TOKEN_URL));
201
+ const { page } = pageAt('https://app.example.com/', ['{"accessToken": "from-request"}']);
202
+ expect(await headerAfterWaiting(session, page)).toBe('Authorization: Bearer from-response');
203
+ });
204
+ });
104
205
  describe('token capture parameters', () => {
105
206
  it('is registered under its flow name', () => {
106
207
  expect(LOGIN_FLOWS.map((flow) => flow.flowName)).toContain('token-capture');
@@ -1 +1 @@
1
- {"version":3,"file":"tokenCapture.test.js","sourceRoot":"","sources":["../../tests/tokenCapture.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenCapture.test.js","sourceRoot":"","sources":["../../tests/tokenCapture.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "latchkey",
3
- "version": "3.10.1",
3
+ "version": "3.11.0",
4
4
  "description": "A CLI tool that injects API credentials into curl requests to third-party services",
5
5
  "author": "Imbue <hynek@imbue.com>",
6
6
  "repository": {