@hoststack.dev/sdk 0.1.1 → 0.2.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/index.d.ts CHANGED
@@ -104,7 +104,7 @@ interface DatabaseCredentials {
104
104
  }
105
105
  interface Domain {
106
106
  id: number;
107
- publicId?: string;
107
+ publicId: string;
108
108
  domain: string;
109
109
  status: string;
110
110
  verified: boolean;
@@ -120,7 +120,7 @@ interface UpdateDomainInput {
120
120
  }
121
121
  interface EnvVar {
122
122
  id: number;
123
- publicId?: string;
123
+ publicId: string;
124
124
  key: string;
125
125
  value: string;
126
126
  isSecret: boolean;
@@ -150,6 +150,7 @@ interface User {
150
150
  }
151
151
  interface Team {
152
152
  id: number;
153
+ publicId: string;
153
154
  name: string;
154
155
  slug: string;
155
156
  role: string;
@@ -189,17 +190,17 @@ declare class CronResource {
189
190
  private client;
190
191
  constructor(client: HostStack);
191
192
  /** List cron executions for a service. */
192
- list(teamId: number, serviceId: string, options?: {
193
+ list(teamId: IdInput, serviceId: IdInput, options?: {
193
194
  limit?: number;
194
195
  }): Promise<{
195
196
  executions: CronExecution[];
196
197
  }>;
197
198
  /** Get a single cron execution by ID. */
198
- get(teamId: number, serviceId: string, executionId: string): Promise<{
199
+ get(teamId: IdInput, serviceId: IdInput, executionId: IdInput): Promise<{
199
200
  execution: CronExecution;
200
201
  }>;
201
202
  /** Trigger an immediate cron execution. */
202
- trigger(teamId: number, serviceId: string): Promise<{
203
+ trigger(teamId: IdInput, serviceId: IdInput): Promise<{
203
204
  execution: CronExecution;
204
205
  }>;
205
206
  }
@@ -208,56 +209,56 @@ declare class DatabasesResource {
208
209
  private client;
209
210
  constructor(client: HostStack);
210
211
  /** List all databases for a project. */
211
- list(teamId: number, projectId: number): Promise<{
212
+ list(teamId: IdInput, projectId: IdInput): Promise<{
212
213
  databases: Database[];
213
214
  }>;
214
215
  /** Get a single database by ID. */
215
- get(teamId: number, databaseId: string): Promise<{
216
+ get(teamId: IdInput, databaseId: IdInput): Promise<{
216
217
  database: Database;
217
218
  }>;
218
219
  /** Create a new database. */
219
- create(teamId: number, data: CreateDatabaseInput): Promise<{
220
+ create(teamId: IdInput, data: CreateDatabaseInput): Promise<{
220
221
  database: Database;
221
222
  }>;
222
223
  /** Update a database. */
223
- update(teamId: number, databaseId: string, data: UpdateDatabaseInput): Promise<{
224
+ update(teamId: IdInput, databaseId: IdInput, data: UpdateDatabaseInput): Promise<{
224
225
  database: Database;
225
226
  }>;
226
227
  /** Delete a database. */
227
- delete(teamId: number, databaseId: string): Promise<void>;
228
+ delete(teamId: IdInput, databaseId: IdInput): Promise<void>;
228
229
  /** Suspend a database. */
229
- suspend(teamId: number, databaseId: string): Promise<void>;
230
+ suspend(teamId: IdInput, databaseId: IdInput): Promise<void>;
230
231
  /** Resume a suspended database. */
231
- resume(teamId: number, databaseId: string): Promise<void>;
232
+ resume(teamId: IdInput, databaseId: IdInput): Promise<void>;
232
233
  /** Get connection credentials. */
233
- getCredentials(teamId: number, databaseId: string): Promise<{
234
+ getCredentials(teamId: IdInput, databaseId: IdInput): Promise<{
234
235
  credentials: DatabaseCredentials;
235
236
  }>;
236
237
  /** Reset the database password. */
237
- resetPassword(teamId: number, databaseId: string): Promise<void>;
238
+ resetPassword(teamId: IdInput, databaseId: IdInput): Promise<void>;
238
239
  }
239
240
 
240
241
  declare class DeploysResource {
241
242
  private client;
242
243
  constructor(client: HostStack);
243
244
  /** List deploys for a service. */
244
- list(teamId: number, serviceId: string): Promise<{
245
+ list(teamId: IdInput, serviceId: IdInput): Promise<{
245
246
  deploys: Deploy[];
246
247
  }>;
247
248
  /** Get a single deploy by ID. */
248
- get(teamId: number, serviceId: string, deployId: string): Promise<{
249
+ get(teamId: IdInput, serviceId: IdInput, deployId: IdInput): Promise<{
249
250
  deploy: Deploy;
250
251
  }>;
251
252
  /** Trigger a new deploy. */
252
- trigger(teamId: number, serviceId: string, data?: TriggerDeployInput): Promise<{
253
+ trigger(teamId: IdInput, serviceId: IdInput, data?: TriggerDeployInput): Promise<{
253
254
  deploy: Deploy;
254
255
  }>;
255
256
  /** Cancel an in-progress deploy. */
256
- cancel(teamId: number, serviceId: string, deployId: string): Promise<void>;
257
+ cancel(teamId: IdInput, serviceId: IdInput, deployId: IdInput): Promise<void>;
257
258
  /** Rollback to a previous deploy. */
258
- rollback(teamId: number, serviceId: string, deployId: string): Promise<void>;
259
+ rollback(teamId: IdInput, serviceId: IdInput, deployId: IdInput): Promise<void>;
259
260
  /** Get build logs for a deploy. */
260
- getLogs(teamId: number, serviceId: string, deployId: string): Promise<{
261
+ getLogs(teamId: IdInput, serviceId: IdInput, deployId: IdInput): Promise<{
261
262
  logs: string;
262
263
  }>;
263
264
  }
@@ -266,65 +267,65 @@ declare class DomainsResource {
266
267
  private client;
267
268
  constructor(client: HostStack);
268
269
  /** List all domains for the active team. */
269
- list(teamId: number): Promise<{
270
+ list(teamId: IdInput): Promise<{
270
271
  domains: Domain[];
271
272
  }>;
272
273
  /** Add a custom domain. */
273
- add(teamId: number, data: AddDomainInput): Promise<{
274
+ add(teamId: IdInput, data: AddDomainInput): Promise<{
274
275
  domain: Domain;
275
276
  }>;
276
277
  /** Update a domain. */
277
- update(teamId: number, domainId: string, data: UpdateDomainInput): Promise<{
278
+ update(teamId: IdInput, domainId: IdInput, data: UpdateDomainInput): Promise<{
278
279
  domain: Domain;
279
280
  }>;
280
281
  /** Remove a domain. */
281
- remove(teamId: number, domainId: string): Promise<void>;
282
+ remove(teamId: IdInput, domainId: IdInput): Promise<void>;
282
283
  /** Verify domain DNS configuration. */
283
- verify(teamId: number, domainId: string): Promise<void>;
284
+ verify(teamId: IdInput, domainId: IdInput): Promise<void>;
284
285
  }
285
286
 
286
287
  declare class EnvVarsResource {
287
288
  private client;
288
289
  constructor(client: HostStack);
289
290
  /** List all environment variables for a service. */
290
- list(teamId: number, serviceId: string): Promise<{
291
+ list(teamId: IdInput, serviceId: IdInput): Promise<{
291
292
  envVars: EnvVar[];
292
293
  }>;
293
294
  /** Create a new environment variable. */
294
- create(teamId: number, serviceId: string, data: CreateEnvVarInput): Promise<{
295
+ create(teamId: IdInput, serviceId: IdInput, data: CreateEnvVarInput): Promise<{
295
296
  envVar: EnvVar;
296
297
  }>;
297
298
  /** Update an environment variable. */
298
- update(teamId: number, serviceId: string, envVarId: string, data: UpdateEnvVarInput): Promise<{
299
+ update(teamId: IdInput, serviceId: IdInput, envVarId: IdInput, data: UpdateEnvVarInput): Promise<{
299
300
  envVar: EnvVar;
300
301
  }>;
301
302
  /** Delete an environment variable. */
302
- delete(teamId: number, serviceId: string, envVarId: string): Promise<void>;
303
+ delete(teamId: IdInput, serviceId: IdInput, envVarId: IdInput): Promise<void>;
303
304
  /** Bulk set environment variables (create or update). */
304
- bulkSet(teamId: number, serviceId: string, data: BulkSetEnvVarsInput): Promise<void>;
305
+ bulkSet(teamId: IdInput, serviceId: IdInput, data: BulkSetEnvVarsInput): Promise<void>;
305
306
  }
306
307
 
307
308
  declare class ProjectsResource {
308
309
  private client;
309
310
  constructor(client: HostStack);
310
311
  /** List all projects for the active team. */
311
- list(teamId: number): Promise<{
312
+ list(teamId: IdInput): Promise<{
312
313
  projects: Project[];
313
314
  }>;
314
315
  /** Get a single project by ID. */
315
- get(teamId: number, projectId: string): Promise<{
316
+ get(teamId: IdInput, projectId: IdInput): Promise<{
316
317
  project: Project;
317
318
  }>;
318
319
  /** Create a new project. */
319
- create(teamId: number, data: CreateProjectInput): Promise<{
320
+ create(teamId: IdInput, data: CreateProjectInput): Promise<{
320
321
  project: Project;
321
322
  }>;
322
323
  /** Update a project. */
323
- update(teamId: number, projectId: string, data: UpdateProjectInput): Promise<{
324
+ update(teamId: IdInput, projectId: IdInput, data: UpdateProjectInput): Promise<{
324
325
  project: Project;
325
326
  }>;
326
327
  /** Delete a project. */
327
- delete(teamId: number, projectId: string): Promise<void>;
328
+ delete(teamId: IdInput, projectId: IdInput): Promise<void>;
328
329
  }
329
330
 
330
331
  interface LogEntry$1 {
@@ -354,41 +355,41 @@ declare class ServicesResource {
354
355
  private client;
355
356
  constructor(client: HostStack);
356
357
  /** List all services for the active team. */
357
- list(teamId: number): Promise<{
358
+ list(teamId: IdInput): Promise<{
358
359
  services: Service[];
359
360
  }>;
360
361
  /** Get a single service by ID. */
361
- get(teamId: number, serviceId: string): Promise<{
362
+ get(teamId: IdInput, serviceId: IdInput): Promise<{
362
363
  service: Service;
363
364
  }>;
364
365
  /** Create a new service. */
365
- create(teamId: number, data: CreateServiceInput): Promise<{
366
+ create(teamId: IdInput, data: CreateServiceInput): Promise<{
366
367
  service: Service;
367
368
  }>;
368
369
  /** Update a service. */
369
- update(teamId: number, serviceId: string, data: UpdateServiceInput): Promise<{
370
+ update(teamId: IdInput, serviceId: IdInput, data: UpdateServiceInput): Promise<{
370
371
  service: Service;
371
372
  }>;
372
373
  /** Delete a service. */
373
- delete(teamId: number, serviceId: string): Promise<void>;
374
+ delete(teamId: IdInput, serviceId: IdInput): Promise<void>;
374
375
  /** Suspend a service. */
375
- suspend(teamId: number, serviceId: string): Promise<void>;
376
+ suspend(teamId: IdInput, serviceId: IdInput): Promise<void>;
376
377
  /** Resume a suspended service. */
377
- resume(teamId: number, serviceId: string): Promise<void>;
378
+ resume(teamId: IdInput, serviceId: IdInput): Promise<void>;
378
379
  /** Get service metrics. */
379
- getMetrics(teamId: number, serviceId: string): Promise<{
380
+ getMetrics(teamId: IdInput, serviceId: IdInput): Promise<{
380
381
  metrics: ServiceMetrics;
381
382
  }>;
382
383
  /** Get service configuration. */
383
- getConfig(teamId: number, serviceId: string): Promise<{
384
+ getConfig(teamId: IdInput, serviceId: IdInput): Promise<{
384
385
  config: ServiceConfig;
385
386
  }>;
386
387
  /** Update service configuration. */
387
- updateConfig(teamId: number, serviceId: string, data: UpdateServiceConfigInput): Promise<{
388
+ updateConfig(teamId: IdInput, serviceId: IdInput, data: UpdateServiceConfigInput): Promise<{
388
389
  config: ServiceConfig;
389
390
  }>;
390
391
  /** Get runtime logs for a service. */
391
- getRuntimeLogs(teamId: number, serviceId: string, options?: {
392
+ getRuntimeLogs(teamId: IdInput, serviceId: IdInput, options?: {
392
393
  lines?: number;
393
394
  since?: string;
394
395
  stream?: 'stdout' | 'stderr';
@@ -407,18 +408,48 @@ declare class ServicesResource {
407
408
  * }
408
409
  * ```
409
410
  */
410
- streamLogs(teamId: number, serviceId: string, options?: StreamLogsOptions): AsyncGenerator<LogEntry>;
411
+ streamLogs(teamId: IdInput, serviceId: IdInput, options?: StreamLogsOptions): AsyncGenerator<LogEntry>;
411
412
  }
412
413
 
414
+ /** A numeric id or a publicId string (e.g. 42, "42", "svc_abc…"). */
415
+ type IdInput = number | string;
413
416
  interface HostStackOptions {
414
417
  /** Your HostStack API key (hs_live_... or hs_test_...). */
415
418
  apiKey: string;
416
419
  /** Base URL of the HostStack API. Defaults to https://hoststack.dev */
417
420
  baseUrl?: string;
418
421
  }
422
+ type ResolveScope = {
423
+ kind: 'team';
424
+ } | {
425
+ kind: 'project';
426
+ teamId: number;
427
+ } | {
428
+ kind: 'service';
429
+ teamId: number;
430
+ } | {
431
+ kind: 'deploy';
432
+ teamId: number;
433
+ serviceId: number;
434
+ } | {
435
+ kind: 'database';
436
+ teamId: number;
437
+ } | {
438
+ kind: 'domain';
439
+ teamId: number;
440
+ } | {
441
+ kind: 'envVar';
442
+ teamId: number;
443
+ serviceId: number;
444
+ } | {
445
+ kind: 'cronExecution';
446
+ teamId: number;
447
+ serviceId: number;
448
+ };
419
449
  declare class HostStack {
420
450
  private apiKey;
421
451
  private baseUrl;
452
+ private idCache;
422
453
  /** Manage projects. */
423
454
  readonly projects: ProjectsResource;
424
455
  /** Manage services (web, worker, cron). */
@@ -439,6 +470,17 @@ declare class HostStack {
439
470
  * Used internally by resource classes. Can also be used for custom API calls.
440
471
  */
441
472
  request<T>(method: string, path: string, body?: unknown): Promise<T>;
473
+ /**
474
+ * Resolve a publicId-or-numeric id input to a numeric database id. Numeric
475
+ * inputs short-circuit; publicIds (svc_xyz, dpl_xyz, etc.) are looked up
476
+ * via the relevant list endpoint and cached on this client instance.
477
+ *
478
+ * The API addresses everything by numeric id internally; this resolver lets
479
+ * SDK/MCP consumers pass either form interchangeably without burning extra
480
+ * round-trips on subsequent calls.
481
+ */
482
+ resolveId(input: IdInput, scope: ResolveScope): Promise<number>;
483
+ private fetchForResolution;
442
484
  }
443
485
 
444
486
  declare class HostStackError extends Error {