@topolo/mcp 0.4.9 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dispatch.js +28 -22
- package/dist/http.d.ts +63 -0
- package/dist/http.js +16462 -0
- package/dist/index.js +167 -158
- package/package.json +17 -13
package/dist/index.js
CHANGED
|
@@ -124,7 +124,7 @@ var APPLICATIONS = {
|
|
|
124
124
|
"admin.topolo.app"
|
|
125
125
|
],
|
|
126
126
|
"routes": [],
|
|
127
|
-
"
|
|
127
|
+
"appId": null
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
130
|
"name": "topolo-admin-api",
|
|
@@ -132,7 +132,7 @@ var APPLICATIONS = {
|
|
|
132
132
|
"apiUrl": null,
|
|
133
133
|
"domains": [],
|
|
134
134
|
"routes": [],
|
|
135
|
-
"
|
|
135
|
+
"appId": null
|
|
136
136
|
}
|
|
137
137
|
]
|
|
138
138
|
},
|
|
@@ -154,7 +154,7 @@ var APPLICATIONS = {
|
|
|
154
154
|
"agent.topolo.app"
|
|
155
155
|
],
|
|
156
156
|
"routes": [],
|
|
157
|
-
"
|
|
157
|
+
"appId": "agent"
|
|
158
158
|
},
|
|
159
159
|
{
|
|
160
160
|
"name": "topolo-agent-api",
|
|
@@ -162,7 +162,7 @@ var APPLICATIONS = {
|
|
|
162
162
|
"apiUrl": null,
|
|
163
163
|
"domains": [],
|
|
164
164
|
"routes": [],
|
|
165
|
-
"
|
|
165
|
+
"appId": null
|
|
166
166
|
}
|
|
167
167
|
]
|
|
168
168
|
},
|
|
@@ -186,7 +186,7 @@ var APPLICATIONS = {
|
|
|
186
186
|
"routes": [
|
|
187
187
|
"auth.topolo.app"
|
|
188
188
|
],
|
|
189
|
-
"
|
|
189
|
+
"appId": "auth"
|
|
190
190
|
}
|
|
191
191
|
]
|
|
192
192
|
},
|
|
@@ -208,7 +208,7 @@ var APPLICATIONS = {
|
|
|
208
208
|
"backup.topolo.app"
|
|
209
209
|
],
|
|
210
210
|
"routes": [],
|
|
211
|
-
"
|
|
211
|
+
"appId": "backup"
|
|
212
212
|
}
|
|
213
213
|
]
|
|
214
214
|
},
|
|
@@ -230,7 +230,7 @@ var APPLICATIONS = {
|
|
|
230
230
|
"books.topolo.app"
|
|
231
231
|
],
|
|
232
232
|
"routes": [],
|
|
233
|
-
"
|
|
233
|
+
"appId": "books"
|
|
234
234
|
},
|
|
235
235
|
{
|
|
236
236
|
"name": "topolo-books-api",
|
|
@@ -238,7 +238,7 @@ var APPLICATIONS = {
|
|
|
238
238
|
"apiUrl": null,
|
|
239
239
|
"domains": [],
|
|
240
240
|
"routes": [],
|
|
241
|
-
"
|
|
241
|
+
"appId": null
|
|
242
242
|
}
|
|
243
243
|
]
|
|
244
244
|
},
|
|
@@ -260,7 +260,7 @@ var APPLICATIONS = {
|
|
|
260
260
|
"bugfix.topolo.app"
|
|
261
261
|
],
|
|
262
262
|
"routes": [],
|
|
263
|
-
"
|
|
263
|
+
"appId": "bugfix"
|
|
264
264
|
}
|
|
265
265
|
]
|
|
266
266
|
},
|
|
@@ -282,7 +282,7 @@ var APPLICATIONS = {
|
|
|
282
282
|
"bytes.topolo.app"
|
|
283
283
|
],
|
|
284
284
|
"routes": [],
|
|
285
|
-
"
|
|
285
|
+
"appId": "bytes"
|
|
286
286
|
},
|
|
287
287
|
{
|
|
288
288
|
"name": "topolo-bytes-api",
|
|
@@ -290,7 +290,7 @@ var APPLICATIONS = {
|
|
|
290
290
|
"apiUrl": null,
|
|
291
291
|
"domains": [],
|
|
292
292
|
"routes": [],
|
|
293
|
-
"
|
|
293
|
+
"appId": null
|
|
294
294
|
}
|
|
295
295
|
]
|
|
296
296
|
},
|
|
@@ -312,7 +312,7 @@ var APPLICATIONS = {
|
|
|
312
312
|
"calendar.topolo.app"
|
|
313
313
|
],
|
|
314
314
|
"routes": [],
|
|
315
|
-
"
|
|
315
|
+
"appId": "calendar"
|
|
316
316
|
},
|
|
317
317
|
{
|
|
318
318
|
"name": "topolo-calendar-api",
|
|
@@ -320,7 +320,7 @@ var APPLICATIONS = {
|
|
|
320
320
|
"apiUrl": null,
|
|
321
321
|
"domains": [],
|
|
322
322
|
"routes": [],
|
|
323
|
-
"
|
|
323
|
+
"appId": null
|
|
324
324
|
}
|
|
325
325
|
]
|
|
326
326
|
},
|
|
@@ -342,7 +342,7 @@ var APPLICATIONS = {
|
|
|
342
342
|
"capacity.topolo.app"
|
|
343
343
|
],
|
|
344
344
|
"routes": [],
|
|
345
|
-
"
|
|
345
|
+
"appId": "capacity"
|
|
346
346
|
}
|
|
347
347
|
]
|
|
348
348
|
},
|
|
@@ -364,7 +364,7 @@ var APPLICATIONS = {
|
|
|
364
364
|
"chat.topolo.app"
|
|
365
365
|
],
|
|
366
366
|
"routes": [],
|
|
367
|
-
"
|
|
367
|
+
"appId": "chat"
|
|
368
368
|
},
|
|
369
369
|
{
|
|
370
370
|
"name": "topolo-chat-api",
|
|
@@ -372,7 +372,7 @@ var APPLICATIONS = {
|
|
|
372
372
|
"apiUrl": null,
|
|
373
373
|
"domains": [],
|
|
374
374
|
"routes": [],
|
|
375
|
-
"
|
|
375
|
+
"appId": null
|
|
376
376
|
}
|
|
377
377
|
]
|
|
378
378
|
},
|
|
@@ -392,7 +392,7 @@ var APPLICATIONS = {
|
|
|
392
392
|
"apiUrl": null,
|
|
393
393
|
"domains": [],
|
|
394
394
|
"routes": [],
|
|
395
|
-
"
|
|
395
|
+
"appId": null
|
|
396
396
|
},
|
|
397
397
|
{
|
|
398
398
|
"name": "topolo-commerce-guest-web",
|
|
@@ -402,7 +402,7 @@ var APPLICATIONS = {
|
|
|
402
402
|
"guest.topolo.app"
|
|
403
403
|
],
|
|
404
404
|
"routes": [],
|
|
405
|
-
"
|
|
405
|
+
"appId": null
|
|
406
406
|
},
|
|
407
407
|
{
|
|
408
408
|
"name": "topolo-commerce-ops-web",
|
|
@@ -412,7 +412,7 @@ var APPLICATIONS = {
|
|
|
412
412
|
"commerce.topolo.app"
|
|
413
413
|
],
|
|
414
414
|
"routes": [],
|
|
415
|
-
"
|
|
415
|
+
"appId": "commerce"
|
|
416
416
|
},
|
|
417
417
|
{
|
|
418
418
|
"name": "topolo-commerce-station-web",
|
|
@@ -422,7 +422,7 @@ var APPLICATIONS = {
|
|
|
422
422
|
"station-commerce.topolo.app"
|
|
423
423
|
],
|
|
424
424
|
"routes": [],
|
|
425
|
-
"
|
|
425
|
+
"appId": null
|
|
426
426
|
}
|
|
427
427
|
]
|
|
428
428
|
},
|
|
@@ -444,7 +444,7 @@ var APPLICATIONS = {
|
|
|
444
444
|
"compose.topolo.app"
|
|
445
445
|
],
|
|
446
446
|
"routes": [],
|
|
447
|
-
"
|
|
447
|
+
"appId": "compose"
|
|
448
448
|
},
|
|
449
449
|
{
|
|
450
450
|
"name": "topolo-compose-api",
|
|
@@ -452,7 +452,7 @@ var APPLICATIONS = {
|
|
|
452
452
|
"apiUrl": null,
|
|
453
453
|
"domains": [],
|
|
454
454
|
"routes": [],
|
|
455
|
-
"
|
|
455
|
+
"appId": null
|
|
456
456
|
}
|
|
457
457
|
]
|
|
458
458
|
},
|
|
@@ -474,7 +474,7 @@ var APPLICATIONS = {
|
|
|
474
474
|
"consent.topolo.app"
|
|
475
475
|
],
|
|
476
476
|
"routes": [],
|
|
477
|
-
"
|
|
477
|
+
"appId": "consent"
|
|
478
478
|
},
|
|
479
479
|
{
|
|
480
480
|
"name": "topolo-consent-api",
|
|
@@ -482,7 +482,7 @@ var APPLICATIONS = {
|
|
|
482
482
|
"apiUrl": null,
|
|
483
483
|
"domains": [],
|
|
484
484
|
"routes": [],
|
|
485
|
-
"
|
|
485
|
+
"appId": null
|
|
486
486
|
}
|
|
487
487
|
]
|
|
488
488
|
},
|
|
@@ -502,7 +502,7 @@ var APPLICATIONS = {
|
|
|
502
502
|
"apiUrl": null,
|
|
503
503
|
"domains": [],
|
|
504
504
|
"routes": [],
|
|
505
|
-
"
|
|
505
|
+
"appId": null
|
|
506
506
|
},
|
|
507
507
|
{
|
|
508
508
|
"name": "topolo-crm-app",
|
|
@@ -512,7 +512,7 @@ var APPLICATIONS = {
|
|
|
512
512
|
"crm.topolo.app"
|
|
513
513
|
],
|
|
514
514
|
"routes": [],
|
|
515
|
-
"
|
|
515
|
+
"appId": "crm"
|
|
516
516
|
}
|
|
517
517
|
]
|
|
518
518
|
},
|
|
@@ -532,7 +532,7 @@ var APPLICATIONS = {
|
|
|
532
532
|
"apiUrl": null,
|
|
533
533
|
"domains": [],
|
|
534
534
|
"routes": [],
|
|
535
|
-
"
|
|
535
|
+
"appId": null
|
|
536
536
|
},
|
|
537
537
|
{
|
|
538
538
|
"name": "topolo-developers",
|
|
@@ -542,7 +542,7 @@ var APPLICATIONS = {
|
|
|
542
542
|
"developers.topolo.app"
|
|
543
543
|
],
|
|
544
544
|
"routes": [],
|
|
545
|
-
"
|
|
545
|
+
"appId": "developers"
|
|
546
546
|
},
|
|
547
547
|
{
|
|
548
548
|
"name": "topolo-developers-api",
|
|
@@ -550,7 +550,7 @@ var APPLICATIONS = {
|
|
|
550
550
|
"apiUrl": null,
|
|
551
551
|
"domains": [],
|
|
552
552
|
"routes": [],
|
|
553
|
-
"
|
|
553
|
+
"appId": null
|
|
554
554
|
}
|
|
555
555
|
]
|
|
556
556
|
},
|
|
@@ -572,7 +572,7 @@ var APPLICATIONS = {
|
|
|
572
572
|
"director.topolo.app"
|
|
573
573
|
],
|
|
574
574
|
"routes": [],
|
|
575
|
-
"
|
|
575
|
+
"appId": "director"
|
|
576
576
|
},
|
|
577
577
|
{
|
|
578
578
|
"name": "topolo-director-api",
|
|
@@ -580,7 +580,7 @@ var APPLICATIONS = {
|
|
|
580
580
|
"apiUrl": null,
|
|
581
581
|
"domains": [],
|
|
582
582
|
"routes": [],
|
|
583
|
-
"
|
|
583
|
+
"appId": null
|
|
584
584
|
}
|
|
585
585
|
]
|
|
586
586
|
},
|
|
@@ -600,7 +600,7 @@ var APPLICATIONS = {
|
|
|
600
600
|
"docs.topolo.app"
|
|
601
601
|
],
|
|
602
602
|
"routes": [],
|
|
603
|
-
"
|
|
603
|
+
"appId": null
|
|
604
604
|
},
|
|
605
605
|
{
|
|
606
606
|
"name": "topolo-docs-api",
|
|
@@ -608,7 +608,7 @@ var APPLICATIONS = {
|
|
|
608
608
|
"apiUrl": null,
|
|
609
609
|
"domains": [],
|
|
610
610
|
"routes": [],
|
|
611
|
-
"
|
|
611
|
+
"appId": null
|
|
612
612
|
}
|
|
613
613
|
]
|
|
614
614
|
},
|
|
@@ -630,7 +630,7 @@ var APPLICATIONS = {
|
|
|
630
630
|
"feed-analytics-api.topolo.app"
|
|
631
631
|
],
|
|
632
632
|
"routes": [],
|
|
633
|
-
"
|
|
633
|
+
"appId": null
|
|
634
634
|
},
|
|
635
635
|
{
|
|
636
636
|
"name": "topolo-feed-api",
|
|
@@ -640,7 +640,7 @@ var APPLICATIONS = {
|
|
|
640
640
|
"feed-api.topolo.app"
|
|
641
641
|
],
|
|
642
642
|
"routes": [],
|
|
643
|
-
"
|
|
643
|
+
"appId": null
|
|
644
644
|
},
|
|
645
645
|
{
|
|
646
646
|
"name": "topolo-feed-web",
|
|
@@ -650,7 +650,7 @@ var APPLICATIONS = {
|
|
|
650
650
|
"feed.topolo.app"
|
|
651
651
|
],
|
|
652
652
|
"routes": [],
|
|
653
|
-
"
|
|
653
|
+
"appId": "feed"
|
|
654
654
|
}
|
|
655
655
|
]
|
|
656
656
|
},
|
|
@@ -672,7 +672,7 @@ var APPLICATIONS = {
|
|
|
672
672
|
"flow.topolo.app"
|
|
673
673
|
],
|
|
674
674
|
"routes": [],
|
|
675
|
-
"
|
|
675
|
+
"appId": "flow"
|
|
676
676
|
},
|
|
677
677
|
{
|
|
678
678
|
"name": "topolo-flow-api",
|
|
@@ -680,7 +680,7 @@ var APPLICATIONS = {
|
|
|
680
680
|
"apiUrl": null,
|
|
681
681
|
"domains": [],
|
|
682
682
|
"routes": [],
|
|
683
|
-
"
|
|
683
|
+
"appId": null
|
|
684
684
|
}
|
|
685
685
|
]
|
|
686
686
|
},
|
|
@@ -702,7 +702,7 @@ var APPLICATIONS = {
|
|
|
702
702
|
"forecast.topolo.app"
|
|
703
703
|
],
|
|
704
704
|
"routes": [],
|
|
705
|
-
"
|
|
705
|
+
"appId": "forecast"
|
|
706
706
|
},
|
|
707
707
|
{
|
|
708
708
|
"name": "topolo-forecast-api",
|
|
@@ -710,7 +710,7 @@ var APPLICATIONS = {
|
|
|
710
710
|
"apiUrl": null,
|
|
711
711
|
"domains": [],
|
|
712
712
|
"routes": [],
|
|
713
|
-
"
|
|
713
|
+
"appId": null
|
|
714
714
|
}
|
|
715
715
|
]
|
|
716
716
|
},
|
|
@@ -732,7 +732,7 @@ var APPLICATIONS = {
|
|
|
732
732
|
"forms.topolo.app"
|
|
733
733
|
],
|
|
734
734
|
"routes": [],
|
|
735
|
-
"
|
|
735
|
+
"appId": "forms"
|
|
736
736
|
},
|
|
737
737
|
{
|
|
738
738
|
"name": "topolo-forms-api",
|
|
@@ -740,7 +740,7 @@ var APPLICATIONS = {
|
|
|
740
740
|
"apiUrl": null,
|
|
741
741
|
"domains": [],
|
|
742
742
|
"routes": [],
|
|
743
|
-
"
|
|
743
|
+
"appId": null
|
|
744
744
|
}
|
|
745
745
|
]
|
|
746
746
|
},
|
|
@@ -762,7 +762,7 @@ var APPLICATIONS = {
|
|
|
762
762
|
"home.topolo.app"
|
|
763
763
|
],
|
|
764
764
|
"routes": [],
|
|
765
|
-
"
|
|
765
|
+
"appId": "home"
|
|
766
766
|
},
|
|
767
767
|
{
|
|
768
768
|
"name": "topolo-home-api",
|
|
@@ -770,7 +770,7 @@ var APPLICATIONS = {
|
|
|
770
770
|
"apiUrl": null,
|
|
771
771
|
"domains": [],
|
|
772
772
|
"routes": [],
|
|
773
|
-
"
|
|
773
|
+
"appId": null
|
|
774
774
|
}
|
|
775
775
|
]
|
|
776
776
|
},
|
|
@@ -792,7 +792,7 @@ var APPLICATIONS = {
|
|
|
792
792
|
"insights.topolo.app"
|
|
793
793
|
],
|
|
794
794
|
"routes": [],
|
|
795
|
-
"
|
|
795
|
+
"appId": "insights"
|
|
796
796
|
},
|
|
797
797
|
{
|
|
798
798
|
"name": "topolo-insights-api",
|
|
@@ -800,7 +800,7 @@ var APPLICATIONS = {
|
|
|
800
800
|
"apiUrl": null,
|
|
801
801
|
"domains": [],
|
|
802
802
|
"routes": [],
|
|
803
|
-
"
|
|
803
|
+
"appId": null
|
|
804
804
|
}
|
|
805
805
|
]
|
|
806
806
|
},
|
|
@@ -822,7 +822,7 @@ var APPLICATIONS = {
|
|
|
822
822
|
"inventory.topolo.app"
|
|
823
823
|
],
|
|
824
824
|
"routes": [],
|
|
825
|
-
"
|
|
825
|
+
"appId": "inventory"
|
|
826
826
|
},
|
|
827
827
|
{
|
|
828
828
|
"name": "topolo-inventory-api",
|
|
@@ -830,7 +830,7 @@ var APPLICATIONS = {
|
|
|
830
830
|
"apiUrl": null,
|
|
831
831
|
"domains": [],
|
|
832
832
|
"routes": [],
|
|
833
|
-
"
|
|
833
|
+
"appId": null
|
|
834
834
|
}
|
|
835
835
|
]
|
|
836
836
|
},
|
|
@@ -852,7 +852,7 @@ var APPLICATIONS = {
|
|
|
852
852
|
"learn.topolo.app"
|
|
853
853
|
],
|
|
854
854
|
"routes": [],
|
|
855
|
-
"
|
|
855
|
+
"appId": "learn"
|
|
856
856
|
},
|
|
857
857
|
{
|
|
858
858
|
"name": "topolo-learn-api",
|
|
@@ -860,7 +860,7 @@ var APPLICATIONS = {
|
|
|
860
860
|
"apiUrl": null,
|
|
861
861
|
"domains": [],
|
|
862
862
|
"routes": [],
|
|
863
|
-
"
|
|
863
|
+
"appId": null
|
|
864
864
|
}
|
|
865
865
|
]
|
|
866
866
|
},
|
|
@@ -884,7 +884,7 @@ var APPLICATIONS = {
|
|
|
884
884
|
"routes": [
|
|
885
885
|
"localize.topolo.app"
|
|
886
886
|
],
|
|
887
|
-
"
|
|
887
|
+
"appId": "localize"
|
|
888
888
|
}
|
|
889
889
|
]
|
|
890
890
|
},
|
|
@@ -906,7 +906,7 @@ var APPLICATIONS = {
|
|
|
906
906
|
"mail.topolo.app"
|
|
907
907
|
],
|
|
908
908
|
"routes": [],
|
|
909
|
-
"
|
|
909
|
+
"appId": "mail"
|
|
910
910
|
},
|
|
911
911
|
{
|
|
912
912
|
"name": "topolo-mail-api",
|
|
@@ -914,7 +914,7 @@ var APPLICATIONS = {
|
|
|
914
914
|
"apiUrl": null,
|
|
915
915
|
"domains": [],
|
|
916
916
|
"routes": [],
|
|
917
|
-
"
|
|
917
|
+
"appId": null
|
|
918
918
|
}
|
|
919
919
|
]
|
|
920
920
|
},
|
|
@@ -934,7 +934,7 @@ var APPLICATIONS = {
|
|
|
934
934
|
"apiUrl": null,
|
|
935
935
|
"domains": [],
|
|
936
936
|
"routes": [],
|
|
937
|
-
"
|
|
937
|
+
"appId": null
|
|
938
938
|
},
|
|
939
939
|
{
|
|
940
940
|
"name": "topolo-mdm-console",
|
|
@@ -944,7 +944,7 @@ var APPLICATIONS = {
|
|
|
944
944
|
"mdm.topolo.app"
|
|
945
945
|
],
|
|
946
946
|
"routes": [],
|
|
947
|
-
"
|
|
947
|
+
"appId": "mdm"
|
|
948
948
|
}
|
|
949
949
|
]
|
|
950
950
|
},
|
|
@@ -966,7 +966,7 @@ var APPLICATIONS = {
|
|
|
966
966
|
"messages.topolo.app"
|
|
967
967
|
],
|
|
968
968
|
"routes": [],
|
|
969
|
-
"
|
|
969
|
+
"appId": "messages"
|
|
970
970
|
},
|
|
971
971
|
{
|
|
972
972
|
"name": "topolo-messages-api",
|
|
@@ -974,7 +974,7 @@ var APPLICATIONS = {
|
|
|
974
974
|
"apiUrl": null,
|
|
975
975
|
"domains": [],
|
|
976
976
|
"routes": [],
|
|
977
|
-
"
|
|
977
|
+
"appId": null
|
|
978
978
|
},
|
|
979
979
|
{
|
|
980
980
|
"name": "topolo-messages-dispatch",
|
|
@@ -982,7 +982,7 @@ var APPLICATIONS = {
|
|
|
982
982
|
"apiUrl": null,
|
|
983
983
|
"domains": [],
|
|
984
984
|
"routes": [],
|
|
985
|
-
"
|
|
985
|
+
"appId": null
|
|
986
986
|
}
|
|
987
987
|
]
|
|
988
988
|
},
|
|
@@ -1004,7 +1004,7 @@ var APPLICATIONS = {
|
|
|
1004
1004
|
"nexus.topolo.app"
|
|
1005
1005
|
],
|
|
1006
1006
|
"routes": [],
|
|
1007
|
-
"
|
|
1007
|
+
"appId": null
|
|
1008
1008
|
},
|
|
1009
1009
|
{
|
|
1010
1010
|
"name": "topolo-nexus-gateway",
|
|
@@ -1014,7 +1014,7 @@ var APPLICATIONS = {
|
|
|
1014
1014
|
"nexus.topolo.app"
|
|
1015
1015
|
],
|
|
1016
1016
|
"routes": [],
|
|
1017
|
-
"
|
|
1017
|
+
"appId": "nexus"
|
|
1018
1018
|
}
|
|
1019
1019
|
]
|
|
1020
1020
|
},
|
|
@@ -1038,7 +1038,7 @@ var APPLICATIONS = {
|
|
|
1038
1038
|
"routes": [
|
|
1039
1039
|
"notify.topolo.app"
|
|
1040
1040
|
],
|
|
1041
|
-
"
|
|
1041
|
+
"appId": "notify"
|
|
1042
1042
|
}
|
|
1043
1043
|
]
|
|
1044
1044
|
},
|
|
@@ -1060,7 +1060,7 @@ var APPLICATIONS = {
|
|
|
1060
1060
|
"observability-watch.topolo.app"
|
|
1061
1061
|
],
|
|
1062
1062
|
"routes": [],
|
|
1063
|
-
"
|
|
1063
|
+
"appId": "observability_watch"
|
|
1064
1064
|
}
|
|
1065
1065
|
]
|
|
1066
1066
|
},
|
|
@@ -1084,7 +1084,7 @@ var APPLICATIONS = {
|
|
|
1084
1084
|
"routes": [
|
|
1085
1085
|
"one.topolo.app/*"
|
|
1086
1086
|
],
|
|
1087
|
-
"
|
|
1087
|
+
"appId": null
|
|
1088
1088
|
},
|
|
1089
1089
|
{
|
|
1090
1090
|
"name": "topolo-one-api",
|
|
@@ -1096,7 +1096,7 @@ var APPLICATIONS = {
|
|
|
1096
1096
|
"routes": [
|
|
1097
1097
|
"www.topolo.app/*"
|
|
1098
1098
|
],
|
|
1099
|
-
"
|
|
1099
|
+
"appId": "one"
|
|
1100
1100
|
},
|
|
1101
1101
|
{
|
|
1102
1102
|
"name": "topolo-one-website",
|
|
@@ -1109,7 +1109,7 @@ var APPLICATIONS = {
|
|
|
1109
1109
|
"topolo.io",
|
|
1110
1110
|
"www.topolo.io"
|
|
1111
1111
|
],
|
|
1112
|
-
"
|
|
1112
|
+
"appId": null
|
|
1113
1113
|
}
|
|
1114
1114
|
]
|
|
1115
1115
|
},
|
|
@@ -1131,7 +1131,7 @@ var APPLICATIONS = {
|
|
|
1131
1131
|
"p2p.topolo.app"
|
|
1132
1132
|
],
|
|
1133
1133
|
"routes": [],
|
|
1134
|
-
"
|
|
1134
|
+
"appId": "p2p"
|
|
1135
1135
|
},
|
|
1136
1136
|
{
|
|
1137
1137
|
"name": "topolo-p2p-api",
|
|
@@ -1139,7 +1139,7 @@ var APPLICATIONS = {
|
|
|
1139
1139
|
"apiUrl": null,
|
|
1140
1140
|
"domains": [],
|
|
1141
1141
|
"routes": [],
|
|
1142
|
-
"
|
|
1142
|
+
"appId": null
|
|
1143
1143
|
}
|
|
1144
1144
|
]
|
|
1145
1145
|
},
|
|
@@ -1161,7 +1161,7 @@ var APPLICATIONS = {
|
|
|
1161
1161
|
"pay.topolo.app"
|
|
1162
1162
|
],
|
|
1163
1163
|
"routes": [],
|
|
1164
|
-
"
|
|
1164
|
+
"appId": "pay"
|
|
1165
1165
|
},
|
|
1166
1166
|
{
|
|
1167
1167
|
"name": "topolo-pay-api",
|
|
@@ -1169,7 +1169,7 @@ var APPLICATIONS = {
|
|
|
1169
1169
|
"apiUrl": null,
|
|
1170
1170
|
"domains": [],
|
|
1171
1171
|
"routes": [],
|
|
1172
|
-
"
|
|
1172
|
+
"appId": null
|
|
1173
1173
|
}
|
|
1174
1174
|
]
|
|
1175
1175
|
},
|
|
@@ -1191,7 +1191,7 @@ var APPLICATIONS = {
|
|
|
1191
1191
|
"people.topolo.app"
|
|
1192
1192
|
],
|
|
1193
1193
|
"routes": [],
|
|
1194
|
-
"
|
|
1194
|
+
"appId": "people"
|
|
1195
1195
|
},
|
|
1196
1196
|
{
|
|
1197
1197
|
"name": "topolo-people-api",
|
|
@@ -1199,7 +1199,7 @@ var APPLICATIONS = {
|
|
|
1199
1199
|
"apiUrl": null,
|
|
1200
1200
|
"domains": [],
|
|
1201
1201
|
"routes": [],
|
|
1202
|
-
"
|
|
1202
|
+
"appId": null
|
|
1203
1203
|
}
|
|
1204
1204
|
]
|
|
1205
1205
|
},
|
|
@@ -1224,7 +1224,7 @@ var APPLICATIONS = {
|
|
|
1224
1224
|
"routes": [
|
|
1225
1225
|
"api.ol0.me/*"
|
|
1226
1226
|
],
|
|
1227
|
-
"
|
|
1227
|
+
"appId": "quro.api"
|
|
1228
1228
|
},
|
|
1229
1229
|
{
|
|
1230
1230
|
"name": "quro-redirect-system",
|
|
@@ -1236,7 +1236,7 @@ var APPLICATIONS = {
|
|
|
1236
1236
|
"routes": [
|
|
1237
1237
|
"ol0.me/*"
|
|
1238
1238
|
],
|
|
1239
|
-
"
|
|
1239
|
+
"appId": "quro.redirect"
|
|
1240
1240
|
},
|
|
1241
1241
|
{
|
|
1242
1242
|
"name": "quro-ui",
|
|
@@ -1246,7 +1246,7 @@ var APPLICATIONS = {
|
|
|
1246
1246
|
"quro.topolo.app"
|
|
1247
1247
|
],
|
|
1248
1248
|
"routes": [],
|
|
1249
|
-
"
|
|
1249
|
+
"appId": null
|
|
1250
1250
|
}
|
|
1251
1251
|
]
|
|
1252
1252
|
},
|
|
@@ -1268,7 +1268,7 @@ var APPLICATIONS = {
|
|
|
1268
1268
|
"roadmapper.topolo.app"
|
|
1269
1269
|
],
|
|
1270
1270
|
"routes": [],
|
|
1271
|
-
"
|
|
1271
|
+
"appId": "roadmapper"
|
|
1272
1272
|
},
|
|
1273
1273
|
{
|
|
1274
1274
|
"name": "topolo-roadmapper-api",
|
|
@@ -1276,7 +1276,7 @@ var APPLICATIONS = {
|
|
|
1276
1276
|
"apiUrl": null,
|
|
1277
1277
|
"domains": [],
|
|
1278
1278
|
"routes": [],
|
|
1279
|
-
"
|
|
1279
|
+
"appId": null
|
|
1280
1280
|
}
|
|
1281
1281
|
]
|
|
1282
1282
|
},
|
|
@@ -1298,7 +1298,7 @@ var APPLICATIONS = {
|
|
|
1298
1298
|
"sign.topolo.app"
|
|
1299
1299
|
],
|
|
1300
1300
|
"routes": [],
|
|
1301
|
-
"
|
|
1301
|
+
"appId": "sign"
|
|
1302
1302
|
},
|
|
1303
1303
|
{
|
|
1304
1304
|
"name": "topolo-sign-api",
|
|
@@ -1306,7 +1306,7 @@ var APPLICATIONS = {
|
|
|
1306
1306
|
"apiUrl": null,
|
|
1307
1307
|
"domains": [],
|
|
1308
1308
|
"routes": [],
|
|
1309
|
-
"
|
|
1309
|
+
"appId": null
|
|
1310
1310
|
}
|
|
1311
1311
|
]
|
|
1312
1312
|
},
|
|
@@ -1328,7 +1328,7 @@ var APPLICATIONS = {
|
|
|
1328
1328
|
"studio.topolo.app"
|
|
1329
1329
|
],
|
|
1330
1330
|
"routes": [],
|
|
1331
|
-
"
|
|
1331
|
+
"appId": "social_studio"
|
|
1332
1332
|
},
|
|
1333
1333
|
{
|
|
1334
1334
|
"name": "topolo-social-studio-api",
|
|
@@ -1336,7 +1336,7 @@ var APPLICATIONS = {
|
|
|
1336
1336
|
"apiUrl": null,
|
|
1337
1337
|
"domains": [],
|
|
1338
1338
|
"routes": [],
|
|
1339
|
-
"
|
|
1339
|
+
"appId": null
|
|
1340
1340
|
},
|
|
1341
1341
|
{
|
|
1342
1342
|
"name": "topolo-social-studio-queue",
|
|
@@ -1344,7 +1344,7 @@ var APPLICATIONS = {
|
|
|
1344
1344
|
"apiUrl": null,
|
|
1345
1345
|
"domains": [],
|
|
1346
1346
|
"routes": [],
|
|
1347
|
-
"
|
|
1347
|
+
"appId": null
|
|
1348
1348
|
}
|
|
1349
1349
|
]
|
|
1350
1350
|
},
|
|
@@ -1366,7 +1366,7 @@ var APPLICATIONS = {
|
|
|
1366
1366
|
"socialize.topolo.app"
|
|
1367
1367
|
],
|
|
1368
1368
|
"routes": [],
|
|
1369
|
-
"
|
|
1369
|
+
"appId": "socialize"
|
|
1370
1370
|
},
|
|
1371
1371
|
{
|
|
1372
1372
|
"name": "topolo-socialize-api",
|
|
@@ -1376,7 +1376,7 @@ var APPLICATIONS = {
|
|
|
1376
1376
|
"socialize-api.topolo.app"
|
|
1377
1377
|
],
|
|
1378
1378
|
"routes": [],
|
|
1379
|
-
"
|
|
1379
|
+
"appId": null
|
|
1380
1380
|
},
|
|
1381
1381
|
{
|
|
1382
1382
|
"name": "topolo-socialize-scheduler",
|
|
@@ -1384,7 +1384,7 @@ var APPLICATIONS = {
|
|
|
1384
1384
|
"apiUrl": null,
|
|
1385
1385
|
"domains": [],
|
|
1386
1386
|
"routes": [],
|
|
1387
|
-
"
|
|
1387
|
+
"appId": null
|
|
1388
1388
|
}
|
|
1389
1389
|
]
|
|
1390
1390
|
},
|
|
@@ -1406,7 +1406,7 @@ var APPLICATIONS = {
|
|
|
1406
1406
|
"spaces.topolo.app"
|
|
1407
1407
|
],
|
|
1408
1408
|
"routes": [],
|
|
1409
|
-
"
|
|
1409
|
+
"appId": "spaces"
|
|
1410
1410
|
},
|
|
1411
1411
|
{
|
|
1412
1412
|
"name": "topolo-spaces-api",
|
|
@@ -1414,7 +1414,7 @@ var APPLICATIONS = {
|
|
|
1414
1414
|
"apiUrl": null,
|
|
1415
1415
|
"domains": [],
|
|
1416
1416
|
"routes": [],
|
|
1417
|
-
"
|
|
1417
|
+
"appId": null
|
|
1418
1418
|
}
|
|
1419
1419
|
]
|
|
1420
1420
|
},
|
|
@@ -1436,7 +1436,7 @@ var APPLICATIONS = {
|
|
|
1436
1436
|
"status.topolo.app"
|
|
1437
1437
|
],
|
|
1438
1438
|
"routes": [],
|
|
1439
|
-
"
|
|
1439
|
+
"appId": "status"
|
|
1440
1440
|
}
|
|
1441
1441
|
]
|
|
1442
1442
|
},
|
|
@@ -1460,7 +1460,7 @@ var APPLICATIONS = {
|
|
|
1460
1460
|
"routes": [
|
|
1461
1461
|
"success.topolo.app"
|
|
1462
1462
|
],
|
|
1463
|
-
"
|
|
1463
|
+
"appId": "success"
|
|
1464
1464
|
},
|
|
1465
1465
|
{
|
|
1466
1466
|
"name": "topolo-success-api",
|
|
@@ -1468,7 +1468,7 @@ var APPLICATIONS = {
|
|
|
1468
1468
|
"apiUrl": null,
|
|
1469
1469
|
"domains": [],
|
|
1470
1470
|
"routes": [],
|
|
1471
|
-
"
|
|
1471
|
+
"appId": null
|
|
1472
1472
|
}
|
|
1473
1473
|
]
|
|
1474
1474
|
},
|
|
@@ -1492,7 +1492,7 @@ var APPLICATIONS = {
|
|
|
1492
1492
|
"routes": [
|
|
1493
1493
|
"support.topolo.app/*"
|
|
1494
1494
|
],
|
|
1495
|
-
"
|
|
1495
|
+
"appId": "support"
|
|
1496
1496
|
},
|
|
1497
1497
|
{
|
|
1498
1498
|
"name": "topolo-support-api",
|
|
@@ -1500,7 +1500,7 @@ var APPLICATIONS = {
|
|
|
1500
1500
|
"apiUrl": null,
|
|
1501
1501
|
"domains": [],
|
|
1502
1502
|
"routes": [],
|
|
1503
|
-
"
|
|
1503
|
+
"appId": null
|
|
1504
1504
|
}
|
|
1505
1505
|
]
|
|
1506
1506
|
},
|
|
@@ -1522,7 +1522,7 @@ var APPLICATIONS = {
|
|
|
1522
1522
|
"survey.topolo.app"
|
|
1523
1523
|
],
|
|
1524
1524
|
"routes": [],
|
|
1525
|
-
"
|
|
1525
|
+
"appId": "survey"
|
|
1526
1526
|
},
|
|
1527
1527
|
{
|
|
1528
1528
|
"name": "topolo-survey-api",
|
|
@@ -1530,7 +1530,7 @@ var APPLICATIONS = {
|
|
|
1530
1530
|
"apiUrl": null,
|
|
1531
1531
|
"domains": [],
|
|
1532
1532
|
"routes": [],
|
|
1533
|
-
"
|
|
1533
|
+
"appId": null
|
|
1534
1534
|
}
|
|
1535
1535
|
]
|
|
1536
1536
|
},
|
|
@@ -1552,7 +1552,7 @@ var APPLICATIONS = {
|
|
|
1552
1552
|
"voice.topolo.app"
|
|
1553
1553
|
],
|
|
1554
1554
|
"routes": [],
|
|
1555
|
-
"
|
|
1555
|
+
"appId": "voice"
|
|
1556
1556
|
},
|
|
1557
1557
|
{
|
|
1558
1558
|
"name": "topolo-voice-api",
|
|
@@ -1560,7 +1560,7 @@ var APPLICATIONS = {
|
|
|
1560
1560
|
"apiUrl": null,
|
|
1561
1561
|
"domains": [],
|
|
1562
1562
|
"routes": [],
|
|
1563
|
-
"
|
|
1563
|
+
"appId": null
|
|
1564
1564
|
}
|
|
1565
1565
|
]
|
|
1566
1566
|
},
|
|
@@ -1580,7 +1580,7 @@ var APPLICATIONS = {
|
|
|
1580
1580
|
"apiUrl": null,
|
|
1581
1581
|
"domains": [],
|
|
1582
1582
|
"routes": [],
|
|
1583
|
-
"
|
|
1583
|
+
"appId": null
|
|
1584
1584
|
},
|
|
1585
1585
|
{
|
|
1586
1586
|
"name": "topolo-web-runtime",
|
|
@@ -1593,7 +1593,7 @@ var APPLICATIONS = {
|
|
|
1593
1593
|
"*.sites.topolo.app/*",
|
|
1594
1594
|
"sites.topolo.app"
|
|
1595
1595
|
],
|
|
1596
|
-
"
|
|
1596
|
+
"appId": null
|
|
1597
1597
|
},
|
|
1598
1598
|
{
|
|
1599
1599
|
"name": "topolo-web-studio",
|
|
@@ -1603,7 +1603,7 @@ var APPLICATIONS = {
|
|
|
1603
1603
|
"web.topolo.app"
|
|
1604
1604
|
],
|
|
1605
1605
|
"routes": [],
|
|
1606
|
-
"
|
|
1606
|
+
"appId": "web"
|
|
1607
1607
|
}
|
|
1608
1608
|
]
|
|
1609
1609
|
}
|
|
@@ -1805,7 +1805,7 @@ function applicationRequirementScopes(application) {
|
|
|
1805
1805
|
const hasBrowserSurface = Boolean(application.productionUrl) || // String() keeps this guard valid after the Pages->Worker migration narrowed
|
|
1806
1806
|
// the generated kind union to "worker" (no "pages" literal remains).
|
|
1807
1807
|
application.deployTargets.some((target) => String(target.kind) === "pages");
|
|
1808
|
-
const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.
|
|
1808
|
+
const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.appId));
|
|
1809
1809
|
if (hasBrowserSurface) scopes.add("browser");
|
|
1810
1810
|
if (hasApiSurface) scopes.add("api");
|
|
1811
1811
|
if (appId === "cli" || appId === "mcp" || appId === "cloudcontrol") {
|
|
@@ -2012,7 +2012,7 @@ function resolveServiceUrl(service, overrides) {
|
|
|
2012
2012
|
return DEFAULT_SERVICE_URLS[service];
|
|
2013
2013
|
}
|
|
2014
2014
|
function catalogServiceKeyCandidates(entry, preferred) {
|
|
2015
|
-
const values = [preferred, entry.slug, entry.name, entry.
|
|
2015
|
+
const values = [preferred, entry.slug, entry.name, entry.appId].filter(
|
|
2016
2016
|
(value) => typeof value === "string" && value.trim().length > 0
|
|
2017
2017
|
);
|
|
2018
2018
|
const keys = /* @__PURE__ */ new Set();
|
|
@@ -2064,7 +2064,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2064
2064
|
credential;
|
|
2065
2065
|
agent;
|
|
2066
2066
|
serviceUrls;
|
|
2067
|
-
|
|
2067
|
+
appIds;
|
|
2068
2068
|
requireConfirmForWrites;
|
|
2069
2069
|
timeoutMs;
|
|
2070
2070
|
fetchImpl;
|
|
@@ -2072,18 +2072,18 @@ var TopoloClient = class _TopoloClient {
|
|
|
2072
2072
|
serviceCatalogCache = null;
|
|
2073
2073
|
actionCatalogCache = null;
|
|
2074
2074
|
/**
|
|
2075
|
-
* Process-wide cache for slug →
|
|
2075
|
+
* Process-wide cache for slug → app-id lookups. Keyed by
|
|
2076
2076
|
* `${authBaseUrl}|${slug}` so multiple `TopoloClient` instances pointing at
|
|
2077
2077
|
* the same Auth share, but staging vs prod don't poison each other.
|
|
2078
|
-
* Cleared via `TopoloClient.
|
|
2078
|
+
* Cleared via `TopoloClient.clearAppIdCache()` if a test needs it.
|
|
2079
2079
|
*/
|
|
2080
|
-
static
|
|
2080
|
+
static appIdCache = /* @__PURE__ */ new Map();
|
|
2081
2081
|
/**
|
|
2082
|
-
* Drop the slug→
|
|
2082
|
+
* Drop the slug→app-id cache. Test-only — production callers should
|
|
2083
2083
|
* let the 5-minute TTL expire naturally.
|
|
2084
2084
|
*/
|
|
2085
|
-
static
|
|
2086
|
-
_TopoloClient.
|
|
2085
|
+
static clearAppIdCache() {
|
|
2086
|
+
_TopoloClient.appIdCache.clear();
|
|
2087
2087
|
}
|
|
2088
2088
|
constructor(options) {
|
|
2089
2089
|
if (!options.credential) throw new TopoloAuthError("credential is required");
|
|
@@ -2091,7 +2091,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2091
2091
|
this.credential = options.credential;
|
|
2092
2092
|
this.agent = options.agent;
|
|
2093
2093
|
this.serviceUrls = options.serviceUrls;
|
|
2094
|
-
this.
|
|
2094
|
+
this.appIds = options.appIds;
|
|
2095
2095
|
this.requireConfirmForWrites = options.requireConfirmForWrites !== false;
|
|
2096
2096
|
this.timeoutMs = options.timeoutMs ?? 3e4;
|
|
2097
2097
|
this.fetchImpl = options.fetch ?? fetch;
|
|
@@ -2127,8 +2127,8 @@ var TopoloClient = class _TopoloClient {
|
|
|
2127
2127
|
const headers = new Headers();
|
|
2128
2128
|
headers.set("Accept", "application/json");
|
|
2129
2129
|
if (opts.body !== void 0) headers.set("Content-Type", "application/json");
|
|
2130
|
-
const
|
|
2131
|
-
if (
|
|
2130
|
+
const platformAppId = resolveConfiguredAppId(resolvedService.serviceKey, this.appIds);
|
|
2131
|
+
if (platformAppId) headers.set("X-App-ID", platformAppId);
|
|
2132
2132
|
applyAuthHeaders(headers, this.credential);
|
|
2133
2133
|
const requestId = generateRequestId();
|
|
2134
2134
|
applyAuditHeaders(headers, this.agent, requestId);
|
|
@@ -2248,7 +2248,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2248
2248
|
return baseUrl ? { serviceKey, baseUrl } : null;
|
|
2249
2249
|
}
|
|
2250
2250
|
/**
|
|
2251
|
-
* Resolve a service-slug → opaque
|
|
2251
|
+
* Resolve a service-slug → opaque app-id via caller config or TopoloAuth.
|
|
2252
2252
|
*
|
|
2253
2253
|
* Cache: 5 minutes per process per `(slug, auth_base_url)`. Negative
|
|
2254
2254
|
* results (404) are cached for 60s so a typo doesn't hot-loop the
|
|
@@ -2259,16 +2259,16 @@ var TopoloClient = class _TopoloClient {
|
|
|
2259
2259
|
* This keeps the resolver usable during early bootstrap before a caller
|
|
2260
2260
|
* has acquired an access token.
|
|
2261
2261
|
*/
|
|
2262
|
-
async
|
|
2262
|
+
async getAppIdBySlug(slug) {
|
|
2263
2263
|
if (typeof slug !== "string") return null;
|
|
2264
2264
|
const normalized = slug.trim().toLowerCase();
|
|
2265
2265
|
if (!normalized) return null;
|
|
2266
|
-
const
|
|
2267
|
-
if (
|
|
2266
|
+
const configuredAppId = resolveConfiguredAppId(normalized, this.appIds);
|
|
2267
|
+
if (configuredAppId) return configuredAppId;
|
|
2268
2268
|
const authBase = resolveServiceUrl("developers", this.serviceUrls);
|
|
2269
2269
|
const cacheKey = `${authBase}|${normalized}`;
|
|
2270
2270
|
const now = Date.now();
|
|
2271
|
-
const cached = _TopoloClient.
|
|
2271
|
+
const cached = _TopoloClient.appIdCache.get(cacheKey);
|
|
2272
2272
|
if (cached && cached.expiresAt > now) {
|
|
2273
2273
|
return cached.value;
|
|
2274
2274
|
}
|
|
@@ -2286,7 +2286,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2286
2286
|
return null;
|
|
2287
2287
|
}
|
|
2288
2288
|
if (res.status === 404) {
|
|
2289
|
-
_TopoloClient.
|
|
2289
|
+
_TopoloClient.appIdCache.set(cacheKey, {
|
|
2290
2290
|
value: null,
|
|
2291
2291
|
expiresAt: now + NEGATIVE_CACHE_TTL_MS
|
|
2292
2292
|
});
|
|
@@ -2296,9 +2296,9 @@ var TopoloClient = class _TopoloClient {
|
|
|
2296
2296
|
return null;
|
|
2297
2297
|
}
|
|
2298
2298
|
const body = await res.json().catch(() => null);
|
|
2299
|
-
const
|
|
2300
|
-
const value = typeof
|
|
2301
|
-
_TopoloClient.
|
|
2299
|
+
const appId = body?.data?.app_id;
|
|
2300
|
+
const value = typeof appId === "string" && appId ? appId : null;
|
|
2301
|
+
_TopoloClient.appIdCache.set(cacheKey, {
|
|
2302
2302
|
value,
|
|
2303
2303
|
expiresAt: now + POSITIVE_CACHE_TTL_MS
|
|
2304
2304
|
});
|
|
@@ -2330,8 +2330,8 @@ var TopoloClient = class _TopoloClient {
|
|
|
2330
2330
|
const entries = [];
|
|
2331
2331
|
for (const item of raw) {
|
|
2332
2332
|
const s = item;
|
|
2333
|
-
const
|
|
2334
|
-
if (!
|
|
2333
|
+
const appId = typeof s.app_id === "string" ? s.app_id : typeof s.id === "string" ? s.id : null;
|
|
2334
|
+
if (!appId) continue;
|
|
2335
2335
|
const permissions = Array.isArray(s.granted_permissions) ? s.granted_permissions.filter((permission) => typeof permission === "string" && permission.trim().length > 0) : [];
|
|
2336
2336
|
const catalogApiKeyResources = normalizeApiKeyResourceMetadataList(
|
|
2337
2337
|
s.api_key_resources ?? s.apiKeyResources
|
|
@@ -2339,7 +2339,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2339
2339
|
const apiKeyResource = normalizeApiKeyResourceMetadata(s.api_key_resource ?? s.apiKeyResource) ?? catalogApiKeyResources[0] ?? null;
|
|
2340
2340
|
const apiKeyResources = catalogApiKeyResources.length > 0 ? catalogApiKeyResources : apiKeyResource ? [apiKeyResource] : [];
|
|
2341
2341
|
entries.push({
|
|
2342
|
-
|
|
2342
|
+
appId,
|
|
2343
2343
|
slug: typeof s.app_slug === "string" ? s.app_slug : null,
|
|
2344
2344
|
name: typeof s.name === "string" ? s.name : null,
|
|
2345
2345
|
description: typeof s.description === "string" ? s.description : null,
|
|
@@ -2360,8 +2360,9 @@ var TopoloClient = class _TopoloClient {
|
|
|
2360
2360
|
return entries;
|
|
2361
2361
|
}
|
|
2362
2362
|
/**
|
|
2363
|
-
* List callable actions from the live
|
|
2364
|
-
* the
|
|
2363
|
+
* List callable actions from the live registry-canonical catalog (definitions
|
|
2364
|
+
* from the Catalog registry, scoping from Auth). The response is scoped to the
|
|
2365
|
+
* caller's organization and effective permissions; no bundled/static app
|
|
2365
2366
|
* action list is used as an authorization source.
|
|
2366
2367
|
*/
|
|
2367
2368
|
async listActions(options = {}) {
|
|
@@ -2370,7 +2371,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2370
2371
|
return this.actionCatalogCache.entries;
|
|
2371
2372
|
}
|
|
2372
2373
|
const res = await this.request({
|
|
2373
|
-
service: "
|
|
2374
|
+
service: "developers",
|
|
2374
2375
|
method: "GET",
|
|
2375
2376
|
path: "/api/actions/catalog",
|
|
2376
2377
|
...options.service ? { query: { service: options.service } } : {}
|
|
@@ -2406,7 +2407,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2406
2407
|
async callAction(action, input = {}, options = {}) {
|
|
2407
2408
|
const entry = await this.getAction(action);
|
|
2408
2409
|
const mapped = mapActionInput(entry, input);
|
|
2409
|
-
const service = entry.serviceSlug || entry.
|
|
2410
|
+
const service = entry.serviceSlug || entry.appId;
|
|
2410
2411
|
return this.request({
|
|
2411
2412
|
service,
|
|
2412
2413
|
method: entry.method,
|
|
@@ -2427,7 +2428,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2427
2428
|
listBundledServices() {
|
|
2428
2429
|
const apps = Object.values(APPLICATIONS);
|
|
2429
2430
|
return apps.map((app) => ({
|
|
2430
|
-
|
|
2431
|
+
appId: app.id,
|
|
2431
2432
|
slug: app.id,
|
|
2432
2433
|
name: app.name ?? app.id,
|
|
2433
2434
|
description: null,
|
|
@@ -2477,11 +2478,11 @@ var TopoloClient = class _TopoloClient {
|
|
|
2477
2478
|
};
|
|
2478
2479
|
}
|
|
2479
2480
|
};
|
|
2480
|
-
function
|
|
2481
|
+
function resolveConfiguredAppId(slug, appIds) {
|
|
2481
2482
|
for (const serviceKey of serviceKeyCandidates2(slug)) {
|
|
2482
|
-
const configured =
|
|
2483
|
+
const configured = appIds?.[serviceKey];
|
|
2483
2484
|
if (typeof configured === "string" && configured.trim()) return configured.trim();
|
|
2484
|
-
const envKey = `
|
|
2485
|
+
const envKey = `TOPOLO_APP_ID_${serviceKey.replace(/\./g, "_").toUpperCase()}`;
|
|
2485
2486
|
const envValue = typeof process !== "undefined" ? process.env?.[envKey] : void 0;
|
|
2486
2487
|
if (typeof envValue === "string" && envValue.trim()) return envValue.trim();
|
|
2487
2488
|
}
|
|
@@ -2565,7 +2566,7 @@ function catalogEntryMatches(entry, needle) {
|
|
|
2565
2566
|
return catalogEntryLookupKeys(entry).includes(needle);
|
|
2566
2567
|
}
|
|
2567
2568
|
function catalogEntryLookupKeys(entry) {
|
|
2568
|
-
const values = [entry.
|
|
2569
|
+
const values = [entry.appId, entry.slug, entry.name].filter((value) => typeof value === "string" && value.trim().length > 0);
|
|
2569
2570
|
const keys = /* @__PURE__ */ new Set();
|
|
2570
2571
|
for (const value of values) {
|
|
2571
2572
|
const normalized = normalizeLookupKey(value);
|
|
@@ -2581,10 +2582,10 @@ function normalizeActionCatalogEntry(item) {
|
|
|
2581
2582
|
const a = item;
|
|
2582
2583
|
const actionId = pickActionString(a.action_id) ?? pickActionString(a.actionId);
|
|
2583
2584
|
const name = pickActionString(a.name);
|
|
2584
|
-
const
|
|
2585
|
+
const appId = pickActionString(a.app_id) ?? pickActionString(a.appId);
|
|
2585
2586
|
const method = pickActionString(a.method)?.toUpperCase();
|
|
2586
2587
|
const path = pickActionString(a.path);
|
|
2587
|
-
if (!actionId || !name || !
|
|
2588
|
+
if (!actionId || !name || !appId || !method || !path || !isHttpMethod(method)) {
|
|
2588
2589
|
return null;
|
|
2589
2590
|
}
|
|
2590
2591
|
return {
|
|
@@ -2593,7 +2594,7 @@ function normalizeActionCatalogEntry(item) {
|
|
|
2593
2594
|
toolName: pickActionString(a.tool_name) ?? pickActionString(a.toolName) ?? null,
|
|
2594
2595
|
title: pickActionString(a.title) ?? name,
|
|
2595
2596
|
description: pickActionString(a.description) ?? "",
|
|
2596
|
-
|
|
2597
|
+
appId,
|
|
2597
2598
|
serviceSlug: pickActionString(a.service_slug) ?? pickActionString(a.serviceSlug) ?? null,
|
|
2598
2599
|
serviceName: pickActionString(a.service_name) ?? pickActionString(a.serviceName) ?? null,
|
|
2599
2600
|
method,
|
|
@@ -2605,6 +2606,7 @@ function normalizeActionCatalogEntry(item) {
|
|
|
2605
2606
|
readOnly: Boolean(a.read_only ?? a.readOnly),
|
|
2606
2607
|
destructive: Boolean(a.destructive),
|
|
2607
2608
|
requiresConfirmation: Boolean(a.requires_confirmation ?? a.requiresConfirmation),
|
|
2609
|
+
agentAccess: pickAgentAccess(a.agent_access ?? a.agentAccess),
|
|
2608
2610
|
status: pickActionString(a.status),
|
|
2609
2611
|
sourceRevision: pickActionString(a.source_revision) ?? pickActionString(a.sourceRevision)
|
|
2610
2612
|
};
|
|
@@ -2615,6 +2617,9 @@ function isHttpMethod(value) {
|
|
|
2615
2617
|
function pickActionString(value) {
|
|
2616
2618
|
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
2617
2619
|
}
|
|
2620
|
+
function pickAgentAccess(value) {
|
|
2621
|
+
return value === "auto" || value === "confirm" || value === "off" ? value : null;
|
|
2622
|
+
}
|
|
2618
2623
|
function plainObject(value) {
|
|
2619
2624
|
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
2620
2625
|
}
|
|
@@ -2706,7 +2711,6 @@ var CrmModule = class {
|
|
|
2706
2711
|
constructor(client) {
|
|
2707
2712
|
this.client = client;
|
|
2708
2713
|
}
|
|
2709
|
-
client;
|
|
2710
2714
|
async listContacts(options = {}) {
|
|
2711
2715
|
const res = await this.client.request({
|
|
2712
2716
|
service: "crm",
|
|
@@ -2752,7 +2756,6 @@ var IdentityModule = class {
|
|
|
2752
2756
|
constructor(client) {
|
|
2753
2757
|
this.client = client;
|
|
2754
2758
|
}
|
|
2755
|
-
client;
|
|
2756
2759
|
/** Returns the resolved user, organization, and permission set for the
|
|
2757
2760
|
* current credential. Equivalent to `TopoloClient.introspect()` — exposed
|
|
2758
2761
|
* on this module for symmetry with the other domain modules. */
|
|
@@ -2803,13 +2806,13 @@ function hasScope(set, required) {
|
|
|
2803
2806
|
if (set.permissions.includes("*")) return true;
|
|
2804
2807
|
const [servicePart, actionPart] = splitPermission(required);
|
|
2805
2808
|
if (!servicePart) return set.permissions.includes(required);
|
|
2806
|
-
const [
|
|
2809
|
+
const [appId, resource] = splitService(servicePart);
|
|
2807
2810
|
const candidates = new Set([
|
|
2808
2811
|
required,
|
|
2809
2812
|
"*",
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
+
appId ? `${appId}.*` : null,
|
|
2814
|
+
appId && resource && actionPart ? `${appId}.${resource}:*` : null,
|
|
2815
|
+
appId && resource && actionPart ? `${appId}.${resource}.${actionPart}` : null,
|
|
2813
2816
|
resource && actionPart ? `${resource}:*` : null,
|
|
2814
2817
|
resource && actionPart ? `${resource}.${actionPart}` : null,
|
|
2815
2818
|
resource && actionPart ? `${resource}:${actionPart}` : null
|
|
@@ -2861,10 +2864,10 @@ var TOOLS = [
|
|
|
2861
2864
|
},
|
|
2862
2865
|
handler: async (topolo) => {
|
|
2863
2866
|
const services = (await topolo.client.listServices()).map((entry) => {
|
|
2864
|
-
const id =
|
|
2867
|
+
const id = displayAppId(entry);
|
|
2865
2868
|
return {
|
|
2866
2869
|
id,
|
|
2867
|
-
|
|
2870
|
+
appId: entry.appId,
|
|
2868
2871
|
slug: entry.slug,
|
|
2869
2872
|
name: entry.name,
|
|
2870
2873
|
apiBaseUrl: entry.apiBaseUrl,
|
|
@@ -2891,7 +2894,7 @@ var TOOLS = [
|
|
|
2891
2894
|
properties: {
|
|
2892
2895
|
service: {
|
|
2893
2896
|
type: "string",
|
|
2894
|
-
description: "Optional
|
|
2897
|
+
description: "Optional app id, slug, or name filter."
|
|
2895
2898
|
}
|
|
2896
2899
|
},
|
|
2897
2900
|
additionalProperties: false
|
|
@@ -2920,7 +2923,7 @@ var TOOLS = [
|
|
|
2920
2923
|
{
|
|
2921
2924
|
name: "topolo_get_application",
|
|
2922
2925
|
title: "Describe one Topolo platform application",
|
|
2923
|
-
description: "Returns one live application catalog entry (
|
|
2926
|
+
description: "Returns one live application catalog entry (app id, slug, name, API URL, launch URL, status). Accepts the app id, slug, or name. Resolved against the live registry so newly-registered apps work without a client rebuild.",
|
|
2924
2927
|
requiredScopes: [],
|
|
2925
2928
|
destructive: false,
|
|
2926
2929
|
inputSchema: {
|
|
@@ -2928,7 +2931,7 @@ var TOOLS = [
|
|
|
2928
2931
|
properties: {
|
|
2929
2932
|
application: {
|
|
2930
2933
|
type: "string",
|
|
2931
|
-
description: "Application identifier:
|
|
2934
|
+
description: "Application identifier: app id, slug, or name from topolo_list_applications."
|
|
2932
2935
|
}
|
|
2933
2936
|
},
|
|
2934
2937
|
required: ["application"],
|
|
@@ -2942,10 +2945,10 @@ var TOOLS = [
|
|
|
2942
2945
|
const needle = application.trim().toLowerCase();
|
|
2943
2946
|
const catalog = await topolo.client.listServices();
|
|
2944
2947
|
const match = catalog.find(
|
|
2945
|
-
(e) => e.
|
|
2948
|
+
(e) => e.appId.toLowerCase() === needle || e.slug && e.slug.toLowerCase() === needle || e.name && e.name.toLowerCase() === needle
|
|
2946
2949
|
);
|
|
2947
2950
|
if (!match) {
|
|
2948
|
-
const known = catalog.map((e) => e.slug || e.
|
|
2951
|
+
const known = catalog.map((e) => e.slug || e.appId).sort().filter((value) => typeof value === "string" && value.length > 0);
|
|
2949
2952
|
throw new Error(
|
|
2950
2953
|
`Unknown application "${application}". ${formatKnownValues(known, "applications")}`
|
|
2951
2954
|
);
|
|
@@ -3128,14 +3131,20 @@ async function buildTopoloTools(topolo, scopes, tools = TOOLS) {
|
|
|
3128
3131
|
const actionTools = actionsToToolDefs(actions);
|
|
3129
3132
|
return filterToolsByScopes([...baseTools, ...actionTools], scopes);
|
|
3130
3133
|
}
|
|
3134
|
+
function effectiveAgentAccess(a) {
|
|
3135
|
+
if (a.agentAccess) return a.agentAccess;
|
|
3136
|
+
if (a.destructive) return "off";
|
|
3137
|
+
if (a.readOnly && !a.requiresConfirmation) return "auto";
|
|
3138
|
+
return "confirm";
|
|
3139
|
+
}
|
|
3131
3140
|
function actionsToToolDefs(actions) {
|
|
3132
|
-
return actions.map((action) => ({
|
|
3141
|
+
return actions.map((action) => ({ action, access: effectiveAgentAccess(action) })).filter(({ access }) => access !== "off").map(({ action, access }) => ({
|
|
3133
3142
|
name: action.toolName || toolNameForAction(action),
|
|
3134
3143
|
title: action.title,
|
|
3135
3144
|
description: action.description,
|
|
3136
3145
|
requiredScopes: action.requiredPermission ? [action.requiredPermission] : [],
|
|
3137
|
-
destructive:
|
|
3138
|
-
inputSchema: actionInputSchema(action),
|
|
3146
|
+
destructive: access === "confirm",
|
|
3147
|
+
inputSchema: actionInputSchema(action, access),
|
|
3139
3148
|
handler: async (topolo, args) => {
|
|
3140
3149
|
const confirm = Boolean(args["confirm"]);
|
|
3141
3150
|
const input = { ...args };
|
|
@@ -3145,11 +3154,11 @@ function actionsToToolDefs(actions) {
|
|
|
3145
3154
|
}));
|
|
3146
3155
|
}
|
|
3147
3156
|
function toolNameForAction(action) {
|
|
3148
|
-
const service = (action.serviceSlug || action.
|
|
3157
|
+
const service = (action.serviceSlug || action.appId || "service").replace(/^topolo-/, "").toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
|
|
3149
3158
|
const name = action.name.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
|
|
3150
3159
|
return ["topolo", service, name].filter(Boolean).join("_").slice(0, 96);
|
|
3151
3160
|
}
|
|
3152
|
-
function actionInputSchema(action) {
|
|
3161
|
+
function actionInputSchema(action, access = "auto") {
|
|
3153
3162
|
const schema = {
|
|
3154
3163
|
type: "object",
|
|
3155
3164
|
properties: {},
|
|
@@ -3157,7 +3166,7 @@ function actionInputSchema(action) {
|
|
|
3157
3166
|
...action.inputSchema
|
|
3158
3167
|
};
|
|
3159
3168
|
const properties = schema.properties && typeof schema.properties === "object" && !Array.isArray(schema.properties) ? { ...schema.properties } : {};
|
|
3160
|
-
if (
|
|
3169
|
+
if (access === "confirm") {
|
|
3161
3170
|
properties.confirm = {
|
|
3162
3171
|
type: "boolean",
|
|
3163
3172
|
description: "Required for mutating actions. Explicit human-in-the-loop acknowledgement."
|
|
@@ -3206,18 +3215,18 @@ function statusesAtOrWorse(threshold) {
|
|
|
3206
3215
|
if (threshold === "needs_review") return ["missing", "needs_review"];
|
|
3207
3216
|
return ["missing", "needs_review", "partial"];
|
|
3208
3217
|
}
|
|
3209
|
-
function
|
|
3210
|
-
for (const value of [entry.slug, entry.name, entry.
|
|
3218
|
+
function displayAppId(entry) {
|
|
3219
|
+
for (const value of [entry.slug, entry.name, entry.appId]) {
|
|
3211
3220
|
if (typeof value !== "string" || !value.trim()) continue;
|
|
3212
|
-
for (const candidate of
|
|
3221
|
+
for (const candidate of appIdCandidates(value)) {
|
|
3213
3222
|
if (Object.prototype.hasOwnProperty.call(DEFAULT_SERVICE_URLS, candidate)) {
|
|
3214
3223
|
return candidate;
|
|
3215
3224
|
}
|
|
3216
3225
|
}
|
|
3217
3226
|
}
|
|
3218
|
-
return
|
|
3227
|
+
return appIdCandidates(entry.slug || entry.appId)[0] || entry.appId;
|
|
3219
3228
|
}
|
|
3220
|
-
function
|
|
3229
|
+
function appIdCandidates(value) {
|
|
3221
3230
|
const normalized = value.trim().toLowerCase().replace(/\s+/g, "-");
|
|
3222
3231
|
const withoutTopolo = normalized.startsWith("topolo-") ? normalized.slice("topolo-".length) : normalized;
|
|
3223
3232
|
return [.../* @__PURE__ */ new Set([
|