@agentworkforce/deploy 3.0.15 → 3.0.17
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/connect.d.ts +53 -2
- package/dist/connect.d.ts.map +1 -1
- package/dist/connect.js +148 -14
- package/dist/connect.js.map +1 -1
- package/dist/connect.test.js +159 -7
- package/dist/connect.test.js.map +1 -1
- package/dist/deploy.d.ts +2 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +14 -3
- package/dist/deploy.js.map +1 -1
- package/dist/deploy.test.js +11 -4
- package/dist/deploy.test.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modes/{cloud.d.ts → cloud/index.d.ts} +3 -3
- package/dist/modes/cloud/index.d.ts.map +1 -0
- package/dist/modes/{cloud.js → cloud/index.js} +14 -7
- package/dist/modes/cloud/index.js.map +1 -0
- package/dist/modes/cloud.test.js +80 -1
- package/dist/modes/cloud.test.js.map +1 -1
- package/dist/modes/input-values.test.js +1 -1
- package/dist/modes/input-values.test.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +3 -3
- package/dist/modes/cloud.d.ts.map +0 -1
- package/dist/modes/cloud.js.map +0 -1
package/dist/connect.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PersonaSpec } from '@agentworkforce/persona-kit';
|
|
1
|
+
import type { IntegrationSource, PersonaSpec } from '@agentworkforce/persona-kit';
|
|
2
2
|
import type { DeployIO, IntegrationConnectOutcome } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Resolver the orchestrator uses to check + connect a Relayfile-backed
|
|
@@ -11,10 +11,28 @@ import type { DeployIO, IntegrationConnectOutcome } from './types.js';
|
|
|
11
11
|
* dep tree (smaller bin, faster install).
|
|
12
12
|
*/
|
|
13
13
|
export interface IntegrationConnectResolver {
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Is the provider already linked to the right scope for this persona?
|
|
16
|
+
*
|
|
17
|
+
* `source` discriminates which scope the cloud will resolve at dispatch
|
|
18
|
+
* time (deployer-user / workspace / workspace-service-account). The
|
|
19
|
+
* preflight check must hit the same scope: a `user_integrations` row
|
|
20
|
+
* does not satisfy a workspace-scoped persona declaration and vice
|
|
21
|
+
* versa. Defaults to `{ kind: 'deployer_user' }` (matches the
|
|
22
|
+
* persona-kit default at parse time).
|
|
23
|
+
*
|
|
24
|
+
* `expectedConfigKey` is the Nango provider-config-key the persona's
|
|
25
|
+
* declared `provider` resolves to (e.g. provider `slack` →
|
|
26
|
+
* `slack-relay`). When supplied, rows whose `providerConfigKey` does
|
|
27
|
+
* not match are ignored — protecting against false positives when the
|
|
28
|
+
* workspace has multiple Slack providers (slack-relay / slack-ricky /
|
|
29
|
+
* slack-nightcto / slack-my-senior-dev / slack-sage).
|
|
30
|
+
*/
|
|
15
31
|
isConnected(args: {
|
|
16
32
|
workspace: string;
|
|
17
33
|
provider: string;
|
|
34
|
+
source?: IntegrationSource;
|
|
35
|
+
expectedConfigKey?: string;
|
|
18
36
|
}): Promise<boolean>;
|
|
19
37
|
/** Run the browser-based OAuth flow and resolve when the user finishes. */
|
|
20
38
|
connect(args: {
|
|
@@ -83,6 +101,27 @@ export interface ConnectAllInput {
|
|
|
83
101
|
authRecovery?: IntegrationAuthRecoveryResolver;
|
|
84
102
|
/** Required only when persona.useSubscription is true. */
|
|
85
103
|
subscription?: ProviderSubscriptionResolver;
|
|
104
|
+
/**
|
|
105
|
+
* Optional resolver for the Nango provider-config-key behind each provider
|
|
106
|
+
* id. Backed by `GET /api/v1/integrations/catalog`. When supplied, the
|
|
107
|
+
* walker passes the expected config-key into the resolver's `isConnected`
|
|
108
|
+
* call so e.g. a persona declaring `slack` is verified against the
|
|
109
|
+
* `slack-relay` config-key specifically, ignoring rows backed by other
|
|
110
|
+
* Slack providers (slack-ricky / slack-nightcto / slack-sage / etc.).
|
|
111
|
+
*
|
|
112
|
+
* When omitted, the walker falls back to provider-name-only matching,
|
|
113
|
+
* which is sufficient for providers that have a single config-key but
|
|
114
|
+
* loses precision for ambiguous ones.
|
|
115
|
+
*/
|
|
116
|
+
providerConfigKeys?: ProviderConfigKeyResolver;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Returns the expected Nango provider-config-key for a persona-declared
|
|
120
|
+
* provider id. The CLI implementation caches the cloud catalog response
|
|
121
|
+
* after the first lookup to keep deploys cheap.
|
|
122
|
+
*/
|
|
123
|
+
export interface ProviderConfigKeyResolver {
|
|
124
|
+
resolve(provider: string): Promise<string | undefined>;
|
|
86
125
|
}
|
|
87
126
|
export interface ConnectAllResult {
|
|
88
127
|
outcomes: IntegrationConnectOutcome[];
|
|
@@ -107,4 +146,16 @@ export interface ConnectAllResult {
|
|
|
107
146
|
* `skipped` outcomes (today: fails the deploy at the call site).
|
|
108
147
|
*/
|
|
109
148
|
export declare function connectIntegrations(input: ConnectAllInput): Promise<ConnectAllResult>;
|
|
149
|
+
/**
|
|
150
|
+
* Resolver backed by `GET /api/v1/integrations/catalog`. The catalog is
|
|
151
|
+
* pulled once on first lookup and cached for the lifetime of this
|
|
152
|
+
* instance. Designed to be plugged into `ConnectAllInput.providerConfigKeys`
|
|
153
|
+
* so the walker can pass a `expectedConfigKey` into `isConnected` calls.
|
|
154
|
+
*/
|
|
155
|
+
export declare function relayfileCatalogConfigKeyResolver(opts: {
|
|
156
|
+
apiUrl: string;
|
|
157
|
+
workspaceToken: string | (() => string | Promise<string>);
|
|
158
|
+
fetch?: typeof fetch;
|
|
159
|
+
io?: Pick<DeployIO, 'warn'>;
|
|
160
|
+
}): ProviderConfigKeyResolver;
|
|
110
161
|
//# sourceMappingURL=connect.d.ts.map
|
package/dist/connect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
|
package/dist/connect.js
CHANGED
|
@@ -41,11 +41,24 @@ export function relayfileIntegrationResolver(opts) {
|
|
|
41
41
|
const sleepImpl = opts.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
42
42
|
const apiUrl = opts.apiUrl.replace(/\/+$/, '');
|
|
43
43
|
return {
|
|
44
|
-
async isConnected({ workspace, provider }) {
|
|
44
|
+
async isConnected({ workspace, provider, source, expectedConfigKey }) {
|
|
45
45
|
const workspaceId = workspace || opts.workspaceId;
|
|
46
46
|
const token = await resolveWorkspaceToken(opts.workspaceToken);
|
|
47
|
-
const
|
|
48
|
-
|
|
47
|
+
const effectiveSource = source ?? { kind: 'deployer_user' };
|
|
48
|
+
const list = await fetchIntegrationsForScope({
|
|
49
|
+
fetchImpl,
|
|
50
|
+
apiUrl,
|
|
51
|
+
token,
|
|
52
|
+
workspaceId,
|
|
53
|
+
source: effectiveSource,
|
|
54
|
+
io
|
|
55
|
+
});
|
|
56
|
+
return listHasConnectedProvider(list, provider, {
|
|
57
|
+
...(expectedConfigKey ? { expectedConfigKey } : {}),
|
|
58
|
+
...(effectiveSource.kind === 'workspace_service_account'
|
|
59
|
+
? { serviceAccountName: effectiveSource.name }
|
|
60
|
+
: {})
|
|
61
|
+
});
|
|
49
62
|
},
|
|
50
63
|
async connect({ workspace, provider }) {
|
|
51
64
|
const workspaceId = workspace || opts.workspaceId;
|
|
@@ -114,8 +127,13 @@ export async function connectIntegrations(input) {
|
|
|
114
127
|
const integrations = input.persona.integrations ?? {};
|
|
115
128
|
const outcomes = [];
|
|
116
129
|
for (const provider of Object.keys(integrations)) {
|
|
130
|
+
const integrationEntry = integrations[provider] ?? {};
|
|
131
|
+
const source = integrationEntry.source ?? { kind: 'deployer_user' };
|
|
132
|
+
const expectedConfigKey = input.providerConfigKeys
|
|
133
|
+
? await input.providerConfigKeys.resolve(provider).catch(() => undefined)
|
|
134
|
+
: undefined;
|
|
117
135
|
let statusCheckFailure;
|
|
118
|
-
let connected = await checkProviderConnected(input, provider, (message) => {
|
|
136
|
+
let connected = await checkProviderConnected(input, provider, source, expectedConfigKey, (message) => {
|
|
119
137
|
statusCheckFailure = message;
|
|
120
138
|
});
|
|
121
139
|
if (connected) {
|
|
@@ -135,7 +153,7 @@ export async function connectIntegrations(input) {
|
|
|
135
153
|
});
|
|
136
154
|
if (recovered) {
|
|
137
155
|
statusCheckFailure = undefined;
|
|
138
|
-
connected = await checkProviderConnected(input, provider, (message) => {
|
|
156
|
+
connected = await checkProviderConnected(input, provider, source, expectedConfigKey, (message) => {
|
|
139
157
|
statusCheckFailure = message;
|
|
140
158
|
});
|
|
141
159
|
if (connected) {
|
|
@@ -223,9 +241,14 @@ export async function connectIntegrations(input) {
|
|
|
223
241
|
...(subscriptionProvider ? { subscriptionProvider } : {})
|
|
224
242
|
};
|
|
225
243
|
}
|
|
226
|
-
async function checkProviderConnected(input, provider, onFailure) {
|
|
244
|
+
async function checkProviderConnected(input, provider, source, expectedConfigKey, onFailure) {
|
|
227
245
|
return await input.integrations
|
|
228
|
-
.isConnected({
|
|
246
|
+
.isConnected({
|
|
247
|
+
workspace: input.workspace,
|
|
248
|
+
provider,
|
|
249
|
+
source,
|
|
250
|
+
...(expectedConfigKey ? { expectedConfigKey } : {})
|
|
251
|
+
})
|
|
229
252
|
.catch((err) => {
|
|
230
253
|
const message = err instanceof Error ? err.message : String(err);
|
|
231
254
|
onFailure(message);
|
|
@@ -233,6 +256,14 @@ async function checkProviderConnected(input, provider, onFailure) {
|
|
|
233
256
|
return false;
|
|
234
257
|
});
|
|
235
258
|
}
|
|
259
|
+
function cloudRequestError(message, status) {
|
|
260
|
+
const err = new Error(message);
|
|
261
|
+
err.status = status;
|
|
262
|
+
return err;
|
|
263
|
+
}
|
|
264
|
+
function isCloudRequestError(err) {
|
|
265
|
+
return err instanceof Error && typeof err.status === 'number';
|
|
266
|
+
}
|
|
236
267
|
async function requestJson(fetchImpl, url, token, init = {}) {
|
|
237
268
|
const res = await fetchImpl(url, {
|
|
238
269
|
...init,
|
|
@@ -243,13 +274,13 @@ async function requestJson(fetchImpl, url, token, init = {}) {
|
|
|
243
274
|
}
|
|
244
275
|
});
|
|
245
276
|
if (res.status === 401) {
|
|
246
|
-
throw
|
|
277
|
+
throw cloudRequestError('cloud integration request failed: unauthorized. Your active workspace session is invalid or expired. Run `agentworkforce login --workspace <id-or-slug>` to refresh, then retry.', 401);
|
|
247
278
|
}
|
|
248
279
|
if (res.status === 403) {
|
|
249
|
-
throw
|
|
280
|
+
throw cloudRequestError('cloud integration request failed: forbidden. The active account is not authorized for this workspace. Run `agentworkforce login --workspace <id-or-slug>` against an account with access, then retry.', 403);
|
|
250
281
|
}
|
|
251
282
|
if (!res.ok) {
|
|
252
|
-
throw
|
|
283
|
+
throw cloudRequestError(`cloud integration request failed: ${res.status} ${await res.text().catch(() => '')}`.trim(), res.status);
|
|
253
284
|
}
|
|
254
285
|
return await res.json();
|
|
255
286
|
}
|
|
@@ -262,7 +293,44 @@ function isIntegrationUnauthorizedFailure(message) {
|
|
|
262
293
|
async function resolveWorkspaceToken(token) {
|
|
263
294
|
return typeof token === 'function' ? await token() : token;
|
|
264
295
|
}
|
|
265
|
-
|
|
296
|
+
/**
|
|
297
|
+
* Fetch the integrations list backing the persona's declared `source`.
|
|
298
|
+
*
|
|
299
|
+
* - `deployer_user` (the default) → `GET /api/v1/me/integrations`
|
|
300
|
+
* (reads `user_integrations` for the authed cloud user, per
|
|
301
|
+
* `AgentWorkforce/cloud#988`).
|
|
302
|
+
* - `workspace` / `workspace_service_account` → `GET /api/v1/workspaces/<id>/integrations`
|
|
303
|
+
* (reads `workspace_integrations`).
|
|
304
|
+
*
|
|
305
|
+
* Backwards-compat: if `/me/integrations` is unavailable (older cloud that
|
|
306
|
+
* hasn't shipped cloud#988 yet), fall back to the workspace endpoint with a
|
|
307
|
+
* warning. Authors deploying personas with `source: { kind: 'deployer_user' }`
|
|
308
|
+
* against an older cloud will see false negatives, but the deploy still
|
|
309
|
+
* surfaces a clean error rather than silently mis-resolving.
|
|
310
|
+
*/
|
|
311
|
+
async function fetchIntegrationsForScope(args) {
|
|
312
|
+
if (args.source.kind === 'deployer_user') {
|
|
313
|
+
const url = `${args.apiUrl}/api/v1/me/integrations`;
|
|
314
|
+
try {
|
|
315
|
+
return await requestJson(args.fetchImpl, url, args.token);
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
// Only fall back when the endpoint itself is missing (older cloud that
|
|
319
|
+
// hasn't shipped cloud#988). Any other failure — auth, 5xx, network —
|
|
320
|
+
// must propagate so callers see the real error and can drive the
|
|
321
|
+
// existing auth-recovery flow rather than silently masking the cause.
|
|
322
|
+
if (isCloudRequestError(err) && (err.status === 404 || err.status === 405)) {
|
|
323
|
+
args.io?.warn?.('cloud does not expose /api/v1/me/integrations yet; falling back to the workspace integrations list. ' +
|
|
324
|
+
'Deployer-user-scoped connections may show as not-connected. ' +
|
|
325
|
+
'Tracking in AgentWorkforce/cloud#988.');
|
|
326
|
+
return await requestJson(args.fetchImpl, `${args.apiUrl}/api/v1/workspaces/${encodeURIComponent(args.workspaceId)}/integrations`, args.token);
|
|
327
|
+
}
|
|
328
|
+
throw err;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return await requestJson(args.fetchImpl, `${args.apiUrl}/api/v1/workspaces/${encodeURIComponent(args.workspaceId)}/integrations`, args.token);
|
|
332
|
+
}
|
|
333
|
+
function listHasConnectedProvider(body, provider, opts = {}) {
|
|
266
334
|
const candidates = Array.isArray(body)
|
|
267
335
|
? body
|
|
268
336
|
: body && typeof body === 'object' && Array.isArray(body.integrations)
|
|
@@ -272,9 +340,35 @@ function listHasConnectedProvider(body, provider) {
|
|
|
272
340
|
if (!item || typeof item !== 'object' || Array.isArray(item))
|
|
273
341
|
return false;
|
|
274
342
|
const record = item;
|
|
275
|
-
|
|
343
|
+
if (record.provider !== provider)
|
|
344
|
+
return false;
|
|
345
|
+
if (opts.expectedConfigKey) {
|
|
346
|
+
const rowConfigKey = readString(record, 'providerConfigKey');
|
|
347
|
+
// If the row carries a providerConfigKey, enforce strict match.
|
|
348
|
+
// If the field is missing entirely (older cloud that hasn't shipped
|
|
349
|
+
// cloud#988), fall through to status-only matching — the cloud
|
|
350
|
+
// server will still resolve the right config-key at dispatch time.
|
|
351
|
+
if (rowConfigKey !== undefined && rowConfigKey !== opts.expectedConfigKey) {
|
|
352
|
+
return false;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
if (opts.serviceAccountName) {
|
|
356
|
+
const rowName = readString(record, 'name') ?? readString(record, 'serviceAccountName');
|
|
357
|
+
if (rowName !== opts.serviceAccountName)
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
return isConnectedStatus(record);
|
|
276
361
|
});
|
|
277
362
|
}
|
|
363
|
+
/**
|
|
364
|
+
* A row counts as "connected" only when the cloud's derived state is
|
|
365
|
+
* affirmatively healthy. The previous implementation also accepted "any
|
|
366
|
+
* truthy connectionId" as a yes, which produced false positives whenever a
|
|
367
|
+
* stale row was left behind by an abandoned OAuth attempt. The cloud now
|
|
368
|
+
* derives `status` from `initialSync + writeback` (see
|
|
369
|
+
* `cloud/packages/web/app/api/v1/workspaces/[workspaceId]/integrations/route.ts:62`),
|
|
370
|
+
* so trusting that field is both correct and sufficient.
|
|
371
|
+
*/
|
|
278
372
|
function isConnectedStatus(value) {
|
|
279
373
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
280
374
|
return false;
|
|
@@ -285,12 +379,52 @@ function isConnectedStatus(value) {
|
|
|
285
379
|
|| record.state === 'connected'
|
|
286
380
|
|| record.state === 'ready'
|
|
287
381
|
|| record.ready === true
|
|
288
|
-
|| Boolean(record.connectionId)
|
|
289
|
-
|| Boolean(record.currentConnectionId)
|
|
290
382
|
|| (record.oauth !== null
|
|
291
383
|
&& typeof record.oauth === 'object'
|
|
292
384
|
&& record.oauth.connected === true);
|
|
293
385
|
}
|
|
386
|
+
/**
|
|
387
|
+
* Resolver backed by `GET /api/v1/integrations/catalog`. The catalog is
|
|
388
|
+
* pulled once on first lookup and cached for the lifetime of this
|
|
389
|
+
* instance. Designed to be plugged into `ConnectAllInput.providerConfigKeys`
|
|
390
|
+
* so the walker can pass a `expectedConfigKey` into `isConnected` calls.
|
|
391
|
+
*/
|
|
392
|
+
export function relayfileCatalogConfigKeyResolver(opts) {
|
|
393
|
+
const fetchImpl = opts.fetch ?? fetch;
|
|
394
|
+
const apiUrl = opts.apiUrl.replace(/\/+$/, '');
|
|
395
|
+
let cache = null;
|
|
396
|
+
const load = async () => {
|
|
397
|
+
const token = await resolveWorkspaceToken(opts.workspaceToken);
|
|
398
|
+
const body = await requestJson(fetchImpl, `${apiUrl}/api/v1/integrations/catalog`, token);
|
|
399
|
+
const entries = Array.isArray(body)
|
|
400
|
+
? body
|
|
401
|
+
: body && typeof body === 'object' && Array.isArray(body.providers)
|
|
402
|
+
? body.providers
|
|
403
|
+
: [];
|
|
404
|
+
const map = new Map();
|
|
405
|
+
for (const entry of entries) {
|
|
406
|
+
const id = readString(entry, 'id');
|
|
407
|
+
const configKey = readString(entry, 'configKey') ?? readString(entry, 'defaultConfigKey');
|
|
408
|
+
if (id && configKey)
|
|
409
|
+
map.set(id, configKey);
|
|
410
|
+
}
|
|
411
|
+
return map;
|
|
412
|
+
};
|
|
413
|
+
return {
|
|
414
|
+
async resolve(provider) {
|
|
415
|
+
if (!cache) {
|
|
416
|
+
cache = load().catch((err) => {
|
|
417
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
418
|
+
opts.io?.warn?.(`cloud integration catalog fetch failed (${message}); falling back to provider-name-only matching for this deploy`);
|
|
419
|
+
cache = null;
|
|
420
|
+
return new Map();
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
const map = await cache;
|
|
424
|
+
return map.get(provider);
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
}
|
|
294
428
|
function readString(value, field) {
|
|
295
429
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
296
430
|
return undefined;
|
package/dist/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
|
package/dist/connect.test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import test from 'node:test';
|
|
2
2
|
import assert from 'node:assert/strict';
|
|
3
|
-
import { connectIntegrations, relayfileIntegrationResolver } from './connect.js';
|
|
3
|
+
import { connectIntegrations, relayfileCatalogConfigKeyResolver, relayfileIntegrationResolver } from './connect.js';
|
|
4
4
|
import { createBufferedIO } from './io.js';
|
|
5
5
|
function okJson(body, status = 200) {
|
|
6
6
|
return new Response(JSON.stringify(body), {
|
|
@@ -8,7 +8,7 @@ function okJson(body, status = 200) {
|
|
|
8
8
|
headers: { 'content-type': 'application/json' }
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
|
-
test('relayfileIntegrationResolver isConnected
|
|
11
|
+
test('relayfileIntegrationResolver isConnected defaults to /me/integrations (deployer_user)', async () => {
|
|
12
12
|
const urls = [];
|
|
13
13
|
const resolver = relayfileIntegrationResolver({
|
|
14
14
|
apiUrl: 'https://cloud.example.test',
|
|
@@ -17,17 +17,168 @@ test('relayfileIntegrationResolver isConnected reads the cloud integration list'
|
|
|
17
17
|
fetch: async (url) => {
|
|
18
18
|
urls.push(String(url));
|
|
19
19
|
return okJson([
|
|
20
|
-
{ provider: 'github',
|
|
20
|
+
{ provider: 'github', providerConfigKey: 'github-relay', status: 'ready' }
|
|
21
21
|
]);
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
24
|
assert.equal(await resolver.isConnected({ workspace: 'ws-runtime', provider: 'github' }), true);
|
|
25
25
|
assert.equal(await resolver.isConnected({ workspace: 'ws-runtime', provider: 'notion' }), false);
|
|
26
26
|
assert.deepEqual(urls, [
|
|
27
|
-
'https://cloud.example.test/api/v1/
|
|
27
|
+
'https://cloud.example.test/api/v1/me/integrations',
|
|
28
|
+
'https://cloud.example.test/api/v1/me/integrations'
|
|
29
|
+
]);
|
|
30
|
+
});
|
|
31
|
+
test('relayfileIntegrationResolver isConnected hits /workspaces/<id>/integrations for workspace source', async () => {
|
|
32
|
+
const urls = [];
|
|
33
|
+
const resolver = relayfileIntegrationResolver({
|
|
34
|
+
apiUrl: 'https://cloud.example.test',
|
|
35
|
+
workspaceId: 'ws-1',
|
|
36
|
+
workspaceToken: 'tok',
|
|
37
|
+
fetch: async (url) => {
|
|
38
|
+
urls.push(String(url));
|
|
39
|
+
return okJson([
|
|
40
|
+
{ provider: 'github', providerConfigKey: 'github-relay', status: 'ready' }
|
|
41
|
+
]);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
assert.equal(await resolver.isConnected({
|
|
45
|
+
workspace: 'ws-runtime',
|
|
46
|
+
provider: 'github',
|
|
47
|
+
source: { kind: 'workspace' }
|
|
48
|
+
}), true);
|
|
49
|
+
assert.deepEqual(urls, [
|
|
28
50
|
'https://cloud.example.test/api/v1/workspaces/ws-runtime/integrations'
|
|
29
51
|
]);
|
|
30
52
|
});
|
|
53
|
+
test('relayfileIntegrationResolver isConnected rejects rows whose providerConfigKey does not match', async () => {
|
|
54
|
+
// Workspace has slack-ricky connected. Persona declares plain `slack`, which
|
|
55
|
+
// should resolve to slack-relay. The row exists with provider:'slack' but
|
|
56
|
+
// backed by a different config-key → must NOT count as connected.
|
|
57
|
+
const resolver = relayfileIntegrationResolver({
|
|
58
|
+
apiUrl: 'https://cloud.example.test',
|
|
59
|
+
workspaceId: 'ws-1',
|
|
60
|
+
workspaceToken: 'tok',
|
|
61
|
+
fetch: async () => okJson([{ provider: 'slack', providerConfigKey: 'slack-ricky', status: 'ready' }])
|
|
62
|
+
});
|
|
63
|
+
assert.equal(await resolver.isConnected({
|
|
64
|
+
workspace: 'ws-1',
|
|
65
|
+
provider: 'slack',
|
|
66
|
+
expectedConfigKey: 'slack-relay'
|
|
67
|
+
}), false);
|
|
68
|
+
});
|
|
69
|
+
test('relayfileIntegrationResolver isConnected accepts a matching providerConfigKey', async () => {
|
|
70
|
+
const resolver = relayfileIntegrationResolver({
|
|
71
|
+
apiUrl: 'https://cloud.example.test',
|
|
72
|
+
workspaceId: 'ws-1',
|
|
73
|
+
workspaceToken: 'tok',
|
|
74
|
+
fetch: async () => okJson([{ provider: 'slack', providerConfigKey: 'slack-relay', status: 'ready' }])
|
|
75
|
+
});
|
|
76
|
+
assert.equal(await resolver.isConnected({
|
|
77
|
+
workspace: 'ws-1',
|
|
78
|
+
provider: 'slack',
|
|
79
|
+
expectedConfigKey: 'slack-relay'
|
|
80
|
+
}), true);
|
|
81
|
+
});
|
|
82
|
+
test('relayfileIntegrationResolver isConnected falls back to provider-name match when row lacks providerConfigKey', async () => {
|
|
83
|
+
// Older cloud (pre cloud#988) returns rows without providerConfigKey. To
|
|
84
|
+
// avoid hard-failing every deploy until that ships, the matcher treats a
|
|
85
|
+
// missing field as "trust the server" and matches by provider name only.
|
|
86
|
+
const resolver = relayfileIntegrationResolver({
|
|
87
|
+
apiUrl: 'https://cloud.example.test',
|
|
88
|
+
workspaceId: 'ws-1',
|
|
89
|
+
workspaceToken: 'tok',
|
|
90
|
+
fetch: async () => okJson([{ provider: 'slack', status: 'ready' }])
|
|
91
|
+
});
|
|
92
|
+
assert.equal(await resolver.isConnected({
|
|
93
|
+
workspace: 'ws-1',
|
|
94
|
+
provider: 'slack',
|
|
95
|
+
expectedConfigKey: 'slack-relay'
|
|
96
|
+
}), true);
|
|
97
|
+
});
|
|
98
|
+
test('relayfileIntegrationResolver isConnected ignores rows with only a connectionId (no status)', async () => {
|
|
99
|
+
// The previous matcher treated any truthy connectionId as connected. That
|
|
100
|
+
// caused false positives whenever an abandoned OAuth left an orphan row.
|
|
101
|
+
const resolver = relayfileIntegrationResolver({
|
|
102
|
+
apiUrl: 'https://cloud.example.test',
|
|
103
|
+
workspaceId: 'ws-1',
|
|
104
|
+
workspaceToken: 'tok',
|
|
105
|
+
fetch: async () => okJson([{ provider: 'slack', connectionId: 'orphan' }])
|
|
106
|
+
});
|
|
107
|
+
assert.equal(await resolver.isConnected({ workspace: 'ws-1', provider: 'slack' }), false);
|
|
108
|
+
});
|
|
109
|
+
test('relayfileIntegrationResolver isConnected does NOT fall back when /me/integrations returns 5xx with "404" in the body', async () => {
|
|
110
|
+
// Regression: previous implementation regex-matched "404" anywhere in the
|
|
111
|
+
// error message and treated a 500 whose body mentioned "/api/v1/foo/404"
|
|
112
|
+
// (or any other 404 substring) as a missing-endpoint signal. The check
|
|
113
|
+
// must use the explicit HTTP status, not the body text.
|
|
114
|
+
const urls = [];
|
|
115
|
+
const resolver = relayfileIntegrationResolver({
|
|
116
|
+
apiUrl: 'https://cloud.example.test',
|
|
117
|
+
workspaceId: 'ws-1',
|
|
118
|
+
workspaceToken: 'tok',
|
|
119
|
+
fetch: async (url) => {
|
|
120
|
+
urls.push(String(url));
|
|
121
|
+
return new Response('upstream timeout (request 404abc failed)', { status: 500 });
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
await assert.rejects(resolver.isConnected({ workspace: 'ws-runtime', provider: 'github' }), /cloud integration request failed: 500/);
|
|
125
|
+
// Only the /me call should have happened — no silent fallback to workspace.
|
|
126
|
+
assert.deepEqual(urls, ['https://cloud.example.test/api/v1/me/integrations']);
|
|
127
|
+
});
|
|
128
|
+
test('relayfileIntegrationResolver isConnected falls back to workspace endpoint when /me/integrations 404s', async () => {
|
|
129
|
+
const io = createBufferedIO();
|
|
130
|
+
const urls = [];
|
|
131
|
+
const resolver = relayfileIntegrationResolver({
|
|
132
|
+
apiUrl: 'https://cloud.example.test',
|
|
133
|
+
workspaceId: 'ws-1',
|
|
134
|
+
workspaceToken: 'tok',
|
|
135
|
+
io,
|
|
136
|
+
fetch: async (url) => {
|
|
137
|
+
urls.push(String(url));
|
|
138
|
+
if (String(url).endsWith('/me/integrations')) {
|
|
139
|
+
return new Response('not found', { status: 404 });
|
|
140
|
+
}
|
|
141
|
+
return okJson([{ provider: 'github', status: 'ready' }]);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
assert.equal(await resolver.isConnected({ workspace: 'ws-runtime', provider: 'github' }), true);
|
|
145
|
+
assert.deepEqual(urls, [
|
|
146
|
+
'https://cloud.example.test/api/v1/me/integrations',
|
|
147
|
+
'https://cloud.example.test/api/v1/workspaces/ws-runtime/integrations'
|
|
148
|
+
]);
|
|
149
|
+
assert.ok(io.messages.some((m) => m.level === 'warn' && /me\/integrations/.test(m.message)));
|
|
150
|
+
});
|
|
151
|
+
test('relayfileCatalogConfigKeyResolver returns the expected configKey and caches the catalog', async () => {
|
|
152
|
+
let calls = 0;
|
|
153
|
+
const resolver = relayfileCatalogConfigKeyResolver({
|
|
154
|
+
apiUrl: 'https://cloud.example.test',
|
|
155
|
+
workspaceToken: 'tok',
|
|
156
|
+
fetch: async () => {
|
|
157
|
+
calls += 1;
|
|
158
|
+
return okJson({
|
|
159
|
+
providers: [
|
|
160
|
+
{ id: 'slack', configKey: 'slack-relay' },
|
|
161
|
+
{ id: 'github', configKey: 'github-relay' }
|
|
162
|
+
]
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
assert.equal(await resolver.resolve('slack'), 'slack-relay');
|
|
167
|
+
assert.equal(await resolver.resolve('github'), 'github-relay');
|
|
168
|
+
assert.equal(await resolver.resolve('unknown'), undefined);
|
|
169
|
+
assert.equal(calls, 1, 'catalog should be fetched exactly once and cached');
|
|
170
|
+
});
|
|
171
|
+
test('relayfileCatalogConfigKeyResolver returns undefined for every provider when catalog fetch fails', async () => {
|
|
172
|
+
const io = createBufferedIO();
|
|
173
|
+
const resolver = relayfileCatalogConfigKeyResolver({
|
|
174
|
+
apiUrl: 'https://cloud.example.test',
|
|
175
|
+
workspaceToken: 'tok',
|
|
176
|
+
io,
|
|
177
|
+
fetch: async () => new Response('boom', { status: 500 })
|
|
178
|
+
});
|
|
179
|
+
assert.equal(await resolver.resolve('slack'), undefined);
|
|
180
|
+
assert.ok(io.messages.some((m) => m.level === 'warn' && /catalog/.test(m.message)));
|
|
181
|
+
});
|
|
31
182
|
test('relayfileIntegrationResolver reads the latest workspace token for each request', async () => {
|
|
32
183
|
let token = 'old-token';
|
|
33
184
|
const authHeaders = [];
|
|
@@ -36,12 +187,13 @@ test('relayfileIntegrationResolver reads the latest workspace token for each req
|
|
|
36
187
|
workspaceId: 'ws-1',
|
|
37
188
|
workspaceToken: () => token,
|
|
38
189
|
fetch: async (_url, init) => {
|
|
39
|
-
|
|
40
|
-
|
|
190
|
+
const auth = String(new Headers(init?.headers).get('authorization'));
|
|
191
|
+
authHeaders.push(auth);
|
|
192
|
+
if (auth === 'Bearer old-token') {
|
|
41
193
|
return okJson({ error: 'Unauthorized' }, 401);
|
|
42
194
|
}
|
|
43
195
|
return okJson([
|
|
44
|
-
{ provider: 'github',
|
|
196
|
+
{ provider: 'github', providerConfigKey: 'github-relay', status: 'ready' }
|
|
45
197
|
]);
|
|
46
198
|
}
|
|
47
199
|
});
|