@topolo/sdk 0.3.0 → 0.4.1

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/index.d.cts CHANGED
@@ -31,9 +31,174 @@ interface AgentIdentity {
31
31
  agentName?: string;
32
32
  }
33
33
 
34
+ interface TopoloClientOptions {
35
+ credential: TopoloCredential;
36
+ agent: AgentIdentity;
37
+ /** Per-service URL overrides. Useful for staging/dev. */
38
+ serviceUrls?: Record<string, string>;
39
+ /** Per-service TopoloAuth service id overrides from the owning app/deployment. */
40
+ serviceIds?: Record<string, string>;
41
+ /**
42
+ * When true, mutating helpers (POST/PUT/PATCH/DELETE) require callers to pass
43
+ * `{ confirm: true }`. Defaults to true. Set false only for trusted surfaces.
44
+ */
45
+ requireConfirmForWrites?: boolean;
46
+ /** HTTP request timeout (ms). Default 30s. */
47
+ timeoutMs?: number;
48
+ /** Injected fetch, for testing. Defaults to global fetch. */
49
+ fetch?: typeof fetch;
50
+ /**
51
+ * Observability hook. Fires once per request lifecycle (`request` at start,
52
+ * then exactly one of `response` or `error`). Safe to leave unset — off by
53
+ * default. Intended for CLI/MCP hosts to surface request-level diagnostics
54
+ * and for consumers building their own logging/tracing.
55
+ */
56
+ debug?: (event: TopoloDebugEvent) => void;
57
+ }
58
+ type TopoloDebugEvent = {
59
+ phase: 'request';
60
+ method: string;
61
+ service: string;
62
+ path: string;
63
+ url: string;
64
+ requestId: string;
65
+ } | {
66
+ phase: 'response';
67
+ method: string;
68
+ service: string;
69
+ path: string;
70
+ url: string;
71
+ requestId: string;
72
+ status: number;
73
+ durationMs: number;
74
+ } | {
75
+ phase: 'error';
76
+ method: string;
77
+ service: string;
78
+ path: string;
79
+ url: string;
80
+ requestId: string;
81
+ durationMs: number;
82
+ error: string;
83
+ status?: number;
84
+ };
85
+ interface RequestOptions {
86
+ service: string;
87
+ path: string;
88
+ method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
89
+ query?: Record<string, string | number | boolean | undefined>;
90
+ body?: unknown;
91
+ /** Explicit write-acknowledgement for mutating calls. */
92
+ confirm?: boolean;
93
+ /** Extra headers appended after auth/audit headers. */
94
+ headers?: Record<string, string>;
95
+ signal?: AbortSignal;
96
+ }
97
+ /**
98
+ * A single entry from the live platform service catalog. Returned by
99
+ * {@link TopoloClient.listServices}. Shape mirrors the public-safe projection
100
+ * from TopoloAuth `GET /api/services/catalog`.
101
+ */
102
+ interface TopoloServiceCatalogEntry {
103
+ serviceId: string;
104
+ slug: string | null;
105
+ name: string | null;
106
+ description: string | null;
107
+ baseUrl: string | null;
108
+ status: string | null;
109
+ surfaceKind: string | null;
110
+ launchable: boolean;
111
+ }
112
+ declare class TopoloClient {
113
+ private readonly credential;
114
+ private readonly agent;
115
+ private readonly serviceUrls?;
116
+ private readonly serviceIds?;
117
+ private readonly requireConfirmForWrites;
118
+ private readonly timeoutMs;
119
+ private readonly fetchImpl;
120
+ private readonly debug?;
121
+ private serviceCatalogCache;
122
+ /**
123
+ * Process-wide cache for slug → service-id lookups. Keyed by
124
+ * `${authBaseUrl}|${slug}` so multiple `TopoloClient` instances pointing at
125
+ * the same Auth share, but staging vs prod don't poison each other.
126
+ * Cleared via `TopoloClient.clearServiceIdCache()` if a test needs it.
127
+ */
128
+ private static readonly serviceIdCache;
129
+ /**
130
+ * Drop the slug→service-id cache. Test-only — production callers should
131
+ * let the 5-minute TTL expire naturally.
132
+ */
133
+ static clearServiceIdCache(): void;
134
+ constructor(options: TopoloClientOptions);
135
+ private emit;
136
+ /**
137
+ * Low-level JSON request. Prefer the typed module helpers (identity, crm, ...)
138
+ * for anything a caller would reach for; this stays exported for escape-hatch
139
+ * use and for the generic `topolo api` / MCP passthrough tool.
140
+ */
141
+ request<T = unknown>(opts: RequestOptions): Promise<T>;
142
+ private resolveRequestService;
143
+ private resolveLiveCallableService;
144
+ /**
145
+ * Resolve a service-slug → opaque service-id via caller config or TopoloAuth.
146
+ *
147
+ * Cache: 5 minutes per process per `(slug, auth_base_url)`. Negative
148
+ * results (404) are cached for 60s so a typo doesn't hot-loop the
149
+ * resolver. Returns null when the slug isn't registered — callers decide
150
+ * whether to throw.
151
+ *
152
+ * No credential is sent: the endpoint is public (slugs aren't secret).
153
+ * This keeps the resolver usable during early bootstrap before a caller
154
+ * has acquired an access token.
155
+ */
156
+ getServiceIdBySlug(slug: string): Promise<string | null>;
157
+ /**
158
+ * List the platform service catalog from the live registry
159
+ * (`GET /api/services/catalog` on TopoloAuth). Credential-aware: the
160
+ * caller's credential is attached, so an authenticated caller in an
161
+ * entitled org also receives the `developer_only` services its role
162
+ * permits; an unauthenticated/agent caller receives `active` only.
163
+ *
164
+ * Resilient: on any network/HTTP failure this falls back to the
165
+ * build-time generated `APPLICATIONS` snapshot so offline/degraded
166
+ * callers still get a usable (if static) catalog. The live result is
167
+ * authoritative; the snapshot is a floor, not a cap.
168
+ */
169
+ listServices(): Promise<TopoloServiceCatalogEntry[]>;
170
+ private generatedCatalogFallback;
171
+ /**
172
+ * Introspect the current credential. Returns the caller's resolved identity,
173
+ * organization, and permission set. Used by CLI `whoami` and by MCP to gate
174
+ * advertised tools by scope.
175
+ *
176
+ * Both JWT access tokens and platform API keys are resolved via the unified
177
+ * `GET /api/auth/me` endpoint on TopoloAuth, which does not require service
178
+ * credentials. The caller's possession of the credential secret is proof.
179
+ */
180
+ introspect(): Promise<CredentialIntrospection>;
181
+ }
182
+ interface CredentialIntrospection {
183
+ kind: 'api_key' | 'access_token';
184
+ user: {
185
+ id: string;
186
+ email: string;
187
+ name: string | null;
188
+ role: string;
189
+ permissions: string[];
190
+ };
191
+ organization: {
192
+ id: string;
193
+ slug: string;
194
+ name: string;
195
+ } | null;
196
+ }
197
+
34
198
  declare const SERVICES: {
35
199
  readonly agent: "https://agent-api.topolo.app";
36
200
  readonly auth: "https://auth.topolo.app";
201
+ readonly backup: "https://backup.topolo.app";
37
202
  readonly books: "https://books.topolo.app";
38
203
  readonly bugfix: "https://bugfix.topolo.app";
39
204
  readonly bytes: "https://bytes-api.topolo.app";
@@ -44,7 +209,6 @@ declare const SERVICES: {
44
209
  readonly compose: "https://compose.topolo.app";
45
210
  readonly consent: "https://consent.topolo.app";
46
211
  readonly crm: "https://crm-api.topolo.app";
47
- readonly customer_success: "https://success.topolo.app";
48
212
  readonly developers: "https://developers.topolo.app";
49
213
  readonly director: "https://director.topolo.app";
50
214
  readonly feed: "https://feed-api.topolo.app";
@@ -58,35 +222,30 @@ declare const SERVICES: {
58
222
  readonly localize: "https://localize.topolo.app";
59
223
  readonly mail: "https://mail.topolo.app";
60
224
  readonly mdm: "https://mdm-api.topolo.app";
61
- readonly messaging: "https://messages.topolo.app";
225
+ readonly messages: "https://messages.topolo.app";
62
226
  readonly nexus: "https://nexus-api.topolo.app";
63
227
  readonly notify: "https://notify.topolo.app";
228
+ readonly observability_watch: "https://observability-watch.topolo.app";
64
229
  readonly one: "https://one.topolo.app";
65
230
  readonly p2p: "https://p2p.topolo.app";
66
231
  readonly pay: "https://pay.topolo.app";
67
232
  readonly people: "https://people.topolo.app";
233
+ readonly pulse: "https://pulse.topolo.app";
68
234
  readonly "quro.api": "https://api.ol0.me";
69
235
  readonly "quro.redirect": "https://ol0.me";
70
236
  readonly roadmapper: "https://roadmapper-api.topolo.app";
71
237
  readonly sign: "https://sign.topolo.app";
72
238
  readonly social_studio: "https://studio-api.topolo.app";
73
239
  readonly socialize: "https://socialize-api.topolo.app";
240
+ readonly spaces: "https://spaces.topolo.app";
74
241
  readonly status: "https://status.topolo.app";
242
+ readonly success: "https://success.topolo.app";
75
243
  readonly support: "https://support.topolo.app";
76
244
  readonly survey: "https://survey.topolo.app";
77
245
  readonly voice: "https://voice.topolo.app";
78
246
  readonly web: "https://web-api.topolo.app";
79
247
  };
80
248
  type ServiceId = keyof typeof SERVICES;
81
- /**
82
- * @deprecated since 0.3.0 — opaque service ids are no longer baked into the
83
- * SDK. Use `TopoloClient.getServiceIdBySlug(slug)` which hits
84
- * `GET /api/services/by-slug/:slug` on TopoloAuth at runtime. This map is
85
- * still populated as a build-time snapshot for backward compatibility and
86
- * will be removed in 0.4.0. Stale entries are expected — do not rely on
87
- * presence/absence for catalog membership.
88
- */
89
- declare const PLATFORM_SERVICE_IDS: Partial<Record<ServiceId, string>>;
90
249
 
91
250
  declare const APPLICATIONS: {
92
251
  readonly admin: {
@@ -98,11 +257,18 @@ declare const APPLICATIONS: {
98
257
  readonly services: readonly [];
99
258
  readonly deployTargets: readonly [{
100
259
  readonly name: "topolo-admin";
101
- readonly kind: "pages";
102
- readonly apiUrl: null;
260
+ readonly kind: "worker";
261
+ readonly apiUrl: "https://admin.topolo.app";
103
262
  readonly domains: readonly ["admin.topolo.app"];
104
263
  readonly routes: readonly [];
105
264
  readonly serviceId: null;
265
+ }, {
266
+ readonly name: "topolo-admin-api";
267
+ readonly kind: "worker";
268
+ readonly apiUrl: null;
269
+ readonly domains: readonly [];
270
+ readonly routes: readonly [];
271
+ readonly serviceId: null;
106
272
  }];
107
273
  };
108
274
  readonly agent: {
@@ -115,12 +281,12 @@ declare const APPLICATIONS: {
115
281
  readonly deployTargets: readonly [{
116
282
  readonly name: "topolo-agent";
117
283
  readonly kind: "worker";
118
- readonly apiUrl: null;
284
+ readonly apiUrl: "https://agent.topolo.app";
119
285
  readonly domains: readonly ["agent.topolo.app"];
120
286
  readonly routes: readonly [];
121
287
  readonly serviceId: null;
122
288
  }, {
123
- readonly name: "topolo-agent-worker";
289
+ readonly name: "topolo-agent-api";
124
290
  readonly kind: "worker";
125
291
  readonly apiUrl: "https://agent-api.topolo.app";
126
292
  readonly domains: readonly ["agent-api.topolo.app"];
@@ -144,6 +310,22 @@ declare const APPLICATIONS: {
144
310
  readonly serviceId: "auth";
145
311
  }];
146
312
  };
313
+ readonly backup: {
314
+ readonly id: "backup";
315
+ readonly appDir: "TopoloBackup";
316
+ readonly name: "topolo-backup";
317
+ readonly packageName: "topolo-backup";
318
+ readonly productionUrl: "https://backup.topolo.app";
319
+ readonly services: readonly ["backup"];
320
+ readonly deployTargets: readonly [{
321
+ readonly name: "topolo-backup";
322
+ readonly kind: "worker";
323
+ readonly apiUrl: "https://backup.topolo.app";
324
+ readonly domains: readonly ["backup.topolo.app"];
325
+ readonly routes: readonly [];
326
+ readonly serviceId: "backup";
327
+ }];
328
+ };
147
329
  readonly books: {
148
330
  readonly id: "books";
149
331
  readonly appDir: "TopoloBooks";
@@ -156,8 +338,15 @@ declare const APPLICATIONS: {
156
338
  readonly kind: "worker";
157
339
  readonly apiUrl: "https://books.topolo.app";
158
340
  readonly domains: readonly ["books.topolo.app"];
159
- readonly routes: readonly ["books.topolo.app"];
341
+ readonly routes: readonly [];
160
342
  readonly serviceId: "books";
343
+ }, {
344
+ readonly name: "topolo-books-api";
345
+ readonly kind: "worker";
346
+ readonly apiUrl: null;
347
+ readonly domains: readonly [];
348
+ readonly routes: readonly [];
349
+ readonly serviceId: null;
161
350
  }];
162
351
  };
163
352
  readonly bugfix: {
@@ -172,7 +361,7 @@ declare const APPLICATIONS: {
172
361
  readonly kind: "worker";
173
362
  readonly apiUrl: "https://bugfix.topolo.app";
174
363
  readonly domains: readonly ["bugfix.topolo.app"];
175
- readonly routes: readonly ["bugfix.topolo.app"];
364
+ readonly routes: readonly [];
176
365
  readonly serviceId: "bugfix";
177
366
  }];
178
367
  };
@@ -185,8 +374,8 @@ declare const APPLICATIONS: {
185
374
  readonly services: readonly ["bytes"];
186
375
  readonly deployTargets: readonly [{
187
376
  readonly name: "topolo-bytes";
188
- readonly kind: "pages";
189
- readonly apiUrl: null;
377
+ readonly kind: "worker";
378
+ readonly apiUrl: "https://bytes.topolo.app";
190
379
  readonly domains: readonly ["bytes.topolo.app"];
191
380
  readonly routes: readonly [];
192
381
  readonly serviceId: null;
@@ -211,8 +400,15 @@ declare const APPLICATIONS: {
211
400
  readonly kind: "worker";
212
401
  readonly apiUrl: "https://calendar.topolo.app";
213
402
  readonly domains: readonly ["calendar.topolo.app"];
214
- readonly routes: readonly ["calendar.topolo.app"];
403
+ readonly routes: readonly [];
215
404
  readonly serviceId: "calendar";
405
+ }, {
406
+ readonly name: "topolo-calendar-api";
407
+ readonly kind: "worker";
408
+ readonly apiUrl: null;
409
+ readonly domains: readonly [];
410
+ readonly routes: readonly [];
411
+ readonly serviceId: null;
216
412
  }];
217
413
  };
218
414
  readonly capacity: {
@@ -243,28 +439,17 @@ declare const APPLICATIONS: {
243
439
  readonly kind: "worker";
244
440
  readonly apiUrl: "https://chat.topolo.app";
245
441
  readonly domains: readonly ["chat.topolo.app"];
246
- readonly routes: readonly ["chat.topolo.app"];
442
+ readonly routes: readonly [];
247
443
  readonly serviceId: "chat";
444
+ }, {
445
+ readonly name: "topolo-chat-api";
446
+ readonly kind: "worker";
447
+ readonly apiUrl: null;
448
+ readonly domains: readonly [];
449
+ readonly routes: readonly [];
450
+ readonly serviceId: null;
248
451
  }];
249
452
  };
250
- readonly cli: {
251
- readonly id: "cli";
252
- readonly appDir: "TopoloCli";
253
- readonly name: "@topolo/cli";
254
- readonly packageName: "@topolo/cli";
255
- readonly productionUrl: null;
256
- readonly services: readonly [];
257
- readonly deployTargets: readonly [];
258
- };
259
- readonly cloudcontrol: {
260
- readonly id: "cloudcontrol";
261
- readonly appDir: "TopoloCloudControl";
262
- readonly name: "cloudcontrol";
263
- readonly packageName: "topolo-cloudcontrol";
264
- readonly productionUrl: null;
265
- readonly services: readonly [];
266
- readonly deployTargets: readonly [];
267
- };
268
453
  readonly commerce: {
269
454
  readonly id: "commerce";
270
455
  readonly appDir: "TopoloCommerce";
@@ -281,22 +466,22 @@ declare const APPLICATIONS: {
281
466
  readonly serviceId: "commerce";
282
467
  }, {
283
468
  readonly name: "topolo-commerce-guest-web";
284
- readonly kind: "pages";
285
- readonly apiUrl: null;
469
+ readonly kind: "worker";
470
+ readonly apiUrl: "https://guest.topolo.app";
286
471
  readonly domains: readonly ["guest.topolo.app"];
287
472
  readonly routes: readonly [];
288
473
  readonly serviceId: null;
289
474
  }, {
290
475
  readonly name: "topolo-commerce-ops-web";
291
- readonly kind: "pages";
292
- readonly apiUrl: null;
476
+ readonly kind: "worker";
477
+ readonly apiUrl: "https://commerce.topolo.app";
293
478
  readonly domains: readonly ["commerce.topolo.app"];
294
479
  readonly routes: readonly [];
295
480
  readonly serviceId: null;
296
481
  }, {
297
482
  readonly name: "topolo-commerce-station-web";
298
- readonly kind: "pages";
299
- readonly apiUrl: null;
483
+ readonly kind: "worker";
484
+ readonly apiUrl: "https://station-commerce.topolo.app";
300
485
  readonly domains: readonly ["station-commerce.topolo.app"];
301
486
  readonly routes: readonly [];
302
487
  readonly serviceId: null;
@@ -314,8 +499,15 @@ declare const APPLICATIONS: {
314
499
  readonly kind: "worker";
315
500
  readonly apiUrl: "https://compose.topolo.app";
316
501
  readonly domains: readonly ["compose.topolo.app"];
317
- readonly routes: readonly ["compose.topolo.app"];
502
+ readonly routes: readonly [];
318
503
  readonly serviceId: "compose";
504
+ }, {
505
+ readonly name: "topolo-compose-api";
506
+ readonly kind: "worker";
507
+ readonly apiUrl: null;
508
+ readonly domains: readonly [];
509
+ readonly routes: readonly [];
510
+ readonly serviceId: null;
319
511
  }];
320
512
  };
321
513
  readonly consent: {
@@ -330,8 +522,15 @@ declare const APPLICATIONS: {
330
522
  readonly kind: "worker";
331
523
  readonly apiUrl: "https://consent.topolo.app";
332
524
  readonly domains: readonly ["consent.topolo.app"];
333
- readonly routes: readonly ["consent.topolo.app"];
525
+ readonly routes: readonly [];
334
526
  readonly serviceId: "consent";
527
+ }, {
528
+ readonly name: "topolo-consent-api";
529
+ readonly kind: "worker";
530
+ readonly apiUrl: null;
531
+ readonly domains: readonly [];
532
+ readonly routes: readonly [];
533
+ readonly serviceId: null;
335
534
  }];
336
535
  };
337
536
  readonly crm: {
@@ -351,44 +550,12 @@ declare const APPLICATIONS: {
351
550
  }, {
352
551
  readonly name: "topolo-crm-app";
353
552
  readonly kind: "worker";
354
- readonly apiUrl: null;
553
+ readonly apiUrl: "https://crm.topolo.app";
355
554
  readonly domains: readonly ["crm.topolo.app"];
356
555
  readonly routes: readonly [];
357
556
  readonly serviceId: null;
358
557
  }];
359
558
  };
360
- readonly customer_success: {
361
- readonly id: "customer_success";
362
- readonly appDir: "TopoloSuccess";
363
- readonly name: "topolo-success";
364
- readonly packageName: "topolo-success";
365
- readonly productionUrl: "https://success.topolo.app";
366
- readonly services: readonly ["customer_success"];
367
- readonly deployTargets: readonly [{
368
- readonly name: "topolo-success";
369
- readonly kind: "worker";
370
- readonly apiUrl: "https://success.topolo.app";
371
- readonly domains: readonly ["success.topolo.app"];
372
- readonly routes: readonly ["success.topolo.app"];
373
- readonly serviceId: "customer_success";
374
- }];
375
- };
376
- readonly d1_backup: {
377
- readonly id: "d1_backup";
378
- readonly appDir: "TopoloD1Backup";
379
- readonly name: "topolo-d1-backup";
380
- readonly packageName: "topolo-d1-backup";
381
- readonly productionUrl: null;
382
- readonly services: readonly [];
383
- readonly deployTargets: readonly [{
384
- readonly name: "topolo-d1-backup";
385
- readonly kind: "worker";
386
- readonly apiUrl: null;
387
- readonly domains: readonly [];
388
- readonly routes: readonly [];
389
- readonly serviceId: null;
390
- }];
391
- };
392
559
  readonly developers: {
393
560
  readonly id: "developers";
394
561
  readonly appDir: "TopoloDevelopers";
@@ -410,6 +577,13 @@ declare const APPLICATIONS: {
410
577
  readonly domains: readonly ["developers.topolo.app"];
411
578
  readonly routes: readonly [];
412
579
  readonly serviceId: "developers";
580
+ }, {
581
+ readonly name: "topolo-developers-api";
582
+ readonly kind: "worker";
583
+ readonly apiUrl: null;
584
+ readonly domains: readonly [];
585
+ readonly routes: readonly [];
586
+ readonly serviceId: null;
413
587
  }];
414
588
  };
415
589
  readonly director: {
@@ -424,8 +598,15 @@ declare const APPLICATIONS: {
424
598
  readonly kind: "worker";
425
599
  readonly apiUrl: "https://director.topolo.app";
426
600
  readonly domains: readonly ["director.topolo.app"];
427
- readonly routes: readonly ["director.topolo.app"];
601
+ readonly routes: readonly [];
428
602
  readonly serviceId: "director";
603
+ }, {
604
+ readonly name: "topolo-director-api";
605
+ readonly kind: "worker";
606
+ readonly apiUrl: null;
607
+ readonly domains: readonly [];
608
+ readonly routes: readonly [];
609
+ readonly serviceId: null;
429
610
  }];
430
611
  };
431
612
  readonly docs: {
@@ -437,11 +618,18 @@ declare const APPLICATIONS: {
437
618
  readonly services: readonly [];
438
619
  readonly deployTargets: readonly [{
439
620
  readonly name: "topolo-docs";
440
- readonly kind: "pages";
441
- readonly apiUrl: null;
621
+ readonly kind: "worker";
622
+ readonly apiUrl: "https://docs.topolo.app";
442
623
  readonly domains: readonly ["docs.topolo.app"];
443
624
  readonly routes: readonly [];
444
625
  readonly serviceId: null;
626
+ }, {
627
+ readonly name: "topolo-docs-api";
628
+ readonly kind: "worker";
629
+ readonly apiUrl: null;
630
+ readonly domains: readonly [];
631
+ readonly routes: readonly [];
632
+ readonly serviceId: null;
445
633
  }];
446
634
  };
447
635
  readonly feed: {
@@ -449,22 +637,29 @@ declare const APPLICATIONS: {
449
637
  readonly appDir: "TopoloFeed";
450
638
  readonly name: "TopoloFeed";
451
639
  readonly packageName: "topolo-feed";
452
- readonly productionUrl: "https://feed-api.topolo.app";
640
+ readonly productionUrl: "https://feed.topolo.app";
453
641
  readonly services: readonly ["feed"];
454
642
  readonly deployTargets: readonly [{
455
643
  readonly name: "topolo-feed-analytics-api";
456
644
  readonly kind: "worker";
457
645
  readonly apiUrl: "https://feed-analytics-api.topolo.app";
458
646
  readonly domains: readonly ["feed-analytics-api.topolo.app"];
459
- readonly routes: readonly ["feed-analytics-api.topolo.app"];
647
+ readonly routes: readonly [];
460
648
  readonly serviceId: null;
461
649
  }, {
462
650
  readonly name: "topolo-feed-api";
463
651
  readonly kind: "worker";
464
652
  readonly apiUrl: "https://feed-api.topolo.app";
465
653
  readonly domains: readonly ["feed-api.topolo.app"];
466
- readonly routes: readonly ["feed-api.topolo.app"];
654
+ readonly routes: readonly [];
467
655
  readonly serviceId: "feed";
656
+ }, {
657
+ readonly name: "topolo-feed-web";
658
+ readonly kind: "worker";
659
+ readonly apiUrl: "https://feed.topolo.app";
660
+ readonly domains: readonly ["feed.topolo.app"];
661
+ readonly routes: readonly [];
662
+ readonly serviceId: null;
468
663
  }];
469
664
  };
470
665
  readonly flow: {
@@ -479,21 +674,28 @@ declare const APPLICATIONS: {
479
674
  readonly kind: "worker";
480
675
  readonly apiUrl: "https://flow.topolo.app";
481
676
  readonly domains: readonly ["flow.topolo.app"];
482
- readonly routes: readonly ["flow.topolo.app"];
677
+ readonly routes: readonly [];
483
678
  readonly serviceId: "flow";
679
+ }, {
680
+ readonly name: "topolo-flow-api";
681
+ readonly kind: "worker";
682
+ readonly apiUrl: null;
683
+ readonly domains: readonly [];
684
+ readonly routes: readonly [];
685
+ readonly serviceId: null;
484
686
  }];
485
687
  };
486
688
  readonly forecast: {
487
689
  readonly id: "forecast";
488
690
  readonly appDir: "TopoloForecast";
489
- readonly name: "forecast-cloud";
691
+ readonly name: "topolo-forecast";
490
692
  readonly packageName: "topolo-forecast";
491
693
  readonly productionUrl: "https://forecast.topolo.app";
492
694
  readonly services: readonly ["forecast"];
493
695
  readonly deployTargets: readonly [{
494
696
  readonly name: "topolo-forecast";
495
697
  readonly kind: "worker";
496
- readonly apiUrl: null;
698
+ readonly apiUrl: "https://forecast.topolo.app";
497
699
  readonly domains: readonly ["forecast.topolo.app"];
498
700
  readonly routes: readonly [];
499
701
  readonly serviceId: null;
@@ -518,8 +720,15 @@ declare const APPLICATIONS: {
518
720
  readonly kind: "worker";
519
721
  readonly apiUrl: "https://forms.topolo.app";
520
722
  readonly domains: readonly ["forms.topolo.app"];
521
- readonly routes: readonly ["forms.topolo.app"];
723
+ readonly routes: readonly [];
522
724
  readonly serviceId: "forms";
725
+ }, {
726
+ readonly name: "topolo-forms-api";
727
+ readonly kind: "worker";
728
+ readonly apiUrl: null;
729
+ readonly domains: readonly [];
730
+ readonly routes: readonly [];
731
+ readonly serviceId: null;
523
732
  }];
524
733
  };
525
734
  readonly home: {
@@ -534,8 +743,15 @@ declare const APPLICATIONS: {
534
743
  readonly kind: "worker";
535
744
  readonly apiUrl: "https://home.topolo.app";
536
745
  readonly domains: readonly ["home.topolo.app"];
537
- readonly routes: readonly ["home.topolo.app"];
746
+ readonly routes: readonly [];
538
747
  readonly serviceId: "home";
748
+ }, {
749
+ readonly name: "topolo-home-api";
750
+ readonly kind: "worker";
751
+ readonly apiUrl: null;
752
+ readonly domains: readonly [];
753
+ readonly routes: readonly [];
754
+ readonly serviceId: null;
539
755
  }];
540
756
  };
541
757
  readonly insights: {
@@ -550,8 +766,15 @@ declare const APPLICATIONS: {
550
766
  readonly kind: "worker";
551
767
  readonly apiUrl: "https://insights.topolo.app";
552
768
  readonly domains: readonly ["insights.topolo.app"];
553
- readonly routes: readonly ["insights.topolo.app"];
769
+ readonly routes: readonly [];
554
770
  readonly serviceId: "insights";
771
+ }, {
772
+ readonly name: "topolo-insights-api";
773
+ readonly kind: "worker";
774
+ readonly apiUrl: null;
775
+ readonly domains: readonly [];
776
+ readonly routes: readonly [];
777
+ readonly serviceId: null;
555
778
  }];
556
779
  };
557
780
  readonly inventory: {
@@ -566,8 +789,15 @@ declare const APPLICATIONS: {
566
789
  readonly kind: "worker";
567
790
  readonly apiUrl: "https://inventory.topolo.app";
568
791
  readonly domains: readonly ["inventory.topolo.app"];
569
- readonly routes: readonly ["inventory.topolo.app"];
792
+ readonly routes: readonly [];
570
793
  readonly serviceId: "inventory";
794
+ }, {
795
+ readonly name: "topolo-inventory-api";
796
+ readonly kind: "worker";
797
+ readonly apiUrl: null;
798
+ readonly domains: readonly [];
799
+ readonly routes: readonly [];
800
+ readonly serviceId: null;
571
801
  }];
572
802
  };
573
803
  readonly learn: {
@@ -580,7 +810,7 @@ declare const APPLICATIONS: {
580
810
  readonly deployTargets: readonly [{
581
811
  readonly name: "topolo-learn";
582
812
  readonly kind: "worker";
583
- readonly apiUrl: null;
813
+ readonly apiUrl: "https://learn.topolo.app";
584
814
  readonly domains: readonly ["learn.topolo.app"];
585
815
  readonly routes: readonly [];
586
816
  readonly serviceId: null;
@@ -621,19 +851,17 @@ declare const APPLICATIONS: {
621
851
  readonly kind: "worker";
622
852
  readonly apiUrl: "https://mail.topolo.app";
623
853
  readonly domains: readonly ["mail.topolo.app"];
624
- readonly routes: readonly ["mail.topolo.app"];
854
+ readonly routes: readonly [];
625
855
  readonly serviceId: "mail";
856
+ }, {
857
+ readonly name: "topolo-mail-api";
858
+ readonly kind: "worker";
859
+ readonly apiUrl: null;
860
+ readonly domains: readonly [];
861
+ readonly routes: readonly [];
862
+ readonly serviceId: null;
626
863
  }];
627
864
  };
628
- readonly mcp: {
629
- readonly id: "mcp";
630
- readonly appDir: "TopoloMCP";
631
- readonly name: "@topolo/mcp";
632
- readonly packageName: "@topolo/mcp";
633
- readonly productionUrl: null;
634
- readonly services: readonly [];
635
- readonly deployTargets: readonly [];
636
- };
637
865
  readonly mdm: {
638
866
  readonly id: "mdm";
639
867
  readonly appDir: "TopoloMDM";
@@ -646,33 +874,40 @@ declare const APPLICATIONS: {
646
874
  readonly kind: "worker";
647
875
  readonly apiUrl: "https://mdm-api.topolo.app";
648
876
  readonly domains: readonly ["mdm-api.topolo.app"];
649
- readonly routes: readonly ["mdm-api.topolo.app"];
877
+ readonly routes: readonly [];
650
878
  readonly serviceId: "mdm";
651
879
  }, {
652
880
  readonly name: "topolo-mdm-console";
653
881
  readonly kind: "worker";
654
- readonly apiUrl: null;
882
+ readonly apiUrl: "https://mdm.topolo.app";
655
883
  readonly domains: readonly ["mdm.topolo.app"];
656
- readonly routes: readonly ["mdm.topolo.app"];
884
+ readonly routes: readonly [];
657
885
  readonly serviceId: null;
658
886
  }];
659
887
  };
660
- readonly messaging: {
661
- readonly id: "messaging";
662
- readonly appDir: "TopoloMessaging";
663
- readonly name: "topolo-messaging";
664
- readonly packageName: "topolo-messaging";
888
+ readonly messages: {
889
+ readonly id: "messages";
890
+ readonly appDir: "TopoloMessages";
891
+ readonly name: "topolo-messages";
892
+ readonly packageName: "topolo-messages";
665
893
  readonly productionUrl: "https://messages.topolo.app";
666
- readonly services: readonly ["messaging"];
894
+ readonly services: readonly ["messages"];
667
895
  readonly deployTargets: readonly [{
668
- readonly name: "topolo-messaging";
896
+ readonly name: "topolo-messages";
669
897
  readonly kind: "worker";
670
898
  readonly apiUrl: "https://messages.topolo.app";
671
899
  readonly domains: readonly ["messages.topolo.app"];
672
900
  readonly routes: readonly [];
673
- readonly serviceId: "messaging";
901
+ readonly serviceId: "messages";
902
+ }, {
903
+ readonly name: "topolo-messages-api";
904
+ readonly kind: "worker";
905
+ readonly apiUrl: null;
906
+ readonly domains: readonly [];
907
+ readonly routes: readonly [];
908
+ readonly serviceId: null;
674
909
  }, {
675
- readonly name: "topolo-messaging-dispatch";
910
+ readonly name: "topolo-messages-dispatch";
676
911
  readonly kind: "worker";
677
912
  readonly apiUrl: null;
678
913
  readonly domains: readonly [];
@@ -724,38 +959,45 @@ declare const APPLICATIONS: {
724
959
  readonly appDir: "TopoloObservabilityWatch";
725
960
  readonly name: "topolo-observability-watch";
726
961
  readonly packageName: "topolo-observability-watch";
727
- readonly productionUrl: null;
728
- readonly services: readonly [];
729
- readonly deployTargets: readonly [];
962
+ readonly productionUrl: "https://observability-watch.topolo.app";
963
+ readonly services: readonly ["observability_watch"];
964
+ readonly deployTargets: readonly [{
965
+ readonly name: "topolo-observability-watch";
966
+ readonly kind: "worker";
967
+ readonly apiUrl: "https://observability-watch.topolo.app";
968
+ readonly domains: readonly ["observability-watch.topolo.app"];
969
+ readonly routes: readonly [];
970
+ readonly serviceId: "observability_watch";
971
+ }];
730
972
  };
731
973
  readonly one: {
732
974
  readonly id: "one";
733
975
  readonly appDir: "TopoloOne";
734
- readonly name: "topolo-oneclick-sso";
976
+ readonly name: "TopoloOne";
735
977
  readonly packageName: "topolo-oneclick-sso";
736
978
  readonly productionUrl: "https://one.topolo.app";
737
979
  readonly services: readonly ["one"];
738
980
  readonly deployTargets: readonly [{
739
981
  readonly name: "topolo-one";
740
- readonly kind: "pages";
741
- readonly apiUrl: null;
742
- readonly domains: readonly ["one.topolo.app"];
743
- readonly routes: readonly [];
744
- readonly serviceId: null;
745
- }, {
746
- readonly name: "topolo-one-website";
747
982
  readonly kind: "worker";
748
983
  readonly apiUrl: null;
749
- readonly domains: readonly ["topolo.io", "www.topolo.io"];
984
+ readonly domains: readonly [];
750
985
  readonly routes: readonly [];
751
986
  readonly serviceId: null;
752
987
  }, {
753
- readonly name: "topolo-one-worker";
988
+ readonly name: "topolo-one-api";
754
989
  readonly kind: "worker";
755
990
  readonly apiUrl: "https://one.topolo.app";
756
- readonly domains: readonly ["one.topolo.app", "topolo.app", "www.topolo.app"];
757
- readonly routes: readonly ["one.topolo.app/*", "topolo.app", "www.topolo.app/*"];
991
+ readonly domains: readonly ["one.topolo.app"];
992
+ readonly routes: readonly ["one.topolo.app/*", "www.topolo.app/*"];
758
993
  readonly serviceId: "one";
994
+ }, {
995
+ readonly name: "topolo-one-website";
996
+ readonly kind: "worker";
997
+ readonly apiUrl: "https://topolo.io";
998
+ readonly domains: readonly ["topolo.io"];
999
+ readonly routes: readonly ["topolo.io", "www.topolo.io"];
1000
+ readonly serviceId: null;
759
1001
  }];
760
1002
  };
761
1003
  readonly p2p: {
@@ -770,8 +1012,15 @@ declare const APPLICATIONS: {
770
1012
  readonly kind: "worker";
771
1013
  readonly apiUrl: "https://p2p.topolo.app";
772
1014
  readonly domains: readonly ["p2p.topolo.app"];
773
- readonly routes: readonly ["p2p.topolo.app"];
1015
+ readonly routes: readonly [];
774
1016
  readonly serviceId: "p2p";
1017
+ }, {
1018
+ readonly name: "topolo-p2p-api";
1019
+ readonly kind: "worker";
1020
+ readonly apiUrl: null;
1021
+ readonly domains: readonly [];
1022
+ readonly routes: readonly [];
1023
+ readonly serviceId: null;
775
1024
  }];
776
1025
  };
777
1026
  readonly pay: {
@@ -788,6 +1037,13 @@ declare const APPLICATIONS: {
788
1037
  readonly domains: readonly ["pay.topolo.app"];
789
1038
  readonly routes: readonly [];
790
1039
  readonly serviceId: "pay";
1040
+ }, {
1041
+ readonly name: "topolo-pay-api";
1042
+ readonly kind: "worker";
1043
+ readonly apiUrl: null;
1044
+ readonly domains: readonly [];
1045
+ readonly routes: readonly [];
1046
+ readonly serviceId: null;
791
1047
  }];
792
1048
  };
793
1049
  readonly people: {
@@ -802,8 +1058,15 @@ declare const APPLICATIONS: {
802
1058
  readonly kind: "worker";
803
1059
  readonly apiUrl: "https://people.topolo.app";
804
1060
  readonly domains: readonly ["people.topolo.app"];
805
- readonly routes: readonly ["people.topolo.app"];
1061
+ readonly routes: readonly [];
806
1062
  readonly serviceId: "people";
1063
+ }, {
1064
+ readonly name: "topolo-people-api";
1065
+ readonly kind: "worker";
1066
+ readonly apiUrl: null;
1067
+ readonly domains: readonly [];
1068
+ readonly routes: readonly [];
1069
+ readonly serviceId: null;
807
1070
  }];
808
1071
  };
809
1072
  readonly pulse: {
@@ -811,9 +1074,23 @@ declare const APPLICATIONS: {
811
1074
  readonly appDir: "TopoloPulse";
812
1075
  readonly name: "topolo-pulse";
813
1076
  readonly packageName: "topolo-pulse";
814
- readonly productionUrl: null;
815
- readonly services: readonly [];
816
- readonly deployTargets: readonly [];
1077
+ readonly productionUrl: "https://pulse.topolo.app";
1078
+ readonly services: readonly ["pulse"];
1079
+ readonly deployTargets: readonly [{
1080
+ readonly name: "topolo-pulse";
1081
+ readonly kind: "worker";
1082
+ readonly apiUrl: "https://pulse.topolo.app";
1083
+ readonly domains: readonly ["pulse.topolo.app"];
1084
+ readonly routes: readonly [];
1085
+ readonly serviceId: "pulse";
1086
+ }, {
1087
+ readonly name: "topolo-pulse-api";
1088
+ readonly kind: "worker";
1089
+ readonly apiUrl: null;
1090
+ readonly domains: readonly [];
1091
+ readonly routes: readonly [];
1092
+ readonly serviceId: null;
1093
+ }];
817
1094
  };
818
1095
  readonly quro: {
819
1096
  readonly id: "quro";
@@ -827,7 +1104,7 @@ declare const APPLICATIONS: {
827
1104
  readonly kind: "worker";
828
1105
  readonly apiUrl: "https://api.ol0.me";
829
1106
  readonly domains: readonly ["api.ol0.me"];
830
- readonly routes: readonly [];
1107
+ readonly routes: readonly ["api.ol0.me/*"];
831
1108
  readonly serviceId: "quro.api";
832
1109
  }, {
833
1110
  readonly name: "quro-redirect-system";
@@ -839,7 +1116,7 @@ declare const APPLICATIONS: {
839
1116
  }, {
840
1117
  readonly name: "quro-ui";
841
1118
  readonly kind: "worker";
842
- readonly apiUrl: null;
1119
+ readonly apiUrl: "https://quro.topolo.app";
843
1120
  readonly domains: readonly ["quro.topolo.app"];
844
1121
  readonly routes: readonly [];
845
1122
  readonly serviceId: null;
@@ -855,7 +1132,7 @@ declare const APPLICATIONS: {
855
1132
  readonly deployTargets: readonly [{
856
1133
  readonly name: "topolo-roadmapper";
857
1134
  readonly kind: "worker";
858
- readonly apiUrl: null;
1135
+ readonly apiUrl: "https://roadmapper.topolo.app";
859
1136
  readonly domains: readonly ["roadmapper.topolo.app"];
860
1137
  readonly routes: readonly [];
861
1138
  readonly serviceId: null;
@@ -880,8 +1157,15 @@ declare const APPLICATIONS: {
880
1157
  readonly kind: "worker";
881
1158
  readonly apiUrl: "https://sign.topolo.app";
882
1159
  readonly domains: readonly ["sign.topolo.app"];
883
- readonly routes: readonly ["sign.topolo.app"];
1160
+ readonly routes: readonly [];
884
1161
  readonly serviceId: "sign";
1162
+ }, {
1163
+ readonly name: "topolo-sign-api";
1164
+ readonly kind: "worker";
1165
+ readonly apiUrl: null;
1166
+ readonly domains: readonly [];
1167
+ readonly routes: readonly [];
1168
+ readonly serviceId: null;
885
1169
  }];
886
1170
  };
887
1171
  readonly social_studio: {
@@ -894,7 +1178,7 @@ declare const APPLICATIONS: {
894
1178
  readonly deployTargets: readonly [{
895
1179
  readonly name: "topolo-social-studio";
896
1180
  readonly kind: "worker";
897
- readonly apiUrl: null;
1181
+ readonly apiUrl: "https://studio.topolo.app";
898
1182
  readonly domains: readonly ["studio.topolo.app"];
899
1183
  readonly routes: readonly [];
900
1184
  readonly serviceId: null;
@@ -923,8 +1207,8 @@ declare const APPLICATIONS: {
923
1207
  readonly services: readonly ["socialize"];
924
1208
  readonly deployTargets: readonly [{
925
1209
  readonly name: "topolo-socialize";
926
- readonly kind: "pages";
927
- readonly apiUrl: null;
1210
+ readonly kind: "worker";
1211
+ readonly apiUrl: "https://socialize.topolo.app";
928
1212
  readonly domains: readonly ["socialize.topolo.app"];
929
1213
  readonly routes: readonly [];
930
1214
  readonly serviceId: null;
@@ -944,6 +1228,29 @@ declare const APPLICATIONS: {
944
1228
  readonly serviceId: null;
945
1229
  }];
946
1230
  };
1231
+ readonly spaces: {
1232
+ readonly id: "spaces";
1233
+ readonly appDir: "TopoloSpaces";
1234
+ readonly name: "topolo-spaces";
1235
+ readonly packageName: "@topolo/spaces";
1236
+ readonly productionUrl: "https://spaces.topolo.app";
1237
+ readonly services: readonly ["spaces"];
1238
+ readonly deployTargets: readonly [{
1239
+ readonly name: "topolo-spaces";
1240
+ readonly kind: "worker";
1241
+ readonly apiUrl: "https://spaces.topolo.app";
1242
+ readonly domains: readonly ["spaces.topolo.app"];
1243
+ readonly routes: readonly [];
1244
+ readonly serviceId: "spaces";
1245
+ }, {
1246
+ readonly name: "topolo-spaces-api";
1247
+ readonly kind: "worker";
1248
+ readonly apiUrl: null;
1249
+ readonly domains: readonly [];
1250
+ readonly routes: readonly [];
1251
+ readonly serviceId: null;
1252
+ }];
1253
+ };
947
1254
  readonly status: {
948
1255
  readonly id: "status";
949
1256
  readonly appDir: "TopoloStatus";
@@ -956,10 +1263,33 @@ declare const APPLICATIONS: {
956
1263
  readonly kind: "worker";
957
1264
  readonly apiUrl: "https://status.topolo.app";
958
1265
  readonly domains: readonly ["status.topolo.app"];
959
- readonly routes: readonly ["status.topolo.app"];
1266
+ readonly routes: readonly [];
960
1267
  readonly serviceId: "status";
961
1268
  }];
962
1269
  };
1270
+ readonly success: {
1271
+ readonly id: "success";
1272
+ readonly appDir: "TopoloSuccess";
1273
+ readonly name: "topolo-success";
1274
+ readonly packageName: "topolo-success";
1275
+ readonly productionUrl: "https://success.topolo.app";
1276
+ readonly services: readonly ["success"];
1277
+ readonly deployTargets: readonly [{
1278
+ readonly name: "topolo-success";
1279
+ readonly kind: "worker";
1280
+ readonly apiUrl: "https://success.topolo.app";
1281
+ readonly domains: readonly ["success.topolo.app"];
1282
+ readonly routes: readonly ["success.topolo.app"];
1283
+ readonly serviceId: "success";
1284
+ }, {
1285
+ readonly name: "topolo-success-api";
1286
+ readonly kind: "worker";
1287
+ readonly apiUrl: null;
1288
+ readonly domains: readonly [];
1289
+ readonly routes: readonly [];
1290
+ readonly serviceId: null;
1291
+ }];
1292
+ };
963
1293
  readonly support: {
964
1294
  readonly id: "support";
965
1295
  readonly appDir: "TopoloSupport";
@@ -974,6 +1304,13 @@ declare const APPLICATIONS: {
974
1304
  readonly domains: readonly ["support.topolo.app"];
975
1305
  readonly routes: readonly ["support.topolo.app/*"];
976
1306
  readonly serviceId: "support";
1307
+ }, {
1308
+ readonly name: "topolo-support-api";
1309
+ readonly kind: "worker";
1310
+ readonly apiUrl: null;
1311
+ readonly domains: readonly [];
1312
+ readonly routes: readonly [];
1313
+ readonly serviceId: null;
977
1314
  }];
978
1315
  };
979
1316
  readonly survey: {
@@ -988,8 +1325,15 @@ declare const APPLICATIONS: {
988
1325
  readonly kind: "worker";
989
1326
  readonly apiUrl: "https://survey.topolo.app";
990
1327
  readonly domains: readonly ["survey.topolo.app"];
991
- readonly routes: readonly ["survey.topolo.app"];
1328
+ readonly routes: readonly [];
992
1329
  readonly serviceId: "survey";
1330
+ }, {
1331
+ readonly name: "topolo-survey-api";
1332
+ readonly kind: "worker";
1333
+ readonly apiUrl: null;
1334
+ readonly domains: readonly [];
1335
+ readonly routes: readonly [];
1336
+ readonly serviceId: null;
993
1337
  }];
994
1338
  };
995
1339
  readonly voice: {
@@ -1004,8 +1348,15 @@ declare const APPLICATIONS: {
1004
1348
  readonly kind: "worker";
1005
1349
  readonly apiUrl: "https://voice.topolo.app";
1006
1350
  readonly domains: readonly ["voice.topolo.app"];
1007
- readonly routes: readonly ["voice.topolo.app"];
1351
+ readonly routes: readonly [];
1008
1352
  readonly serviceId: "voice";
1353
+ }, {
1354
+ readonly name: "topolo-voice-api";
1355
+ readonly kind: "worker";
1356
+ readonly apiUrl: null;
1357
+ readonly domains: readonly [];
1358
+ readonly routes: readonly [];
1359
+ readonly serviceId: null;
1009
1360
  }];
1010
1361
  };
1011
1362
  readonly web: {
@@ -1027,12 +1378,12 @@ declare const APPLICATIONS: {
1027
1378
  readonly kind: "worker";
1028
1379
  readonly apiUrl: "https://sites.topolo.app";
1029
1380
  readonly domains: readonly ["sites.topolo.app"];
1030
- readonly routes: readonly [];
1381
+ readonly routes: readonly ["*.sites.topolo.app/*", "sites.topolo.app"];
1031
1382
  readonly serviceId: null;
1032
1383
  }, {
1033
1384
  readonly name: "topolo-web-studio";
1034
1385
  readonly kind: "worker";
1035
- readonly apiUrl: null;
1386
+ readonly apiUrl: "https://web.topolo.app";
1036
1387
  readonly domains: readonly ["web.topolo.app"];
1037
1388
  readonly routes: readonly [];
1038
1389
  readonly serviceId: null;
@@ -1110,8 +1461,8 @@ declare const APPLICATION_REQUIREMENTS: readonly [{
1110
1461
  readonly title: "Use the shared Topolo auth boundary";
1111
1462
  readonly summary: "Applications must derive identity, organization, scopes, and service entitlement from TopoloAuth rather than inventing parallel auth state.";
1112
1463
  readonly appliesTo: readonly ["browser", "api", "tooling", "agent_surface"];
1113
- readonly evidence: readonly ["@topolo/auth-client or @topolo/auth-middleware is used where applicable", "No public command, tool, or SDK method accepts orgId", "Service slug and Auth service registration are documented for protected services"];
1114
- readonly implementation: readonly ["Use shared auth packages instead of copying token parsing or browser storage flows", "Derive organization from the credential on every request", "Route OAuth, refresh, logout, and SSO paths according to the shared Auth contract"];
1464
+ readonly evidence: readonly ["@topolo/auth-client or @topolo-io/worker-runtime is used where applicable", "No public command, tool, or SDK method accepts orgId", "Service slug and Auth service registration are documented for protected services"];
1465
+ readonly implementation: readonly ["Use shared auth/runtime packages instead of copying token parsing, gateway, or browser storage flows", "Derive organization from the credential on every request", "Route OAuth, refresh, logout, and SSO paths according to the shared Auth contract"];
1115
1466
  }, {
1116
1467
  readonly id: "shared-shell-and-launcher";
1117
1468
  readonly title: "Use the shared shell, launcher, and account menu";
@@ -1124,8 +1475,8 @@ declare const APPLICATION_REQUIREMENTS: readonly [{
1124
1475
  readonly title: "Register protected APIs as platform services";
1125
1476
  readonly summary: "Callable app APIs need a stable service ID, service slug, permissions, role bundles, and API-key scopes before agents or users rely on them.";
1126
1477
  readonly appliesTo: readonly ["api"];
1127
- readonly evidence: readonly ["Auth service catalog contains the service ID and slug", "Permissions, role bundles, and API-key scopes exist for the service", "SDK, CLI, and MCP service discovery include the callable production API"];
1128
- readonly implementation: readonly ["Add production Worker api_url metadata before adding an SDK service ID", "Expose stable service IDs through DEFAULT_SERVICE_URLS", "Keep typed SDK/CLI/MCP surfaces in sync when an API contract stabilizes"];
1478
+ readonly evidence: readonly ["Auth service catalog contains the service ID and slug", "Permissions, role bundles, and API-key scopes exist for the service", "SDK, CLI, and MCP service discovery include the callable production API", "CloudControl production HTTP targets classify agent reachability with sdk_service_id or agent_callable:false"];
1479
+ readonly implementation: readonly ["Add production Worker api_url metadata and sdk_service_id for every agent-callable API target", "Mark browser, documentation, and runtime-only Worker targets with agent_callable:false", "Expose stable service IDs through generated DEFAULT_SERVICE_URLS and live catalog discovery", "Keep typed SDK/CLI/MCP surfaces in sync when an API contract stabilizes"];
1129
1480
  }, {
1130
1481
  readonly id: "organization-scoped-data";
1131
1482
  readonly title: "Keep application data organization-scoped";
@@ -1193,140 +1544,6 @@ declare function auditAllApplicationRequirements(applicationIds?: readonly Appli
1193
1544
  declare const DEFAULT_SERVICE_URLS: Record<ServiceId, string>;
1194
1545
  declare function resolveServiceUrl(service: ServiceId, overrides?: Partial<Record<ServiceId, string>>): string;
1195
1546
 
1196
- interface TopoloClientOptions {
1197
- credential: TopoloCredential;
1198
- agent: AgentIdentity;
1199
- /** Per-service URL overrides. Useful for staging/dev. */
1200
- serviceUrls?: Partial<Record<ServiceId, string>>;
1201
- /**
1202
- * When true, mutating helpers (POST/PUT/PATCH/DELETE) require callers to pass
1203
- * `{ confirm: true }`. Defaults to true. Set false only for trusted surfaces.
1204
- */
1205
- requireConfirmForWrites?: boolean;
1206
- /** HTTP request timeout (ms). Default 30s. */
1207
- timeoutMs?: number;
1208
- /** Injected fetch, for testing. Defaults to global fetch. */
1209
- fetch?: typeof fetch;
1210
- /**
1211
- * Observability hook. Fires once per request lifecycle (`request` at start,
1212
- * then exactly one of `response` or `error`). Safe to leave unset — off by
1213
- * default. Intended for CLI/MCP hosts to surface request-level diagnostics
1214
- * and for consumers building their own logging/tracing.
1215
- */
1216
- debug?: (event: TopoloDebugEvent) => void;
1217
- }
1218
- type TopoloDebugEvent = {
1219
- phase: 'request';
1220
- method: string;
1221
- service: ServiceId;
1222
- path: string;
1223
- url: string;
1224
- requestId: string;
1225
- } | {
1226
- phase: 'response';
1227
- method: string;
1228
- service: ServiceId;
1229
- path: string;
1230
- url: string;
1231
- requestId: string;
1232
- status: number;
1233
- durationMs: number;
1234
- } | {
1235
- phase: 'error';
1236
- method: string;
1237
- service: ServiceId;
1238
- path: string;
1239
- url: string;
1240
- requestId: string;
1241
- durationMs: number;
1242
- error: string;
1243
- status?: number;
1244
- };
1245
- interface RequestOptions {
1246
- service: ServiceId;
1247
- path: string;
1248
- method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
1249
- query?: Record<string, string | number | boolean | undefined>;
1250
- body?: unknown;
1251
- /** Explicit write-acknowledgement for mutating calls. */
1252
- confirm?: boolean;
1253
- /** Extra headers appended after auth/audit headers. */
1254
- headers?: Record<string, string>;
1255
- signal?: AbortSignal;
1256
- }
1257
- declare class TopoloClient {
1258
- private readonly credential;
1259
- private readonly agent;
1260
- private readonly serviceUrls?;
1261
- private readonly requireConfirmForWrites;
1262
- private readonly timeoutMs;
1263
- private readonly fetchImpl;
1264
- private readonly debug?;
1265
- /**
1266
- * Process-wide cache for slug → service-id lookups. Keyed by
1267
- * `${authBaseUrl}|${slug}` so multiple `TopoloClient` instances pointing at
1268
- * the same Auth share, but staging vs prod don't poison each other.
1269
- * Cleared via `TopoloClient.clearServiceIdCache()` if a test needs it.
1270
- */
1271
- private static readonly serviceIdCache;
1272
- /**
1273
- * Drop the slug→service-id cache. Test-only — production callers should
1274
- * let the 5-minute TTL expire naturally.
1275
- */
1276
- static clearServiceIdCache(): void;
1277
- constructor(options: TopoloClientOptions);
1278
- private emit;
1279
- /**
1280
- * Low-level JSON request. Prefer the typed module helpers (identity, crm, ...)
1281
- * for anything a caller would reach for; this stays exported for escape-hatch
1282
- * use and for the generic `topolo api` / MCP passthrough tool.
1283
- */
1284
- request<T = unknown>(opts: RequestOptions): Promise<T>;
1285
- /**
1286
- * Resolve a service-slug → opaque service-id via TopoloAuth.
1287
- *
1288
- * Replaces the SDK-baked `PLATFORM_SERVICE_IDS` map (deprecated in 0.3.0,
1289
- * removed in 0.4.0). Slug shape accepted: either the canonical Auth slug
1290
- * (e.g. `topolo-notify`) or the SDK short id (`notify`) — Auth's resolver
1291
- * understands both.
1292
- *
1293
- * Cache: 5 minutes per process per `(slug, auth_base_url)`. Negative
1294
- * results (404) are cached for 60s so a typo doesn't hot-loop the
1295
- * resolver. Returns null when the slug isn't registered — callers decide
1296
- * whether to throw.
1297
- *
1298
- * No credential is sent: the endpoint is public (slugs aren't secret).
1299
- * This keeps the resolver usable during early bootstrap before a caller
1300
- * has acquired an access token.
1301
- */
1302
- getServiceIdBySlug(slug: string): Promise<string | null>;
1303
- /**
1304
- * Introspect the current credential. Returns the caller's resolved identity,
1305
- * organization, and permission set. Used by CLI `whoami` and by MCP to gate
1306
- * advertised tools by scope.
1307
- *
1308
- * Both JWT access tokens and platform API keys are resolved via the unified
1309
- * `GET /api/auth/me` endpoint on TopoloAuth, which does not require service
1310
- * credentials. The caller's possession of the credential secret is proof.
1311
- */
1312
- introspect(): Promise<CredentialIntrospection>;
1313
- }
1314
- interface CredentialIntrospection {
1315
- kind: 'api_key' | 'access_token';
1316
- user: {
1317
- id: string;
1318
- email: string;
1319
- name: string | null;
1320
- role: string;
1321
- permissions: string[];
1322
- };
1323
- organization: {
1324
- id: string;
1325
- slug: string;
1326
- name: string;
1327
- } | null;
1328
- }
1329
-
1330
1547
  declare class TopoloSdkError extends Error {
1331
1548
  readonly code: string;
1332
1549
  constructor(code: string, message: string);
@@ -1831,4 +2048,4 @@ declare function createTopolo(options: TopoloClientOptions): {
1831
2048
  };
1832
2049
  type Topolo = ReturnType<typeof createTopolo>;
1833
2050
 
1834
- export { APPLICATIONS, APPLICATION_REQUIREMENTS, APPLICATION_REQUIREMENTS_VERSION, type AgentIdentity, type ApplicationCatalogEntry, type ApplicationDeployTarget, type ApplicationId, type ApplicationRequirement, type ApplicationRequirementAudit, type ApplicationRequirementFinding, type ApplicationRequirementMigrationItem, type ApplicationRequirementScope, type ApplicationRequirementScore, type ApplicationRequirementStatus, type ApplicationRequirementsAuditReport, type CredentialIntrospection, type CrmContactSummary, CrmModule, DEFAULT_SERVICE_URLS, type DeviceAuthorizationResponse, IdentityModule, type ListContactsOptions, type ListContactsResult, type OAuthHelperOptions, type P2PActionDetail, type P2PActionRequestInput, type P2PActionRequestResult, type P2PActionRow, type P2PActionRun, type P2PCapability, type P2PConnection, type P2PHold, type P2PLedgerEntry, P2PModule, type P2PPolicy, type P2PPricingModel, type P2PSettlementBatch, type P2PSettlementGroup, PLATFORM_SERVICE_IDS, type PublishCapabilityInput, type RequestOptions, type ServiceId, TOPOLO_WIDGET_ENDPOINT, TOPOLO_WIDGET_REFRESH_INTERVAL_MS, type TokenResponse, type Topolo, TopoloAuthError, type TopoloChartWidget, TopoloClient, type TopoloClientOptions, type TopoloCredential, type TopoloDebugEvent, TopoloHttpError, type TopoloNotificationsWidget, TopoloOAuth, TopoloPermissionError, type TopoloQuickActionsWidget, type TopoloRecentActivityWidget, TopoloSdkError, type TopoloStatsWidget, type TopoloWidget, type TopoloWidgetActionItem, type TopoloWidgetActivityItem, type TopoloWidgetApiResponse, type TopoloWidgetBase, type TopoloWidgetConfig, type TopoloWidgetDraft, type TopoloWidgetMetric, type TopoloWidgetNotificationItem, type TopoloWidgetResponseOptions, type TopoloWidgetSnapshotMetadata, type TopoloWidgetSnapshotMetric, type TopoloWidgetType, type TopoloWidgetValidationResult, applicationRequirementScopes, auditAllApplicationRequirements, auditApplicationRequirements, createTopolo, createTopoloWidgetError, createTopoloWidgetResponse, defineTopoloChartWidget, defineTopoloNotificationsWidget, defineTopoloQuickActionsWidget, defineTopoloRecentActivityWidget, defineTopoloStatsWidget, requirementsForApplication, resolveServiceUrl, validateTopoloWidgetResponse };
2051
+ export { APPLICATIONS, APPLICATION_REQUIREMENTS, APPLICATION_REQUIREMENTS_VERSION, type AgentIdentity, type ApplicationCatalogEntry, type ApplicationDeployTarget, type ApplicationId, type ApplicationRequirement, type ApplicationRequirementAudit, type ApplicationRequirementFinding, type ApplicationRequirementMigrationItem, type ApplicationRequirementScope, type ApplicationRequirementScore, type ApplicationRequirementStatus, type ApplicationRequirementsAuditReport, type CredentialIntrospection, type CrmContactSummary, CrmModule, DEFAULT_SERVICE_URLS, type DeviceAuthorizationResponse, IdentityModule, type ListContactsOptions, type ListContactsResult, type OAuthHelperOptions, type P2PActionDetail, type P2PActionRequestInput, type P2PActionRequestResult, type P2PActionRow, type P2PActionRun, type P2PCapability, type P2PConnection, type P2PHold, type P2PLedgerEntry, P2PModule, type P2PPolicy, type P2PPricingModel, type P2PSettlementBatch, type P2PSettlementGroup, type PublishCapabilityInput, type RequestOptions, type ServiceId, TOPOLO_WIDGET_ENDPOINT, TOPOLO_WIDGET_REFRESH_INTERVAL_MS, type TokenResponse, type Topolo, TopoloAuthError, type TopoloChartWidget, TopoloClient, type TopoloClientOptions, type TopoloCredential, type TopoloDebugEvent, TopoloHttpError, type TopoloNotificationsWidget, TopoloOAuth, TopoloPermissionError, type TopoloQuickActionsWidget, type TopoloRecentActivityWidget, TopoloSdkError, type TopoloServiceCatalogEntry, type TopoloStatsWidget, type TopoloWidget, type TopoloWidgetActionItem, type TopoloWidgetActivityItem, type TopoloWidgetApiResponse, type TopoloWidgetBase, type TopoloWidgetConfig, type TopoloWidgetDraft, type TopoloWidgetMetric, type TopoloWidgetNotificationItem, type TopoloWidgetResponseOptions, type TopoloWidgetSnapshotMetadata, type TopoloWidgetSnapshotMetric, type TopoloWidgetType, type TopoloWidgetValidationResult, applicationRequirementScopes, auditAllApplicationRequirements, auditApplicationRequirements, createTopolo, createTopoloWidgetError, createTopoloWidgetResponse, defineTopoloChartWidget, defineTopoloNotificationsWidget, defineTopoloQuickActionsWidget, defineTopoloRecentActivityWidget, defineTopoloStatsWidget, requirementsForApplication, resolveServiceUrl, validateTopoloWidgetResponse };