@topolo/mcp 0.2.5 → 0.3.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.d.ts +89 -0
- package/dist/dispatch.js +444 -0
- package/dist/index.js +851 -167
- package/package.json +8 -2
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// src/index.ts
|
|
4
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
5
|
|
|
6
|
-
// ../
|
|
6
|
+
// ../topolo-sdk/dist/index.js
|
|
7
7
|
function applyAuthHeaders(headers, credential) {
|
|
8
8
|
if (credential.kind === "api_key") {
|
|
9
9
|
headers.set("X-Api-Key", credential.apiKey);
|
|
@@ -59,48 +59,69 @@ var TopoloHttpError = class extends TopoloSdkError {
|
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
61
|
var SERVICES = {
|
|
62
|
-
agent: "https://
|
|
62
|
+
agent: "https://agent-api.topolo.app",
|
|
63
63
|
auth: "https://auth.topolo.app",
|
|
64
|
+
books: "https://books.topolo.app",
|
|
64
65
|
bugfix: "https://bugfix.topolo.app",
|
|
65
|
-
bytes: "https://
|
|
66
|
+
bytes: "https://bytes-api.topolo.app",
|
|
66
67
|
calendar: "https://calendar.topolo.app",
|
|
68
|
+
capacity: "https://capacity.topolo.app",
|
|
67
69
|
chat: "https://chat.topolo.app",
|
|
68
|
-
commerce: "https://
|
|
70
|
+
commerce: "https://commerce-api.topolo.app",
|
|
71
|
+
compose: "https://compose.topolo.app",
|
|
72
|
+
consent: "https://consent.topolo.app",
|
|
69
73
|
crm: "https://crm-api.topolo.app",
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
customer_success: "https://success.topolo.app",
|
|
75
|
+
developers: "https://developers.topolo.app",
|
|
76
|
+
director: "https://director.topolo.app",
|
|
77
|
+
feed: "https://feed-api.topolo.app",
|
|
78
|
+
flow: "https://flow.topolo.app",
|
|
79
|
+
forecast: "https://forecast-api.topolo.app",
|
|
80
|
+
forms: "https://forms.topolo.app",
|
|
81
|
+
home: "https://home.topolo.app",
|
|
82
|
+
insights: "https://insights.topolo.app",
|
|
83
|
+
inventory: "https://inventory.topolo.app",
|
|
84
|
+
learn: "https://learn-api.topolo.app",
|
|
85
|
+
localize: "https://localize.topolo.app",
|
|
73
86
|
mail: "https://mail.topolo.app",
|
|
74
|
-
mdm: "https://
|
|
87
|
+
mdm: "https://mdm-api.topolo.app",
|
|
75
88
|
messaging: "https://messages.topolo.app",
|
|
76
|
-
nexus: "https://
|
|
89
|
+
nexus: "https://nexus-api.topolo.app",
|
|
90
|
+
notify: "https://notify.topolo.app",
|
|
77
91
|
one: "https://one.topolo.app",
|
|
78
|
-
|
|
92
|
+
p2p: "https://p2p.topolo.app",
|
|
93
|
+
pay: "https://pay.topolo.app",
|
|
94
|
+
people: "https://people.topolo.app",
|
|
95
|
+
pulse: "https://pulse.topolo.app",
|
|
79
96
|
"quro.api": "https://api.ol0.me",
|
|
80
97
|
"quro.redirect": "https://ol0.me",
|
|
81
98
|
roadmapper: "https://roadmapper-api.topolo.app",
|
|
82
|
-
|
|
83
|
-
|
|
99
|
+
sign: "https://sign.topolo.app",
|
|
100
|
+
social_studio: "https://studio-api.topolo.app",
|
|
101
|
+
socialize: "https://socialize-api.topolo.app",
|
|
102
|
+
spaces: "https://spaces.topolo.app",
|
|
103
|
+
status: "https://status.topolo.app",
|
|
84
104
|
support: "https://support.topolo.app",
|
|
105
|
+
survey: "https://survey.topolo.app",
|
|
106
|
+
voice: "https://voice.topolo.app",
|
|
85
107
|
web: "https://web-api.topolo.app"
|
|
86
108
|
};
|
|
87
|
-
var PLATFORM_SERVICE_IDS = {
|
|
88
|
-
crm: "srv_iCwM4jGXcwlj"
|
|
89
|
-
};
|
|
90
109
|
var APPLICATIONS = {
|
|
91
110
|
"admin": {
|
|
92
111
|
"id": "admin",
|
|
93
112
|
"appDir": "TopoloAdmin",
|
|
94
|
-
"name": "
|
|
113
|
+
"name": "topolo-admin",
|
|
95
114
|
"packageName": "topolo-admin",
|
|
96
115
|
"productionUrl": "https://admin.topolo.app",
|
|
97
116
|
"services": [],
|
|
98
117
|
"deployTargets": [
|
|
99
118
|
{
|
|
100
|
-
"name": "
|
|
119
|
+
"name": "topolo-admin",
|
|
101
120
|
"kind": "pages",
|
|
102
121
|
"apiUrl": null,
|
|
103
|
-
"domains": [
|
|
122
|
+
"domains": [
|
|
123
|
+
"admin.topolo.app"
|
|
124
|
+
],
|
|
104
125
|
"routes": [],
|
|
105
126
|
"serviceId": null
|
|
106
127
|
}
|
|
@@ -118,17 +139,21 @@ var APPLICATIONS = {
|
|
|
118
139
|
"deployTargets": [
|
|
119
140
|
{
|
|
120
141
|
"name": "topolo-agent",
|
|
121
|
-
"kind": "
|
|
142
|
+
"kind": "worker",
|
|
122
143
|
"apiUrl": null,
|
|
123
|
-
"domains": [
|
|
144
|
+
"domains": [
|
|
145
|
+
"agent.topolo.app"
|
|
146
|
+
],
|
|
124
147
|
"routes": [],
|
|
125
148
|
"serviceId": null
|
|
126
149
|
},
|
|
127
150
|
{
|
|
128
151
|
"name": "topolo-agent-worker",
|
|
129
152
|
"kind": "worker",
|
|
130
|
-
"apiUrl": "https://
|
|
131
|
-
"domains": [
|
|
153
|
+
"apiUrl": "https://agent-api.topolo.app",
|
|
154
|
+
"domains": [
|
|
155
|
+
"agent-api.topolo.app"
|
|
156
|
+
],
|
|
132
157
|
"routes": [],
|
|
133
158
|
"serviceId": "agent"
|
|
134
159
|
}
|
|
@@ -158,6 +183,48 @@ var APPLICATIONS = {
|
|
|
158
183
|
}
|
|
159
184
|
]
|
|
160
185
|
},
|
|
186
|
+
"backup": {
|
|
187
|
+
"id": "backup",
|
|
188
|
+
"appDir": "TopoloBackup",
|
|
189
|
+
"name": "topolo-backup",
|
|
190
|
+
"packageName": "topolo-backup",
|
|
191
|
+
"productionUrl": null,
|
|
192
|
+
"services": [],
|
|
193
|
+
"deployTargets": [
|
|
194
|
+
{
|
|
195
|
+
"name": "topolo-backup",
|
|
196
|
+
"kind": "worker",
|
|
197
|
+
"apiUrl": null,
|
|
198
|
+
"domains": [],
|
|
199
|
+
"routes": [],
|
|
200
|
+
"serviceId": null
|
|
201
|
+
}
|
|
202
|
+
]
|
|
203
|
+
},
|
|
204
|
+
"books": {
|
|
205
|
+
"id": "books",
|
|
206
|
+
"appDir": "TopoloBooks",
|
|
207
|
+
"name": "topolo-books",
|
|
208
|
+
"packageName": "topolo-books",
|
|
209
|
+
"productionUrl": "https://books.topolo.app",
|
|
210
|
+
"services": [
|
|
211
|
+
"books"
|
|
212
|
+
],
|
|
213
|
+
"deployTargets": [
|
|
214
|
+
{
|
|
215
|
+
"name": "topolo-books",
|
|
216
|
+
"kind": "worker",
|
|
217
|
+
"apiUrl": "https://books.topolo.app",
|
|
218
|
+
"domains": [
|
|
219
|
+
"books.topolo.app"
|
|
220
|
+
],
|
|
221
|
+
"routes": [
|
|
222
|
+
"books.topolo.app"
|
|
223
|
+
],
|
|
224
|
+
"serviceId": "books"
|
|
225
|
+
}
|
|
226
|
+
]
|
|
227
|
+
},
|
|
161
228
|
"bugfix": {
|
|
162
229
|
"id": "bugfix",
|
|
163
230
|
"appDir": "TopoloBugFix",
|
|
@@ -193,18 +260,22 @@ var APPLICATIONS = {
|
|
|
193
260
|
],
|
|
194
261
|
"deployTargets": [
|
|
195
262
|
{
|
|
196
|
-
"name": "bytes",
|
|
263
|
+
"name": "topolo-bytes",
|
|
197
264
|
"kind": "pages",
|
|
198
265
|
"apiUrl": null,
|
|
199
|
-
"domains": [
|
|
266
|
+
"domains": [
|
|
267
|
+
"bytes.topolo.app"
|
|
268
|
+
],
|
|
200
269
|
"routes": [],
|
|
201
270
|
"serviceId": null
|
|
202
271
|
},
|
|
203
272
|
{
|
|
204
|
-
"name": "
|
|
273
|
+
"name": "topolo-bytes-api",
|
|
205
274
|
"kind": "worker",
|
|
206
|
-
"apiUrl": "https://
|
|
207
|
-
"domains": [
|
|
275
|
+
"apiUrl": "https://bytes-api.topolo.app",
|
|
276
|
+
"domains": [
|
|
277
|
+
"bytes-api.topolo.app"
|
|
278
|
+
],
|
|
208
279
|
"routes": [],
|
|
209
280
|
"serviceId": "bytes"
|
|
210
281
|
}
|
|
@@ -234,6 +305,28 @@ var APPLICATIONS = {
|
|
|
234
305
|
}
|
|
235
306
|
]
|
|
236
307
|
},
|
|
308
|
+
"capacity": {
|
|
309
|
+
"id": "capacity",
|
|
310
|
+
"appDir": "TopoloCapacity",
|
|
311
|
+
"name": "topolo-capacity",
|
|
312
|
+
"packageName": "topolo-capacity",
|
|
313
|
+
"productionUrl": "https://capacity.topolo.app",
|
|
314
|
+
"services": [
|
|
315
|
+
"capacity"
|
|
316
|
+
],
|
|
317
|
+
"deployTargets": [
|
|
318
|
+
{
|
|
319
|
+
"name": "topolo-capacity",
|
|
320
|
+
"kind": "worker",
|
|
321
|
+
"apiUrl": "https://capacity.topolo.app",
|
|
322
|
+
"domains": [
|
|
323
|
+
"capacity.topolo.app"
|
|
324
|
+
],
|
|
325
|
+
"routes": [],
|
|
326
|
+
"serviceId": "capacity"
|
|
327
|
+
}
|
|
328
|
+
]
|
|
329
|
+
},
|
|
237
330
|
"chat": {
|
|
238
331
|
"id": "chat",
|
|
239
332
|
"appDir": "TopoloChat",
|
|
@@ -258,19 +351,10 @@ var APPLICATIONS = {
|
|
|
258
351
|
}
|
|
259
352
|
]
|
|
260
353
|
},
|
|
261
|
-
"cli": {
|
|
262
|
-
"id": "cli",
|
|
263
|
-
"appDir": "TopoloCli",
|
|
264
|
-
"name": "@topolo/cli",
|
|
265
|
-
"packageName": "@topolo/cli",
|
|
266
|
-
"productionUrl": null,
|
|
267
|
-
"services": [],
|
|
268
|
-
"deployTargets": []
|
|
269
|
-
},
|
|
270
354
|
"cloudcontrol": {
|
|
271
355
|
"id": "cloudcontrol",
|
|
272
356
|
"appDir": "TopoloCloudControl",
|
|
273
|
-
"name": "
|
|
357
|
+
"name": "cloudcontrol",
|
|
274
358
|
"packageName": "topolo-cloudcontrol",
|
|
275
359
|
"productionUrl": null,
|
|
276
360
|
"services": [],
|
|
@@ -289,9 +373,9 @@ var APPLICATIONS = {
|
|
|
289
373
|
{
|
|
290
374
|
"name": "topolo-commerce-api",
|
|
291
375
|
"kind": "worker",
|
|
292
|
-
"apiUrl": "https://
|
|
376
|
+
"apiUrl": "https://commerce-api.topolo.app",
|
|
293
377
|
"domains": [
|
|
294
|
-
"
|
|
378
|
+
"commerce-api.topolo.app"
|
|
295
379
|
],
|
|
296
380
|
"routes": [],
|
|
297
381
|
"serviceId": "commerce"
|
|
@@ -301,8 +385,7 @@ var APPLICATIONS = {
|
|
|
301
385
|
"kind": "pages",
|
|
302
386
|
"apiUrl": null,
|
|
303
387
|
"domains": [
|
|
304
|
-
"guest.topolo.app"
|
|
305
|
-
"topolo-commerce-guest-web.pages.dev"
|
|
388
|
+
"guest.topolo.app"
|
|
306
389
|
],
|
|
307
390
|
"routes": [],
|
|
308
391
|
"serviceId": null
|
|
@@ -312,8 +395,7 @@ var APPLICATIONS = {
|
|
|
312
395
|
"kind": "pages",
|
|
313
396
|
"apiUrl": null,
|
|
314
397
|
"domains": [
|
|
315
|
-
"commerce.topolo.app"
|
|
316
|
-
"topolo-commerce-ops-web.pages.dev"
|
|
398
|
+
"commerce.topolo.app"
|
|
317
399
|
],
|
|
318
400
|
"routes": [],
|
|
319
401
|
"serviceId": null
|
|
@@ -323,14 +405,61 @@ var APPLICATIONS = {
|
|
|
323
405
|
"kind": "pages",
|
|
324
406
|
"apiUrl": null,
|
|
325
407
|
"domains": [
|
|
326
|
-
"station-commerce.topolo.app"
|
|
327
|
-
"topolo-commerce-station-web.pages.dev"
|
|
408
|
+
"station-commerce.topolo.app"
|
|
328
409
|
],
|
|
329
410
|
"routes": [],
|
|
330
411
|
"serviceId": null
|
|
331
412
|
}
|
|
332
413
|
]
|
|
333
414
|
},
|
|
415
|
+
"compose": {
|
|
416
|
+
"id": "compose",
|
|
417
|
+
"appDir": "TopoloCompose",
|
|
418
|
+
"name": "topolo-compose",
|
|
419
|
+
"packageName": "@topolo/compose",
|
|
420
|
+
"productionUrl": "https://compose.topolo.app",
|
|
421
|
+
"services": [
|
|
422
|
+
"compose"
|
|
423
|
+
],
|
|
424
|
+
"deployTargets": [
|
|
425
|
+
{
|
|
426
|
+
"name": "topolo-compose",
|
|
427
|
+
"kind": "worker",
|
|
428
|
+
"apiUrl": "https://compose.topolo.app",
|
|
429
|
+
"domains": [
|
|
430
|
+
"compose.topolo.app"
|
|
431
|
+
],
|
|
432
|
+
"routes": [
|
|
433
|
+
"compose.topolo.app"
|
|
434
|
+
],
|
|
435
|
+
"serviceId": "compose"
|
|
436
|
+
}
|
|
437
|
+
]
|
|
438
|
+
},
|
|
439
|
+
"consent": {
|
|
440
|
+
"id": "consent",
|
|
441
|
+
"appDir": "TopoloConsent",
|
|
442
|
+
"name": "topolo-consent",
|
|
443
|
+
"packageName": "topolo-consent",
|
|
444
|
+
"productionUrl": "https://consent.topolo.app",
|
|
445
|
+
"services": [
|
|
446
|
+
"consent"
|
|
447
|
+
],
|
|
448
|
+
"deployTargets": [
|
|
449
|
+
{
|
|
450
|
+
"name": "topolo-consent",
|
|
451
|
+
"kind": "worker",
|
|
452
|
+
"apiUrl": "https://consent.topolo.app",
|
|
453
|
+
"domains": [
|
|
454
|
+
"consent.topolo.app"
|
|
455
|
+
],
|
|
456
|
+
"routes": [
|
|
457
|
+
"consent.topolo.app"
|
|
458
|
+
],
|
|
459
|
+
"serviceId": "consent"
|
|
460
|
+
}
|
|
461
|
+
]
|
|
462
|
+
},
|
|
334
463
|
"crm": {
|
|
335
464
|
"id": "crm",
|
|
336
465
|
"appDir": "TopoloCRM",
|
|
@@ -342,20 +471,48 @@ var APPLICATIONS = {
|
|
|
342
471
|
],
|
|
343
472
|
"deployTargets": [
|
|
344
473
|
{
|
|
345
|
-
"name": "topolo-crm-
|
|
346
|
-
"kind": "
|
|
347
|
-
"apiUrl":
|
|
348
|
-
"domains": [
|
|
474
|
+
"name": "topolo-crm-api",
|
|
475
|
+
"kind": "worker",
|
|
476
|
+
"apiUrl": "https://crm-api.topolo.app",
|
|
477
|
+
"domains": [
|
|
478
|
+
"crm-api.topolo.app"
|
|
479
|
+
],
|
|
349
480
|
"routes": [],
|
|
350
|
-
"serviceId":
|
|
481
|
+
"serviceId": "crm"
|
|
351
482
|
},
|
|
352
483
|
{
|
|
353
|
-
"name": "topolo-crm-
|
|
484
|
+
"name": "topolo-crm-app",
|
|
354
485
|
"kind": "worker",
|
|
355
|
-
"apiUrl":
|
|
356
|
-
"domains": [
|
|
486
|
+
"apiUrl": null,
|
|
487
|
+
"domains": [
|
|
488
|
+
"crm.topolo.app"
|
|
489
|
+
],
|
|
357
490
|
"routes": [],
|
|
358
|
-
"serviceId":
|
|
491
|
+
"serviceId": null
|
|
492
|
+
}
|
|
493
|
+
]
|
|
494
|
+
},
|
|
495
|
+
"customer_success": {
|
|
496
|
+
"id": "customer_success",
|
|
497
|
+
"appDir": "TopoloSuccess",
|
|
498
|
+
"name": "topolo-success",
|
|
499
|
+
"packageName": "topolo-success",
|
|
500
|
+
"productionUrl": "https://success.topolo.app",
|
|
501
|
+
"services": [
|
|
502
|
+
"customer_success"
|
|
503
|
+
],
|
|
504
|
+
"deployTargets": [
|
|
505
|
+
{
|
|
506
|
+
"name": "topolo-success",
|
|
507
|
+
"kind": "worker",
|
|
508
|
+
"apiUrl": "https://success.topolo.app",
|
|
509
|
+
"domains": [
|
|
510
|
+
"success.topolo.app"
|
|
511
|
+
],
|
|
512
|
+
"routes": [
|
|
513
|
+
"success.topolo.app"
|
|
514
|
+
],
|
|
515
|
+
"serviceId": "customer_success"
|
|
359
516
|
}
|
|
360
517
|
]
|
|
361
518
|
},
|
|
@@ -365,17 +522,51 @@ var APPLICATIONS = {
|
|
|
365
522
|
"name": "topolo-developers",
|
|
366
523
|
"packageName": "topolo-developers",
|
|
367
524
|
"productionUrl": "https://developers.topolo.app",
|
|
368
|
-
"services": [
|
|
525
|
+
"services": [
|
|
526
|
+
"developers"
|
|
527
|
+
],
|
|
369
528
|
"deployTargets": [
|
|
370
529
|
{
|
|
371
|
-
"name": "topolo-
|
|
372
|
-
"kind": "
|
|
530
|
+
"name": "topolo-catalog-cron",
|
|
531
|
+
"kind": "worker",
|
|
373
532
|
"apiUrl": null,
|
|
533
|
+
"domains": [],
|
|
534
|
+
"routes": [],
|
|
535
|
+
"serviceId": null
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"name": "topolo-developers",
|
|
539
|
+
"kind": "worker",
|
|
540
|
+
"apiUrl": "https://developers.topolo.app",
|
|
374
541
|
"domains": [
|
|
375
542
|
"developers.topolo.app"
|
|
376
543
|
],
|
|
377
544
|
"routes": [],
|
|
378
|
-
"serviceId":
|
|
545
|
+
"serviceId": "developers"
|
|
546
|
+
}
|
|
547
|
+
]
|
|
548
|
+
},
|
|
549
|
+
"director": {
|
|
550
|
+
"id": "director",
|
|
551
|
+
"appDir": "TopoloDirector",
|
|
552
|
+
"name": "topolo-director",
|
|
553
|
+
"packageName": "topolo-director",
|
|
554
|
+
"productionUrl": "https://director.topolo.app",
|
|
555
|
+
"services": [
|
|
556
|
+
"director"
|
|
557
|
+
],
|
|
558
|
+
"deployTargets": [
|
|
559
|
+
{
|
|
560
|
+
"name": "topolo-director",
|
|
561
|
+
"kind": "worker",
|
|
562
|
+
"apiUrl": "https://director.topolo.app",
|
|
563
|
+
"domains": [
|
|
564
|
+
"director.topolo.app"
|
|
565
|
+
],
|
|
566
|
+
"routes": [
|
|
567
|
+
"director.topolo.app"
|
|
568
|
+
],
|
|
569
|
+
"serviceId": "director"
|
|
379
570
|
}
|
|
380
571
|
]
|
|
381
572
|
},
|
|
@@ -403,8 +594,8 @@ var APPLICATIONS = {
|
|
|
403
594
|
"id": "feed",
|
|
404
595
|
"appDir": "TopoloFeed",
|
|
405
596
|
"name": "TopoloFeed",
|
|
406
|
-
"packageName":
|
|
407
|
-
"productionUrl": "https://
|
|
597
|
+
"packageName": "topolo-feed",
|
|
598
|
+
"productionUrl": "https://feed-api.topolo.app",
|
|
408
599
|
"services": [
|
|
409
600
|
"feed"
|
|
410
601
|
],
|
|
@@ -412,29 +603,53 @@ var APPLICATIONS = {
|
|
|
412
603
|
{
|
|
413
604
|
"name": "topolo-feed-analytics-api",
|
|
414
605
|
"kind": "worker",
|
|
415
|
-
"apiUrl": "https://
|
|
606
|
+
"apiUrl": "https://feed-analytics-api.topolo.app",
|
|
416
607
|
"domains": [
|
|
417
|
-
"
|
|
608
|
+
"feed-analytics-api.topolo.app"
|
|
418
609
|
],
|
|
419
610
|
"routes": [
|
|
420
|
-
"
|
|
611
|
+
"feed-analytics-api.topolo.app"
|
|
421
612
|
],
|
|
422
613
|
"serviceId": null
|
|
423
614
|
},
|
|
424
615
|
{
|
|
425
616
|
"name": "topolo-feed-api",
|
|
426
617
|
"kind": "worker",
|
|
427
|
-
"apiUrl": "https://
|
|
618
|
+
"apiUrl": "https://feed-api.topolo.app",
|
|
428
619
|
"domains": [
|
|
429
|
-
"
|
|
620
|
+
"feed-api.topolo.app"
|
|
430
621
|
],
|
|
431
622
|
"routes": [
|
|
432
|
-
"
|
|
623
|
+
"feed-api.topolo.app"
|
|
433
624
|
],
|
|
434
625
|
"serviceId": "feed"
|
|
435
626
|
}
|
|
436
627
|
]
|
|
437
628
|
},
|
|
629
|
+
"flow": {
|
|
630
|
+
"id": "flow",
|
|
631
|
+
"appDir": "TopoloFlow",
|
|
632
|
+
"name": "topolo-flow",
|
|
633
|
+
"packageName": "topolo-flow",
|
|
634
|
+
"productionUrl": "https://flow.topolo.app",
|
|
635
|
+
"services": [
|
|
636
|
+
"flow"
|
|
637
|
+
],
|
|
638
|
+
"deployTargets": [
|
|
639
|
+
{
|
|
640
|
+
"name": "topolo-flow",
|
|
641
|
+
"kind": "worker",
|
|
642
|
+
"apiUrl": "https://flow.topolo.app",
|
|
643
|
+
"domains": [
|
|
644
|
+
"flow.topolo.app"
|
|
645
|
+
],
|
|
646
|
+
"routes": [
|
|
647
|
+
"flow.topolo.app"
|
|
648
|
+
],
|
|
649
|
+
"serviceId": "flow"
|
|
650
|
+
}
|
|
651
|
+
]
|
|
652
|
+
},
|
|
438
653
|
"forecast": {
|
|
439
654
|
"id": "forecast",
|
|
440
655
|
"appDir": "TopoloForecast",
|
|
@@ -446,23 +661,123 @@ var APPLICATIONS = {
|
|
|
446
661
|
],
|
|
447
662
|
"deployTargets": [
|
|
448
663
|
{
|
|
449
|
-
"name": "forecast",
|
|
450
|
-
"kind": "
|
|
664
|
+
"name": "topolo-forecast",
|
|
665
|
+
"kind": "worker",
|
|
451
666
|
"apiUrl": null,
|
|
452
|
-
"domains": [
|
|
667
|
+
"domains": [
|
|
668
|
+
"forecast.topolo.app"
|
|
669
|
+
],
|
|
453
670
|
"routes": [],
|
|
454
671
|
"serviceId": null
|
|
455
672
|
},
|
|
456
673
|
{
|
|
457
|
-
"name": "forecast-
|
|
674
|
+
"name": "topolo-forecast-api",
|
|
458
675
|
"kind": "worker",
|
|
459
|
-
"apiUrl": "https://forecast-
|
|
460
|
-
"domains": [
|
|
676
|
+
"apiUrl": "https://forecast-api.topolo.app",
|
|
677
|
+
"domains": [
|
|
678
|
+
"forecast-api.topolo.app"
|
|
679
|
+
],
|
|
461
680
|
"routes": [],
|
|
462
681
|
"serviceId": "forecast"
|
|
463
682
|
}
|
|
464
683
|
]
|
|
465
684
|
},
|
|
685
|
+
"forms": {
|
|
686
|
+
"id": "forms",
|
|
687
|
+
"appDir": "TopoloForms",
|
|
688
|
+
"name": "topolo-forms",
|
|
689
|
+
"packageName": "topolo-forms",
|
|
690
|
+
"productionUrl": "https://forms.topolo.app",
|
|
691
|
+
"services": [
|
|
692
|
+
"forms"
|
|
693
|
+
],
|
|
694
|
+
"deployTargets": [
|
|
695
|
+
{
|
|
696
|
+
"name": "topolo-forms",
|
|
697
|
+
"kind": "worker",
|
|
698
|
+
"apiUrl": "https://forms.topolo.app",
|
|
699
|
+
"domains": [
|
|
700
|
+
"forms.topolo.app"
|
|
701
|
+
],
|
|
702
|
+
"routes": [
|
|
703
|
+
"forms.topolo.app"
|
|
704
|
+
],
|
|
705
|
+
"serviceId": "forms"
|
|
706
|
+
}
|
|
707
|
+
]
|
|
708
|
+
},
|
|
709
|
+
"home": {
|
|
710
|
+
"id": "home",
|
|
711
|
+
"appDir": "TopoloHome",
|
|
712
|
+
"name": "topolo-home",
|
|
713
|
+
"packageName": "topolo-home",
|
|
714
|
+
"productionUrl": "https://home.topolo.app",
|
|
715
|
+
"services": [
|
|
716
|
+
"home"
|
|
717
|
+
],
|
|
718
|
+
"deployTargets": [
|
|
719
|
+
{
|
|
720
|
+
"name": "topolo-home",
|
|
721
|
+
"kind": "worker",
|
|
722
|
+
"apiUrl": "https://home.topolo.app",
|
|
723
|
+
"domains": [
|
|
724
|
+
"home.topolo.app"
|
|
725
|
+
],
|
|
726
|
+
"routes": [
|
|
727
|
+
"home.topolo.app"
|
|
728
|
+
],
|
|
729
|
+
"serviceId": "home"
|
|
730
|
+
}
|
|
731
|
+
]
|
|
732
|
+
},
|
|
733
|
+
"insights": {
|
|
734
|
+
"id": "insights",
|
|
735
|
+
"appDir": "TopoloInsights",
|
|
736
|
+
"name": "topolo-insights",
|
|
737
|
+
"packageName": "topolo-insights",
|
|
738
|
+
"productionUrl": "https://insights.topolo.app",
|
|
739
|
+
"services": [
|
|
740
|
+
"insights"
|
|
741
|
+
],
|
|
742
|
+
"deployTargets": [
|
|
743
|
+
{
|
|
744
|
+
"name": "topolo-insights",
|
|
745
|
+
"kind": "worker",
|
|
746
|
+
"apiUrl": "https://insights.topolo.app",
|
|
747
|
+
"domains": [
|
|
748
|
+
"insights.topolo.app"
|
|
749
|
+
],
|
|
750
|
+
"routes": [
|
|
751
|
+
"insights.topolo.app"
|
|
752
|
+
],
|
|
753
|
+
"serviceId": "insights"
|
|
754
|
+
}
|
|
755
|
+
]
|
|
756
|
+
},
|
|
757
|
+
"inventory": {
|
|
758
|
+
"id": "inventory",
|
|
759
|
+
"appDir": "TopoloInventory",
|
|
760
|
+
"name": "topolo-inventory",
|
|
761
|
+
"packageName": "topolo-inventory",
|
|
762
|
+
"productionUrl": "https://inventory.topolo.app",
|
|
763
|
+
"services": [
|
|
764
|
+
"inventory"
|
|
765
|
+
],
|
|
766
|
+
"deployTargets": [
|
|
767
|
+
{
|
|
768
|
+
"name": "topolo-inventory",
|
|
769
|
+
"kind": "worker",
|
|
770
|
+
"apiUrl": "https://inventory.topolo.app",
|
|
771
|
+
"domains": [
|
|
772
|
+
"inventory.topolo.app"
|
|
773
|
+
],
|
|
774
|
+
"routes": [
|
|
775
|
+
"inventory.topolo.app"
|
|
776
|
+
],
|
|
777
|
+
"serviceId": "inventory"
|
|
778
|
+
}
|
|
779
|
+
]
|
|
780
|
+
},
|
|
466
781
|
"learn": {
|
|
467
782
|
"id": "learn",
|
|
468
783
|
"appDir": "TopoloLearn",
|
|
@@ -474,8 +789,8 @@ var APPLICATIONS = {
|
|
|
474
789
|
],
|
|
475
790
|
"deployTargets": [
|
|
476
791
|
{
|
|
477
|
-
"name": "
|
|
478
|
-
"kind": "
|
|
792
|
+
"name": "topolo-learn",
|
|
793
|
+
"kind": "worker",
|
|
479
794
|
"apiUrl": null,
|
|
480
795
|
"domains": [
|
|
481
796
|
"learn.topolo.app"
|
|
@@ -484,17 +799,41 @@ var APPLICATIONS = {
|
|
|
484
799
|
"serviceId": null
|
|
485
800
|
},
|
|
486
801
|
{
|
|
487
|
-
"name": "
|
|
802
|
+
"name": "topolo-learn-api",
|
|
488
803
|
"kind": "worker",
|
|
489
|
-
"apiUrl": "https://
|
|
804
|
+
"apiUrl": "https://learn-api.topolo.app",
|
|
490
805
|
"domains": [
|
|
491
|
-
"
|
|
806
|
+
"learn-api.topolo.app"
|
|
492
807
|
],
|
|
493
808
|
"routes": [],
|
|
494
809
|
"serviceId": "learn"
|
|
495
810
|
}
|
|
496
811
|
]
|
|
497
812
|
},
|
|
813
|
+
"localize": {
|
|
814
|
+
"id": "localize",
|
|
815
|
+
"appDir": "TopoloLocalize",
|
|
816
|
+
"name": "topolo-localize",
|
|
817
|
+
"packageName": "topolo-localize",
|
|
818
|
+
"productionUrl": "https://localize.topolo.app",
|
|
819
|
+
"services": [
|
|
820
|
+
"localize"
|
|
821
|
+
],
|
|
822
|
+
"deployTargets": [
|
|
823
|
+
{
|
|
824
|
+
"name": "topolo-localize",
|
|
825
|
+
"kind": "worker",
|
|
826
|
+
"apiUrl": "https://localize.topolo.app",
|
|
827
|
+
"domains": [
|
|
828
|
+
"localize.topolo.app"
|
|
829
|
+
],
|
|
830
|
+
"routes": [
|
|
831
|
+
"localize.topolo.app"
|
|
832
|
+
],
|
|
833
|
+
"serviceId": "localize"
|
|
834
|
+
}
|
|
835
|
+
]
|
|
836
|
+
},
|
|
498
837
|
"mail": {
|
|
499
838
|
"id": "mail",
|
|
500
839
|
"appDir": "TopoloMail",
|
|
@@ -507,7 +846,7 @@ var APPLICATIONS = {
|
|
|
507
846
|
"deployTargets": [
|
|
508
847
|
{
|
|
509
848
|
"name": "topolo-mail",
|
|
510
|
-
"kind": "
|
|
849
|
+
"kind": "worker",
|
|
511
850
|
"apiUrl": "https://mail.topolo.app",
|
|
512
851
|
"domains": [
|
|
513
852
|
"mail.topolo.app"
|
|
@@ -519,20 +858,11 @@ var APPLICATIONS = {
|
|
|
519
858
|
}
|
|
520
859
|
]
|
|
521
860
|
},
|
|
522
|
-
"mcp": {
|
|
523
|
-
"id": "mcp",
|
|
524
|
-
"appDir": "TopoloMCP",
|
|
525
|
-
"name": "@topolo/mcp",
|
|
526
|
-
"packageName": "@topolo/mcp",
|
|
527
|
-
"productionUrl": null,
|
|
528
|
-
"services": [],
|
|
529
|
-
"deployTargets": []
|
|
530
|
-
},
|
|
531
861
|
"mdm": {
|
|
532
862
|
"id": "mdm",
|
|
533
863
|
"appDir": "TopoloMDM",
|
|
534
864
|
"name": "TopoloMDM",
|
|
535
|
-
"packageName":
|
|
865
|
+
"packageName": "topolo-mdm",
|
|
536
866
|
"productionUrl": "https://mdm.topolo.app",
|
|
537
867
|
"services": [
|
|
538
868
|
"mdm"
|
|
@@ -541,22 +871,21 @@ var APPLICATIONS = {
|
|
|
541
871
|
{
|
|
542
872
|
"name": "topolo-mdm-api",
|
|
543
873
|
"kind": "worker",
|
|
544
|
-
"apiUrl": "https://
|
|
874
|
+
"apiUrl": "https://mdm-api.topolo.app",
|
|
545
875
|
"domains": [
|
|
546
|
-
"
|
|
876
|
+
"mdm-api.topolo.app"
|
|
547
877
|
],
|
|
548
878
|
"routes": [
|
|
549
|
-
"
|
|
879
|
+
"mdm-api.topolo.app"
|
|
550
880
|
],
|
|
551
881
|
"serviceId": "mdm"
|
|
552
882
|
},
|
|
553
883
|
{
|
|
554
884
|
"name": "topolo-mdm-console",
|
|
555
|
-
"kind": "
|
|
885
|
+
"kind": "worker",
|
|
556
886
|
"apiUrl": null,
|
|
557
887
|
"domains": [
|
|
558
|
-
"mdm.topolo.app"
|
|
559
|
-
"topolo-mdm-console.pages.dev"
|
|
888
|
+
"mdm.topolo.app"
|
|
560
889
|
],
|
|
561
890
|
"routes": [
|
|
562
891
|
"mdm.topolo.app"
|
|
@@ -577,7 +906,7 @@ var APPLICATIONS = {
|
|
|
577
906
|
"deployTargets": [
|
|
578
907
|
{
|
|
579
908
|
"name": "topolo-messaging",
|
|
580
|
-
"kind": "
|
|
909
|
+
"kind": "worker",
|
|
581
910
|
"apiUrl": "https://messages.topolo.app",
|
|
582
911
|
"domains": [
|
|
583
912
|
"messages.topolo.app"
|
|
@@ -587,7 +916,7 @@ var APPLICATIONS = {
|
|
|
587
916
|
},
|
|
588
917
|
{
|
|
589
918
|
"name": "topolo-messaging-dispatch",
|
|
590
|
-
"kind": "
|
|
919
|
+
"kind": "worker",
|
|
591
920
|
"apiUrl": null,
|
|
592
921
|
"domains": [],
|
|
593
922
|
"routes": [],
|
|
@@ -607,11 +936,10 @@ var APPLICATIONS = {
|
|
|
607
936
|
"deployTargets": [
|
|
608
937
|
{
|
|
609
938
|
"name": "topolo-nexus-dashboard",
|
|
610
|
-
"kind": "
|
|
939
|
+
"kind": "worker",
|
|
611
940
|
"apiUrl": null,
|
|
612
941
|
"domains": [
|
|
613
|
-
"nexus.topolo.app"
|
|
614
|
-
"topolo-nexus-dashboard.pages.dev"
|
|
942
|
+
"nexus.topolo.app"
|
|
615
943
|
],
|
|
616
944
|
"routes": [],
|
|
617
945
|
"serviceId": null
|
|
@@ -619,19 +947,52 @@ var APPLICATIONS = {
|
|
|
619
947
|
{
|
|
620
948
|
"name": "topolo-nexus-gateway",
|
|
621
949
|
"kind": "worker",
|
|
622
|
-
"apiUrl": "https://
|
|
950
|
+
"apiUrl": "https://nexus-api.topolo.app",
|
|
623
951
|
"domains": [
|
|
624
|
-
"
|
|
952
|
+
"nexus-api.topolo.app"
|
|
625
953
|
],
|
|
626
954
|
"routes": [],
|
|
627
955
|
"serviceId": "nexus"
|
|
628
956
|
}
|
|
629
957
|
]
|
|
630
958
|
},
|
|
959
|
+
"notify": {
|
|
960
|
+
"id": "notify",
|
|
961
|
+
"appDir": "TopoloNotify",
|
|
962
|
+
"name": "topolo-notify",
|
|
963
|
+
"packageName": "@topolo/notify",
|
|
964
|
+
"productionUrl": "https://notify.topolo.app",
|
|
965
|
+
"services": [
|
|
966
|
+
"notify"
|
|
967
|
+
],
|
|
968
|
+
"deployTargets": [
|
|
969
|
+
{
|
|
970
|
+
"name": "topolo-notify",
|
|
971
|
+
"kind": "worker",
|
|
972
|
+
"apiUrl": "https://notify.topolo.app",
|
|
973
|
+
"domains": [
|
|
974
|
+
"notify.topolo.app"
|
|
975
|
+
],
|
|
976
|
+
"routes": [
|
|
977
|
+
"notify.topolo.app"
|
|
978
|
+
],
|
|
979
|
+
"serviceId": "notify"
|
|
980
|
+
}
|
|
981
|
+
]
|
|
982
|
+
},
|
|
983
|
+
"observability_watch": {
|
|
984
|
+
"id": "observability_watch",
|
|
985
|
+
"appDir": "TopoloObservabilityWatch",
|
|
986
|
+
"name": "topolo-observability-watch",
|
|
987
|
+
"packageName": "topolo-observability-watch",
|
|
988
|
+
"productionUrl": null,
|
|
989
|
+
"services": [],
|
|
990
|
+
"deployTargets": []
|
|
991
|
+
},
|
|
631
992
|
"one": {
|
|
632
993
|
"id": "one",
|
|
633
994
|
"appDir": "TopoloOne",
|
|
634
|
-
"name": "
|
|
995
|
+
"name": "TopoloOne",
|
|
635
996
|
"packageName": "topolo-oneclick-sso",
|
|
636
997
|
"productionUrl": "https://one.topolo.app",
|
|
637
998
|
"services": [
|
|
@@ -639,47 +1000,68 @@ var APPLICATIONS = {
|
|
|
639
1000
|
],
|
|
640
1001
|
"deployTargets": [
|
|
641
1002
|
{
|
|
642
|
-
"name": "
|
|
643
|
-
"kind": "worker",
|
|
644
|
-
"apiUrl": null,
|
|
645
|
-
"domains": [
|
|
646
|
-
"ai-chat-rag.topolo.workers.dev"
|
|
647
|
-
],
|
|
648
|
-
"routes": [],
|
|
649
|
-
"serviceId": null
|
|
650
|
-
},
|
|
651
|
-
{
|
|
652
|
-
"name": "topoloone",
|
|
1003
|
+
"name": "topolo-one",
|
|
653
1004
|
"kind": "pages",
|
|
654
1005
|
"apiUrl": null,
|
|
655
1006
|
"domains": [
|
|
656
|
-
"
|
|
1007
|
+
"one.topolo.app"
|
|
657
1008
|
],
|
|
658
1009
|
"routes": [],
|
|
659
1010
|
"serviceId": null
|
|
660
1011
|
},
|
|
661
1012
|
{
|
|
662
|
-
"name": "
|
|
1013
|
+
"name": "topolo-one-website",
|
|
663
1014
|
"kind": "worker",
|
|
664
1015
|
"apiUrl": null,
|
|
665
1016
|
"domains": [
|
|
666
|
-
"
|
|
1017
|
+
"topolo.io",
|
|
1018
|
+
"www.topolo.io"
|
|
667
1019
|
],
|
|
668
1020
|
"routes": [],
|
|
669
1021
|
"serviceId": null
|
|
670
1022
|
},
|
|
671
1023
|
{
|
|
672
|
-
"name": "
|
|
1024
|
+
"name": "topolo-one-worker",
|
|
673
1025
|
"kind": "worker",
|
|
674
1026
|
"apiUrl": "https://one.topolo.app",
|
|
675
|
-
"domains": [
|
|
1027
|
+
"domains": [
|
|
1028
|
+
"one.topolo.app",
|
|
1029
|
+
"topolo.app",
|
|
1030
|
+
"www.topolo.app"
|
|
1031
|
+
],
|
|
676
1032
|
"routes": [
|
|
677
|
-
"one.topolo.app/*"
|
|
1033
|
+
"one.topolo.app/*",
|
|
1034
|
+
"topolo.app",
|
|
1035
|
+
"www.topolo.app/*"
|
|
678
1036
|
],
|
|
679
1037
|
"serviceId": "one"
|
|
680
1038
|
}
|
|
681
1039
|
]
|
|
682
1040
|
},
|
|
1041
|
+
"p2p": {
|
|
1042
|
+
"id": "p2p",
|
|
1043
|
+
"appDir": "TopoloP2P",
|
|
1044
|
+
"name": "topolo-p2p",
|
|
1045
|
+
"packageName": "topolo-p2p",
|
|
1046
|
+
"productionUrl": "https://p2p.topolo.app",
|
|
1047
|
+
"services": [
|
|
1048
|
+
"p2p"
|
|
1049
|
+
],
|
|
1050
|
+
"deployTargets": [
|
|
1051
|
+
{
|
|
1052
|
+
"name": "topolo-p2p",
|
|
1053
|
+
"kind": "worker",
|
|
1054
|
+
"apiUrl": "https://p2p.topolo.app",
|
|
1055
|
+
"domains": [
|
|
1056
|
+
"p2p.topolo.app"
|
|
1057
|
+
],
|
|
1058
|
+
"routes": [
|
|
1059
|
+
"p2p.topolo.app"
|
|
1060
|
+
],
|
|
1061
|
+
"serviceId": "p2p"
|
|
1062
|
+
}
|
|
1063
|
+
]
|
|
1064
|
+
},
|
|
683
1065
|
"pay": {
|
|
684
1066
|
"id": "pay",
|
|
685
1067
|
"appDir": "TopoloPay",
|
|
@@ -693,18 +1075,68 @@ var APPLICATIONS = {
|
|
|
693
1075
|
{
|
|
694
1076
|
"name": "topolo-pay",
|
|
695
1077
|
"kind": "worker",
|
|
696
|
-
"apiUrl": "https://
|
|
697
|
-
"domains": [
|
|
1078
|
+
"apiUrl": "https://pay.topolo.app",
|
|
1079
|
+
"domains": [
|
|
1080
|
+
"pay.topolo.app"
|
|
1081
|
+
],
|
|
698
1082
|
"routes": [],
|
|
699
1083
|
"serviceId": "pay"
|
|
700
1084
|
}
|
|
701
1085
|
]
|
|
702
1086
|
},
|
|
1087
|
+
"people": {
|
|
1088
|
+
"id": "people",
|
|
1089
|
+
"appDir": "TopoloPeople",
|
|
1090
|
+
"name": "topolo-people",
|
|
1091
|
+
"packageName": "topolo-people",
|
|
1092
|
+
"productionUrl": "https://people.topolo.app",
|
|
1093
|
+
"services": [
|
|
1094
|
+
"people"
|
|
1095
|
+
],
|
|
1096
|
+
"deployTargets": [
|
|
1097
|
+
{
|
|
1098
|
+
"name": "topolo-people",
|
|
1099
|
+
"kind": "worker",
|
|
1100
|
+
"apiUrl": "https://people.topolo.app",
|
|
1101
|
+
"domains": [
|
|
1102
|
+
"people.topolo.app"
|
|
1103
|
+
],
|
|
1104
|
+
"routes": [
|
|
1105
|
+
"people.topolo.app"
|
|
1106
|
+
],
|
|
1107
|
+
"serviceId": "people"
|
|
1108
|
+
}
|
|
1109
|
+
]
|
|
1110
|
+
},
|
|
1111
|
+
"pulse": {
|
|
1112
|
+
"id": "pulse",
|
|
1113
|
+
"appDir": "TopoloPulse",
|
|
1114
|
+
"name": "topolo-pulse",
|
|
1115
|
+
"packageName": "topolo-pulse",
|
|
1116
|
+
"productionUrl": "https://pulse.topolo.app",
|
|
1117
|
+
"services": [
|
|
1118
|
+
"pulse"
|
|
1119
|
+
],
|
|
1120
|
+
"deployTargets": [
|
|
1121
|
+
{
|
|
1122
|
+
"name": "topolo-pulse",
|
|
1123
|
+
"kind": "worker",
|
|
1124
|
+
"apiUrl": "https://pulse.topolo.app",
|
|
1125
|
+
"domains": [
|
|
1126
|
+
"pulse.topolo.app"
|
|
1127
|
+
],
|
|
1128
|
+
"routes": [
|
|
1129
|
+
"pulse.topolo.app"
|
|
1130
|
+
],
|
|
1131
|
+
"serviceId": "pulse"
|
|
1132
|
+
}
|
|
1133
|
+
]
|
|
1134
|
+
},
|
|
703
1135
|
"quro": {
|
|
704
1136
|
"id": "quro",
|
|
705
1137
|
"appDir": "TopoloQuro",
|
|
706
1138
|
"name": "TopoloQuro",
|
|
707
|
-
"packageName":
|
|
1139
|
+
"packageName": "topolo-quro",
|
|
708
1140
|
"productionUrl": "https://quro.topolo.app",
|
|
709
1141
|
"services": [
|
|
710
1142
|
"quro.api",
|
|
@@ -715,7 +1147,9 @@ var APPLICATIONS = {
|
|
|
715
1147
|
"name": "quro-api",
|
|
716
1148
|
"kind": "worker",
|
|
717
1149
|
"apiUrl": "https://api.ol0.me",
|
|
718
|
-
"domains": [
|
|
1150
|
+
"domains": [
|
|
1151
|
+
"api.ol0.me"
|
|
1152
|
+
],
|
|
719
1153
|
"routes": [],
|
|
720
1154
|
"serviceId": "quro.api"
|
|
721
1155
|
},
|
|
@@ -723,7 +1157,9 @@ var APPLICATIONS = {
|
|
|
723
1157
|
"name": "quro-redirect-system",
|
|
724
1158
|
"kind": "worker",
|
|
725
1159
|
"apiUrl": "https://ol0.me",
|
|
726
|
-
"domains": [
|
|
1160
|
+
"domains": [
|
|
1161
|
+
"ol0.me"
|
|
1162
|
+
],
|
|
727
1163
|
"routes": [
|
|
728
1164
|
"ol0.me/*"
|
|
729
1165
|
],
|
|
@@ -731,9 +1167,11 @@ var APPLICATIONS = {
|
|
|
731
1167
|
},
|
|
732
1168
|
{
|
|
733
1169
|
"name": "quro-ui",
|
|
734
|
-
"kind": "
|
|
1170
|
+
"kind": "worker",
|
|
735
1171
|
"apiUrl": null,
|
|
736
|
-
"domains": [
|
|
1172
|
+
"domains": [
|
|
1173
|
+
"quro.topolo.app"
|
|
1174
|
+
],
|
|
737
1175
|
"routes": [],
|
|
738
1176
|
"serviceId": null
|
|
739
1177
|
}
|
|
@@ -750,8 +1188,8 @@ var APPLICATIONS = {
|
|
|
750
1188
|
],
|
|
751
1189
|
"deployTargets": [
|
|
752
1190
|
{
|
|
753
|
-
"name": "roadmapper",
|
|
754
|
-
"kind": "
|
|
1191
|
+
"name": "topolo-roadmapper",
|
|
1192
|
+
"kind": "worker",
|
|
755
1193
|
"apiUrl": null,
|
|
756
1194
|
"domains": [
|
|
757
1195
|
"roadmapper.topolo.app"
|
|
@@ -760,7 +1198,7 @@ var APPLICATIONS = {
|
|
|
760
1198
|
"serviceId": null
|
|
761
1199
|
},
|
|
762
1200
|
{
|
|
763
|
-
"name": "topolo-
|
|
1201
|
+
"name": "topolo-roadmapper-api",
|
|
764
1202
|
"kind": "worker",
|
|
765
1203
|
"apiUrl": "https://roadmapper-api.topolo.app",
|
|
766
1204
|
"domains": [
|
|
@@ -771,6 +1209,30 @@ var APPLICATIONS = {
|
|
|
771
1209
|
}
|
|
772
1210
|
]
|
|
773
1211
|
},
|
|
1212
|
+
"sign": {
|
|
1213
|
+
"id": "sign",
|
|
1214
|
+
"appDir": "TopoloSign",
|
|
1215
|
+
"name": "topolo-sign",
|
|
1216
|
+
"packageName": "topolo-sign",
|
|
1217
|
+
"productionUrl": "https://sign.topolo.app",
|
|
1218
|
+
"services": [
|
|
1219
|
+
"sign"
|
|
1220
|
+
],
|
|
1221
|
+
"deployTargets": [
|
|
1222
|
+
{
|
|
1223
|
+
"name": "topolo-sign",
|
|
1224
|
+
"kind": "worker",
|
|
1225
|
+
"apiUrl": "https://sign.topolo.app",
|
|
1226
|
+
"domains": [
|
|
1227
|
+
"sign.topolo.app"
|
|
1228
|
+
],
|
|
1229
|
+
"routes": [
|
|
1230
|
+
"sign.topolo.app"
|
|
1231
|
+
],
|
|
1232
|
+
"serviceId": "sign"
|
|
1233
|
+
}
|
|
1234
|
+
]
|
|
1235
|
+
},
|
|
774
1236
|
"social_studio": {
|
|
775
1237
|
"id": "social_studio",
|
|
776
1238
|
"appDir": "TopoloSocialStudio",
|
|
@@ -783,17 +1245,21 @@ var APPLICATIONS = {
|
|
|
783
1245
|
"deployTargets": [
|
|
784
1246
|
{
|
|
785
1247
|
"name": "topolo-social-studio",
|
|
786
|
-
"kind": "
|
|
1248
|
+
"kind": "worker",
|
|
787
1249
|
"apiUrl": null,
|
|
788
|
-
"domains": [
|
|
1250
|
+
"domains": [
|
|
1251
|
+
"studio.topolo.app"
|
|
1252
|
+
],
|
|
789
1253
|
"routes": [],
|
|
790
1254
|
"serviceId": null
|
|
791
1255
|
},
|
|
792
1256
|
{
|
|
793
1257
|
"name": "topolo-social-studio-api",
|
|
794
1258
|
"kind": "worker",
|
|
795
|
-
"apiUrl": "https://
|
|
796
|
-
"domains": [
|
|
1259
|
+
"apiUrl": "https://studio-api.topolo.app",
|
|
1260
|
+
"domains": [
|
|
1261
|
+
"studio-api.topolo.app"
|
|
1262
|
+
],
|
|
797
1263
|
"routes": [],
|
|
798
1264
|
"serviceId": "social_studio"
|
|
799
1265
|
},
|
|
@@ -818,23 +1284,27 @@ var APPLICATIONS = {
|
|
|
818
1284
|
],
|
|
819
1285
|
"deployTargets": [
|
|
820
1286
|
{
|
|
821
|
-
"name": "socialize",
|
|
1287
|
+
"name": "topolo-socialize",
|
|
822
1288
|
"kind": "pages",
|
|
823
1289
|
"apiUrl": null,
|
|
824
|
-
"domains": [
|
|
1290
|
+
"domains": [
|
|
1291
|
+
"socialize.topolo.app"
|
|
1292
|
+
],
|
|
825
1293
|
"routes": [],
|
|
826
1294
|
"serviceId": null
|
|
827
1295
|
},
|
|
828
1296
|
{
|
|
829
|
-
"name": "socialize-
|
|
1297
|
+
"name": "topolo-socialize-api",
|
|
830
1298
|
"kind": "worker",
|
|
831
|
-
"apiUrl": "https://socialize-
|
|
832
|
-
"domains": [
|
|
1299
|
+
"apiUrl": "https://socialize-api.topolo.app",
|
|
1300
|
+
"domains": [
|
|
1301
|
+
"socialize-api.topolo.app"
|
|
1302
|
+
],
|
|
833
1303
|
"routes": [],
|
|
834
1304
|
"serviceId": "socialize"
|
|
835
1305
|
},
|
|
836
1306
|
{
|
|
837
|
-
"name": "socialize-
|
|
1307
|
+
"name": "topolo-socialize-scheduler",
|
|
838
1308
|
"kind": "worker",
|
|
839
1309
|
"apiUrl": null,
|
|
840
1310
|
"domains": [],
|
|
@@ -843,6 +1313,54 @@ var APPLICATIONS = {
|
|
|
843
1313
|
}
|
|
844
1314
|
]
|
|
845
1315
|
},
|
|
1316
|
+
"spaces": {
|
|
1317
|
+
"id": "spaces",
|
|
1318
|
+
"appDir": "TopoloSpaces",
|
|
1319
|
+
"name": "topolo-spaces",
|
|
1320
|
+
"packageName": "@topolo/spaces",
|
|
1321
|
+
"productionUrl": "https://spaces.topolo.app",
|
|
1322
|
+
"services": [
|
|
1323
|
+
"spaces"
|
|
1324
|
+
],
|
|
1325
|
+
"deployTargets": [
|
|
1326
|
+
{
|
|
1327
|
+
"name": "topolo-spaces",
|
|
1328
|
+
"kind": "worker",
|
|
1329
|
+
"apiUrl": "https://spaces.topolo.app",
|
|
1330
|
+
"domains": [
|
|
1331
|
+
"spaces.topolo.app"
|
|
1332
|
+
],
|
|
1333
|
+
"routes": [
|
|
1334
|
+
"spaces.topolo.app"
|
|
1335
|
+
],
|
|
1336
|
+
"serviceId": "spaces"
|
|
1337
|
+
}
|
|
1338
|
+
]
|
|
1339
|
+
},
|
|
1340
|
+
"status": {
|
|
1341
|
+
"id": "status",
|
|
1342
|
+
"appDir": "TopoloStatus",
|
|
1343
|
+
"name": "topolo-status",
|
|
1344
|
+
"packageName": "topolo-status",
|
|
1345
|
+
"productionUrl": "https://status.topolo.app",
|
|
1346
|
+
"services": [
|
|
1347
|
+
"status"
|
|
1348
|
+
],
|
|
1349
|
+
"deployTargets": [
|
|
1350
|
+
{
|
|
1351
|
+
"name": "topolo-status",
|
|
1352
|
+
"kind": "worker",
|
|
1353
|
+
"apiUrl": "https://status.topolo.app",
|
|
1354
|
+
"domains": [
|
|
1355
|
+
"status.topolo.app"
|
|
1356
|
+
],
|
|
1357
|
+
"routes": [
|
|
1358
|
+
"status.topolo.app"
|
|
1359
|
+
],
|
|
1360
|
+
"serviceId": "status"
|
|
1361
|
+
}
|
|
1362
|
+
]
|
|
1363
|
+
},
|
|
846
1364
|
"support": {
|
|
847
1365
|
"id": "support",
|
|
848
1366
|
"appDir": "TopoloSupport",
|
|
@@ -855,7 +1373,7 @@ var APPLICATIONS = {
|
|
|
855
1373
|
"deployTargets": [
|
|
856
1374
|
{
|
|
857
1375
|
"name": "topolo-support",
|
|
858
|
-
"kind": "
|
|
1376
|
+
"kind": "worker",
|
|
859
1377
|
"apiUrl": "https://support.topolo.app",
|
|
860
1378
|
"domains": [
|
|
861
1379
|
"support.topolo.app"
|
|
@@ -867,6 +1385,54 @@ var APPLICATIONS = {
|
|
|
867
1385
|
}
|
|
868
1386
|
]
|
|
869
1387
|
},
|
|
1388
|
+
"survey": {
|
|
1389
|
+
"id": "survey",
|
|
1390
|
+
"appDir": "TopoloSurvey",
|
|
1391
|
+
"name": "topolo-survey",
|
|
1392
|
+
"packageName": "topolo-survey",
|
|
1393
|
+
"productionUrl": "https://survey.topolo.app",
|
|
1394
|
+
"services": [
|
|
1395
|
+
"survey"
|
|
1396
|
+
],
|
|
1397
|
+
"deployTargets": [
|
|
1398
|
+
{
|
|
1399
|
+
"name": "topolo-survey",
|
|
1400
|
+
"kind": "worker",
|
|
1401
|
+
"apiUrl": "https://survey.topolo.app",
|
|
1402
|
+
"domains": [
|
|
1403
|
+
"survey.topolo.app"
|
|
1404
|
+
],
|
|
1405
|
+
"routes": [
|
|
1406
|
+
"survey.topolo.app"
|
|
1407
|
+
],
|
|
1408
|
+
"serviceId": "survey"
|
|
1409
|
+
}
|
|
1410
|
+
]
|
|
1411
|
+
},
|
|
1412
|
+
"voice": {
|
|
1413
|
+
"id": "voice",
|
|
1414
|
+
"appDir": "TopoloVoice",
|
|
1415
|
+
"name": "topolo-voice",
|
|
1416
|
+
"packageName": "topolo-voice",
|
|
1417
|
+
"productionUrl": "https://voice.topolo.app",
|
|
1418
|
+
"services": [
|
|
1419
|
+
"voice"
|
|
1420
|
+
],
|
|
1421
|
+
"deployTargets": [
|
|
1422
|
+
{
|
|
1423
|
+
"name": "topolo-voice",
|
|
1424
|
+
"kind": "worker",
|
|
1425
|
+
"apiUrl": "https://voice.topolo.app",
|
|
1426
|
+
"domains": [
|
|
1427
|
+
"voice.topolo.app"
|
|
1428
|
+
],
|
|
1429
|
+
"routes": [
|
|
1430
|
+
"voice.topolo.app"
|
|
1431
|
+
],
|
|
1432
|
+
"serviceId": "voice"
|
|
1433
|
+
}
|
|
1434
|
+
]
|
|
1435
|
+
},
|
|
870
1436
|
"web": {
|
|
871
1437
|
"id": "web",
|
|
872
1438
|
"appDir": "TopoloWeb",
|
|
@@ -878,7 +1444,7 @@ var APPLICATIONS = {
|
|
|
878
1444
|
],
|
|
879
1445
|
"deployTargets": [
|
|
880
1446
|
{
|
|
881
|
-
"name": "
|
|
1447
|
+
"name": "topolo-web-api",
|
|
882
1448
|
"kind": "worker",
|
|
883
1449
|
"apiUrl": "https://web-api.topolo.app",
|
|
884
1450
|
"domains": [
|
|
@@ -888,7 +1454,7 @@ var APPLICATIONS = {
|
|
|
888
1454
|
"serviceId": "web"
|
|
889
1455
|
},
|
|
890
1456
|
{
|
|
891
|
-
"name": "
|
|
1457
|
+
"name": "topolo-web-runtime",
|
|
892
1458
|
"kind": "worker",
|
|
893
1459
|
"apiUrl": "https://sites.topolo.app",
|
|
894
1460
|
"domains": [
|
|
@@ -898,8 +1464,8 @@ var APPLICATIONS = {
|
|
|
898
1464
|
"serviceId": null
|
|
899
1465
|
},
|
|
900
1466
|
{
|
|
901
|
-
"name": "
|
|
902
|
-
"kind": "
|
|
1467
|
+
"name": "topolo-web-studio",
|
|
1468
|
+
"kind": "worker",
|
|
903
1469
|
"apiUrl": null,
|
|
904
1470
|
"domains": [
|
|
905
1471
|
"web.topolo.app"
|
|
@@ -910,7 +1476,7 @@ var APPLICATIONS = {
|
|
|
910
1476
|
]
|
|
911
1477
|
}
|
|
912
1478
|
};
|
|
913
|
-
var APPLICATION_REQUIREMENTS_VERSION = "2026-
|
|
1479
|
+
var APPLICATION_REQUIREMENTS_VERSION = "2026-05-01.1";
|
|
914
1480
|
var APPLICATION_REQUIREMENTS = [
|
|
915
1481
|
{
|
|
916
1482
|
id: "platform-metadata",
|
|
@@ -968,14 +1534,16 @@ var APPLICATION_REQUIREMENTS = [
|
|
|
968
1534
|
evidence: [
|
|
969
1535
|
"@topolo/ui-kit is used for the platform shell where the app has authenticated UI",
|
|
970
1536
|
"The shared launcher/app switcher is reachable from authenticated app chrome",
|
|
971
|
-
"Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu"
|
|
1537
|
+
"Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu",
|
|
1538
|
+
"Authenticated app body content stays inside the viewport on mobile and desktop widths"
|
|
972
1539
|
],
|
|
973
1540
|
implementation: [
|
|
974
1541
|
"Use TopoloAppShell for authenticated app layouts",
|
|
975
1542
|
"Use TopoloAccountMenu when a partial-shell surface still needs account chrome",
|
|
976
1543
|
"Pass app-specific account actions as additive menu items instead of forking dropdowns",
|
|
977
1544
|
"Use shared design tokens and platform UI primitives before creating local equivalents",
|
|
978
|
-
"Keep mobile and desktop shell behavior aligned with the platform UI kit"
|
|
1545
|
+
"Keep mobile and desktop shell behavior aligned with the platform UI kit",
|
|
1546
|
+
"Constrain app-owned workspace wrappers with min-width: 0, width: auto, and viewport-aware max-width so shell padding cannot create page-level horizontal overflow"
|
|
979
1547
|
]
|
|
980
1548
|
},
|
|
981
1549
|
{
|
|
@@ -1042,6 +1610,22 @@ var APPLICATION_REQUIREMENTS = [
|
|
|
1042
1610
|
"Keep command output JSON-stable for agents and human-readable with --no-json"
|
|
1043
1611
|
]
|
|
1044
1612
|
},
|
|
1613
|
+
{
|
|
1614
|
+
id: "native-dashboard-widget",
|
|
1615
|
+
title: "Expose a native dashboard widget contract",
|
|
1616
|
+
summary: "Launchable first-party applications must populate TopoloOne live workspace through an app-owned /api/widget endpoint using the SDK widget response contract.",
|
|
1617
|
+
appliesTo: ["api"],
|
|
1618
|
+
evidence: [
|
|
1619
|
+
"The app-owned API exposes GET /api/widget",
|
|
1620
|
+
"The endpoint returns TopoloWidgetApiResponse from @topolo/sdk",
|
|
1621
|
+
"The endpoint derives organization/user context from the app auth boundary"
|
|
1622
|
+
],
|
|
1623
|
+
implementation: [
|
|
1624
|
+
"Import createTopoloWidgetResponse from @topolo/sdk in the app backend",
|
|
1625
|
+
"Return native app metrics or action widgets instead of generic launch-card fallbacks",
|
|
1626
|
+
"Add a route-level test that validates the response with validateTopoloWidgetResponse"
|
|
1627
|
+
]
|
|
1628
|
+
},
|
|
1045
1629
|
{
|
|
1046
1630
|
id: "observability-and-audit",
|
|
1047
1631
|
title: "Emit platform audit and debugging signals",
|
|
@@ -1077,15 +1661,15 @@ var APPLICATION_REQUIREMENTS = [
|
|
|
1077
1661
|
];
|
|
1078
1662
|
function applicationRequirementScopes(application) {
|
|
1079
1663
|
const scopes = /* @__PURE__ */ new Set(["all"]);
|
|
1080
|
-
const
|
|
1081
|
-
const hasBrowserSurface = Boolean(application.productionUrl) || deployTargets.some((target) => target.kind === "pages");
|
|
1082
|
-
const hasApiSurface = application.services.length > 0 || deployTargets.some((target) => Boolean(target.apiUrl));
|
|
1664
|
+
const appId = application.id;
|
|
1665
|
+
const hasBrowserSurface = Boolean(application.productionUrl) || application.deployTargets.some((target) => target.kind === "pages");
|
|
1666
|
+
const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.apiUrl));
|
|
1083
1667
|
if (hasBrowserSurface) scopes.add("browser");
|
|
1084
1668
|
if (hasApiSurface) scopes.add("api");
|
|
1085
|
-
if (
|
|
1669
|
+
if (appId === "cli" || appId === "mcp" || appId === "cloudcontrol") {
|
|
1086
1670
|
scopes.add("tooling");
|
|
1087
1671
|
}
|
|
1088
|
-
if (
|
|
1672
|
+
if (appId === "cli" || appId === "mcp" || hasApiSurface) {
|
|
1089
1673
|
scopes.add("agent_surface");
|
|
1090
1674
|
}
|
|
1091
1675
|
return Array.from(scopes);
|
|
@@ -1204,16 +1788,24 @@ function evaluateRequirement(application, requirement) {
|
|
|
1204
1788
|
return finding(requirement, "met", "CloudControl deploy target metadata is present.", evidence);
|
|
1205
1789
|
}
|
|
1206
1790
|
case "agent-and-operator-surfaces": {
|
|
1791
|
+
const appId = application.id;
|
|
1207
1792
|
if (application.services.length > 0) {
|
|
1208
1793
|
evidence.push(`services=${application.services.join(",")}`);
|
|
1209
1794
|
return finding(requirement, "partial", "SDK service discovery exists; typed SDK/CLI/MCP workflow coverage should be checked as APIs stabilize.", evidence);
|
|
1210
1795
|
}
|
|
1211
|
-
if (
|
|
1212
|
-
evidence.push(`tooling=${
|
|
1796
|
+
if (appId === "cli" || appId === "mcp" || appId === "cloudcontrol") {
|
|
1797
|
+
evidence.push(`tooling=${appId}`);
|
|
1213
1798
|
return finding(requirement, "met", "This application is itself an agent/operator surface.", evidence);
|
|
1214
1799
|
}
|
|
1215
1800
|
return finding(requirement, "missing", "No SDK service or tooling surface is registered.", evidence);
|
|
1216
1801
|
}
|
|
1802
|
+
case "native-dashboard-widget":
|
|
1803
|
+
return finding(
|
|
1804
|
+
requirement,
|
|
1805
|
+
"needs_review",
|
|
1806
|
+
"Catalog metadata cannot verify app-owned /api/widget implementation details.",
|
|
1807
|
+
evidence
|
|
1808
|
+
);
|
|
1217
1809
|
case "observability-and-audit":
|
|
1218
1810
|
return finding(
|
|
1219
1811
|
requirement,
|
|
@@ -1265,30 +1857,46 @@ function statusRank(status) {
|
|
|
1265
1857
|
}
|
|
1266
1858
|
var DEFAULT_SERVICE_URLS = SERVICES;
|
|
1267
1859
|
function resolveServiceUrl(service, overrides) {
|
|
1268
|
-
|
|
1269
|
-
const override = overrides == null ? void 0 : overrides[service];
|
|
1860
|
+
const override = overrides?.[service];
|
|
1270
1861
|
if (override) return override;
|
|
1271
1862
|
const envKey = `TOPOLO_SERVICE_URL_${service.replace(/\./g, "_").toUpperCase()}`;
|
|
1272
|
-
const envValue = typeof process !== "undefined" ?
|
|
1863
|
+
const envValue = typeof process !== "undefined" ? process.env?.[envKey] : void 0;
|
|
1273
1864
|
if (envValue) return envValue;
|
|
1274
1865
|
return DEFAULT_SERVICE_URLS[service];
|
|
1275
1866
|
}
|
|
1276
1867
|
var WRITE_METHODS = /* @__PURE__ */ new Set(["POST", "PUT", "PATCH", "DELETE"]);
|
|
1277
|
-
var
|
|
1868
|
+
var POSITIVE_CACHE_TTL_MS = 5 * 60 * 1e3;
|
|
1869
|
+
var NEGATIVE_CACHE_TTL_MS = 60 * 1e3;
|
|
1870
|
+
var TopoloClient = class _TopoloClient {
|
|
1278
1871
|
credential;
|
|
1279
1872
|
agent;
|
|
1280
1873
|
serviceUrls;
|
|
1874
|
+
serviceIds;
|
|
1281
1875
|
requireConfirmForWrites;
|
|
1282
1876
|
timeoutMs;
|
|
1283
1877
|
fetchImpl;
|
|
1284
1878
|
debug;
|
|
1879
|
+
/**
|
|
1880
|
+
* Process-wide cache for slug → service-id lookups. Keyed by
|
|
1881
|
+
* `${authBaseUrl}|${slug}` so multiple `TopoloClient` instances pointing at
|
|
1882
|
+
* the same Auth share, but staging vs prod don't poison each other.
|
|
1883
|
+
* Cleared via `TopoloClient.clearServiceIdCache()` if a test needs it.
|
|
1884
|
+
*/
|
|
1885
|
+
static serviceIdCache = /* @__PURE__ */ new Map();
|
|
1886
|
+
/**
|
|
1887
|
+
* Drop the slug→service-id cache. Test-only — production callers should
|
|
1888
|
+
* let the 5-minute TTL expire naturally.
|
|
1889
|
+
*/
|
|
1890
|
+
static clearServiceIdCache() {
|
|
1891
|
+
_TopoloClient.serviceIdCache.clear();
|
|
1892
|
+
}
|
|
1285
1893
|
constructor(options) {
|
|
1286
|
-
var _a;
|
|
1287
1894
|
if (!options.credential) throw new TopoloAuthError("credential is required");
|
|
1288
|
-
if (!
|
|
1895
|
+
if (!options.agent?.clientName) throw new TopoloAuthError("agent.clientName is required");
|
|
1289
1896
|
this.credential = options.credential;
|
|
1290
1897
|
this.agent = options.agent;
|
|
1291
1898
|
this.serviceUrls = options.serviceUrls;
|
|
1899
|
+
this.serviceIds = options.serviceIds;
|
|
1292
1900
|
this.requireConfirmForWrites = options.requireConfirmForWrites !== false;
|
|
1293
1901
|
this.timeoutMs = options.timeoutMs ?? 3e4;
|
|
1294
1902
|
this.fetchImpl = options.fetch ?? fetch;
|
|
@@ -1323,7 +1931,7 @@ var TopoloClient = class {
|
|
|
1323
1931
|
const headers = new Headers();
|
|
1324
1932
|
headers.set("Accept", "application/json");
|
|
1325
1933
|
if (opts.body !== void 0) headers.set("Content-Type", "application/json");
|
|
1326
|
-
const platformServiceId =
|
|
1934
|
+
const platformServiceId = resolveConfiguredServiceId(opts.service, this.serviceIds);
|
|
1327
1935
|
if (platformServiceId) headers.set("X-Service-ID", platformServiceId);
|
|
1328
1936
|
applyAuthHeaders(headers, this.credential);
|
|
1329
1937
|
const requestId = generateRequestId();
|
|
@@ -1397,6 +2005,63 @@ var TopoloClient = class {
|
|
|
1397
2005
|
});
|
|
1398
2006
|
return parsed;
|
|
1399
2007
|
}
|
|
2008
|
+
/**
|
|
2009
|
+
* Resolve a service-slug → opaque service-id via caller config or TopoloAuth.
|
|
2010
|
+
*
|
|
2011
|
+
* Cache: 5 minutes per process per `(slug, auth_base_url)`. Negative
|
|
2012
|
+
* results (404) are cached for 60s so a typo doesn't hot-loop the
|
|
2013
|
+
* resolver. Returns null when the slug isn't registered — callers decide
|
|
2014
|
+
* whether to throw.
|
|
2015
|
+
*
|
|
2016
|
+
* No credential is sent: the endpoint is public (slugs aren't secret).
|
|
2017
|
+
* This keeps the resolver usable during early bootstrap before a caller
|
|
2018
|
+
* has acquired an access token.
|
|
2019
|
+
*/
|
|
2020
|
+
async getServiceIdBySlug(slug) {
|
|
2021
|
+
if (typeof slug !== "string") return null;
|
|
2022
|
+
const normalized = slug.trim().toLowerCase();
|
|
2023
|
+
if (!normalized) return null;
|
|
2024
|
+
const configuredServiceId = resolveConfiguredServiceId(normalized, this.serviceIds);
|
|
2025
|
+
if (configuredServiceId) return configuredServiceId;
|
|
2026
|
+
const authBase = resolveServiceUrl("auth", this.serviceUrls);
|
|
2027
|
+
const cacheKey = `${authBase}|${normalized}`;
|
|
2028
|
+
const now = Date.now();
|
|
2029
|
+
const cached = _TopoloClient.serviceIdCache.get(cacheKey);
|
|
2030
|
+
if (cached && cached.expiresAt > now) {
|
|
2031
|
+
return cached.value;
|
|
2032
|
+
}
|
|
2033
|
+
const url = new URL(
|
|
2034
|
+
`/api/services/by-slug/${encodeURIComponent(normalized)}`,
|
|
2035
|
+
authBase.endsWith("/") ? authBase : `${authBase}/`
|
|
2036
|
+
).toString();
|
|
2037
|
+
let res;
|
|
2038
|
+
try {
|
|
2039
|
+
res = await this.fetchImpl(url, {
|
|
2040
|
+
method: "GET",
|
|
2041
|
+
headers: { Accept: "application/json" }
|
|
2042
|
+
});
|
|
2043
|
+
} catch {
|
|
2044
|
+
return null;
|
|
2045
|
+
}
|
|
2046
|
+
if (res.status === 404) {
|
|
2047
|
+
_TopoloClient.serviceIdCache.set(cacheKey, {
|
|
2048
|
+
value: null,
|
|
2049
|
+
expiresAt: now + NEGATIVE_CACHE_TTL_MS
|
|
2050
|
+
});
|
|
2051
|
+
return null;
|
|
2052
|
+
}
|
|
2053
|
+
if (!res.ok) {
|
|
2054
|
+
return null;
|
|
2055
|
+
}
|
|
2056
|
+
const body = await res.json().catch(() => null);
|
|
2057
|
+
const serviceId = body?.data?.service_id;
|
|
2058
|
+
const value = typeof serviceId === "string" && serviceId ? serviceId : null;
|
|
2059
|
+
_TopoloClient.serviceIdCache.set(cacheKey, {
|
|
2060
|
+
value,
|
|
2061
|
+
expiresAt: now + POSITIVE_CACHE_TTL_MS
|
|
2062
|
+
});
|
|
2063
|
+
return value;
|
|
2064
|
+
}
|
|
1400
2065
|
/**
|
|
1401
2066
|
* Introspect the current credential. Returns the caller's resolved identity,
|
|
1402
2067
|
* organization, and permission set. Used by CLI `whoami` and by MCP to gate
|
|
@@ -1433,6 +2098,26 @@ var TopoloClient = class {
|
|
|
1433
2098
|
};
|
|
1434
2099
|
}
|
|
1435
2100
|
};
|
|
2101
|
+
function resolveConfiguredServiceId(slug, serviceIds) {
|
|
2102
|
+
for (const serviceKey of serviceKeyCandidates(slug)) {
|
|
2103
|
+
const configured = serviceIds?.[serviceKey];
|
|
2104
|
+
if (typeof configured === "string" && configured.trim()) return configured.trim();
|
|
2105
|
+
const envKey = `TOPOLO_SERVICE_ID_${serviceKey.replace(/\./g, "_").toUpperCase()}`;
|
|
2106
|
+
const envValue = typeof process !== "undefined" ? process.env?.[envKey] : void 0;
|
|
2107
|
+
if (typeof envValue === "string" && envValue.trim()) return envValue.trim();
|
|
2108
|
+
}
|
|
2109
|
+
return null;
|
|
2110
|
+
}
|
|
2111
|
+
function serviceKeyCandidates(slug) {
|
|
2112
|
+
const normalized = slug.trim().toLowerCase();
|
|
2113
|
+
const withoutTopolo = normalized.startsWith("topolo-") ? normalized.slice("topolo-".length) : normalized;
|
|
2114
|
+
return [.../* @__PURE__ */ new Set([
|
|
2115
|
+
normalized,
|
|
2116
|
+
normalized.replace(/-/g, "_"),
|
|
2117
|
+
withoutTopolo,
|
|
2118
|
+
withoutTopolo.replace(/-/g, "_")
|
|
2119
|
+
])];
|
|
2120
|
+
}
|
|
1436
2121
|
function describeError(body, fallback) {
|
|
1437
2122
|
if (body && typeof body === "object") {
|
|
1438
2123
|
const maybe = body;
|
|
@@ -1473,7 +2158,6 @@ var CrmModule = class {
|
|
|
1473
2158
|
}
|
|
1474
2159
|
client;
|
|
1475
2160
|
async listContacts(options = {}) {
|
|
1476
|
-
var _a, _b, _c;
|
|
1477
2161
|
const res = await this.client.request({
|
|
1478
2162
|
service: "crm",
|
|
1479
2163
|
path: "/api/contacts",
|
|
@@ -1483,12 +2167,12 @@ var CrmModule = class {
|
|
|
1483
2167
|
pageSize: options.pageSize
|
|
1484
2168
|
}
|
|
1485
2169
|
});
|
|
1486
|
-
const rows = Array.isArray(res
|
|
2170
|
+
const rows = Array.isArray(res?.contacts) ? res.contacts : Array.isArray(res?.data) ? res.data : [];
|
|
1487
2171
|
return {
|
|
1488
2172
|
contacts: rows.map(toSummary),
|
|
1489
|
-
total:
|
|
1490
|
-
page:
|
|
1491
|
-
pageSize:
|
|
2173
|
+
total: res?.total ?? res?.pagination?.total ?? rows.length,
|
|
2174
|
+
page: res?.page ?? res?.pagination?.page ?? options.page ?? 1,
|
|
2175
|
+
pageSize: res?.pageSize ?? res?.pagination?.pageSize ?? options.pageSize ?? rows.length
|
|
1492
2176
|
};
|
|
1493
2177
|
}
|
|
1494
2178
|
async getContact(contactId) {
|
|
@@ -1920,7 +2604,7 @@ function statusesAtOrWorse(threshold) {
|
|
|
1920
2604
|
}
|
|
1921
2605
|
|
|
1922
2606
|
// src/version.ts
|
|
1923
|
-
var MCP_VERSION = "0.
|
|
2607
|
+
var MCP_VERSION = "0.3.0";
|
|
1924
2608
|
|
|
1925
2609
|
// src/server.ts
|
|
1926
2610
|
function buildServer(topolo, scopes, tools = TOOLS) {
|