@topolo/sdk 0.9.9 → 0.10.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/README.md +21 -16
- package/dist/index.cjs +248 -62
- package/dist/index.d.cts +191 -67
- package/dist/index.d.ts +191 -67
- package/dist/index.js +240 -62
- package/dist/node/credential-store.cjs +2 -51
- package/dist/node/credential-store.js +2 -51
- package/package.json +3 -6
package/dist/index.js
CHANGED
|
@@ -101,62 +101,13 @@ var TopoloHttpError = class extends TopoloSdkError {
|
|
|
101
101
|
}
|
|
102
102
|
};
|
|
103
103
|
|
|
104
|
-
// src/services.
|
|
104
|
+
// src/bootstrap-services.ts
|
|
105
105
|
var APP_API_URLS = {
|
|
106
|
-
agent: "https://agent.topolo.app",
|
|
107
106
|
auth: "https://auth.topolo.app",
|
|
108
|
-
|
|
109
|
-
blog: "https://blog.topolo.app",
|
|
110
|
-
books: "https://books.topolo.app",
|
|
111
|
-
brand: "https://brand.topolo.app",
|
|
112
|
-
bugfix: "https://bugfix.topolo.app",
|
|
113
|
-
bytes: "https://bytes.topolo.app",
|
|
114
|
-
calendar: "https://calendar.topolo.app",
|
|
115
|
-
campaigns: "https://campaigns.topolo.app",
|
|
116
|
-
capacity: "https://capacity.topolo.app",
|
|
117
|
-
chat: "https://chat.topolo.app",
|
|
118
|
-
commerce: "https://commerce.topolo.app",
|
|
119
|
-
compose: "https://compose.topolo.app",
|
|
120
|
-
consent: "https://consent.topolo.app",
|
|
121
|
-
crm: "https://crm.topolo.app",
|
|
122
|
-
design: "https://design.topolo.app",
|
|
123
|
-
developers: "https://developers.topolo.app",
|
|
124
|
-
director: "https://director.topolo.app",
|
|
125
|
-
feed: "https://feed.topolo.app",
|
|
126
|
-
flow: "https://flow.topolo.app",
|
|
127
|
-
forecast: "https://forecast.topolo.app",
|
|
128
|
-
forms: "https://forms.topolo.app",
|
|
129
|
-
home: "https://home.topolo.app",
|
|
130
|
-
insights: "https://insights.topolo.app",
|
|
131
|
-
inventory: "https://inventory.topolo.app",
|
|
132
|
-
learn: "https://learn.topolo.app",
|
|
133
|
-
localize: "https://localize.topolo.app",
|
|
134
|
-
mail: "https://mail.topolo.app",
|
|
135
|
-
mdm: "https://mdm.topolo.app",
|
|
136
|
-
messages: "https://messages.topolo.app",
|
|
137
|
-
nexus: "https://nexus.topolo.app",
|
|
138
|
-
notify: "https://notify.topolo.app",
|
|
139
|
-
observability_watch: "https://observability-watch.topolo.app",
|
|
140
|
-
one: "https://www.topolo.app",
|
|
141
|
-
p2p: "https://p2p.topolo.app",
|
|
142
|
-
pay: "https://pay.topolo.app",
|
|
143
|
-
people: "https://people.topolo.app",
|
|
144
|
-
"quro.api": "https://api.ol0.me",
|
|
145
|
-
"quro.redirect": "https://ol0.me",
|
|
146
|
-
roadmapper: "https://roadmapper.topolo.app",
|
|
147
|
-
sign: "https://sign.topolo.app",
|
|
148
|
-
social_studio: "https://studio.topolo.app",
|
|
149
|
-
socialize: "https://socialize.topolo.app",
|
|
150
|
-
spaces: "https://spaces.topolo.app",
|
|
151
|
-
status: "https://status.topolo.app",
|
|
152
|
-
success: "https://success.topolo.app",
|
|
153
|
-
support: "https://support.topolo.app",
|
|
154
|
-
survey: "https://survey.topolo.app",
|
|
155
|
-
voice: "https://voice.topolo.app",
|
|
156
|
-
web: "https://web.topolo.app"
|
|
107
|
+
developers: "https://developers.topolo.app"
|
|
157
108
|
};
|
|
158
109
|
|
|
159
|
-
// src/applications.
|
|
110
|
+
// src/applications-fallback.ts
|
|
160
111
|
var APPLICATIONS = {
|
|
161
112
|
"admin": {
|
|
162
113
|
"id": "admin",
|
|
@@ -1882,8 +1833,148 @@ var APPLICATIONS = {
|
|
|
1882
1833
|
}
|
|
1883
1834
|
};
|
|
1884
1835
|
|
|
1836
|
+
// src/application-directory.ts
|
|
1837
|
+
function friendlyAppId(entry) {
|
|
1838
|
+
for (const value of [entry.slug, entry.name, entry.appId]) {
|
|
1839
|
+
if (typeof value !== "string" || !value.trim()) continue;
|
|
1840
|
+
const normalized = value.trim().toLowerCase().replace(/\s+/g, "-");
|
|
1841
|
+
const withoutPrefix = normalized.replace(/^(?:app[_-])?topolo[-_]+/, "");
|
|
1842
|
+
if (withoutPrefix) return withoutPrefix;
|
|
1843
|
+
}
|
|
1844
|
+
return entry.appId;
|
|
1845
|
+
}
|
|
1846
|
+
function idVariants(value) {
|
|
1847
|
+
const normalized = value.trim().toLowerCase().replace(/\s+/g, "-");
|
|
1848
|
+
return [.../* @__PURE__ */ new Set([
|
|
1849
|
+
normalized,
|
|
1850
|
+
normalized.replace(/-/g, "_"),
|
|
1851
|
+
normalized.replace(/_/g, "-")
|
|
1852
|
+
])].filter(Boolean);
|
|
1853
|
+
}
|
|
1854
|
+
var STATIC_APPLICATIONS = APPLICATIONS;
|
|
1855
|
+
function staticApplicationForId(id) {
|
|
1856
|
+
for (const variant of idVariants(id)) {
|
|
1857
|
+
const entry = STATIC_APPLICATIONS[variant];
|
|
1858
|
+
if (entry) return entry;
|
|
1859
|
+
}
|
|
1860
|
+
return null;
|
|
1861
|
+
}
|
|
1862
|
+
function applicationEntryFromCatalog(live) {
|
|
1863
|
+
const id = friendlyAppId(live);
|
|
1864
|
+
return {
|
|
1865
|
+
id,
|
|
1866
|
+
appDir: "-",
|
|
1867
|
+
name: live.name ?? live.slug ?? live.appId,
|
|
1868
|
+
packageName: null,
|
|
1869
|
+
productionUrl: live.launchUrl ?? live.apiBaseUrl ?? null,
|
|
1870
|
+
services: live.apiBaseUrl ? [id] : [],
|
|
1871
|
+
deployTargets: []
|
|
1872
|
+
};
|
|
1873
|
+
}
|
|
1874
|
+
var DIRECTORY_PAGE_LIMIT = 100;
|
|
1875
|
+
var DIRECTORY_MAX_PAGES = 100;
|
|
1876
|
+
function staticApplicationDirectory() {
|
|
1877
|
+
const applications = Object.entries(STATIC_APPLICATIONS).map(([id, application]) => ({
|
|
1878
|
+
id,
|
|
1879
|
+
application,
|
|
1880
|
+
source: "static",
|
|
1881
|
+
live: null
|
|
1882
|
+
})).sort((left, right) => left.id.localeCompare(right.id));
|
|
1883
|
+
return { source: "static_fallback", applications };
|
|
1884
|
+
}
|
|
1885
|
+
function directoryApplicationFromLive(live) {
|
|
1886
|
+
const id = friendlyAppId(live);
|
|
1887
|
+
return {
|
|
1888
|
+
id,
|
|
1889
|
+
// Prefer the static snapshot's richer repo/deploy metadata when the live
|
|
1890
|
+
// registry confirms the app; synthesize from the live entry otherwise.
|
|
1891
|
+
application: staticApplicationForId(id) ?? applicationEntryFromCatalog(live),
|
|
1892
|
+
source: "live",
|
|
1893
|
+
live
|
|
1894
|
+
};
|
|
1895
|
+
}
|
|
1896
|
+
async function listApplicationDirectory(client) {
|
|
1897
|
+
if (!client) return staticApplicationDirectory();
|
|
1898
|
+
let services;
|
|
1899
|
+
try {
|
|
1900
|
+
services = [];
|
|
1901
|
+
let cursor;
|
|
1902
|
+
for (let page = 0; page < DIRECTORY_MAX_PAGES; page += 1) {
|
|
1903
|
+
const result = await client.searchServices({
|
|
1904
|
+
...cursor ? { cursor } : {},
|
|
1905
|
+
limit: DIRECTORY_PAGE_LIMIT
|
|
1906
|
+
});
|
|
1907
|
+
services.push(...result.services);
|
|
1908
|
+
if (!result.page.nextCursor) break;
|
|
1909
|
+
cursor = result.page.nextCursor;
|
|
1910
|
+
}
|
|
1911
|
+
} catch {
|
|
1912
|
+
return staticApplicationDirectory();
|
|
1913
|
+
}
|
|
1914
|
+
const seen = /* @__PURE__ */ new Map();
|
|
1915
|
+
for (const live of services) {
|
|
1916
|
+
const entry = directoryApplicationFromLive(live);
|
|
1917
|
+
if (!seen.has(entry.id)) seen.set(entry.id, entry);
|
|
1918
|
+
}
|
|
1919
|
+
return {
|
|
1920
|
+
source: "live",
|
|
1921
|
+
applications: [...seen.values()].sort((left, right) => left.id.localeCompare(right.id))
|
|
1922
|
+
};
|
|
1923
|
+
}
|
|
1924
|
+
function matchesDirectoryApplication(app, needle) {
|
|
1925
|
+
const candidates = new Set(idVariants(needle));
|
|
1926
|
+
const keys = [
|
|
1927
|
+
app.id,
|
|
1928
|
+
app.application.id,
|
|
1929
|
+
app.application.name,
|
|
1930
|
+
app.live?.appId,
|
|
1931
|
+
app.live?.slug,
|
|
1932
|
+
app.live?.name
|
|
1933
|
+
];
|
|
1934
|
+
for (const key of keys) {
|
|
1935
|
+
if (typeof key !== "string" || !key.trim()) continue;
|
|
1936
|
+
for (const variant of idVariants(key)) {
|
|
1937
|
+
if (candidates.has(variant)) return true;
|
|
1938
|
+
}
|
|
1939
|
+
for (const variant of idVariants(friendlyAppId({ appId: key }))) {
|
|
1940
|
+
if (candidates.has(variant)) return true;
|
|
1941
|
+
}
|
|
1942
|
+
}
|
|
1943
|
+
return false;
|
|
1944
|
+
}
|
|
1945
|
+
function formatDirectoryApplicationIds(directory) {
|
|
1946
|
+
const ids = directory.applications.map((app) => app.id).sort();
|
|
1947
|
+
const preview = ids.slice(0, 50).join(", ");
|
|
1948
|
+
const suffix = ids.length > 50 ? `, ... +${ids.length - 50} more` : "";
|
|
1949
|
+
const label = directory.source === "live" ? "Applications available to this credential" : "Applications in the bundled static snapshot (live registry unreachable)";
|
|
1950
|
+
return `${label}: ${preview}${suffix}`;
|
|
1951
|
+
}
|
|
1952
|
+
async function resolveApplicationDirectoryEntry(client, application) {
|
|
1953
|
+
const needle = typeof application === "string" ? application.trim() : "";
|
|
1954
|
+
if (!needle) {
|
|
1955
|
+
throw new TopoloSdkError("unknown_application", "application is required");
|
|
1956
|
+
}
|
|
1957
|
+
if (client) {
|
|
1958
|
+
let live = null;
|
|
1959
|
+
try {
|
|
1960
|
+
live = await client.getService(needle);
|
|
1961
|
+
} catch {
|
|
1962
|
+
live = null;
|
|
1963
|
+
}
|
|
1964
|
+
if (live) return directoryApplicationFromLive(live);
|
|
1965
|
+
}
|
|
1966
|
+
const directory = await listApplicationDirectory(client);
|
|
1967
|
+
const match = directory.applications.find((app) => matchesDirectoryApplication(app, needle));
|
|
1968
|
+
if (match) return match;
|
|
1969
|
+
throw new TopoloSdkError(
|
|
1970
|
+
"unknown_application",
|
|
1971
|
+
`Unknown application "${application}". ${formatDirectoryApplicationIds(directory)}`
|
|
1972
|
+
);
|
|
1973
|
+
}
|
|
1974
|
+
|
|
1885
1975
|
// src/application-requirements.ts
|
|
1886
|
-
var
|
|
1976
|
+
var STATIC_APPLICATIONS2 = APPLICATIONS;
|
|
1977
|
+
var APPLICATION_REQUIREMENTS_VERSION = "2026-08-11.1";
|
|
1887
1978
|
var APPLICATION_REQUIREMENTS = [
|
|
1888
1979
|
{
|
|
1889
1980
|
id: "platform-metadata",
|
|
@@ -1893,10 +1984,10 @@ var APPLICATION_REQUIREMENTS = [
|
|
|
1893
1984
|
evidence: [
|
|
1894
1985
|
"topolo.cloudcontrol.json exists for every deployed app surface",
|
|
1895
1986
|
"package.json names the package or app when the repo ships code",
|
|
1896
|
-
"The
|
|
1987
|
+
"The live platform registry exposes the app through topolo apps and MCP discovery"
|
|
1897
1988
|
],
|
|
1898
1989
|
implementation: [
|
|
1899
|
-
"
|
|
1990
|
+
"Register the app in the live platform registry (Auth service catalog) before exposing it to agents",
|
|
1900
1991
|
"Keep production URLs, Worker names, Pages projects, routes, domains, and bindings current in CloudControl metadata",
|
|
1901
1992
|
"Do not leave a new Topolo* app directory without an explicit application ID"
|
|
1902
1993
|
]
|
|
@@ -1971,7 +2062,7 @@ var APPLICATION_REQUIREMENTS = [
|
|
|
1971
2062
|
implementation: [
|
|
1972
2063
|
"Add production Worker api_url metadata and sdk_app_id for every agent-callable API target",
|
|
1973
2064
|
"Mark browser, documentation, and runtime-only Worker targets with agent_callable:false",
|
|
1974
|
-
"Expose stable app IDs through
|
|
2065
|
+
"Expose stable app IDs through live catalog discovery",
|
|
1975
2066
|
"Keep typed SDK/CLI/MCP surfaces in sync when an API contract stabilizes"
|
|
1976
2067
|
]
|
|
1977
2068
|
},
|
|
@@ -2091,15 +2182,24 @@ function applicationRequirementScopes(application) {
|
|
|
2091
2182
|
}
|
|
2092
2183
|
return Array.from(scopes);
|
|
2093
2184
|
}
|
|
2185
|
+
function fallbackApplication(id) {
|
|
2186
|
+
const entry = STATIC_APPLICATIONS2[id];
|
|
2187
|
+
if (!entry) {
|
|
2188
|
+
throw new Error(
|
|
2189
|
+
`Unknown application "${id}" in the static fallback snapshot. Resolve applications from the live registry (resolveApplicationDirectoryEntry) and pass the entry directly.`
|
|
2190
|
+
);
|
|
2191
|
+
}
|
|
2192
|
+
return entry;
|
|
2193
|
+
}
|
|
2094
2194
|
function requirementsForApplication(applicationOrId) {
|
|
2095
|
-
const application = typeof applicationOrId === "string" ?
|
|
2195
|
+
const application = typeof applicationOrId === "string" ? fallbackApplication(applicationOrId) : applicationOrId;
|
|
2096
2196
|
const scopes = new Set(applicationRequirementScopes(application));
|
|
2097
2197
|
return APPLICATION_REQUIREMENTS.filter(
|
|
2098
2198
|
(requirement) => requirement.appliesTo.some((scope) => scopes.has(scope))
|
|
2099
2199
|
);
|
|
2100
2200
|
}
|
|
2101
2201
|
function auditApplicationRequirements(applicationOrId) {
|
|
2102
|
-
const application = typeof applicationOrId === "string" ?
|
|
2202
|
+
const application = typeof applicationOrId === "string" ? fallbackApplication(applicationOrId) : applicationOrId;
|
|
2103
2203
|
const scopes = applicationRequirementScopes(application);
|
|
2104
2204
|
const findings = requirementsForApplication(application).map(
|
|
2105
2205
|
(requirement) => evaluateRequirement(application, requirement)
|
|
@@ -2112,10 +2212,17 @@ function auditApplicationRequirements(applicationOrId) {
|
|
|
2112
2212
|
findings
|
|
2113
2213
|
};
|
|
2114
2214
|
}
|
|
2215
|
+
function auditApplicationEntries(applications) {
|
|
2216
|
+
return buildAuditReport(
|
|
2217
|
+
applications.map((application) => auditApplicationRequirements(application))
|
|
2218
|
+
);
|
|
2219
|
+
}
|
|
2115
2220
|
function auditAllApplicationRequirements(applicationIds = Object.keys(APPLICATIONS).sort()) {
|
|
2116
|
-
|
|
2117
|
-
(applicationId) => auditApplicationRequirements(applicationId)
|
|
2221
|
+
return buildAuditReport(
|
|
2222
|
+
applicationIds.map((applicationId) => auditApplicationRequirements(applicationId))
|
|
2118
2223
|
);
|
|
2224
|
+
}
|
|
2225
|
+
function buildAuditReport(applications) {
|
|
2119
2226
|
const migrationQueue = applications.flatMap(
|
|
2120
2227
|
(audit) => audit.findings.filter((finding2) => finding2.status !== "met").map((finding2) => ({
|
|
2121
2228
|
applicationId: audit.application.id,
|
|
@@ -3426,8 +3533,9 @@ var TopoloClient = class _TopoloClient {
|
|
|
3426
3533
|
});
|
|
3427
3534
|
}
|
|
3428
3535
|
/**
|
|
3429
|
-
*
|
|
3430
|
-
*
|
|
3536
|
+
* @deprecated Static fallback snapshot only. Use `searchServices()` (the
|
|
3537
|
+
* live credential-scoped registry) for anything that decides behavior; this
|
|
3538
|
+
* exists for offline packaging audits when the registry is unreachable.
|
|
3431
3539
|
*/
|
|
3432
3540
|
listBundledServices() {
|
|
3433
3541
|
const apps = Object.values(APPLICATIONS);
|
|
@@ -4223,6 +4331,67 @@ var IdentityModule = class {
|
|
|
4223
4331
|
}
|
|
4224
4332
|
};
|
|
4225
4333
|
|
|
4334
|
+
// src/modules/workspaces.ts
|
|
4335
|
+
var ACTIONS = {
|
|
4336
|
+
list: "app_topolo_auth.workspaces.list",
|
|
4337
|
+
create: "app_topolo_auth.workspaces.create",
|
|
4338
|
+
rename: "app_topolo_auth.workspaces.rename",
|
|
4339
|
+
setDefault: "app_topolo_auth.workspaces.default.set"
|
|
4340
|
+
};
|
|
4341
|
+
var WorkspacesModule = class {
|
|
4342
|
+
constructor(client) {
|
|
4343
|
+
this.client = client;
|
|
4344
|
+
}
|
|
4345
|
+
client;
|
|
4346
|
+
async list(application) {
|
|
4347
|
+
const context = await this.resolveContext(application);
|
|
4348
|
+
return this.client.callAction(ACTIONS.list, {
|
|
4349
|
+
org_id: context.organizationId,
|
|
4350
|
+
app_id: context.appId
|
|
4351
|
+
});
|
|
4352
|
+
}
|
|
4353
|
+
async create(application, input) {
|
|
4354
|
+
const current = await this.list(application);
|
|
4355
|
+
if (!current.data.policy.canCreate) {
|
|
4356
|
+
throw new TopoloSdkError(
|
|
4357
|
+
"workspace_creation_not_allowed",
|
|
4358
|
+
`Workspace creation is not allowed for ${current.data.appId}: ${current.data.policy.reason}`
|
|
4359
|
+
);
|
|
4360
|
+
}
|
|
4361
|
+
return this.client.callAction(ACTIONS.create, {
|
|
4362
|
+
organizationId: current.data.organizationId,
|
|
4363
|
+
appId: current.data.appId,
|
|
4364
|
+
name: input.name,
|
|
4365
|
+
...input.isDefault === void 0 ? {} : { isDefault: input.isDefault }
|
|
4366
|
+
}, { confirm: input.confirm === true });
|
|
4367
|
+
}
|
|
4368
|
+
async rename(application, workspaceId, name, confirm = false) {
|
|
4369
|
+
const context = await this.resolveContext(application);
|
|
4370
|
+
return this.client.callAction(ACTIONS.rename, {
|
|
4371
|
+
workspaceId,
|
|
4372
|
+
organizationId: context.organizationId,
|
|
4373
|
+
appId: context.appId,
|
|
4374
|
+
name
|
|
4375
|
+
}, { confirm });
|
|
4376
|
+
}
|
|
4377
|
+
async setDefault(application, workspaceId, confirm = false) {
|
|
4378
|
+
const context = await this.resolveContext(application);
|
|
4379
|
+
return this.client.callAction(ACTIONS.setDefault, {
|
|
4380
|
+
workspaceId,
|
|
4381
|
+
organizationId: context.organizationId,
|
|
4382
|
+
appId: context.appId
|
|
4383
|
+
}, { confirm });
|
|
4384
|
+
}
|
|
4385
|
+
async resolveContext(application) {
|
|
4386
|
+
const identity = await this.client.introspect();
|
|
4387
|
+
if (!identity.organization?.id) {
|
|
4388
|
+
throw new TopoloSdkError("organization_required", "Workspace lifecycle requires an organization-scoped credential.");
|
|
4389
|
+
}
|
|
4390
|
+
const service = await this.client.getService(application);
|
|
4391
|
+
return { organizationId: identity.organization.id, appId: service.appId };
|
|
4392
|
+
}
|
|
4393
|
+
};
|
|
4394
|
+
|
|
4226
4395
|
// src/modules/p2p.ts
|
|
4227
4396
|
var P2PModule = class {
|
|
4228
4397
|
constructor(client) {
|
|
@@ -4681,6 +4850,7 @@ function createTopolo(options) {
|
|
|
4681
4850
|
return {
|
|
4682
4851
|
client,
|
|
4683
4852
|
identity: new IdentityModule(client),
|
|
4853
|
+
workspaces: new WorkspacesModule(client),
|
|
4684
4854
|
crm: new CrmModule(client)
|
|
4685
4855
|
};
|
|
4686
4856
|
}
|
|
@@ -4702,9 +4872,12 @@ export {
|
|
|
4702
4872
|
TopoloOAuth,
|
|
4703
4873
|
TopoloPermissionError,
|
|
4704
4874
|
TopoloSdkError,
|
|
4875
|
+
WorkspacesModule,
|
|
4705
4876
|
actionContractCompleteness,
|
|
4877
|
+
applicationEntryFromCatalog,
|
|
4706
4878
|
applicationRequirementScopes,
|
|
4707
4879
|
auditAllApplicationRequirements,
|
|
4880
|
+
auditApplicationEntries,
|
|
4708
4881
|
auditApplicationRequirements,
|
|
4709
4882
|
createTopolo,
|
|
4710
4883
|
createTopoloWidgetError,
|
|
@@ -4716,12 +4889,17 @@ export {
|
|
|
4716
4889
|
defineTopoloStatsWidget,
|
|
4717
4890
|
digestTopoloActionCatalog,
|
|
4718
4891
|
enrichActionContract,
|
|
4892
|
+
formatDirectoryApplicationIds,
|
|
4893
|
+
friendlyAppId,
|
|
4894
|
+
listApplicationDirectory,
|
|
4719
4895
|
parseTopoloActionUploadContract,
|
|
4720
4896
|
prepareTopoloActionBase64UploadInput,
|
|
4721
4897
|
prepareTopoloActionUploadInput,
|
|
4722
4898
|
requirementsForApplication,
|
|
4899
|
+
resolveApplicationDirectoryEntry,
|
|
4723
4900
|
resolveCatalogServiceUrl,
|
|
4724
4901
|
resolveServiceUrl,
|
|
4902
|
+
staticApplicationDirectory,
|
|
4725
4903
|
validateTopoloActionInput,
|
|
4726
4904
|
validateTopoloWidgetResponse
|
|
4727
4905
|
};
|
|
@@ -105,59 +105,10 @@ var TopoloHttpError = class extends TopoloSdkError {
|
|
|
105
105
|
}
|
|
106
106
|
};
|
|
107
107
|
|
|
108
|
-
// src/services.
|
|
108
|
+
// src/bootstrap-services.ts
|
|
109
109
|
var APP_API_URLS = {
|
|
110
|
-
agent: "https://agent.topolo.app",
|
|
111
110
|
auth: "https://auth.topolo.app",
|
|
112
|
-
|
|
113
|
-
blog: "https://blog.topolo.app",
|
|
114
|
-
books: "https://books.topolo.app",
|
|
115
|
-
brand: "https://brand.topolo.app",
|
|
116
|
-
bugfix: "https://bugfix.topolo.app",
|
|
117
|
-
bytes: "https://bytes.topolo.app",
|
|
118
|
-
calendar: "https://calendar.topolo.app",
|
|
119
|
-
campaigns: "https://campaigns.topolo.app",
|
|
120
|
-
capacity: "https://capacity.topolo.app",
|
|
121
|
-
chat: "https://chat.topolo.app",
|
|
122
|
-
commerce: "https://commerce.topolo.app",
|
|
123
|
-
compose: "https://compose.topolo.app",
|
|
124
|
-
consent: "https://consent.topolo.app",
|
|
125
|
-
crm: "https://crm.topolo.app",
|
|
126
|
-
design: "https://design.topolo.app",
|
|
127
|
-
developers: "https://developers.topolo.app",
|
|
128
|
-
director: "https://director.topolo.app",
|
|
129
|
-
feed: "https://feed.topolo.app",
|
|
130
|
-
flow: "https://flow.topolo.app",
|
|
131
|
-
forecast: "https://forecast.topolo.app",
|
|
132
|
-
forms: "https://forms.topolo.app",
|
|
133
|
-
home: "https://home.topolo.app",
|
|
134
|
-
insights: "https://insights.topolo.app",
|
|
135
|
-
inventory: "https://inventory.topolo.app",
|
|
136
|
-
learn: "https://learn.topolo.app",
|
|
137
|
-
localize: "https://localize.topolo.app",
|
|
138
|
-
mail: "https://mail.topolo.app",
|
|
139
|
-
mdm: "https://mdm.topolo.app",
|
|
140
|
-
messages: "https://messages.topolo.app",
|
|
141
|
-
nexus: "https://nexus.topolo.app",
|
|
142
|
-
notify: "https://notify.topolo.app",
|
|
143
|
-
observability_watch: "https://observability-watch.topolo.app",
|
|
144
|
-
one: "https://www.topolo.app",
|
|
145
|
-
p2p: "https://p2p.topolo.app",
|
|
146
|
-
pay: "https://pay.topolo.app",
|
|
147
|
-
people: "https://people.topolo.app",
|
|
148
|
-
"quro.api": "https://api.ol0.me",
|
|
149
|
-
"quro.redirect": "https://ol0.me",
|
|
150
|
-
roadmapper: "https://roadmapper.topolo.app",
|
|
151
|
-
sign: "https://sign.topolo.app",
|
|
152
|
-
social_studio: "https://studio.topolo.app",
|
|
153
|
-
socialize: "https://socialize.topolo.app",
|
|
154
|
-
spaces: "https://spaces.topolo.app",
|
|
155
|
-
status: "https://status.topolo.app",
|
|
156
|
-
success: "https://success.topolo.app",
|
|
157
|
-
support: "https://support.topolo.app",
|
|
158
|
-
survey: "https://survey.topolo.app",
|
|
159
|
-
voice: "https://voice.topolo.app",
|
|
160
|
-
web: "https://web.topolo.app"
|
|
111
|
+
developers: "https://developers.topolo.app"
|
|
161
112
|
};
|
|
162
113
|
|
|
163
114
|
// src/services.ts
|
|
@@ -61,59 +61,10 @@ var TopoloHttpError = class extends TopoloSdkError {
|
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
// src/services.
|
|
64
|
+
// src/bootstrap-services.ts
|
|
65
65
|
var APP_API_URLS = {
|
|
66
|
-
agent: "https://agent.topolo.app",
|
|
67
66
|
auth: "https://auth.topolo.app",
|
|
68
|
-
|
|
69
|
-
blog: "https://blog.topolo.app",
|
|
70
|
-
books: "https://books.topolo.app",
|
|
71
|
-
brand: "https://brand.topolo.app",
|
|
72
|
-
bugfix: "https://bugfix.topolo.app",
|
|
73
|
-
bytes: "https://bytes.topolo.app",
|
|
74
|
-
calendar: "https://calendar.topolo.app",
|
|
75
|
-
campaigns: "https://campaigns.topolo.app",
|
|
76
|
-
capacity: "https://capacity.topolo.app",
|
|
77
|
-
chat: "https://chat.topolo.app",
|
|
78
|
-
commerce: "https://commerce.topolo.app",
|
|
79
|
-
compose: "https://compose.topolo.app",
|
|
80
|
-
consent: "https://consent.topolo.app",
|
|
81
|
-
crm: "https://crm.topolo.app",
|
|
82
|
-
design: "https://design.topolo.app",
|
|
83
|
-
developers: "https://developers.topolo.app",
|
|
84
|
-
director: "https://director.topolo.app",
|
|
85
|
-
feed: "https://feed.topolo.app",
|
|
86
|
-
flow: "https://flow.topolo.app",
|
|
87
|
-
forecast: "https://forecast.topolo.app",
|
|
88
|
-
forms: "https://forms.topolo.app",
|
|
89
|
-
home: "https://home.topolo.app",
|
|
90
|
-
insights: "https://insights.topolo.app",
|
|
91
|
-
inventory: "https://inventory.topolo.app",
|
|
92
|
-
learn: "https://learn.topolo.app",
|
|
93
|
-
localize: "https://localize.topolo.app",
|
|
94
|
-
mail: "https://mail.topolo.app",
|
|
95
|
-
mdm: "https://mdm.topolo.app",
|
|
96
|
-
messages: "https://messages.topolo.app",
|
|
97
|
-
nexus: "https://nexus.topolo.app",
|
|
98
|
-
notify: "https://notify.topolo.app",
|
|
99
|
-
observability_watch: "https://observability-watch.topolo.app",
|
|
100
|
-
one: "https://www.topolo.app",
|
|
101
|
-
p2p: "https://p2p.topolo.app",
|
|
102
|
-
pay: "https://pay.topolo.app",
|
|
103
|
-
people: "https://people.topolo.app",
|
|
104
|
-
"quro.api": "https://api.ol0.me",
|
|
105
|
-
"quro.redirect": "https://ol0.me",
|
|
106
|
-
roadmapper: "https://roadmapper.topolo.app",
|
|
107
|
-
sign: "https://sign.topolo.app",
|
|
108
|
-
social_studio: "https://studio.topolo.app",
|
|
109
|
-
socialize: "https://socialize.topolo.app",
|
|
110
|
-
spaces: "https://spaces.topolo.app",
|
|
111
|
-
status: "https://status.topolo.app",
|
|
112
|
-
success: "https://success.topolo.app",
|
|
113
|
-
support: "https://support.topolo.app",
|
|
114
|
-
survey: "https://survey.topolo.app",
|
|
115
|
-
voice: "https://voice.topolo.app",
|
|
116
|
-
web: "https://web.topolo.app"
|
|
67
|
+
developers: "https://developers.topolo.app"
|
|
117
68
|
};
|
|
118
69
|
|
|
119
70
|
// src/services.ts
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@topolo/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"topoloPublishedVersion": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
|
+
"topoloPublishedVersion": "0.10.0",
|
|
5
5
|
"description": "Typed client SDK for the Topolo platform. Used by TopoloCli, TopoloMCP, and third-party agents.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -23,12 +23,9 @@
|
|
|
23
23
|
"dist"
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
|
-
"generate:services": "node scripts/generate-services.mjs",
|
|
27
|
-
"check:generated": "node scripts/check-generated.mjs",
|
|
28
|
-
"prebuild": "node scripts/generate-services.mjs",
|
|
29
26
|
"build": "tsup src/index.ts --format esm,cjs --dts --clean && tsup src/node/credential-store.ts --format esm,cjs --dts --out-dir dist/node",
|
|
30
27
|
"dev": "tsup src/index.ts --format esm,cjs --dts --watch",
|
|
31
|
-
"typecheck": "
|
|
28
|
+
"typecheck": "tsc --noEmit",
|
|
32
29
|
"test": "vitest run",
|
|
33
30
|
"test:watch": "vitest",
|
|
34
31
|
"prepublishOnly": "npm run build && npm run verify:package",
|