@topolo/sdk 0.2.2 → 0.2.4

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.cjs CHANGED
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -110,13 +109,14 @@ var SERVICES = {
110
109
  chat: "https://chat.topolo.app",
111
110
  commerce: "https://topolo-commerce-api.topolo.workers.dev",
112
111
  crm: "https://crm-api.topolo.app",
112
+ feed: "https://topolo-feed-api.topolo.app",
113
113
  forecast: "https://forecast-worker-production.topolo.workers.dev",
114
114
  learn: "https://topololearn-api.topolo.workers.dev",
115
115
  mail: "https://mail.topolo.app",
116
116
  mdm: "https://topolo-mdm-api.topolo.app",
117
117
  messaging: "https://messages.topolo.app",
118
118
  nexus: "https://topolo-nexus-gateway.topolo.workers.dev",
119
- one: "https://topoloone-worker.topolo.workers.dev",
119
+ one: "https://one.topolo.app",
120
120
  pay: "https://topolo-pay.topolo.workers.dev",
121
121
  "quro.api": "https://api.ol0.me",
122
122
  "quro.redirect": "https://ol0.me",
@@ -448,24 +448,34 @@ var APPLICATIONS = {
448
448
  "appDir": "TopoloFeed",
449
449
  "name": "TopoloFeed",
450
450
  "packageName": null,
451
- "productionUrl": null,
452
- "services": [],
451
+ "productionUrl": "https://topolo-feed-api.topolo.app",
452
+ "services": [
453
+ "feed"
454
+ ],
453
455
  "deployTargets": [
454
456
  {
455
457
  "name": "topolo-feed-analytics-api",
456
458
  "kind": "worker",
457
- "apiUrl": null,
458
- "domains": [],
459
- "routes": [],
459
+ "apiUrl": "https://topolo-feed-analytics-api.topolo.app",
460
+ "domains": [
461
+ "topolo-feed-analytics-api.topolo.app"
462
+ ],
463
+ "routes": [
464
+ "topolo-feed-analytics-api.topolo.app"
465
+ ],
460
466
  "serviceId": null
461
467
  },
462
468
  {
463
469
  "name": "topolo-feed-api",
464
470
  "kind": "worker",
465
- "apiUrl": null,
466
- "domains": [],
467
- "routes": [],
468
- "serviceId": null
471
+ "apiUrl": "https://topolo-feed-api.topolo.app",
472
+ "domains": [
473
+ "topolo-feed-api.topolo.app"
474
+ ],
475
+ "routes": [
476
+ "topolo-feed-api.topolo.app"
477
+ ],
478
+ "serviceId": "feed"
469
479
  }
470
480
  ]
471
481
  },
@@ -705,7 +715,7 @@ var APPLICATIONS = {
705
715
  {
706
716
  "name": "topoloone-worker",
707
717
  "kind": "worker",
708
- "apiUrl": "https://topoloone-worker.topolo.workers.dev",
718
+ "apiUrl": "https://one.topolo.app",
709
719
  "domains": [],
710
720
  "routes": [
711
721
  "one.topolo.app/*"
@@ -1004,10 +1014,12 @@ var APPLICATION_REQUIREMENTS = [
1004
1014
  evidence: [
1005
1015
  "@topolo/ui-kit is used for the platform shell where the app has authenticated UI",
1006
1016
  "The shared launcher/app switcher is reachable from authenticated app chrome",
1007
- "Account menu and sign-out behavior use the shared platform affordance"
1017
+ "Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu"
1008
1018
  ],
1009
1019
  implementation: [
1010
- "Use TopoloShell or the current shared shell contract for authenticated app layouts",
1020
+ "Use TopoloAppShell for authenticated app layouts",
1021
+ "Use TopoloAccountMenu when a partial-shell surface still needs account chrome",
1022
+ "Pass app-specific account actions as additive menu items instead of forking dropdowns",
1011
1023
  "Use shared design tokens and platform UI primitives before creating local equivalents",
1012
1024
  "Keep mobile and desktop shell behavior aligned with the platform UI kit"
1013
1025
  ]
@@ -1111,8 +1123,9 @@ var APPLICATION_REQUIREMENTS = [
1111
1123
  ];
1112
1124
  function applicationRequirementScopes(application) {
1113
1125
  const scopes = /* @__PURE__ */ new Set(["all"]);
1114
- const hasBrowserSurface = Boolean(application.productionUrl) || application.deployTargets.some((target) => target.kind === "pages");
1115
- const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.apiUrl));
1126
+ const deployTargets = application.deployTargets;
1127
+ const hasBrowserSurface = Boolean(application.productionUrl) || deployTargets.some((target) => target.kind === "pages");
1128
+ const hasApiSurface = application.services.length > 0 || deployTargets.some((target) => Boolean(target.apiUrl));
1116
1129
  if (hasBrowserSurface) scopes.add("browser");
1117
1130
  if (hasApiSurface) scopes.add("api");
1118
1131
  if (application.id === "cli" || application.id === "mcp" || application.id === "cloudcontrol") {
@@ -1300,10 +1313,11 @@ function statusRank(status) {
1300
1313
  // src/services.ts
1301
1314
  var DEFAULT_SERVICE_URLS = SERVICES;
1302
1315
  function resolveServiceUrl(service, overrides) {
1303
- const override = overrides?.[service];
1316
+ var _a;
1317
+ const override = overrides == null ? void 0 : overrides[service];
1304
1318
  if (override) return override;
1305
1319
  const envKey = `TOPOLO_SERVICE_URL_${service.replace(/\./g, "_").toUpperCase()}`;
1306
- const envValue = typeof process !== "undefined" ? process.env?.[envKey] : void 0;
1320
+ const envValue = typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a[envKey] : void 0;
1307
1321
  if (envValue) return envValue;
1308
1322
  return DEFAULT_SERVICE_URLS[service];
1309
1323
  }
@@ -1319,8 +1333,9 @@ var TopoloClient = class {
1319
1333
  fetchImpl;
1320
1334
  debug;
1321
1335
  constructor(options) {
1336
+ var _a;
1322
1337
  if (!options.credential) throw new TopoloAuthError("credential is required");
1323
- if (!options.agent?.clientName) throw new TopoloAuthError("agent.clientName is required");
1338
+ if (!((_a = options.agent) == null ? void 0 : _a.clientName)) throw new TopoloAuthError("agent.clientName is required");
1324
1339
  this.credential = options.credential;
1325
1340
  this.agent = options.agent;
1326
1341
  this.serviceUrls = options.serviceUrls;
@@ -1510,6 +1525,7 @@ var CrmModule = class {
1510
1525
  }
1511
1526
  client;
1512
1527
  async listContacts(options = {}) {
1528
+ var _a, _b, _c;
1513
1529
  const res = await this.client.request({
1514
1530
  service: "crm",
1515
1531
  path: "/api/contacts",
@@ -1519,12 +1535,12 @@ var CrmModule = class {
1519
1535
  pageSize: options.pageSize
1520
1536
  }
1521
1537
  });
1522
- const rows = Array.isArray(res?.contacts) ? res.contacts : Array.isArray(res?.data) ? res.data : [];
1538
+ const rows = Array.isArray(res == null ? void 0 : res.contacts) ? res.contacts : Array.isArray(res == null ? void 0 : res.data) ? res.data : [];
1523
1539
  return {
1524
1540
  contacts: rows.map(toSummary),
1525
- total: res?.total ?? res?.pagination?.total ?? rows.length,
1526
- page: res?.page ?? res?.pagination?.page ?? options.page ?? 1,
1527
- pageSize: res?.pageSize ?? res?.pagination?.pageSize ?? options.pageSize ?? rows.length
1541
+ total: (res == null ? void 0 : res.total) ?? ((_a = res == null ? void 0 : res.pagination) == null ? void 0 : _a.total) ?? rows.length,
1542
+ page: (res == null ? void 0 : res.page) ?? ((_b = res == null ? void 0 : res.pagination) == null ? void 0 : _b.page) ?? options.page ?? 1,
1543
+ pageSize: (res == null ? void 0 : res.pageSize) ?? ((_c = res == null ? void 0 : res.pagination) == null ? void 0 : _c.pageSize) ?? options.pageSize ?? rows.length
1528
1544
  };
1529
1545
  }
1530
1546
  async getContact(contactId) {
package/dist/index.d.cts CHANGED
@@ -40,13 +40,14 @@ declare const SERVICES: {
40
40
  readonly chat: "https://chat.topolo.app";
41
41
  readonly commerce: "https://topolo-commerce-api.topolo.workers.dev";
42
42
  readonly crm: "https://crm-api.topolo.app";
43
+ readonly feed: "https://topolo-feed-api.topolo.app";
43
44
  readonly forecast: "https://forecast-worker-production.topolo.workers.dev";
44
45
  readonly learn: "https://topololearn-api.topolo.workers.dev";
45
46
  readonly mail: "https://mail.topolo.app";
46
47
  readonly mdm: "https://topolo-mdm-api.topolo.app";
47
48
  readonly messaging: "https://messages.topolo.app";
48
49
  readonly nexus: "https://topolo-nexus-gateway.topolo.workers.dev";
49
- readonly one: "https://topoloone-worker.topolo.workers.dev";
50
+ readonly one: "https://one.topolo.app";
50
51
  readonly pay: "https://topolo-pay.topolo.workers.dev";
51
52
  readonly "quro.api": "https://api.ol0.me";
52
53
  readonly "quro.redirect": "https://ol0.me";
@@ -70,10 +71,10 @@ declare const APPLICATIONS: {
70
71
  readonly deployTargets: readonly [{
71
72
  readonly name: "topoloadmin";
72
73
  readonly kind: "pages";
73
- readonly apiUrl: null;
74
+ readonly apiUrl: any;
74
75
  readonly domains: readonly [];
75
76
  readonly routes: readonly [];
76
- readonly serviceId: null;
77
+ readonly serviceId: any;
77
78
  }];
78
79
  };
79
80
  readonly agent: {
@@ -86,10 +87,10 @@ declare const APPLICATIONS: {
86
87
  readonly deployTargets: readonly [{
87
88
  readonly name: "topolo-agent";
88
89
  readonly kind: "pages";
89
- readonly apiUrl: null;
90
+ readonly apiUrl: any;
90
91
  readonly domains: readonly [];
91
92
  readonly routes: readonly [];
92
- readonly serviceId: null;
93
+ readonly serviceId: any;
93
94
  }, {
94
95
  readonly name: "topolo-agent-worker";
95
96
  readonly kind: "worker";
@@ -141,10 +142,10 @@ declare const APPLICATIONS: {
141
142
  readonly deployTargets: readonly [{
142
143
  readonly name: "bytes";
143
144
  readonly kind: "pages";
144
- readonly apiUrl: null;
145
+ readonly apiUrl: any;
145
146
  readonly domains: readonly [];
146
147
  readonly routes: readonly [];
147
- readonly serviceId: null;
148
+ readonly serviceId: any;
148
149
  }, {
149
150
  readonly name: "r2-media-manager-worker";
150
151
  readonly kind: "worker";
@@ -191,7 +192,7 @@ declare const APPLICATIONS: {
191
192
  readonly appDir: "TopoloCli";
192
193
  readonly name: "@topolo/cli";
193
194
  readonly packageName: "@topolo/cli";
194
- readonly productionUrl: null;
195
+ readonly productionUrl: any;
195
196
  readonly services: readonly [];
196
197
  readonly deployTargets: readonly [];
197
198
  };
@@ -200,7 +201,7 @@ declare const APPLICATIONS: {
200
201
  readonly appDir: "TopoloCloudControl";
201
202
  readonly name: "topolo-cloudcontrol";
202
203
  readonly packageName: "topolo-cloudcontrol";
203
- readonly productionUrl: null;
204
+ readonly productionUrl: any;
204
205
  readonly services: readonly [];
205
206
  readonly deployTargets: readonly [];
206
207
  };
@@ -221,24 +222,24 @@ declare const APPLICATIONS: {
221
222
  }, {
222
223
  readonly name: "topolo-commerce-guest-web";
223
224
  readonly kind: "pages";
224
- readonly apiUrl: null;
225
+ readonly apiUrl: any;
225
226
  readonly domains: readonly ["guest.topolo.app", "topolo-commerce-guest-web.pages.dev"];
226
227
  readonly routes: readonly [];
227
- readonly serviceId: null;
228
+ readonly serviceId: any;
228
229
  }, {
229
230
  readonly name: "topolo-commerce-ops-web";
230
231
  readonly kind: "pages";
231
- readonly apiUrl: null;
232
+ readonly apiUrl: any;
232
233
  readonly domains: readonly ["commerce.topolo.app", "topolo-commerce-ops-web.pages.dev"];
233
234
  readonly routes: readonly [];
234
- readonly serviceId: null;
235
+ readonly serviceId: any;
235
236
  }, {
236
237
  readonly name: "topolo-commerce-station-web";
237
238
  readonly kind: "pages";
238
- readonly apiUrl: null;
239
+ readonly apiUrl: any;
239
240
  readonly domains: readonly ["station-commerce.topolo.app", "topolo-commerce-station-web.pages.dev"];
240
241
  readonly routes: readonly [];
241
- readonly serviceId: null;
242
+ readonly serviceId: any;
242
243
  }];
243
244
  };
244
245
  readonly crm: {
@@ -251,10 +252,10 @@ declare const APPLICATIONS: {
251
252
  readonly deployTargets: readonly [{
252
253
  readonly name: "topolo-crm-frontend";
253
254
  readonly kind: "pages";
254
- readonly apiUrl: null;
255
+ readonly apiUrl: any;
255
256
  readonly domains: readonly [];
256
257
  readonly routes: readonly [];
257
- readonly serviceId: null;
258
+ readonly serviceId: any;
258
259
  }, {
259
260
  readonly name: "topolo-crm-worker";
260
261
  readonly kind: "worker";
@@ -274,10 +275,10 @@ declare const APPLICATIONS: {
274
275
  readonly deployTargets: readonly [{
275
276
  readonly name: "topolo-developers";
276
277
  readonly kind: "pages";
277
- readonly apiUrl: null;
278
+ readonly apiUrl: any;
278
279
  readonly domains: readonly ["developers.topolo.app"];
279
280
  readonly routes: readonly [];
280
- readonly serviceId: null;
281
+ readonly serviceId: any;
281
282
  }];
282
283
  };
283
284
  readonly docs: {
@@ -290,33 +291,33 @@ declare const APPLICATIONS: {
290
291
  readonly deployTargets: readonly [{
291
292
  readonly name: "topolo-docs";
292
293
  readonly kind: "pages";
293
- readonly apiUrl: null;
294
+ readonly apiUrl: any;
294
295
  readonly domains: readonly ["docs.topolo.app"];
295
296
  readonly routes: readonly [];
296
- readonly serviceId: null;
297
+ readonly serviceId: any;
297
298
  }];
298
299
  };
299
300
  readonly feed: {
300
301
  readonly id: "feed";
301
302
  readonly appDir: "TopoloFeed";
302
303
  readonly name: "TopoloFeed";
303
- readonly packageName: null;
304
- readonly productionUrl: null;
305
- readonly services: readonly [];
304
+ readonly packageName: any;
305
+ readonly productionUrl: "https://topolo-feed-api.topolo.app";
306
+ readonly services: readonly ["feed"];
306
307
  readonly deployTargets: readonly [{
307
308
  readonly name: "topolo-feed-analytics-api";
308
309
  readonly kind: "worker";
309
- readonly apiUrl: null;
310
- readonly domains: readonly [];
311
- readonly routes: readonly [];
312
- readonly serviceId: null;
310
+ readonly apiUrl: "https://topolo-feed-analytics-api.topolo.app";
311
+ readonly domains: readonly ["topolo-feed-analytics-api.topolo.app"];
312
+ readonly routes: readonly ["topolo-feed-analytics-api.topolo.app"];
313
+ readonly serviceId: any;
313
314
  }, {
314
315
  readonly name: "topolo-feed-api";
315
316
  readonly kind: "worker";
316
- readonly apiUrl: null;
317
- readonly domains: readonly [];
318
- readonly routes: readonly [];
319
- readonly serviceId: null;
317
+ readonly apiUrl: "https://topolo-feed-api.topolo.app";
318
+ readonly domains: readonly ["topolo-feed-api.topolo.app"];
319
+ readonly routes: readonly ["topolo-feed-api.topolo.app"];
320
+ readonly serviceId: "feed";
320
321
  }];
321
322
  };
322
323
  readonly forecast: {
@@ -329,10 +330,10 @@ declare const APPLICATIONS: {
329
330
  readonly deployTargets: readonly [{
330
331
  readonly name: "forecast";
331
332
  readonly kind: "pages";
332
- readonly apiUrl: null;
333
+ readonly apiUrl: any;
333
334
  readonly domains: readonly [];
334
335
  readonly routes: readonly [];
335
- readonly serviceId: null;
336
+ readonly serviceId: any;
336
337
  }, {
337
338
  readonly name: "forecast-worker-production";
338
339
  readonly kind: "worker";
@@ -352,10 +353,10 @@ declare const APPLICATIONS: {
352
353
  readonly deployTargets: readonly [{
353
354
  readonly name: "topololearn";
354
355
  readonly kind: "pages";
355
- readonly apiUrl: null;
356
+ readonly apiUrl: any;
356
357
  readonly domains: readonly ["learn.topolo.app"];
357
358
  readonly routes: readonly [];
358
- readonly serviceId: null;
359
+ readonly serviceId: any;
359
360
  }, {
360
361
  readonly name: "topololearn-api";
361
362
  readonly kind: "worker";
@@ -386,7 +387,7 @@ declare const APPLICATIONS: {
386
387
  readonly appDir: "TopoloMCP";
387
388
  readonly name: "@topolo/mcp";
388
389
  readonly packageName: "@topolo/mcp";
389
- readonly productionUrl: null;
390
+ readonly productionUrl: any;
390
391
  readonly services: readonly [];
391
392
  readonly deployTargets: readonly [];
392
393
  };
@@ -394,7 +395,7 @@ declare const APPLICATIONS: {
394
395
  readonly id: "mdm";
395
396
  readonly appDir: "TopoloMDM";
396
397
  readonly name: "TopoloMDM";
397
- readonly packageName: null;
398
+ readonly packageName: any;
398
399
  readonly productionUrl: "https://mdm.topolo.app";
399
400
  readonly services: readonly ["mdm"];
400
401
  readonly deployTargets: readonly [{
@@ -407,10 +408,10 @@ declare const APPLICATIONS: {
407
408
  }, {
408
409
  readonly name: "topolo-mdm-console";
409
410
  readonly kind: "pages";
410
- readonly apiUrl: null;
411
+ readonly apiUrl: any;
411
412
  readonly domains: readonly ["mdm.topolo.app", "topolo-mdm-console.pages.dev"];
412
413
  readonly routes: readonly ["mdm.topolo.app"];
413
- readonly serviceId: null;
414
+ readonly serviceId: any;
414
415
  }];
415
416
  };
416
417
  readonly messaging: {
@@ -430,10 +431,10 @@ declare const APPLICATIONS: {
430
431
  }, {
431
432
  readonly name: "topolo-messaging-dispatch";
432
433
  readonly kind: "workers";
433
- readonly apiUrl: null;
434
+ readonly apiUrl: any;
434
435
  readonly domains: readonly [];
435
436
  readonly routes: readonly [];
436
- readonly serviceId: null;
437
+ readonly serviceId: any;
437
438
  }];
438
439
  };
439
440
  readonly nexus: {
@@ -446,10 +447,10 @@ declare const APPLICATIONS: {
446
447
  readonly deployTargets: readonly [{
447
448
  readonly name: "topolo-nexus-dashboard";
448
449
  readonly kind: "pages";
449
- readonly apiUrl: null;
450
+ readonly apiUrl: any;
450
451
  readonly domains: readonly ["nexus.topolo.app", "topolo-nexus-dashboard.pages.dev"];
451
452
  readonly routes: readonly [];
452
- readonly serviceId: null;
453
+ readonly serviceId: any;
453
454
  }, {
454
455
  readonly name: "topolo-nexus-gateway";
455
456
  readonly kind: "worker";
@@ -469,28 +470,28 @@ declare const APPLICATIONS: {
469
470
  readonly deployTargets: readonly [{
470
471
  readonly name: "ai-chat-rag";
471
472
  readonly kind: "worker";
472
- readonly apiUrl: null;
473
+ readonly apiUrl: any;
473
474
  readonly domains: readonly ["ai-chat-rag.topolo.workers.dev"];
474
475
  readonly routes: readonly [];
475
- readonly serviceId: null;
476
+ readonly serviceId: any;
476
477
  }, {
477
478
  readonly name: "topoloone";
478
479
  readonly kind: "pages";
479
- readonly apiUrl: null;
480
+ readonly apiUrl: any;
480
481
  readonly domains: readonly ["oneclick-dashboard.pages.dev"];
481
482
  readonly routes: readonly [];
482
- readonly serviceId: null;
483
+ readonly serviceId: any;
483
484
  }, {
484
485
  readonly name: "topoloone-website";
485
486
  readonly kind: "worker";
486
- readonly apiUrl: null;
487
+ readonly apiUrl: any;
487
488
  readonly domains: readonly ["one.topolo.io"];
488
489
  readonly routes: readonly [];
489
- readonly serviceId: null;
490
+ readonly serviceId: any;
490
491
  }, {
491
492
  readonly name: "topoloone-worker";
492
493
  readonly kind: "worker";
493
- readonly apiUrl: "https://topoloone-worker.topolo.workers.dev";
494
+ readonly apiUrl: "https://one.topolo.app";
494
495
  readonly domains: readonly [];
495
496
  readonly routes: readonly ["one.topolo.app/*"];
496
497
  readonly serviceId: "one";
@@ -516,7 +517,7 @@ declare const APPLICATIONS: {
516
517
  readonly id: "quro";
517
518
  readonly appDir: "TopoloQuro";
518
519
  readonly name: "TopoloQuro";
519
- readonly packageName: null;
520
+ readonly packageName: any;
520
521
  readonly productionUrl: "https://quro.topolo.app";
521
522
  readonly services: readonly ["quro.api", "quro.redirect"];
522
523
  readonly deployTargets: readonly [{
@@ -536,10 +537,10 @@ declare const APPLICATIONS: {
536
537
  }, {
537
538
  readonly name: "quro-ui";
538
539
  readonly kind: "pages";
539
- readonly apiUrl: null;
540
+ readonly apiUrl: any;
540
541
  readonly domains: readonly [];
541
542
  readonly routes: readonly [];
542
- readonly serviceId: null;
543
+ readonly serviceId: any;
543
544
  }];
544
545
  };
545
546
  readonly roadmapper: {
@@ -552,10 +553,10 @@ declare const APPLICATIONS: {
552
553
  readonly deployTargets: readonly [{
553
554
  readonly name: "roadmapper";
554
555
  readonly kind: "pages";
555
- readonly apiUrl: null;
556
+ readonly apiUrl: any;
556
557
  readonly domains: readonly ["roadmapper.topolo.app"];
557
558
  readonly routes: readonly [];
558
- readonly serviceId: null;
559
+ readonly serviceId: any;
559
560
  }, {
560
561
  readonly name: "topolo-production-roadmapper";
561
562
  readonly kind: "worker";
@@ -575,10 +576,10 @@ declare const APPLICATIONS: {
575
576
  readonly deployTargets: readonly [{
576
577
  readonly name: "topolo-social-studio";
577
578
  readonly kind: "pages";
578
- readonly apiUrl: null;
579
+ readonly apiUrl: any;
579
580
  readonly domains: readonly [];
580
581
  readonly routes: readonly [];
581
- readonly serviceId: null;
582
+ readonly serviceId: any;
582
583
  }, {
583
584
  readonly name: "topolo-social-studio-api";
584
585
  readonly kind: "worker";
@@ -589,10 +590,10 @@ declare const APPLICATIONS: {
589
590
  }, {
590
591
  readonly name: "topolo-social-studio-queue";
591
592
  readonly kind: "worker";
592
- readonly apiUrl: null;
593
+ readonly apiUrl: any;
593
594
  readonly domains: readonly [];
594
595
  readonly routes: readonly [];
595
- readonly serviceId: null;
596
+ readonly serviceId: any;
596
597
  }];
597
598
  };
598
599
  readonly socialize: {
@@ -605,10 +606,10 @@ declare const APPLICATIONS: {
605
606
  readonly deployTargets: readonly [{
606
607
  readonly name: "socialize";
607
608
  readonly kind: "pages";
608
- readonly apiUrl: null;
609
+ readonly apiUrl: any;
609
610
  readonly domains: readonly [];
610
611
  readonly routes: readonly [];
611
- readonly serviceId: null;
612
+ readonly serviceId: any;
612
613
  }, {
613
614
  readonly name: "socialize-prod-api";
614
615
  readonly kind: "worker";
@@ -619,10 +620,10 @@ declare const APPLICATIONS: {
619
620
  }, {
620
621
  readonly name: "socialize-prod-scheduler";
621
622
  readonly kind: "worker";
622
- readonly apiUrl: null;
623
+ readonly apiUrl: any;
623
624
  readonly domains: readonly [];
624
625
  readonly routes: readonly [];
625
- readonly serviceId: null;
626
+ readonly serviceId: any;
626
627
  }];
627
628
  };
628
629
  readonly support: {
@@ -661,14 +662,14 @@ declare const APPLICATIONS: {
661
662
  readonly apiUrl: "https://sites.topolo.app";
662
663
  readonly domains: readonly ["sites.topolo.app"];
663
664
  readonly routes: readonly [];
664
- readonly serviceId: null;
665
+ readonly serviceId: any;
665
666
  }, {
666
667
  readonly name: "topoloweb-studio";
667
668
  readonly kind: "pages";
668
- readonly apiUrl: null;
669
+ readonly apiUrl: any;
669
670
  readonly domains: readonly ["web.topolo.app"];
670
671
  readonly routes: readonly [];
671
- readonly serviceId: null;
672
+ readonly serviceId: any;
672
673
  }];
673
674
  };
674
675
  };
@@ -750,8 +751,8 @@ declare const APPLICATION_REQUIREMENTS: readonly [{
750
751
  readonly title: "Use the shared shell, launcher, and account menu";
751
752
  readonly summary: "Browser applications should feel like one platform and should not create isolated navigation or account surfaces.";
752
753
  readonly appliesTo: readonly ["browser"];
753
- readonly evidence: readonly ["@topolo/ui-kit is used for the platform shell where the app has authenticated UI", "The shared launcher/app switcher is reachable from authenticated app chrome", "Account menu and sign-out behavior use the shared platform affordance"];
754
- readonly implementation: readonly ["Use TopoloShell or the current shared shell contract for authenticated app layouts", "Use shared design tokens and platform UI primitives before creating local equivalents", "Keep mobile and desktop shell behavior aligned with the platform UI kit"];
754
+ readonly evidence: readonly ["@topolo/ui-kit is used for the platform shell where the app has authenticated UI", "The shared launcher/app switcher is reachable from authenticated app chrome", "Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu"];
755
+ readonly implementation: readonly ["Use TopoloAppShell for authenticated app layouts", "Use TopoloAccountMenu when a partial-shell surface still needs account chrome", "Pass app-specific account actions as additive menu items instead of forking dropdowns", "Use shared design tokens and platform UI primitives before creating local equivalents", "Keep mobile and desktop shell behavior aligned with the platform UI kit"];
755
756
  }, {
756
757
  readonly id: "service-registration-and-scopes";
757
758
  readonly title: "Register protected APIs as platform services";
package/dist/index.d.ts CHANGED
@@ -40,13 +40,14 @@ declare const SERVICES: {
40
40
  readonly chat: "https://chat.topolo.app";
41
41
  readonly commerce: "https://topolo-commerce-api.topolo.workers.dev";
42
42
  readonly crm: "https://crm-api.topolo.app";
43
+ readonly feed: "https://topolo-feed-api.topolo.app";
43
44
  readonly forecast: "https://forecast-worker-production.topolo.workers.dev";
44
45
  readonly learn: "https://topololearn-api.topolo.workers.dev";
45
46
  readonly mail: "https://mail.topolo.app";
46
47
  readonly mdm: "https://topolo-mdm-api.topolo.app";
47
48
  readonly messaging: "https://messages.topolo.app";
48
49
  readonly nexus: "https://topolo-nexus-gateway.topolo.workers.dev";
49
- readonly one: "https://topoloone-worker.topolo.workers.dev";
50
+ readonly one: "https://one.topolo.app";
50
51
  readonly pay: "https://topolo-pay.topolo.workers.dev";
51
52
  readonly "quro.api": "https://api.ol0.me";
52
53
  readonly "quro.redirect": "https://ol0.me";
@@ -70,10 +71,10 @@ declare const APPLICATIONS: {
70
71
  readonly deployTargets: readonly [{
71
72
  readonly name: "topoloadmin";
72
73
  readonly kind: "pages";
73
- readonly apiUrl: null;
74
+ readonly apiUrl: any;
74
75
  readonly domains: readonly [];
75
76
  readonly routes: readonly [];
76
- readonly serviceId: null;
77
+ readonly serviceId: any;
77
78
  }];
78
79
  };
79
80
  readonly agent: {
@@ -86,10 +87,10 @@ declare const APPLICATIONS: {
86
87
  readonly deployTargets: readonly [{
87
88
  readonly name: "topolo-agent";
88
89
  readonly kind: "pages";
89
- readonly apiUrl: null;
90
+ readonly apiUrl: any;
90
91
  readonly domains: readonly [];
91
92
  readonly routes: readonly [];
92
- readonly serviceId: null;
93
+ readonly serviceId: any;
93
94
  }, {
94
95
  readonly name: "topolo-agent-worker";
95
96
  readonly kind: "worker";
@@ -141,10 +142,10 @@ declare const APPLICATIONS: {
141
142
  readonly deployTargets: readonly [{
142
143
  readonly name: "bytes";
143
144
  readonly kind: "pages";
144
- readonly apiUrl: null;
145
+ readonly apiUrl: any;
145
146
  readonly domains: readonly [];
146
147
  readonly routes: readonly [];
147
- readonly serviceId: null;
148
+ readonly serviceId: any;
148
149
  }, {
149
150
  readonly name: "r2-media-manager-worker";
150
151
  readonly kind: "worker";
@@ -191,7 +192,7 @@ declare const APPLICATIONS: {
191
192
  readonly appDir: "TopoloCli";
192
193
  readonly name: "@topolo/cli";
193
194
  readonly packageName: "@topolo/cli";
194
- readonly productionUrl: null;
195
+ readonly productionUrl: any;
195
196
  readonly services: readonly [];
196
197
  readonly deployTargets: readonly [];
197
198
  };
@@ -200,7 +201,7 @@ declare const APPLICATIONS: {
200
201
  readonly appDir: "TopoloCloudControl";
201
202
  readonly name: "topolo-cloudcontrol";
202
203
  readonly packageName: "topolo-cloudcontrol";
203
- readonly productionUrl: null;
204
+ readonly productionUrl: any;
204
205
  readonly services: readonly [];
205
206
  readonly deployTargets: readonly [];
206
207
  };
@@ -221,24 +222,24 @@ declare const APPLICATIONS: {
221
222
  }, {
222
223
  readonly name: "topolo-commerce-guest-web";
223
224
  readonly kind: "pages";
224
- readonly apiUrl: null;
225
+ readonly apiUrl: any;
225
226
  readonly domains: readonly ["guest.topolo.app", "topolo-commerce-guest-web.pages.dev"];
226
227
  readonly routes: readonly [];
227
- readonly serviceId: null;
228
+ readonly serviceId: any;
228
229
  }, {
229
230
  readonly name: "topolo-commerce-ops-web";
230
231
  readonly kind: "pages";
231
- readonly apiUrl: null;
232
+ readonly apiUrl: any;
232
233
  readonly domains: readonly ["commerce.topolo.app", "topolo-commerce-ops-web.pages.dev"];
233
234
  readonly routes: readonly [];
234
- readonly serviceId: null;
235
+ readonly serviceId: any;
235
236
  }, {
236
237
  readonly name: "topolo-commerce-station-web";
237
238
  readonly kind: "pages";
238
- readonly apiUrl: null;
239
+ readonly apiUrl: any;
239
240
  readonly domains: readonly ["station-commerce.topolo.app", "topolo-commerce-station-web.pages.dev"];
240
241
  readonly routes: readonly [];
241
- readonly serviceId: null;
242
+ readonly serviceId: any;
242
243
  }];
243
244
  };
244
245
  readonly crm: {
@@ -251,10 +252,10 @@ declare const APPLICATIONS: {
251
252
  readonly deployTargets: readonly [{
252
253
  readonly name: "topolo-crm-frontend";
253
254
  readonly kind: "pages";
254
- readonly apiUrl: null;
255
+ readonly apiUrl: any;
255
256
  readonly domains: readonly [];
256
257
  readonly routes: readonly [];
257
- readonly serviceId: null;
258
+ readonly serviceId: any;
258
259
  }, {
259
260
  readonly name: "topolo-crm-worker";
260
261
  readonly kind: "worker";
@@ -274,10 +275,10 @@ declare const APPLICATIONS: {
274
275
  readonly deployTargets: readonly [{
275
276
  readonly name: "topolo-developers";
276
277
  readonly kind: "pages";
277
- readonly apiUrl: null;
278
+ readonly apiUrl: any;
278
279
  readonly domains: readonly ["developers.topolo.app"];
279
280
  readonly routes: readonly [];
280
- readonly serviceId: null;
281
+ readonly serviceId: any;
281
282
  }];
282
283
  };
283
284
  readonly docs: {
@@ -290,33 +291,33 @@ declare const APPLICATIONS: {
290
291
  readonly deployTargets: readonly [{
291
292
  readonly name: "topolo-docs";
292
293
  readonly kind: "pages";
293
- readonly apiUrl: null;
294
+ readonly apiUrl: any;
294
295
  readonly domains: readonly ["docs.topolo.app"];
295
296
  readonly routes: readonly [];
296
- readonly serviceId: null;
297
+ readonly serviceId: any;
297
298
  }];
298
299
  };
299
300
  readonly feed: {
300
301
  readonly id: "feed";
301
302
  readonly appDir: "TopoloFeed";
302
303
  readonly name: "TopoloFeed";
303
- readonly packageName: null;
304
- readonly productionUrl: null;
305
- readonly services: readonly [];
304
+ readonly packageName: any;
305
+ readonly productionUrl: "https://topolo-feed-api.topolo.app";
306
+ readonly services: readonly ["feed"];
306
307
  readonly deployTargets: readonly [{
307
308
  readonly name: "topolo-feed-analytics-api";
308
309
  readonly kind: "worker";
309
- readonly apiUrl: null;
310
- readonly domains: readonly [];
311
- readonly routes: readonly [];
312
- readonly serviceId: null;
310
+ readonly apiUrl: "https://topolo-feed-analytics-api.topolo.app";
311
+ readonly domains: readonly ["topolo-feed-analytics-api.topolo.app"];
312
+ readonly routes: readonly ["topolo-feed-analytics-api.topolo.app"];
313
+ readonly serviceId: any;
313
314
  }, {
314
315
  readonly name: "topolo-feed-api";
315
316
  readonly kind: "worker";
316
- readonly apiUrl: null;
317
- readonly domains: readonly [];
318
- readonly routes: readonly [];
319
- readonly serviceId: null;
317
+ readonly apiUrl: "https://topolo-feed-api.topolo.app";
318
+ readonly domains: readonly ["topolo-feed-api.topolo.app"];
319
+ readonly routes: readonly ["topolo-feed-api.topolo.app"];
320
+ readonly serviceId: "feed";
320
321
  }];
321
322
  };
322
323
  readonly forecast: {
@@ -329,10 +330,10 @@ declare const APPLICATIONS: {
329
330
  readonly deployTargets: readonly [{
330
331
  readonly name: "forecast";
331
332
  readonly kind: "pages";
332
- readonly apiUrl: null;
333
+ readonly apiUrl: any;
333
334
  readonly domains: readonly [];
334
335
  readonly routes: readonly [];
335
- readonly serviceId: null;
336
+ readonly serviceId: any;
336
337
  }, {
337
338
  readonly name: "forecast-worker-production";
338
339
  readonly kind: "worker";
@@ -352,10 +353,10 @@ declare const APPLICATIONS: {
352
353
  readonly deployTargets: readonly [{
353
354
  readonly name: "topololearn";
354
355
  readonly kind: "pages";
355
- readonly apiUrl: null;
356
+ readonly apiUrl: any;
356
357
  readonly domains: readonly ["learn.topolo.app"];
357
358
  readonly routes: readonly [];
358
- readonly serviceId: null;
359
+ readonly serviceId: any;
359
360
  }, {
360
361
  readonly name: "topololearn-api";
361
362
  readonly kind: "worker";
@@ -386,7 +387,7 @@ declare const APPLICATIONS: {
386
387
  readonly appDir: "TopoloMCP";
387
388
  readonly name: "@topolo/mcp";
388
389
  readonly packageName: "@topolo/mcp";
389
- readonly productionUrl: null;
390
+ readonly productionUrl: any;
390
391
  readonly services: readonly [];
391
392
  readonly deployTargets: readonly [];
392
393
  };
@@ -394,7 +395,7 @@ declare const APPLICATIONS: {
394
395
  readonly id: "mdm";
395
396
  readonly appDir: "TopoloMDM";
396
397
  readonly name: "TopoloMDM";
397
- readonly packageName: null;
398
+ readonly packageName: any;
398
399
  readonly productionUrl: "https://mdm.topolo.app";
399
400
  readonly services: readonly ["mdm"];
400
401
  readonly deployTargets: readonly [{
@@ -407,10 +408,10 @@ declare const APPLICATIONS: {
407
408
  }, {
408
409
  readonly name: "topolo-mdm-console";
409
410
  readonly kind: "pages";
410
- readonly apiUrl: null;
411
+ readonly apiUrl: any;
411
412
  readonly domains: readonly ["mdm.topolo.app", "topolo-mdm-console.pages.dev"];
412
413
  readonly routes: readonly ["mdm.topolo.app"];
413
- readonly serviceId: null;
414
+ readonly serviceId: any;
414
415
  }];
415
416
  };
416
417
  readonly messaging: {
@@ -430,10 +431,10 @@ declare const APPLICATIONS: {
430
431
  }, {
431
432
  readonly name: "topolo-messaging-dispatch";
432
433
  readonly kind: "workers";
433
- readonly apiUrl: null;
434
+ readonly apiUrl: any;
434
435
  readonly domains: readonly [];
435
436
  readonly routes: readonly [];
436
- readonly serviceId: null;
437
+ readonly serviceId: any;
437
438
  }];
438
439
  };
439
440
  readonly nexus: {
@@ -446,10 +447,10 @@ declare const APPLICATIONS: {
446
447
  readonly deployTargets: readonly [{
447
448
  readonly name: "topolo-nexus-dashboard";
448
449
  readonly kind: "pages";
449
- readonly apiUrl: null;
450
+ readonly apiUrl: any;
450
451
  readonly domains: readonly ["nexus.topolo.app", "topolo-nexus-dashboard.pages.dev"];
451
452
  readonly routes: readonly [];
452
- readonly serviceId: null;
453
+ readonly serviceId: any;
453
454
  }, {
454
455
  readonly name: "topolo-nexus-gateway";
455
456
  readonly kind: "worker";
@@ -469,28 +470,28 @@ declare const APPLICATIONS: {
469
470
  readonly deployTargets: readonly [{
470
471
  readonly name: "ai-chat-rag";
471
472
  readonly kind: "worker";
472
- readonly apiUrl: null;
473
+ readonly apiUrl: any;
473
474
  readonly domains: readonly ["ai-chat-rag.topolo.workers.dev"];
474
475
  readonly routes: readonly [];
475
- readonly serviceId: null;
476
+ readonly serviceId: any;
476
477
  }, {
477
478
  readonly name: "topoloone";
478
479
  readonly kind: "pages";
479
- readonly apiUrl: null;
480
+ readonly apiUrl: any;
480
481
  readonly domains: readonly ["oneclick-dashboard.pages.dev"];
481
482
  readonly routes: readonly [];
482
- readonly serviceId: null;
483
+ readonly serviceId: any;
483
484
  }, {
484
485
  readonly name: "topoloone-website";
485
486
  readonly kind: "worker";
486
- readonly apiUrl: null;
487
+ readonly apiUrl: any;
487
488
  readonly domains: readonly ["one.topolo.io"];
488
489
  readonly routes: readonly [];
489
- readonly serviceId: null;
490
+ readonly serviceId: any;
490
491
  }, {
491
492
  readonly name: "topoloone-worker";
492
493
  readonly kind: "worker";
493
- readonly apiUrl: "https://topoloone-worker.topolo.workers.dev";
494
+ readonly apiUrl: "https://one.topolo.app";
494
495
  readonly domains: readonly [];
495
496
  readonly routes: readonly ["one.topolo.app/*"];
496
497
  readonly serviceId: "one";
@@ -516,7 +517,7 @@ declare const APPLICATIONS: {
516
517
  readonly id: "quro";
517
518
  readonly appDir: "TopoloQuro";
518
519
  readonly name: "TopoloQuro";
519
- readonly packageName: null;
520
+ readonly packageName: any;
520
521
  readonly productionUrl: "https://quro.topolo.app";
521
522
  readonly services: readonly ["quro.api", "quro.redirect"];
522
523
  readonly deployTargets: readonly [{
@@ -536,10 +537,10 @@ declare const APPLICATIONS: {
536
537
  }, {
537
538
  readonly name: "quro-ui";
538
539
  readonly kind: "pages";
539
- readonly apiUrl: null;
540
+ readonly apiUrl: any;
540
541
  readonly domains: readonly [];
541
542
  readonly routes: readonly [];
542
- readonly serviceId: null;
543
+ readonly serviceId: any;
543
544
  }];
544
545
  };
545
546
  readonly roadmapper: {
@@ -552,10 +553,10 @@ declare const APPLICATIONS: {
552
553
  readonly deployTargets: readonly [{
553
554
  readonly name: "roadmapper";
554
555
  readonly kind: "pages";
555
- readonly apiUrl: null;
556
+ readonly apiUrl: any;
556
557
  readonly domains: readonly ["roadmapper.topolo.app"];
557
558
  readonly routes: readonly [];
558
- readonly serviceId: null;
559
+ readonly serviceId: any;
559
560
  }, {
560
561
  readonly name: "topolo-production-roadmapper";
561
562
  readonly kind: "worker";
@@ -575,10 +576,10 @@ declare const APPLICATIONS: {
575
576
  readonly deployTargets: readonly [{
576
577
  readonly name: "topolo-social-studio";
577
578
  readonly kind: "pages";
578
- readonly apiUrl: null;
579
+ readonly apiUrl: any;
579
580
  readonly domains: readonly [];
580
581
  readonly routes: readonly [];
581
- readonly serviceId: null;
582
+ readonly serviceId: any;
582
583
  }, {
583
584
  readonly name: "topolo-social-studio-api";
584
585
  readonly kind: "worker";
@@ -589,10 +590,10 @@ declare const APPLICATIONS: {
589
590
  }, {
590
591
  readonly name: "topolo-social-studio-queue";
591
592
  readonly kind: "worker";
592
- readonly apiUrl: null;
593
+ readonly apiUrl: any;
593
594
  readonly domains: readonly [];
594
595
  readonly routes: readonly [];
595
- readonly serviceId: null;
596
+ readonly serviceId: any;
596
597
  }];
597
598
  };
598
599
  readonly socialize: {
@@ -605,10 +606,10 @@ declare const APPLICATIONS: {
605
606
  readonly deployTargets: readonly [{
606
607
  readonly name: "socialize";
607
608
  readonly kind: "pages";
608
- readonly apiUrl: null;
609
+ readonly apiUrl: any;
609
610
  readonly domains: readonly [];
610
611
  readonly routes: readonly [];
611
- readonly serviceId: null;
612
+ readonly serviceId: any;
612
613
  }, {
613
614
  readonly name: "socialize-prod-api";
614
615
  readonly kind: "worker";
@@ -619,10 +620,10 @@ declare const APPLICATIONS: {
619
620
  }, {
620
621
  readonly name: "socialize-prod-scheduler";
621
622
  readonly kind: "worker";
622
- readonly apiUrl: null;
623
+ readonly apiUrl: any;
623
624
  readonly domains: readonly [];
624
625
  readonly routes: readonly [];
625
- readonly serviceId: null;
626
+ readonly serviceId: any;
626
627
  }];
627
628
  };
628
629
  readonly support: {
@@ -661,14 +662,14 @@ declare const APPLICATIONS: {
661
662
  readonly apiUrl: "https://sites.topolo.app";
662
663
  readonly domains: readonly ["sites.topolo.app"];
663
664
  readonly routes: readonly [];
664
- readonly serviceId: null;
665
+ readonly serviceId: any;
665
666
  }, {
666
667
  readonly name: "topoloweb-studio";
667
668
  readonly kind: "pages";
668
- readonly apiUrl: null;
669
+ readonly apiUrl: any;
669
670
  readonly domains: readonly ["web.topolo.app"];
670
671
  readonly routes: readonly [];
671
- readonly serviceId: null;
672
+ readonly serviceId: any;
672
673
  }];
673
674
  };
674
675
  };
@@ -750,8 +751,8 @@ declare const APPLICATION_REQUIREMENTS: readonly [{
750
751
  readonly title: "Use the shared shell, launcher, and account menu";
751
752
  readonly summary: "Browser applications should feel like one platform and should not create isolated navigation or account surfaces.";
752
753
  readonly appliesTo: readonly ["browser"];
753
- readonly evidence: readonly ["@topolo/ui-kit is used for the platform shell where the app has authenticated UI", "The shared launcher/app switcher is reachable from authenticated app chrome", "Account menu and sign-out behavior use the shared platform affordance"];
754
- readonly implementation: readonly ["Use TopoloShell or the current shared shell contract for authenticated app layouts", "Use shared design tokens and platform UI primitives before creating local equivalents", "Keep mobile and desktop shell behavior aligned with the platform UI kit"];
754
+ readonly evidence: readonly ["@topolo/ui-kit is used for the platform shell where the app has authenticated UI", "The shared launcher/app switcher is reachable from authenticated app chrome", "Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu"];
755
+ readonly implementation: readonly ["Use TopoloAppShell for authenticated app layouts", "Use TopoloAccountMenu when a partial-shell surface still needs account chrome", "Pass app-specific account actions as additive menu items instead of forking dropdowns", "Use shared design tokens and platform UI primitives before creating local equivalents", "Keep mobile and desktop shell behavior aligned with the platform UI kit"];
755
756
  }, {
756
757
  readonly id: "service-registration-and-scopes";
757
758
  readonly title: "Register protected APIs as platform services";
package/dist/index.js CHANGED
@@ -66,13 +66,14 @@ var SERVICES = {
66
66
  chat: "https://chat.topolo.app",
67
67
  commerce: "https://topolo-commerce-api.topolo.workers.dev",
68
68
  crm: "https://crm-api.topolo.app",
69
+ feed: "https://topolo-feed-api.topolo.app",
69
70
  forecast: "https://forecast-worker-production.topolo.workers.dev",
70
71
  learn: "https://topololearn-api.topolo.workers.dev",
71
72
  mail: "https://mail.topolo.app",
72
73
  mdm: "https://topolo-mdm-api.topolo.app",
73
74
  messaging: "https://messages.topolo.app",
74
75
  nexus: "https://topolo-nexus-gateway.topolo.workers.dev",
75
- one: "https://topoloone-worker.topolo.workers.dev",
76
+ one: "https://one.topolo.app",
76
77
  pay: "https://topolo-pay.topolo.workers.dev",
77
78
  "quro.api": "https://api.ol0.me",
78
79
  "quro.redirect": "https://ol0.me",
@@ -404,24 +405,34 @@ var APPLICATIONS = {
404
405
  "appDir": "TopoloFeed",
405
406
  "name": "TopoloFeed",
406
407
  "packageName": null,
407
- "productionUrl": null,
408
- "services": [],
408
+ "productionUrl": "https://topolo-feed-api.topolo.app",
409
+ "services": [
410
+ "feed"
411
+ ],
409
412
  "deployTargets": [
410
413
  {
411
414
  "name": "topolo-feed-analytics-api",
412
415
  "kind": "worker",
413
- "apiUrl": null,
414
- "domains": [],
415
- "routes": [],
416
+ "apiUrl": "https://topolo-feed-analytics-api.topolo.app",
417
+ "domains": [
418
+ "topolo-feed-analytics-api.topolo.app"
419
+ ],
420
+ "routes": [
421
+ "topolo-feed-analytics-api.topolo.app"
422
+ ],
416
423
  "serviceId": null
417
424
  },
418
425
  {
419
426
  "name": "topolo-feed-api",
420
427
  "kind": "worker",
421
- "apiUrl": null,
422
- "domains": [],
423
- "routes": [],
424
- "serviceId": null
428
+ "apiUrl": "https://topolo-feed-api.topolo.app",
429
+ "domains": [
430
+ "topolo-feed-api.topolo.app"
431
+ ],
432
+ "routes": [
433
+ "topolo-feed-api.topolo.app"
434
+ ],
435
+ "serviceId": "feed"
425
436
  }
426
437
  ]
427
438
  },
@@ -661,7 +672,7 @@ var APPLICATIONS = {
661
672
  {
662
673
  "name": "topoloone-worker",
663
674
  "kind": "worker",
664
- "apiUrl": "https://topoloone-worker.topolo.workers.dev",
675
+ "apiUrl": "https://one.topolo.app",
665
676
  "domains": [],
666
677
  "routes": [
667
678
  "one.topolo.app/*"
@@ -960,10 +971,12 @@ var APPLICATION_REQUIREMENTS = [
960
971
  evidence: [
961
972
  "@topolo/ui-kit is used for the platform shell where the app has authenticated UI",
962
973
  "The shared launcher/app switcher is reachable from authenticated app chrome",
963
- "Account menu and sign-out behavior use the shared platform affordance"
974
+ "Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu"
964
975
  ],
965
976
  implementation: [
966
- "Use TopoloShell or the current shared shell contract for authenticated app layouts",
977
+ "Use TopoloAppShell for authenticated app layouts",
978
+ "Use TopoloAccountMenu when a partial-shell surface still needs account chrome",
979
+ "Pass app-specific account actions as additive menu items instead of forking dropdowns",
967
980
  "Use shared design tokens and platform UI primitives before creating local equivalents",
968
981
  "Keep mobile and desktop shell behavior aligned with the platform UI kit"
969
982
  ]
@@ -1067,8 +1080,9 @@ var APPLICATION_REQUIREMENTS = [
1067
1080
  ];
1068
1081
  function applicationRequirementScopes(application) {
1069
1082
  const scopes = /* @__PURE__ */ new Set(["all"]);
1070
- const hasBrowserSurface = Boolean(application.productionUrl) || application.deployTargets.some((target) => target.kind === "pages");
1071
- const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.apiUrl));
1083
+ const deployTargets = application.deployTargets;
1084
+ const hasBrowserSurface = Boolean(application.productionUrl) || deployTargets.some((target) => target.kind === "pages");
1085
+ const hasApiSurface = application.services.length > 0 || deployTargets.some((target) => Boolean(target.apiUrl));
1072
1086
  if (hasBrowserSurface) scopes.add("browser");
1073
1087
  if (hasApiSurface) scopes.add("api");
1074
1088
  if (application.id === "cli" || application.id === "mcp" || application.id === "cloudcontrol") {
@@ -1256,10 +1270,11 @@ function statusRank(status) {
1256
1270
  // src/services.ts
1257
1271
  var DEFAULT_SERVICE_URLS = SERVICES;
1258
1272
  function resolveServiceUrl(service, overrides) {
1259
- const override = overrides?.[service];
1273
+ var _a;
1274
+ const override = overrides == null ? void 0 : overrides[service];
1260
1275
  if (override) return override;
1261
1276
  const envKey = `TOPOLO_SERVICE_URL_${service.replace(/\./g, "_").toUpperCase()}`;
1262
- const envValue = typeof process !== "undefined" ? process.env?.[envKey] : void 0;
1277
+ const envValue = typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a[envKey] : void 0;
1263
1278
  if (envValue) return envValue;
1264
1279
  return DEFAULT_SERVICE_URLS[service];
1265
1280
  }
@@ -1275,8 +1290,9 @@ var TopoloClient = class {
1275
1290
  fetchImpl;
1276
1291
  debug;
1277
1292
  constructor(options) {
1293
+ var _a;
1278
1294
  if (!options.credential) throw new TopoloAuthError("credential is required");
1279
- if (!options.agent?.clientName) throw new TopoloAuthError("agent.clientName is required");
1295
+ if (!((_a = options.agent) == null ? void 0 : _a.clientName)) throw new TopoloAuthError("agent.clientName is required");
1280
1296
  this.credential = options.credential;
1281
1297
  this.agent = options.agent;
1282
1298
  this.serviceUrls = options.serviceUrls;
@@ -1466,6 +1482,7 @@ var CrmModule = class {
1466
1482
  }
1467
1483
  client;
1468
1484
  async listContacts(options = {}) {
1485
+ var _a, _b, _c;
1469
1486
  const res = await this.client.request({
1470
1487
  service: "crm",
1471
1488
  path: "/api/contacts",
@@ -1475,12 +1492,12 @@ var CrmModule = class {
1475
1492
  pageSize: options.pageSize
1476
1493
  }
1477
1494
  });
1478
- const rows = Array.isArray(res?.contacts) ? res.contacts : Array.isArray(res?.data) ? res.data : [];
1495
+ const rows = Array.isArray(res == null ? void 0 : res.contacts) ? res.contacts : Array.isArray(res == null ? void 0 : res.data) ? res.data : [];
1479
1496
  return {
1480
1497
  contacts: rows.map(toSummary),
1481
- total: res?.total ?? res?.pagination?.total ?? rows.length,
1482
- page: res?.page ?? res?.pagination?.page ?? options.page ?? 1,
1483
- pageSize: res?.pageSize ?? res?.pagination?.pageSize ?? options.pageSize ?? rows.length
1498
+ total: (res == null ? void 0 : res.total) ?? ((_a = res == null ? void 0 : res.pagination) == null ? void 0 : _a.total) ?? rows.length,
1499
+ page: (res == null ? void 0 : res.page) ?? ((_b = res == null ? void 0 : res.pagination) == null ? void 0 : _b.page) ?? options.page ?? 1,
1500
+ pageSize: (res == null ? void 0 : res.pageSize) ?? ((_c = res == null ? void 0 : res.pagination) == null ? void 0 : _c.pageSize) ?? options.pageSize ?? rows.length
1484
1501
  };
1485
1502
  }
1486
1503
  async getContact(contactId) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topolo/sdk",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Typed client SDK for the Topolo platform. Used by TopoloCli, TopoloMCP, and third-party agents.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,6 +19,7 @@
19
19
  ],
20
20
  "scripts": {
21
21
  "generate:services": "node scripts/generate-services.mjs",
22
+ "check:generated": "node scripts/check-generated.mjs",
22
23
  "prebuild": "node scripts/generate-services.mjs",
23
24
  "build": "tsup src/index.ts --format esm,cjs --dts --clean",
24
25
  "dev": "tsup src/index.ts --format esm,cjs --dts --watch",
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  APPLICATIONS,
3
3
  type ApplicationCatalogEntry,
4
+ type ApplicationDeployTarget,
4
5
  type ApplicationId,
5
6
  } from './applications.generated.js';
6
7
 
@@ -127,10 +128,12 @@ export const APPLICATION_REQUIREMENTS = [
127
128
  evidence: [
128
129
  '@topolo/ui-kit is used for the platform shell where the app has authenticated UI',
129
130
  'The shared launcher/app switcher is reachable from authenticated app chrome',
130
- 'Account menu and sign-out behavior use the shared platform affordance',
131
+ 'Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu',
131
132
  ],
132
133
  implementation: [
133
- 'Use TopoloShell or the current shared shell contract for authenticated app layouts',
134
+ 'Use TopoloAppShell for authenticated app layouts',
135
+ 'Use TopoloAccountMenu when a partial-shell surface still needs account chrome',
136
+ 'Pass app-specific account actions as additive menu items instead of forking dropdowns',
134
137
  'Use shared design tokens and platform UI primitives before creating local equivalents',
135
138
  'Keep mobile and desktop shell behavior aligned with the platform UI kit',
136
139
  ],
@@ -243,11 +246,12 @@ export function applicationRequirementScopes(
243
246
  application: ApplicationCatalogEntry,
244
247
  ): ApplicationRequirementScope[] {
245
248
  const scopes = new Set<ApplicationRequirementScope>(['all']);
249
+ const deployTargets = application.deployTargets as readonly ApplicationDeployTarget[];
246
250
  const hasBrowserSurface =
247
- Boolean(application.productionUrl) || application.deployTargets.some((target) => target.kind === 'pages');
251
+ Boolean(application.productionUrl) || deployTargets.some((target) => target.kind === 'pages');
248
252
  const hasApiSurface =
249
253
  application.services.length > 0 ||
250
- application.deployTargets.some((target) => Boolean(target.apiUrl));
254
+ deployTargets.some((target) => Boolean(target.apiUrl));
251
255
 
252
256
  if (hasBrowserSurface) scopes.add('browser');
253
257
  if (hasApiSurface) scopes.add('api');
@@ -319,24 +319,34 @@ export const APPLICATIONS = {
319
319
  "appDir": "TopoloFeed",
320
320
  "name": "TopoloFeed",
321
321
  "packageName": null,
322
- "productionUrl": null,
323
- "services": [],
322
+ "productionUrl": "https://topolo-feed-api.topolo.app",
323
+ "services": [
324
+ "feed"
325
+ ],
324
326
  "deployTargets": [
325
327
  {
326
328
  "name": "topolo-feed-analytics-api",
327
329
  "kind": "worker",
328
- "apiUrl": null,
329
- "domains": [],
330
- "routes": [],
330
+ "apiUrl": "https://topolo-feed-analytics-api.topolo.app",
331
+ "domains": [
332
+ "topolo-feed-analytics-api.topolo.app"
333
+ ],
334
+ "routes": [
335
+ "topolo-feed-analytics-api.topolo.app"
336
+ ],
331
337
  "serviceId": null
332
338
  },
333
339
  {
334
340
  "name": "topolo-feed-api",
335
341
  "kind": "worker",
336
- "apiUrl": null,
337
- "domains": [],
338
- "routes": [],
339
- "serviceId": null
342
+ "apiUrl": "https://topolo-feed-api.topolo.app",
343
+ "domains": [
344
+ "topolo-feed-api.topolo.app"
345
+ ],
346
+ "routes": [
347
+ "topolo-feed-api.topolo.app"
348
+ ],
349
+ "serviceId": "feed"
340
350
  }
341
351
  ]
342
352
  },
@@ -576,7 +586,7 @@ export const APPLICATIONS = {
576
586
  {
577
587
  "name": "topoloone-worker",
578
588
  "kind": "worker",
579
- "apiUrl": "https://topoloone-worker.topolo.workers.dev",
589
+ "apiUrl": "https://one.topolo.app",
580
590
  "domains": [],
581
591
  "routes": [
582
592
  "one.topolo.app/*"
@@ -11,13 +11,14 @@ export const SERVICES = {
11
11
  chat: "https://chat.topolo.app",
12
12
  commerce: "https://topolo-commerce-api.topolo.workers.dev",
13
13
  crm: "https://crm-api.topolo.app",
14
+ feed: "https://topolo-feed-api.topolo.app",
14
15
  forecast: "https://forecast-worker-production.topolo.workers.dev",
15
16
  learn: "https://topololearn-api.topolo.workers.dev",
16
17
  mail: "https://mail.topolo.app",
17
18
  mdm: "https://topolo-mdm-api.topolo.app",
18
19
  messaging: "https://messages.topolo.app",
19
20
  nexus: "https://topolo-nexus-gateway.topolo.workers.dev",
20
- one: "https://topoloone-worker.topolo.workers.dev",
21
+ one: "https://one.topolo.app",
21
22
  pay: "https://topolo-pay.topolo.workers.dev",
22
23
  "quro.api": "https://api.ol0.me",
23
24
  "quro.redirect": "https://ol0.me",
@@ -46,7 +46,9 @@ describe('service registry', () => {
46
46
  it('includes every production worker API that belongs to a platform application', () => {
47
47
  expect(DEFAULT_SERVICE_URLS).toMatchObject({
48
48
  calendar: 'https://calendar.topolo.app',
49
+ feed: 'https://topolo-feed-api.topolo.app',
49
50
  mail: 'https://mail.topolo.app',
51
+ one: 'https://one.topolo.app',
50
52
  web: 'https://web-api.topolo.app',
51
53
  });
52
54
  expect(DEFAULT_SERVICE_URLS).not.toHaveProperty('web.api');
@@ -91,6 +93,16 @@ describe('application catalog', () => {
91
93
  APPLICATIONS.web.deployTargets.find((target) => target.name === 'topoloweb-runtime')?.serviceId,
92
94
  ).toBeNull();
93
95
  });
96
+
97
+ it('treats TopoloFeed analytics as telemetry, not an agent-callable API service', () => {
98
+ expect(APPLICATIONS.feed.services).toEqual(['feed']);
99
+ expect(
100
+ APPLICATIONS.feed.deployTargets.find((target) => target.name === 'topolo-feed-api')?.serviceId,
101
+ ).toBe('feed');
102
+ expect(
103
+ APPLICATIONS.feed.deployTargets.find((target) => target.name === 'topolo-feed-analytics-api')?.serviceId,
104
+ ).toBeNull();
105
+ });
94
106
  });
95
107
 
96
108
  describe('application requirements', () => {