@topolo/sdk 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -4
- package/dist/index.cjs +447 -188
- package/dist/index.d.cts +463 -271
- package/dist/index.d.ts +463 -271
- package/dist/index.js +447 -188
- package/package.json +1 -1
- package/src/application-requirements.ts +16 -5
- package/src/applications.generated.ts +349 -171
- package/src/client.test.ts +103 -0
- package/src/client.ts +114 -19
- package/src/services.generated.ts +4 -2
- package/src/services.test.ts +11 -5
package/dist/index.cjs
CHANGED
|
@@ -114,6 +114,7 @@ var TopoloHttpError = class extends TopoloSdkError {
|
|
|
114
114
|
var SERVICES = {
|
|
115
115
|
agent: "https://agent-api.topolo.app",
|
|
116
116
|
auth: "https://auth.topolo.app",
|
|
117
|
+
backup: "https://backup.topolo.app",
|
|
117
118
|
books: "https://books.topolo.app",
|
|
118
119
|
bugfix: "https://bugfix.topolo.app",
|
|
119
120
|
bytes: "https://bytes-api.topolo.app",
|
|
@@ -124,7 +125,6 @@ var SERVICES = {
|
|
|
124
125
|
compose: "https://compose.topolo.app",
|
|
125
126
|
consent: "https://consent.topolo.app",
|
|
126
127
|
crm: "https://crm-api.topolo.app",
|
|
127
|
-
customer_success: "https://success.topolo.app",
|
|
128
128
|
developers: "https://developers.topolo.app",
|
|
129
129
|
director: "https://director.topolo.app",
|
|
130
130
|
feed: "https://feed-api.topolo.app",
|
|
@@ -138,9 +138,10 @@ var SERVICES = {
|
|
|
138
138
|
localize: "https://localize.topolo.app",
|
|
139
139
|
mail: "https://mail.topolo.app",
|
|
140
140
|
mdm: "https://mdm-api.topolo.app",
|
|
141
|
-
|
|
141
|
+
messages: "https://messages.topolo.app",
|
|
142
142
|
nexus: "https://nexus-api.topolo.app",
|
|
143
143
|
notify: "https://notify.topolo.app",
|
|
144
|
+
observability_watch: "https://observability-watch.topolo.app",
|
|
144
145
|
one: "https://one.topolo.app",
|
|
145
146
|
p2p: "https://p2p.topolo.app",
|
|
146
147
|
pay: "https://pay.topolo.app",
|
|
@@ -154,6 +155,7 @@ var SERVICES = {
|
|
|
154
155
|
socialize: "https://socialize-api.topolo.app",
|
|
155
156
|
spaces: "https://spaces.topolo.app",
|
|
156
157
|
status: "https://status.topolo.app",
|
|
158
|
+
success: "https://success.topolo.app",
|
|
157
159
|
support: "https://support.topolo.app",
|
|
158
160
|
survey: "https://survey.topolo.app",
|
|
159
161
|
voice: "https://voice.topolo.app",
|
|
@@ -172,13 +174,21 @@ var APPLICATIONS = {
|
|
|
172
174
|
"deployTargets": [
|
|
173
175
|
{
|
|
174
176
|
"name": "topolo-admin",
|
|
175
|
-
"kind": "
|
|
176
|
-
"apiUrl":
|
|
177
|
+
"kind": "worker",
|
|
178
|
+
"apiUrl": "https://admin.topolo.app",
|
|
177
179
|
"domains": [
|
|
178
180
|
"admin.topolo.app"
|
|
179
181
|
],
|
|
180
182
|
"routes": [],
|
|
181
183
|
"serviceId": null
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"name": "topolo-admin-api",
|
|
187
|
+
"kind": "worker",
|
|
188
|
+
"apiUrl": null,
|
|
189
|
+
"domains": [],
|
|
190
|
+
"routes": [],
|
|
191
|
+
"serviceId": null
|
|
182
192
|
}
|
|
183
193
|
]
|
|
184
194
|
},
|
|
@@ -195,7 +205,7 @@ var APPLICATIONS = {
|
|
|
195
205
|
{
|
|
196
206
|
"name": "topolo-agent",
|
|
197
207
|
"kind": "worker",
|
|
198
|
-
"apiUrl":
|
|
208
|
+
"apiUrl": "https://agent.topolo.app",
|
|
199
209
|
"domains": [
|
|
200
210
|
"agent.topolo.app"
|
|
201
211
|
],
|
|
@@ -203,7 +213,7 @@ var APPLICATIONS = {
|
|
|
203
213
|
"serviceId": null
|
|
204
214
|
},
|
|
205
215
|
{
|
|
206
|
-
"name": "topolo-agent-
|
|
216
|
+
"name": "topolo-agent-api",
|
|
207
217
|
"kind": "worker",
|
|
208
218
|
"apiUrl": "https://agent-api.topolo.app",
|
|
209
219
|
"domains": [
|
|
@@ -243,16 +253,20 @@ var APPLICATIONS = {
|
|
|
243
253
|
"appDir": "TopoloBackup",
|
|
244
254
|
"name": "topolo-backup",
|
|
245
255
|
"packageName": "topolo-backup",
|
|
246
|
-
"productionUrl":
|
|
247
|
-
"services": [
|
|
256
|
+
"productionUrl": "https://backup.topolo.app",
|
|
257
|
+
"services": [
|
|
258
|
+
"backup"
|
|
259
|
+
],
|
|
248
260
|
"deployTargets": [
|
|
249
261
|
{
|
|
250
262
|
"name": "topolo-backup",
|
|
251
263
|
"kind": "worker",
|
|
252
|
-
"apiUrl":
|
|
253
|
-
"domains": [
|
|
264
|
+
"apiUrl": "https://backup.topolo.app",
|
|
265
|
+
"domains": [
|
|
266
|
+
"backup.topolo.app"
|
|
267
|
+
],
|
|
254
268
|
"routes": [],
|
|
255
|
-
"serviceId":
|
|
269
|
+
"serviceId": "backup"
|
|
256
270
|
}
|
|
257
271
|
]
|
|
258
272
|
},
|
|
@@ -273,10 +287,16 @@ var APPLICATIONS = {
|
|
|
273
287
|
"domains": [
|
|
274
288
|
"books.topolo.app"
|
|
275
289
|
],
|
|
276
|
-
"routes": [
|
|
277
|
-
"books.topolo.app"
|
|
278
|
-
],
|
|
290
|
+
"routes": [],
|
|
279
291
|
"serviceId": "books"
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"name": "topolo-books-api",
|
|
295
|
+
"kind": "worker",
|
|
296
|
+
"apiUrl": null,
|
|
297
|
+
"domains": [],
|
|
298
|
+
"routes": [],
|
|
299
|
+
"serviceId": null
|
|
280
300
|
}
|
|
281
301
|
]
|
|
282
302
|
},
|
|
@@ -297,9 +317,7 @@ var APPLICATIONS = {
|
|
|
297
317
|
"domains": [
|
|
298
318
|
"bugfix.topolo.app"
|
|
299
319
|
],
|
|
300
|
-
"routes": [
|
|
301
|
-
"bugfix.topolo.app"
|
|
302
|
-
],
|
|
320
|
+
"routes": [],
|
|
303
321
|
"serviceId": "bugfix"
|
|
304
322
|
}
|
|
305
323
|
]
|
|
@@ -316,8 +334,8 @@ var APPLICATIONS = {
|
|
|
316
334
|
"deployTargets": [
|
|
317
335
|
{
|
|
318
336
|
"name": "topolo-bytes",
|
|
319
|
-
"kind": "
|
|
320
|
-
"apiUrl":
|
|
337
|
+
"kind": "worker",
|
|
338
|
+
"apiUrl": "https://bytes.topolo.app",
|
|
321
339
|
"domains": [
|
|
322
340
|
"bytes.topolo.app"
|
|
323
341
|
],
|
|
@@ -353,10 +371,16 @@ var APPLICATIONS = {
|
|
|
353
371
|
"domains": [
|
|
354
372
|
"calendar.topolo.app"
|
|
355
373
|
],
|
|
356
|
-
"routes": [
|
|
357
|
-
"calendar.topolo.app"
|
|
358
|
-
],
|
|
374
|
+
"routes": [],
|
|
359
375
|
"serviceId": "calendar"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"name": "topolo-calendar-api",
|
|
379
|
+
"kind": "worker",
|
|
380
|
+
"apiUrl": null,
|
|
381
|
+
"domains": [],
|
|
382
|
+
"routes": [],
|
|
383
|
+
"serviceId": null
|
|
360
384
|
}
|
|
361
385
|
]
|
|
362
386
|
},
|
|
@@ -399,22 +423,19 @@ var APPLICATIONS = {
|
|
|
399
423
|
"domains": [
|
|
400
424
|
"chat.topolo.app"
|
|
401
425
|
],
|
|
402
|
-
"routes": [
|
|
403
|
-
"chat.topolo.app"
|
|
404
|
-
],
|
|
426
|
+
"routes": [],
|
|
405
427
|
"serviceId": "chat"
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"name": "topolo-chat-api",
|
|
431
|
+
"kind": "worker",
|
|
432
|
+
"apiUrl": null,
|
|
433
|
+
"domains": [],
|
|
434
|
+
"routes": [],
|
|
435
|
+
"serviceId": null
|
|
406
436
|
}
|
|
407
437
|
]
|
|
408
438
|
},
|
|
409
|
-
"cloudcontrol": {
|
|
410
|
-
"id": "cloudcontrol",
|
|
411
|
-
"appDir": "TopoloCloudControl",
|
|
412
|
-
"name": "cloudcontrol",
|
|
413
|
-
"packageName": "topolo-cloudcontrol",
|
|
414
|
-
"productionUrl": null,
|
|
415
|
-
"services": [],
|
|
416
|
-
"deployTargets": []
|
|
417
|
-
},
|
|
418
439
|
"commerce": {
|
|
419
440
|
"id": "commerce",
|
|
420
441
|
"appDir": "TopoloCommerce",
|
|
@@ -437,8 +458,8 @@ var APPLICATIONS = {
|
|
|
437
458
|
},
|
|
438
459
|
{
|
|
439
460
|
"name": "topolo-commerce-guest-web",
|
|
440
|
-
"kind": "
|
|
441
|
-
"apiUrl":
|
|
461
|
+
"kind": "worker",
|
|
462
|
+
"apiUrl": "https://guest.topolo.app",
|
|
442
463
|
"domains": [
|
|
443
464
|
"guest.topolo.app"
|
|
444
465
|
],
|
|
@@ -447,8 +468,8 @@ var APPLICATIONS = {
|
|
|
447
468
|
},
|
|
448
469
|
{
|
|
449
470
|
"name": "topolo-commerce-ops-web",
|
|
450
|
-
"kind": "
|
|
451
|
-
"apiUrl":
|
|
471
|
+
"kind": "worker",
|
|
472
|
+
"apiUrl": "https://commerce.topolo.app",
|
|
452
473
|
"domains": [
|
|
453
474
|
"commerce.topolo.app"
|
|
454
475
|
],
|
|
@@ -457,8 +478,8 @@ var APPLICATIONS = {
|
|
|
457
478
|
},
|
|
458
479
|
{
|
|
459
480
|
"name": "topolo-commerce-station-web",
|
|
460
|
-
"kind": "
|
|
461
|
-
"apiUrl":
|
|
481
|
+
"kind": "worker",
|
|
482
|
+
"apiUrl": "https://station-commerce.topolo.app",
|
|
462
483
|
"domains": [
|
|
463
484
|
"station-commerce.topolo.app"
|
|
464
485
|
],
|
|
@@ -484,10 +505,16 @@ var APPLICATIONS = {
|
|
|
484
505
|
"domains": [
|
|
485
506
|
"compose.topolo.app"
|
|
486
507
|
],
|
|
487
|
-
"routes": [
|
|
488
|
-
"compose.topolo.app"
|
|
489
|
-
],
|
|
508
|
+
"routes": [],
|
|
490
509
|
"serviceId": "compose"
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"name": "topolo-compose-api",
|
|
513
|
+
"kind": "worker",
|
|
514
|
+
"apiUrl": null,
|
|
515
|
+
"domains": [],
|
|
516
|
+
"routes": [],
|
|
517
|
+
"serviceId": null
|
|
491
518
|
}
|
|
492
519
|
]
|
|
493
520
|
},
|
|
@@ -508,10 +535,16 @@ var APPLICATIONS = {
|
|
|
508
535
|
"domains": [
|
|
509
536
|
"consent.topolo.app"
|
|
510
537
|
],
|
|
511
|
-
"routes": [
|
|
512
|
-
"consent.topolo.app"
|
|
513
|
-
],
|
|
538
|
+
"routes": [],
|
|
514
539
|
"serviceId": "consent"
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
"name": "topolo-consent-api",
|
|
543
|
+
"kind": "worker",
|
|
544
|
+
"apiUrl": null,
|
|
545
|
+
"domains": [],
|
|
546
|
+
"routes": [],
|
|
547
|
+
"serviceId": null
|
|
515
548
|
}
|
|
516
549
|
]
|
|
517
550
|
},
|
|
@@ -538,7 +571,7 @@ var APPLICATIONS = {
|
|
|
538
571
|
{
|
|
539
572
|
"name": "topolo-crm-app",
|
|
540
573
|
"kind": "worker",
|
|
541
|
-
"apiUrl":
|
|
574
|
+
"apiUrl": "https://crm.topolo.app",
|
|
542
575
|
"domains": [
|
|
543
576
|
"crm.topolo.app"
|
|
544
577
|
],
|
|
@@ -547,30 +580,6 @@ var APPLICATIONS = {
|
|
|
547
580
|
}
|
|
548
581
|
]
|
|
549
582
|
},
|
|
550
|
-
"customer_success": {
|
|
551
|
-
"id": "customer_success",
|
|
552
|
-
"appDir": "TopoloSuccess",
|
|
553
|
-
"name": "topolo-success",
|
|
554
|
-
"packageName": "topolo-success",
|
|
555
|
-
"productionUrl": "https://success.topolo.app",
|
|
556
|
-
"services": [
|
|
557
|
-
"customer_success"
|
|
558
|
-
],
|
|
559
|
-
"deployTargets": [
|
|
560
|
-
{
|
|
561
|
-
"name": "topolo-success",
|
|
562
|
-
"kind": "worker",
|
|
563
|
-
"apiUrl": "https://success.topolo.app",
|
|
564
|
-
"domains": [
|
|
565
|
-
"success.topolo.app"
|
|
566
|
-
],
|
|
567
|
-
"routes": [
|
|
568
|
-
"success.topolo.app"
|
|
569
|
-
],
|
|
570
|
-
"serviceId": "customer_success"
|
|
571
|
-
}
|
|
572
|
-
]
|
|
573
|
-
},
|
|
574
583
|
"developers": {
|
|
575
584
|
"id": "developers",
|
|
576
585
|
"appDir": "TopoloDevelopers",
|
|
@@ -598,6 +607,14 @@ var APPLICATIONS = {
|
|
|
598
607
|
],
|
|
599
608
|
"routes": [],
|
|
600
609
|
"serviceId": "developers"
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
"name": "topolo-developers-api",
|
|
613
|
+
"kind": "worker",
|
|
614
|
+
"apiUrl": null,
|
|
615
|
+
"domains": [],
|
|
616
|
+
"routes": [],
|
|
617
|
+
"serviceId": null
|
|
601
618
|
}
|
|
602
619
|
]
|
|
603
620
|
},
|
|
@@ -618,10 +635,16 @@ var APPLICATIONS = {
|
|
|
618
635
|
"domains": [
|
|
619
636
|
"director.topolo.app"
|
|
620
637
|
],
|
|
621
|
-
"routes": [
|
|
622
|
-
"director.topolo.app"
|
|
623
|
-
],
|
|
638
|
+
"routes": [],
|
|
624
639
|
"serviceId": "director"
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
"name": "topolo-director-api",
|
|
643
|
+
"kind": "worker",
|
|
644
|
+
"apiUrl": null,
|
|
645
|
+
"domains": [],
|
|
646
|
+
"routes": [],
|
|
647
|
+
"serviceId": null
|
|
625
648
|
}
|
|
626
649
|
]
|
|
627
650
|
},
|
|
@@ -635,13 +658,21 @@ var APPLICATIONS = {
|
|
|
635
658
|
"deployTargets": [
|
|
636
659
|
{
|
|
637
660
|
"name": "topolo-docs",
|
|
638
|
-
"kind": "
|
|
639
|
-
"apiUrl":
|
|
661
|
+
"kind": "worker",
|
|
662
|
+
"apiUrl": "https://docs.topolo.app",
|
|
640
663
|
"domains": [
|
|
641
664
|
"docs.topolo.app"
|
|
642
665
|
],
|
|
643
666
|
"routes": [],
|
|
644
667
|
"serviceId": null
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
"name": "topolo-docs-api",
|
|
671
|
+
"kind": "worker",
|
|
672
|
+
"apiUrl": null,
|
|
673
|
+
"domains": [],
|
|
674
|
+
"routes": [],
|
|
675
|
+
"serviceId": null
|
|
645
676
|
}
|
|
646
677
|
]
|
|
647
678
|
},
|
|
@@ -650,7 +681,7 @@ var APPLICATIONS = {
|
|
|
650
681
|
"appDir": "TopoloFeed",
|
|
651
682
|
"name": "TopoloFeed",
|
|
652
683
|
"packageName": "topolo-feed",
|
|
653
|
-
"productionUrl": "https://feed
|
|
684
|
+
"productionUrl": "https://feed.topolo.app",
|
|
654
685
|
"services": [
|
|
655
686
|
"feed"
|
|
656
687
|
],
|
|
@@ -662,9 +693,7 @@ var APPLICATIONS = {
|
|
|
662
693
|
"domains": [
|
|
663
694
|
"feed-analytics-api.topolo.app"
|
|
664
695
|
],
|
|
665
|
-
"routes": [
|
|
666
|
-
"feed-analytics-api.topolo.app"
|
|
667
|
-
],
|
|
696
|
+
"routes": [],
|
|
668
697
|
"serviceId": null
|
|
669
698
|
},
|
|
670
699
|
{
|
|
@@ -674,10 +703,18 @@ var APPLICATIONS = {
|
|
|
674
703
|
"domains": [
|
|
675
704
|
"feed-api.topolo.app"
|
|
676
705
|
],
|
|
677
|
-
"routes": [
|
|
678
|
-
"feed-api.topolo.app"
|
|
679
|
-
],
|
|
706
|
+
"routes": [],
|
|
680
707
|
"serviceId": "feed"
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
"name": "topolo-feed-web",
|
|
711
|
+
"kind": "worker",
|
|
712
|
+
"apiUrl": "https://feed.topolo.app",
|
|
713
|
+
"domains": [
|
|
714
|
+
"feed.topolo.app"
|
|
715
|
+
],
|
|
716
|
+
"routes": [],
|
|
717
|
+
"serviceId": null
|
|
681
718
|
}
|
|
682
719
|
]
|
|
683
720
|
},
|
|
@@ -698,17 +735,23 @@ var APPLICATIONS = {
|
|
|
698
735
|
"domains": [
|
|
699
736
|
"flow.topolo.app"
|
|
700
737
|
],
|
|
701
|
-
"routes": [
|
|
702
|
-
"flow.topolo.app"
|
|
703
|
-
],
|
|
738
|
+
"routes": [],
|
|
704
739
|
"serviceId": "flow"
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
"name": "topolo-flow-api",
|
|
743
|
+
"kind": "worker",
|
|
744
|
+
"apiUrl": null,
|
|
745
|
+
"domains": [],
|
|
746
|
+
"routes": [],
|
|
747
|
+
"serviceId": null
|
|
705
748
|
}
|
|
706
749
|
]
|
|
707
750
|
},
|
|
708
751
|
"forecast": {
|
|
709
752
|
"id": "forecast",
|
|
710
753
|
"appDir": "TopoloForecast",
|
|
711
|
-
"name": "forecast
|
|
754
|
+
"name": "topolo-forecast",
|
|
712
755
|
"packageName": "topolo-forecast",
|
|
713
756
|
"productionUrl": "https://forecast.topolo.app",
|
|
714
757
|
"services": [
|
|
@@ -718,7 +761,7 @@ var APPLICATIONS = {
|
|
|
718
761
|
{
|
|
719
762
|
"name": "topolo-forecast",
|
|
720
763
|
"kind": "worker",
|
|
721
|
-
"apiUrl":
|
|
764
|
+
"apiUrl": "https://forecast.topolo.app",
|
|
722
765
|
"domains": [
|
|
723
766
|
"forecast.topolo.app"
|
|
724
767
|
],
|
|
@@ -754,10 +797,16 @@ var APPLICATIONS = {
|
|
|
754
797
|
"domains": [
|
|
755
798
|
"forms.topolo.app"
|
|
756
799
|
],
|
|
757
|
-
"routes": [
|
|
758
|
-
"forms.topolo.app"
|
|
759
|
-
],
|
|
800
|
+
"routes": [],
|
|
760
801
|
"serviceId": "forms"
|
|
802
|
+
},
|
|
803
|
+
{
|
|
804
|
+
"name": "topolo-forms-api",
|
|
805
|
+
"kind": "worker",
|
|
806
|
+
"apiUrl": null,
|
|
807
|
+
"domains": [],
|
|
808
|
+
"routes": [],
|
|
809
|
+
"serviceId": null
|
|
761
810
|
}
|
|
762
811
|
]
|
|
763
812
|
},
|
|
@@ -778,10 +827,16 @@ var APPLICATIONS = {
|
|
|
778
827
|
"domains": [
|
|
779
828
|
"home.topolo.app"
|
|
780
829
|
],
|
|
781
|
-
"routes": [
|
|
782
|
-
"home.topolo.app"
|
|
783
|
-
],
|
|
830
|
+
"routes": [],
|
|
784
831
|
"serviceId": "home"
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
"name": "topolo-home-api",
|
|
835
|
+
"kind": "worker",
|
|
836
|
+
"apiUrl": null,
|
|
837
|
+
"domains": [],
|
|
838
|
+
"routes": [],
|
|
839
|
+
"serviceId": null
|
|
785
840
|
}
|
|
786
841
|
]
|
|
787
842
|
},
|
|
@@ -802,10 +857,16 @@ var APPLICATIONS = {
|
|
|
802
857
|
"domains": [
|
|
803
858
|
"insights.topolo.app"
|
|
804
859
|
],
|
|
805
|
-
"routes": [
|
|
806
|
-
"insights.topolo.app"
|
|
807
|
-
],
|
|
860
|
+
"routes": [],
|
|
808
861
|
"serviceId": "insights"
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
"name": "topolo-insights-api",
|
|
865
|
+
"kind": "worker",
|
|
866
|
+
"apiUrl": null,
|
|
867
|
+
"domains": [],
|
|
868
|
+
"routes": [],
|
|
869
|
+
"serviceId": null
|
|
809
870
|
}
|
|
810
871
|
]
|
|
811
872
|
},
|
|
@@ -826,10 +887,16 @@ var APPLICATIONS = {
|
|
|
826
887
|
"domains": [
|
|
827
888
|
"inventory.topolo.app"
|
|
828
889
|
],
|
|
829
|
-
"routes": [
|
|
830
|
-
"inventory.topolo.app"
|
|
831
|
-
],
|
|
890
|
+
"routes": [],
|
|
832
891
|
"serviceId": "inventory"
|
|
892
|
+
},
|
|
893
|
+
{
|
|
894
|
+
"name": "topolo-inventory-api",
|
|
895
|
+
"kind": "worker",
|
|
896
|
+
"apiUrl": null,
|
|
897
|
+
"domains": [],
|
|
898
|
+
"routes": [],
|
|
899
|
+
"serviceId": null
|
|
833
900
|
}
|
|
834
901
|
]
|
|
835
902
|
},
|
|
@@ -846,7 +913,7 @@ var APPLICATIONS = {
|
|
|
846
913
|
{
|
|
847
914
|
"name": "topolo-learn",
|
|
848
915
|
"kind": "worker",
|
|
849
|
-
"apiUrl":
|
|
916
|
+
"apiUrl": "https://learn.topolo.app",
|
|
850
917
|
"domains": [
|
|
851
918
|
"learn.topolo.app"
|
|
852
919
|
],
|
|
@@ -906,10 +973,16 @@ var APPLICATIONS = {
|
|
|
906
973
|
"domains": [
|
|
907
974
|
"mail.topolo.app"
|
|
908
975
|
],
|
|
909
|
-
"routes": [
|
|
910
|
-
"mail.topolo.app"
|
|
911
|
-
],
|
|
976
|
+
"routes": [],
|
|
912
977
|
"serviceId": "mail"
|
|
978
|
+
},
|
|
979
|
+
{
|
|
980
|
+
"name": "topolo-mail-api",
|
|
981
|
+
"kind": "worker",
|
|
982
|
+
"apiUrl": null,
|
|
983
|
+
"domains": [],
|
|
984
|
+
"routes": [],
|
|
985
|
+
"serviceId": null
|
|
913
986
|
}
|
|
914
987
|
]
|
|
915
988
|
},
|
|
@@ -930,47 +1003,51 @@ var APPLICATIONS = {
|
|
|
930
1003
|
"domains": [
|
|
931
1004
|
"mdm-api.topolo.app"
|
|
932
1005
|
],
|
|
933
|
-
"routes": [
|
|
934
|
-
"mdm-api.topolo.app"
|
|
935
|
-
],
|
|
1006
|
+
"routes": [],
|
|
936
1007
|
"serviceId": "mdm"
|
|
937
1008
|
},
|
|
938
1009
|
{
|
|
939
1010
|
"name": "topolo-mdm-console",
|
|
940
1011
|
"kind": "worker",
|
|
941
|
-
"apiUrl":
|
|
1012
|
+
"apiUrl": "https://mdm.topolo.app",
|
|
942
1013
|
"domains": [
|
|
943
1014
|
"mdm.topolo.app"
|
|
944
1015
|
],
|
|
945
|
-
"routes": [
|
|
946
|
-
"mdm.topolo.app"
|
|
947
|
-
],
|
|
1016
|
+
"routes": [],
|
|
948
1017
|
"serviceId": null
|
|
949
1018
|
}
|
|
950
1019
|
]
|
|
951
1020
|
},
|
|
952
|
-
"
|
|
953
|
-
"id": "
|
|
954
|
-
"appDir": "
|
|
955
|
-
"name": "topolo-
|
|
956
|
-
"packageName": "topolo-
|
|
1021
|
+
"messages": {
|
|
1022
|
+
"id": "messages",
|
|
1023
|
+
"appDir": "TopoloMessages",
|
|
1024
|
+
"name": "topolo-messages",
|
|
1025
|
+
"packageName": "topolo-messages",
|
|
957
1026
|
"productionUrl": "https://messages.topolo.app",
|
|
958
1027
|
"services": [
|
|
959
|
-
"
|
|
1028
|
+
"messages"
|
|
960
1029
|
],
|
|
961
1030
|
"deployTargets": [
|
|
962
1031
|
{
|
|
963
|
-
"name": "topolo-
|
|
1032
|
+
"name": "topolo-messages",
|
|
964
1033
|
"kind": "worker",
|
|
965
1034
|
"apiUrl": "https://messages.topolo.app",
|
|
966
1035
|
"domains": [
|
|
967
1036
|
"messages.topolo.app"
|
|
968
1037
|
],
|
|
969
1038
|
"routes": [],
|
|
970
|
-
"serviceId": "
|
|
1039
|
+
"serviceId": "messages"
|
|
971
1040
|
},
|
|
972
1041
|
{
|
|
973
|
-
"name": "topolo-
|
|
1042
|
+
"name": "topolo-messages-api",
|
|
1043
|
+
"kind": "worker",
|
|
1044
|
+
"apiUrl": null,
|
|
1045
|
+
"domains": [],
|
|
1046
|
+
"routes": [],
|
|
1047
|
+
"serviceId": null
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
"name": "topolo-messages-dispatch",
|
|
974
1051
|
"kind": "worker",
|
|
975
1052
|
"apiUrl": null,
|
|
976
1053
|
"domains": [],
|
|
@@ -1040,9 +1117,22 @@ var APPLICATIONS = {
|
|
|
1040
1117
|
"appDir": "TopoloObservabilityWatch",
|
|
1041
1118
|
"name": "topolo-observability-watch",
|
|
1042
1119
|
"packageName": "topolo-observability-watch",
|
|
1043
|
-
"productionUrl":
|
|
1044
|
-
"services": [
|
|
1045
|
-
|
|
1120
|
+
"productionUrl": "https://observability-watch.topolo.app",
|
|
1121
|
+
"services": [
|
|
1122
|
+
"observability_watch"
|
|
1123
|
+
],
|
|
1124
|
+
"deployTargets": [
|
|
1125
|
+
{
|
|
1126
|
+
"name": "topolo-observability-watch",
|
|
1127
|
+
"kind": "worker",
|
|
1128
|
+
"apiUrl": "https://observability-watch.topolo.app",
|
|
1129
|
+
"domains": [
|
|
1130
|
+
"observability-watch.topolo.app"
|
|
1131
|
+
],
|
|
1132
|
+
"routes": [],
|
|
1133
|
+
"serviceId": "observability_watch"
|
|
1134
|
+
}
|
|
1135
|
+
]
|
|
1046
1136
|
},
|
|
1047
1137
|
"one": {
|
|
1048
1138
|
"id": "one",
|
|
@@ -1056,40 +1146,37 @@ var APPLICATIONS = {
|
|
|
1056
1146
|
"deployTargets": [
|
|
1057
1147
|
{
|
|
1058
1148
|
"name": "topolo-one",
|
|
1059
|
-
"kind": "pages",
|
|
1060
|
-
"apiUrl": null,
|
|
1061
|
-
"domains": [
|
|
1062
|
-
"one.topolo.app"
|
|
1063
|
-
],
|
|
1064
|
-
"routes": [],
|
|
1065
|
-
"serviceId": null
|
|
1066
|
-
},
|
|
1067
|
-
{
|
|
1068
|
-
"name": "topolo-one-website",
|
|
1069
1149
|
"kind": "worker",
|
|
1070
1150
|
"apiUrl": null,
|
|
1071
|
-
"domains": [
|
|
1072
|
-
"topolo.io",
|
|
1073
|
-
"www.topolo.io"
|
|
1074
|
-
],
|
|
1151
|
+
"domains": [],
|
|
1075
1152
|
"routes": [],
|
|
1076
1153
|
"serviceId": null
|
|
1077
1154
|
},
|
|
1078
1155
|
{
|
|
1079
|
-
"name": "topolo-one-
|
|
1156
|
+
"name": "topolo-one-api",
|
|
1080
1157
|
"kind": "worker",
|
|
1081
1158
|
"apiUrl": "https://one.topolo.app",
|
|
1082
1159
|
"domains": [
|
|
1083
|
-
"one.topolo.app"
|
|
1084
|
-
"topolo.app",
|
|
1085
|
-
"www.topolo.app"
|
|
1160
|
+
"one.topolo.app"
|
|
1086
1161
|
],
|
|
1087
1162
|
"routes": [
|
|
1088
1163
|
"one.topolo.app/*",
|
|
1089
|
-
"topolo.app",
|
|
1090
1164
|
"www.topolo.app/*"
|
|
1091
1165
|
],
|
|
1092
1166
|
"serviceId": "one"
|
|
1167
|
+
},
|
|
1168
|
+
{
|
|
1169
|
+
"name": "topolo-one-website",
|
|
1170
|
+
"kind": "worker",
|
|
1171
|
+
"apiUrl": "https://topolo.io",
|
|
1172
|
+
"domains": [
|
|
1173
|
+
"topolo.io"
|
|
1174
|
+
],
|
|
1175
|
+
"routes": [
|
|
1176
|
+
"topolo.io",
|
|
1177
|
+
"www.topolo.io"
|
|
1178
|
+
],
|
|
1179
|
+
"serviceId": null
|
|
1093
1180
|
}
|
|
1094
1181
|
]
|
|
1095
1182
|
},
|
|
@@ -1110,10 +1197,16 @@ var APPLICATIONS = {
|
|
|
1110
1197
|
"domains": [
|
|
1111
1198
|
"p2p.topolo.app"
|
|
1112
1199
|
],
|
|
1113
|
-
"routes": [
|
|
1114
|
-
"p2p.topolo.app"
|
|
1115
|
-
],
|
|
1200
|
+
"routes": [],
|
|
1116
1201
|
"serviceId": "p2p"
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
"name": "topolo-p2p-api",
|
|
1205
|
+
"kind": "worker",
|
|
1206
|
+
"apiUrl": null,
|
|
1207
|
+
"domains": [],
|
|
1208
|
+
"routes": [],
|
|
1209
|
+
"serviceId": null
|
|
1117
1210
|
}
|
|
1118
1211
|
]
|
|
1119
1212
|
},
|
|
@@ -1136,6 +1229,14 @@ var APPLICATIONS = {
|
|
|
1136
1229
|
],
|
|
1137
1230
|
"routes": [],
|
|
1138
1231
|
"serviceId": "pay"
|
|
1232
|
+
},
|
|
1233
|
+
{
|
|
1234
|
+
"name": "topolo-pay-api",
|
|
1235
|
+
"kind": "worker",
|
|
1236
|
+
"apiUrl": null,
|
|
1237
|
+
"domains": [],
|
|
1238
|
+
"routes": [],
|
|
1239
|
+
"serviceId": null
|
|
1139
1240
|
}
|
|
1140
1241
|
]
|
|
1141
1242
|
},
|
|
@@ -1156,10 +1257,16 @@ var APPLICATIONS = {
|
|
|
1156
1257
|
"domains": [
|
|
1157
1258
|
"people.topolo.app"
|
|
1158
1259
|
],
|
|
1159
|
-
"routes": [
|
|
1160
|
-
"people.topolo.app"
|
|
1161
|
-
],
|
|
1260
|
+
"routes": [],
|
|
1162
1261
|
"serviceId": "people"
|
|
1262
|
+
},
|
|
1263
|
+
{
|
|
1264
|
+
"name": "topolo-people-api",
|
|
1265
|
+
"kind": "worker",
|
|
1266
|
+
"apiUrl": null,
|
|
1267
|
+
"domains": [],
|
|
1268
|
+
"routes": [],
|
|
1269
|
+
"serviceId": null
|
|
1163
1270
|
}
|
|
1164
1271
|
]
|
|
1165
1272
|
},
|
|
@@ -1180,10 +1287,16 @@ var APPLICATIONS = {
|
|
|
1180
1287
|
"domains": [
|
|
1181
1288
|
"pulse.topolo.app"
|
|
1182
1289
|
],
|
|
1183
|
-
"routes": [
|
|
1184
|
-
"pulse.topolo.app"
|
|
1185
|
-
],
|
|
1290
|
+
"routes": [],
|
|
1186
1291
|
"serviceId": "pulse"
|
|
1292
|
+
},
|
|
1293
|
+
{
|
|
1294
|
+
"name": "topolo-pulse-api",
|
|
1295
|
+
"kind": "worker",
|
|
1296
|
+
"apiUrl": null,
|
|
1297
|
+
"domains": [],
|
|
1298
|
+
"routes": [],
|
|
1299
|
+
"serviceId": null
|
|
1187
1300
|
}
|
|
1188
1301
|
]
|
|
1189
1302
|
},
|
|
@@ -1205,7 +1318,9 @@ var APPLICATIONS = {
|
|
|
1205
1318
|
"domains": [
|
|
1206
1319
|
"api.ol0.me"
|
|
1207
1320
|
],
|
|
1208
|
-
"routes": [
|
|
1321
|
+
"routes": [
|
|
1322
|
+
"api.ol0.me/*"
|
|
1323
|
+
],
|
|
1209
1324
|
"serviceId": "quro.api"
|
|
1210
1325
|
},
|
|
1211
1326
|
{
|
|
@@ -1223,7 +1338,7 @@ var APPLICATIONS = {
|
|
|
1223
1338
|
{
|
|
1224
1339
|
"name": "quro-ui",
|
|
1225
1340
|
"kind": "worker",
|
|
1226
|
-
"apiUrl":
|
|
1341
|
+
"apiUrl": "https://quro.topolo.app",
|
|
1227
1342
|
"domains": [
|
|
1228
1343
|
"quro.topolo.app"
|
|
1229
1344
|
],
|
|
@@ -1245,7 +1360,7 @@ var APPLICATIONS = {
|
|
|
1245
1360
|
{
|
|
1246
1361
|
"name": "topolo-roadmapper",
|
|
1247
1362
|
"kind": "worker",
|
|
1248
|
-
"apiUrl":
|
|
1363
|
+
"apiUrl": "https://roadmapper.topolo.app",
|
|
1249
1364
|
"domains": [
|
|
1250
1365
|
"roadmapper.topolo.app"
|
|
1251
1366
|
],
|
|
@@ -1281,10 +1396,16 @@ var APPLICATIONS = {
|
|
|
1281
1396
|
"domains": [
|
|
1282
1397
|
"sign.topolo.app"
|
|
1283
1398
|
],
|
|
1284
|
-
"routes": [
|
|
1285
|
-
"sign.topolo.app"
|
|
1286
|
-
],
|
|
1399
|
+
"routes": [],
|
|
1287
1400
|
"serviceId": "sign"
|
|
1401
|
+
},
|
|
1402
|
+
{
|
|
1403
|
+
"name": "topolo-sign-api",
|
|
1404
|
+
"kind": "worker",
|
|
1405
|
+
"apiUrl": null,
|
|
1406
|
+
"domains": [],
|
|
1407
|
+
"routes": [],
|
|
1408
|
+
"serviceId": null
|
|
1288
1409
|
}
|
|
1289
1410
|
]
|
|
1290
1411
|
},
|
|
@@ -1301,7 +1422,7 @@ var APPLICATIONS = {
|
|
|
1301
1422
|
{
|
|
1302
1423
|
"name": "topolo-social-studio",
|
|
1303
1424
|
"kind": "worker",
|
|
1304
|
-
"apiUrl":
|
|
1425
|
+
"apiUrl": "https://studio.topolo.app",
|
|
1305
1426
|
"domains": [
|
|
1306
1427
|
"studio.topolo.app"
|
|
1307
1428
|
],
|
|
@@ -1340,8 +1461,8 @@ var APPLICATIONS = {
|
|
|
1340
1461
|
"deployTargets": [
|
|
1341
1462
|
{
|
|
1342
1463
|
"name": "topolo-socialize",
|
|
1343
|
-
"kind": "
|
|
1344
|
-
"apiUrl":
|
|
1464
|
+
"kind": "worker",
|
|
1465
|
+
"apiUrl": "https://socialize.topolo.app",
|
|
1345
1466
|
"domains": [
|
|
1346
1467
|
"socialize.topolo.app"
|
|
1347
1468
|
],
|
|
@@ -1385,10 +1506,16 @@ var APPLICATIONS = {
|
|
|
1385
1506
|
"domains": [
|
|
1386
1507
|
"spaces.topolo.app"
|
|
1387
1508
|
],
|
|
1388
|
-
"routes": [
|
|
1389
|
-
"spaces.topolo.app"
|
|
1390
|
-
],
|
|
1509
|
+
"routes": [],
|
|
1391
1510
|
"serviceId": "spaces"
|
|
1511
|
+
},
|
|
1512
|
+
{
|
|
1513
|
+
"name": "topolo-spaces-api",
|
|
1514
|
+
"kind": "worker",
|
|
1515
|
+
"apiUrl": null,
|
|
1516
|
+
"domains": [],
|
|
1517
|
+
"routes": [],
|
|
1518
|
+
"serviceId": null
|
|
1392
1519
|
}
|
|
1393
1520
|
]
|
|
1394
1521
|
},
|
|
@@ -1409,10 +1536,40 @@ var APPLICATIONS = {
|
|
|
1409
1536
|
"domains": [
|
|
1410
1537
|
"status.topolo.app"
|
|
1411
1538
|
],
|
|
1539
|
+
"routes": [],
|
|
1540
|
+
"serviceId": "status"
|
|
1541
|
+
}
|
|
1542
|
+
]
|
|
1543
|
+
},
|
|
1544
|
+
"success": {
|
|
1545
|
+
"id": "success",
|
|
1546
|
+
"appDir": "TopoloSuccess",
|
|
1547
|
+
"name": "topolo-success",
|
|
1548
|
+
"packageName": "topolo-success",
|
|
1549
|
+
"productionUrl": "https://success.topolo.app",
|
|
1550
|
+
"services": [
|
|
1551
|
+
"success"
|
|
1552
|
+
],
|
|
1553
|
+
"deployTargets": [
|
|
1554
|
+
{
|
|
1555
|
+
"name": "topolo-success",
|
|
1556
|
+
"kind": "worker",
|
|
1557
|
+
"apiUrl": "https://success.topolo.app",
|
|
1558
|
+
"domains": [
|
|
1559
|
+
"success.topolo.app"
|
|
1560
|
+
],
|
|
1412
1561
|
"routes": [
|
|
1413
|
-
"
|
|
1562
|
+
"success.topolo.app"
|
|
1414
1563
|
],
|
|
1415
|
-
"serviceId": "
|
|
1564
|
+
"serviceId": "success"
|
|
1565
|
+
},
|
|
1566
|
+
{
|
|
1567
|
+
"name": "topolo-success-api",
|
|
1568
|
+
"kind": "worker",
|
|
1569
|
+
"apiUrl": null,
|
|
1570
|
+
"domains": [],
|
|
1571
|
+
"routes": [],
|
|
1572
|
+
"serviceId": null
|
|
1416
1573
|
}
|
|
1417
1574
|
]
|
|
1418
1575
|
},
|
|
@@ -1437,6 +1594,14 @@ var APPLICATIONS = {
|
|
|
1437
1594
|
"support.topolo.app/*"
|
|
1438
1595
|
],
|
|
1439
1596
|
"serviceId": "support"
|
|
1597
|
+
},
|
|
1598
|
+
{
|
|
1599
|
+
"name": "topolo-support-api",
|
|
1600
|
+
"kind": "worker",
|
|
1601
|
+
"apiUrl": null,
|
|
1602
|
+
"domains": [],
|
|
1603
|
+
"routes": [],
|
|
1604
|
+
"serviceId": null
|
|
1440
1605
|
}
|
|
1441
1606
|
]
|
|
1442
1607
|
},
|
|
@@ -1457,10 +1622,16 @@ var APPLICATIONS = {
|
|
|
1457
1622
|
"domains": [
|
|
1458
1623
|
"survey.topolo.app"
|
|
1459
1624
|
],
|
|
1460
|
-
"routes": [
|
|
1461
|
-
"survey.topolo.app"
|
|
1462
|
-
],
|
|
1625
|
+
"routes": [],
|
|
1463
1626
|
"serviceId": "survey"
|
|
1627
|
+
},
|
|
1628
|
+
{
|
|
1629
|
+
"name": "topolo-survey-api",
|
|
1630
|
+
"kind": "worker",
|
|
1631
|
+
"apiUrl": null,
|
|
1632
|
+
"domains": [],
|
|
1633
|
+
"routes": [],
|
|
1634
|
+
"serviceId": null
|
|
1464
1635
|
}
|
|
1465
1636
|
]
|
|
1466
1637
|
},
|
|
@@ -1481,10 +1652,16 @@ var APPLICATIONS = {
|
|
|
1481
1652
|
"domains": [
|
|
1482
1653
|
"voice.topolo.app"
|
|
1483
1654
|
],
|
|
1484
|
-
"routes": [
|
|
1485
|
-
"voice.topolo.app"
|
|
1486
|
-
],
|
|
1655
|
+
"routes": [],
|
|
1487
1656
|
"serviceId": "voice"
|
|
1657
|
+
},
|
|
1658
|
+
{
|
|
1659
|
+
"name": "topolo-voice-api",
|
|
1660
|
+
"kind": "worker",
|
|
1661
|
+
"apiUrl": null,
|
|
1662
|
+
"domains": [],
|
|
1663
|
+
"routes": [],
|
|
1664
|
+
"serviceId": null
|
|
1488
1665
|
}
|
|
1489
1666
|
]
|
|
1490
1667
|
},
|
|
@@ -1515,13 +1692,16 @@ var APPLICATIONS = {
|
|
|
1515
1692
|
"domains": [
|
|
1516
1693
|
"sites.topolo.app"
|
|
1517
1694
|
],
|
|
1518
|
-
"routes": [
|
|
1695
|
+
"routes": [
|
|
1696
|
+
"*.sites.topolo.app/*",
|
|
1697
|
+
"sites.topolo.app"
|
|
1698
|
+
],
|
|
1519
1699
|
"serviceId": null
|
|
1520
1700
|
},
|
|
1521
1701
|
{
|
|
1522
1702
|
"name": "topolo-web-studio",
|
|
1523
1703
|
"kind": "worker",
|
|
1524
|
-
"apiUrl":
|
|
1704
|
+
"apiUrl": "https://web.topolo.app",
|
|
1525
1705
|
"domains": [
|
|
1526
1706
|
"web.topolo.app"
|
|
1527
1707
|
],
|
|
@@ -1611,11 +1791,13 @@ var APPLICATION_REQUIREMENTS = [
|
|
|
1611
1791
|
evidence: [
|
|
1612
1792
|
"Auth service catalog contains the service ID and slug",
|
|
1613
1793
|
"Permissions, role bundles, and API-key scopes exist for the service",
|
|
1614
|
-
"SDK, CLI, and MCP service discovery include the callable production API"
|
|
1794
|
+
"SDK, CLI, and MCP service discovery include the callable production API",
|
|
1795
|
+
"CloudControl production HTTP targets classify agent reachability with sdk_service_id or agent_callable:false"
|
|
1615
1796
|
],
|
|
1616
1797
|
implementation: [
|
|
1617
|
-
"Add production Worker api_url metadata
|
|
1618
|
-
"
|
|
1798
|
+
"Add production Worker api_url metadata and sdk_service_id for every agent-callable API target",
|
|
1799
|
+
"Mark browser, documentation, and runtime-only Worker targets with agent_callable:false",
|
|
1800
|
+
"Expose stable service IDs through generated DEFAULT_SERVICE_URLS and live catalog discovery",
|
|
1619
1801
|
"Keep typed SDK/CLI/MCP surfaces in sync when an API contract stabilizes"
|
|
1620
1802
|
]
|
|
1621
1803
|
},
|
|
@@ -1719,8 +1901,10 @@ var APPLICATION_REQUIREMENTS = [
|
|
|
1719
1901
|
function applicationRequirementScopes(application) {
|
|
1720
1902
|
const scopes = /* @__PURE__ */ new Set(["all"]);
|
|
1721
1903
|
const appId = application.id;
|
|
1722
|
-
const hasBrowserSurface = Boolean(application.productionUrl) ||
|
|
1723
|
-
|
|
1904
|
+
const hasBrowserSurface = Boolean(application.productionUrl) || // String() keeps this guard valid after the Pages->Worker migration narrowed
|
|
1905
|
+
// the generated kind union to "worker" (no "pages" literal remains).
|
|
1906
|
+
application.deployTargets.some((target) => String(target.kind) === "pages");
|
|
1907
|
+
const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.serviceId));
|
|
1724
1908
|
if (hasBrowserSurface) scopes.add("browser");
|
|
1725
1909
|
if (hasApiSurface) scopes.add("api");
|
|
1726
1910
|
if (appId === "cli" || appId === "mcp" || appId === "cloudcontrol") {
|
|
@@ -1837,7 +2021,7 @@ function evaluateRequirement(application, requirement) {
|
|
|
1837
2021
|
evidence
|
|
1838
2022
|
);
|
|
1839
2023
|
case "cloudflare-deployment-contract": {
|
|
1840
|
-
if (application.deployTargets.length
|
|
2024
|
+
if (application.deployTargets.length < 1) {
|
|
1841
2025
|
return finding(requirement, "missing", "No CloudControl deploy targets are registered.", evidence);
|
|
1842
2026
|
}
|
|
1843
2027
|
evidence.push(`deployTargets=${application.deployTargets.length}`);
|
|
@@ -1928,6 +2112,7 @@ function resolveServiceUrl(service, overrides) {
|
|
|
1928
2112
|
var WRITE_METHODS = /* @__PURE__ */ new Set(["POST", "PUT", "PATCH", "DELETE"]);
|
|
1929
2113
|
var POSITIVE_CACHE_TTL_MS = 5 * 60 * 1e3;
|
|
1930
2114
|
var NEGATIVE_CACHE_TTL_MS = 60 * 1e3;
|
|
2115
|
+
var CATALOG_CACHE_TTL_MS = 60 * 1e3;
|
|
1931
2116
|
var TopoloClient = class _TopoloClient {
|
|
1932
2117
|
credential;
|
|
1933
2118
|
agent;
|
|
@@ -1937,6 +2122,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
1937
2122
|
timeoutMs;
|
|
1938
2123
|
fetchImpl;
|
|
1939
2124
|
debug;
|
|
2125
|
+
serviceCatalogCache = null;
|
|
1940
2126
|
/**
|
|
1941
2127
|
* Process-wide cache for slug → service-id lookups. Keyed by
|
|
1942
2128
|
* `${authBaseUrl}|${slug}` so multiple `TopoloClient` instances pointing at
|
|
@@ -1982,7 +2168,8 @@ var TopoloClient = class _TopoloClient {
|
|
|
1982
2168
|
`Mutating ${method} requests require { confirm: true }. This guardrail prevents agents from issuing writes without an explicit human-in-the-loop acknowledgement.`
|
|
1983
2169
|
);
|
|
1984
2170
|
}
|
|
1985
|
-
const
|
|
2171
|
+
const resolvedService = await this.resolveRequestService(opts.service);
|
|
2172
|
+
const baseUrl = resolvedService.baseUrl;
|
|
1986
2173
|
const url = new URL(opts.path, baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`);
|
|
1987
2174
|
if (opts.query) {
|
|
1988
2175
|
for (const [k, v] of Object.entries(opts.query)) {
|
|
@@ -1992,7 +2179,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
1992
2179
|
const headers = new Headers();
|
|
1993
2180
|
headers.set("Accept", "application/json");
|
|
1994
2181
|
if (opts.body !== void 0) headers.set("Content-Type", "application/json");
|
|
1995
|
-
const platformServiceId = resolveConfiguredServiceId(
|
|
2182
|
+
const platformServiceId = resolveConfiguredServiceId(resolvedService.serviceKey, this.serviceIds);
|
|
1996
2183
|
if (platformServiceId) headers.set("X-Service-ID", platformServiceId);
|
|
1997
2184
|
applyAuthHeaders(headers, this.credential);
|
|
1998
2185
|
const requestId = generateRequestId();
|
|
@@ -2005,7 +2192,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2005
2192
|
const signal = opts.signal ? mergeSignals(opts.signal, controller.signal) : controller.signal;
|
|
2006
2193
|
const urlStr = url.toString();
|
|
2007
2194
|
const startedAt = Date.now();
|
|
2008
|
-
this.emit({ phase: "request", method, service:
|
|
2195
|
+
this.emit({ phase: "request", method, service: resolvedService.serviceKey, path: opts.path, url: urlStr, requestId });
|
|
2009
2196
|
let res;
|
|
2010
2197
|
try {
|
|
2011
2198
|
res = await this.fetchImpl(urlStr, {
|
|
@@ -2018,7 +2205,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2018
2205
|
this.emit({
|
|
2019
2206
|
phase: "error",
|
|
2020
2207
|
method,
|
|
2021
|
-
service:
|
|
2208
|
+
service: resolvedService.serviceKey,
|
|
2022
2209
|
path: opts.path,
|
|
2023
2210
|
url: urlStr,
|
|
2024
2211
|
requestId,
|
|
@@ -2037,7 +2224,7 @@ var TopoloClient = class _TopoloClient {
|
|
|
2037
2224
|
this.emit({
|
|
2038
2225
|
phase: "error",
|
|
2039
2226
|
method,
|
|
2040
|
-
service:
|
|
2227
|
+
service: resolvedService.serviceKey,
|
|
2041
2228
|
path: opts.path,
|
|
2042
2229
|
url: urlStr,
|
|
2043
2230
|
requestId,
|
|
@@ -2052,12 +2239,12 @@ var TopoloClient = class _TopoloClient {
|
|
|
2052
2239
|
extractRequired(parsed)
|
|
2053
2240
|
);
|
|
2054
2241
|
}
|
|
2055
|
-
throw new TopoloHttpError(
|
|
2242
|
+
throw new TopoloHttpError(resolvedService.serviceKey, opts.path, res.status, parsed);
|
|
2056
2243
|
}
|
|
2057
2244
|
this.emit({
|
|
2058
2245
|
phase: "response",
|
|
2059
2246
|
method,
|
|
2060
|
-
service:
|
|
2247
|
+
service: resolvedService.serviceKey,
|
|
2061
2248
|
path: opts.path,
|
|
2062
2249
|
url: urlStr,
|
|
2063
2250
|
requestId,
|
|
@@ -2066,6 +2253,31 @@ var TopoloClient = class _TopoloClient {
|
|
|
2066
2253
|
});
|
|
2067
2254
|
return parsed;
|
|
2068
2255
|
}
|
|
2256
|
+
async resolveRequestService(service) {
|
|
2257
|
+
const serviceKey = normalizeLookupKey(service);
|
|
2258
|
+
if (!serviceKey) {
|
|
2259
|
+
throw new TopoloSdkError("unknown_service", "service is required");
|
|
2260
|
+
}
|
|
2261
|
+
const overrideUrl = resolveConfiguredServiceUrl(serviceKey, this.serviceUrls);
|
|
2262
|
+
if (overrideUrl) return { serviceKey, baseUrl: overrideUrl };
|
|
2263
|
+
const staticUrl = DEFAULT_SERVICE_URLS[serviceKey];
|
|
2264
|
+
if (staticUrl) return { serviceKey, baseUrl: staticUrl };
|
|
2265
|
+
const live = await this.resolveLiveCallableService(serviceKey);
|
|
2266
|
+
if (live) return live;
|
|
2267
|
+
throw new TopoloSdkError(
|
|
2268
|
+
"unknown_service",
|
|
2269
|
+
`Unknown Topolo service "${service}". Run service discovery first and pass a callable service id or slug.`
|
|
2270
|
+
);
|
|
2271
|
+
}
|
|
2272
|
+
async resolveLiveCallableService(serviceKey) {
|
|
2273
|
+
const catalog = await this.listServices();
|
|
2274
|
+
const match = catalog.find((entry) => catalogEntryMatches(entry, serviceKey));
|
|
2275
|
+
if (!match?.baseUrl || !isCallableCatalogEntry(match)) return null;
|
|
2276
|
+
return {
|
|
2277
|
+
serviceKey: normalizeLookupKey(match.slug || match.name || match.serviceId) || serviceKey,
|
|
2278
|
+
baseUrl: match.baseUrl
|
|
2279
|
+
};
|
|
2280
|
+
}
|
|
2069
2281
|
/**
|
|
2070
2282
|
* Resolve a service-slug → opaque service-id via caller config or TopoloAuth.
|
|
2071
2283
|
*
|
|
@@ -2136,6 +2348,10 @@ var TopoloClient = class _TopoloClient {
|
|
|
2136
2348
|
* authoritative; the snapshot is a floor, not a cap.
|
|
2137
2349
|
*/
|
|
2138
2350
|
async listServices() {
|
|
2351
|
+
const now = Date.now();
|
|
2352
|
+
if (this.serviceCatalogCache && this.serviceCatalogCache.expiresAt > now) {
|
|
2353
|
+
return this.serviceCatalogCache.entries;
|
|
2354
|
+
}
|
|
2139
2355
|
try {
|
|
2140
2356
|
const res = await this.request({ service: "auth", method: "GET", path: "/api/services/catalog" });
|
|
2141
2357
|
const raw = res.data?.services ?? res.services;
|
|
@@ -2156,7 +2372,13 @@ var TopoloClient = class _TopoloClient {
|
|
|
2156
2372
|
launchable: s.launchable === true
|
|
2157
2373
|
});
|
|
2158
2374
|
}
|
|
2159
|
-
if (entries.length > 0)
|
|
2375
|
+
if (entries.length > 0) {
|
|
2376
|
+
this.serviceCatalogCache = {
|
|
2377
|
+
entries,
|
|
2378
|
+
expiresAt: now + CATALOG_CACHE_TTL_MS
|
|
2379
|
+
};
|
|
2380
|
+
return entries;
|
|
2381
|
+
}
|
|
2160
2382
|
}
|
|
2161
2383
|
} catch {
|
|
2162
2384
|
}
|
|
@@ -2221,8 +2443,18 @@ function resolveConfiguredServiceId(slug, serviceIds) {
|
|
|
2221
2443
|
}
|
|
2222
2444
|
return null;
|
|
2223
2445
|
}
|
|
2446
|
+
function resolveConfiguredServiceUrl(slug, serviceUrls) {
|
|
2447
|
+
for (const serviceKey of serviceKeyCandidates(slug)) {
|
|
2448
|
+
const configured = serviceUrls?.[serviceKey];
|
|
2449
|
+
if (typeof configured === "string" && configured.trim()) return configured.trim();
|
|
2450
|
+
const envKey = `TOPOLO_SERVICE_URL_${serviceKey.replace(/\./g, "_").toUpperCase()}`;
|
|
2451
|
+
const envValue = typeof process !== "undefined" ? process.env?.[envKey] : void 0;
|
|
2452
|
+
if (typeof envValue === "string" && envValue.trim()) return envValue.trim();
|
|
2453
|
+
}
|
|
2454
|
+
return null;
|
|
2455
|
+
}
|
|
2224
2456
|
function serviceKeyCandidates(slug) {
|
|
2225
|
-
const normalized = slug
|
|
2457
|
+
const normalized = normalizeLookupKey(slug);
|
|
2226
2458
|
const withoutTopolo = normalized.startsWith("topolo-") ? normalized.slice("topolo-".length) : normalized;
|
|
2227
2459
|
return [.../* @__PURE__ */ new Set([
|
|
2228
2460
|
normalized,
|
|
@@ -2231,6 +2463,33 @@ function serviceKeyCandidates(slug) {
|
|
|
2231
2463
|
withoutTopolo.replace(/-/g, "_")
|
|
2232
2464
|
])];
|
|
2233
2465
|
}
|
|
2466
|
+
function normalizeLookupKey(value) {
|
|
2467
|
+
return String(value || "").trim().toLowerCase();
|
|
2468
|
+
}
|
|
2469
|
+
function catalogEntryMatches(entry, needle) {
|
|
2470
|
+
return catalogEntryLookupKeys(entry).includes(needle);
|
|
2471
|
+
}
|
|
2472
|
+
function catalogEntryLookupKeys(entry) {
|
|
2473
|
+
const values = [entry.serviceId, entry.slug, entry.name].filter((value) => typeof value === "string" && value.trim().length > 0);
|
|
2474
|
+
const keys = /* @__PURE__ */ new Set();
|
|
2475
|
+
for (const value of values) {
|
|
2476
|
+
const normalized = normalizeLookupKey(value);
|
|
2477
|
+
if (!normalized) continue;
|
|
2478
|
+
keys.add(normalized);
|
|
2479
|
+
keys.add(normalized.replace(/-/g, "_"));
|
|
2480
|
+
if (normalized.startsWith("topolo-")) {
|
|
2481
|
+
const withoutTopolo = normalized.slice("topolo-".length);
|
|
2482
|
+
keys.add(withoutTopolo);
|
|
2483
|
+
keys.add(withoutTopolo.replace(/-/g, "_"));
|
|
2484
|
+
}
|
|
2485
|
+
}
|
|
2486
|
+
return [...keys];
|
|
2487
|
+
}
|
|
2488
|
+
function isCallableCatalogEntry(entry) {
|
|
2489
|
+
const kind = normalizeLookupKey(entry.surfaceKind || "");
|
|
2490
|
+
if (kind === "api" || kind === "technical_service" || kind === "service") return true;
|
|
2491
|
+
return Boolean(entry.slug && Object.prototype.hasOwnProperty.call(DEFAULT_SERVICE_URLS, catalogEntryLookupKeys(entry)[0] ?? ""));
|
|
2492
|
+
}
|
|
2234
2493
|
function describeError(body, fallback) {
|
|
2235
2494
|
if (body && typeof body === "object") {
|
|
2236
2495
|
const maybe = body;
|