@amerged/ohmyhost-cli 0.1.10 → 0.1.11

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @amerged/ohmyhost-cli
2
2
 
3
- ohmyho.st cli client, version 0.1.10.
3
+ ohmyho.st cli client, version 0.1.11.
4
4
 
5
5
  ```sh
6
6
  npm install --global @amerged/ohmyhost-cli
package/dist/bin.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { createRequire as __ohmyhostCreateRequire } from "node:module"; const require = __ohmyhostCreateRequire(import.meta.url);
3
3
  import {
4
4
  runProductionCli
5
- } from "./chunk-Z75ASLEB.js";
5
+ } from "./chunk-WT2RRQUB.js";
6
6
  import "./chunk-4HFQ54FP.js";
7
7
 
8
8
  // apps/product-cli/dist/bin.js
@@ -15000,6 +15000,8 @@ var recognizedCommandLabel = (argv) => {
15000
15000
  return "project notes set";
15001
15001
  if (value === "project" && values[0] === "status")
15002
15002
  return "project status";
15003
+ if (value === "project" && values[0] === "handle" && values[1] === "check")
15004
+ return "project handle check";
15003
15005
  if (value === "project" && values[0] === "dev-access" && values[1] === "create")
15004
15006
  return "project dev-access create";
15005
15007
  if (value === "database" && values[0] === "compute" && values[1] === "set")
@@ -15442,6 +15444,12 @@ var parseProductCliCommand = (argv) => {
15442
15444
  }
15443
15445
  if (first === "project") {
15444
15446
  const subcommand = values.shift();
15447
+ if (subcommand === "handle" && values.shift() === "check") {
15448
+ if (yes || wait || follow || stdin)
15449
+ throw new InvalidCommandError();
15450
+ const options2 = parseOptions(values, ["--handle"]);
15451
+ return { kind: "project-handle-check", handle: options2["--handle"], credentialStore };
15452
+ }
15445
15453
  if (subcommand === "dev-access" && values.shift() === "create") {
15446
15454
  if (yes || wait || follow || stdin)
15447
15455
  throw new InvalidCommandError();
@@ -16517,7 +16525,7 @@ function assertOrganizationAccount(value) {
16517
16525
  if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).sort().join(",") !== "as_of,available_micros,monthly_micros,name,next_expiry,one_time_micros,organization_id,paid_until,plan,plan_source,reserved_micros,workos_organization_id")
16518
16526
  throw new TypeError("Invalid account fields");
16519
16527
  const v = value;
16520
- if (typeof v["organization_id"] !== "string" || !/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/u.test(v["organization_id"]) || typeof v["name"] !== "string" || v["name"].length > 128 || typeof v["workos_organization_id"] !== "string" || !/^org_[A-Za-z0-9_]+$/u.test(v["workos_organization_id"]) || v["plan"] !== "paid" && v["plan"] !== "free" || !["free", "stripe", "beta", "manual"].includes(String(v["plan_source"])) || v["plan"] === "free" !== (v["plan_source"] === "free"))
16528
+ if (typeof v["organization_id"] !== "string" || !/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/u.test(v["organization_id"]) || typeof v["name"] !== "string" || v["name"].length > 128 || typeof v["workos_organization_id"] !== "string" || !/^org_[A-Za-z0-9_]+$/u.test(v["workos_organization_id"]) || v["plan"] !== "paid" && v["plan"] !== "free" || !["free", "stripe", "granted", "manual"].includes(String(v["plan_source"])) || v["plan"] === "free" !== (v["plan_source"] === "free"))
16521
16529
  throw new TypeError("Invalid account scope");
16522
16530
  for (const field of ["available_micros", "monthly_micros", "one_time_micros", "reserved_micros"])
16523
16531
  if (typeof v[field] !== "string" || !/^(0|[1-9][0-9]{0,18})$/u.test(v[field]))
@@ -17810,7 +17818,7 @@ function exact2(v, keys) {
17810
17818
  // apps/product-cli/package.json
17811
17819
  var package_default = {
17812
17820
  name: "@ohmyhost/product-cli",
17813
- version: "0.1.10",
17821
+ version: "0.1.11",
17814
17822
  private: true,
17815
17823
  ohmyhost: {
17816
17824
  deployment: "production",
@@ -18173,6 +18181,7 @@ var HELP_USAGE = Object.freeze({
18173
18181
  "project notes set": "ohmyhost project notes set --project ULID --version NUMBER --markdown TEXT --idempotency-key KEY --json (no credentials or signed URLs)",
18174
18182
  "project status": "ohmyhost project status --project ULID --json",
18175
18183
  "project dev-access create": "ohmyhost project dev-access create --project ULID --json",
18184
+ "project handle check": "ohmyhost project handle check --handle HANDLE --json (is this address free? answers with a reason and free alternatives; the address becomes HANDLE.check.omh.st)",
18176
18185
  "database compute set": "ohmyhost database compute set --project ULID --environment dev|prod --profile standard|performance --idempotency-key KEY --yes [--wait] --json\n standard: Free 0.25 CU/1 GB/60s idle, Paid 0.5 CU/2 GB/60s idle. performance: Paid 1 CU/4 GB/300s idle, 2.5x database compute credits per equal active minute; longer idle time also consumes credits.",
18177
18186
  "database compute get": "ohmyhost database compute get --project ULID [--environment dev|prod] --json",
18178
18187
  "database write": "ohmyhost database write --project ULID --environment dev|prod --statement-file PATH --idempotency-key KEY [--parameters-json JSON] --yes --json",
@@ -18447,6 +18456,8 @@ var ProductCli = class {
18447
18456
  return await this.createProject(command, signal);
18448
18457
  if (command.kind === "project-list")
18449
18458
  return await this.listProjects(command, signal);
18459
+ if (command.kind === "project-handle-check")
18460
+ return await this.checkProjectHandle(command, signal);
18450
18461
  if (command.kind === "database-compute-set") {
18451
18462
  const api = await this.authenticatedApi(command.credentialStore, signal);
18452
18463
  let operation = parseOperation(await api.changeDatabaseCompute(command));
@@ -18786,6 +18797,11 @@ var ProductCli = class {
18786
18797
  }));
18787
18798
  return success("project list", { status: "succeeded", projects });
18788
18799
  }
18800
+ async checkProjectHandle(command, signal) {
18801
+ const api = await this.authenticatedApi(command.credentialStore, signal);
18802
+ const handle = await api.checkProjectHandle({ handle: command.handle });
18803
+ return success("project handle check", { status: "succeeded", handle });
18804
+ }
18789
18805
  async getProjectStatus(command, signal) {
18790
18806
  const api = await this.authenticatedApi(command.credentialStore, signal);
18791
18807
  const project = parseProjectStatus(await api.getProjectStatus(command.projectId));
@@ -19390,6 +19406,8 @@ var parsedCommandName = (command) => {
19390
19406
  return "project status";
19391
19407
  if (command.kind === "project-dev-access-create")
19392
19408
  return "project dev-access create";
19409
+ if (command.kind === "project-handle-check")
19410
+ return "project handle check";
19393
19411
  if (command.kind === "database-write")
19394
19412
  return "database write";
19395
19413
  if (command.kind === "database-query")
@@ -20931,6 +20949,23 @@ var getProjectStatus = (parameters, options) => {
20931
20949
  ...params
20932
20950
  });
20933
20951
  };
20952
+ var getProjectHandleAvailability = (parameters, options) => {
20953
+ const params = buildClientParams([parameters], [
20954
+ {
20955
+ args: [
20956
+ { in: "headers", key: "X-Request-Id" },
20957
+ { in: "path", key: "handle" }
20958
+ ]
20959
+ }
20960
+ ]);
20961
+ return (options?.client ?? client).get({
20962
+ responseStyle: "data",
20963
+ security: [{ scheme: "bearer", type: "http" }],
20964
+ url: "/v1/project-handles/{handle}",
20965
+ ...options,
20966
+ ...params
20967
+ });
20968
+ };
20934
20969
  var createProjectDevAccessTicket = (parameters, options) => {
20935
20970
  const params = buildClientParams([parameters], [
20936
20971
  {
@@ -21817,6 +21852,9 @@ var GeneratedSdkProductApi = class {
21817
21852
  async listProjects(input) {
21818
21853
  return listProjects(input, { client: this.#client });
21819
21854
  }
21855
+ async checkProjectHandle(input) {
21856
+ return getProjectHandleAvailability({ handle: input.handle }, { client: this.#client });
21857
+ }
21820
21858
  async getProjectStatus(projectId) {
21821
21859
  return getProjectStatus({ project_id: projectId }, { client: this.#client });
21822
21860
  }
package/dist/index.js CHANGED
@@ -47,7 +47,7 @@ import {
47
47
  selectWorkspace,
48
48
  selectedWorkspaceId,
49
49
  workspaceOf
50
- } from "./chunk-Z75ASLEB.js";
50
+ } from "./chunk-WT2RRQUB.js";
51
51
  import {
52
52
  CredentialStoreIntegrityError,
53
53
  CredentialStoreUnavailableError,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amerged/ohmyhost-cli",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -310,6 +310,8 @@ const HELP_USAGE = Object.freeze({
310
310
  "ohmyhost project notes set --project ULID --version NUMBER --markdown TEXT --idempotency-key KEY --json (no credentials or signed URLs)",
311
311
  "project status": "ohmyhost project status --project ULID --json",
312
312
  "project dev-access create": "ohmyhost project dev-access create --project ULID --json",
313
+ "project handle check":
314
+ "ohmyhost project handle check --handle HANDLE --json (is this address free? answers with a reason and free alternatives; the address becomes HANDLE.check.omh.st)",
313
315
  "database compute set":
314
316
  "ohmyhost database compute set --project ULID --environment dev|prod --profile standard|performance --idempotency-key KEY --yes [--wait] --json\n" +
315
317
  " standard: Free 0.25 CU/1 GB/60s idle, Paid 0.5 CU/2 GB/60s idle. performance: Paid 1 CU/4 GB/300s idle, 2.5x database compute credits per equal active minute; longer idle time also consumes credits.",
@@ -687,6 +689,8 @@ export class ProductCli {
687
689
  }
688
690
  if (command.kind === "project-create") return await this.createProject(command, signal);
689
691
  if (command.kind === "project-list") return await this.listProjects(command, signal);
692
+ if (command.kind === "project-handle-check")
693
+ return await this.checkProjectHandle(command, signal);
690
694
  if (command.kind === "database-compute-set") {
691
695
  const api = await this.authenticatedApi(command.credentialStore, signal);
692
696
  let operation = parseOperation(await api.changeDatabaseCompute(command));
@@ -1165,6 +1169,15 @@ export class ProductCli {
1165
1169
  return success("project list", { status: "succeeded", projects });
1166
1170
  }
1167
1171
 
1172
+ private async checkProjectHandle(
1173
+ command: Extract<ProductCliCommand, { kind: "project-handle-check" }>,
1174
+ signal: AbortSignal,
1175
+ ): Promise<CliResult> {
1176
+ const api = await this.authenticatedApi(command.credentialStore, signal);
1177
+ const handle = await api.checkProjectHandle({ handle: command.handle });
1178
+ return success("project handle check", { status: "succeeded", handle });
1179
+ }
1180
+
1168
1181
  private async getProjectStatus(
1169
1182
  command: Extract<ProductCliCommand, { kind: "project-status" }>,
1170
1183
  signal: AbortSignal,
@@ -2115,6 +2128,7 @@ const parsedCommandName = (command: ProductCliCommand): CommandLabel => {
2115
2128
  if (command.kind === "project-notes-set") return "project notes set";
2116
2129
  if (command.kind === "project-status") return "project status";
2117
2130
  if (command.kind === "project-dev-access-create") return "project dev-access create";
2131
+ if (command.kind === "project-handle-check") return "project handle check";
2118
2132
  if (command.kind === "database-write") return "database write";
2119
2133
  if (command.kind === "database-query") return "database query";
2120
2134
  if (command.kind === "database-access-create") return "database access create";
@@ -132,6 +132,12 @@ export type ProductCliCommand =
132
132
  readonly idempotencyKey: string;
133
133
  readonly credentialStore: "native";
134
134
  }
135
+ | {
136
+ /** Asks whether a project address is free; the candidate is sent exactly as the agent typed it. */
137
+ readonly kind: "project-handle-check";
138
+ readonly handle: string;
139
+ readonly credentialStore: "native";
140
+ }
135
141
  | { readonly kind: "help"; readonly topic?: string }
136
142
  | { readonly kind: "version" }
137
143
  | { readonly kind: "whoami"; readonly credentialStore: "native" }
@@ -487,6 +493,7 @@ export type RecognizedCommandLabel =
487
493
  | "project list"
488
494
  | "project status"
489
495
  | "project dev-access create"
496
+ | "project handle check"
490
497
  | "database write"
491
498
  | "database query"
492
499
  | "database access create"
@@ -576,6 +583,8 @@ export const recognizedCommandLabel = (argv: readonly string[]): RecognizedComma
576
583
  if (value === "project" && values[0] === "notes" && values[1] === "set")
577
584
  return "project notes set";
578
585
  if (value === "project" && values[0] === "status") return "project status";
586
+ if (value === "project" && values[0] === "handle" && values[1] === "check")
587
+ return "project handle check";
579
588
  if (value === "project" && values[0] === "dev-access" && values[1] === "create")
580
589
  return "project dev-access create";
581
590
  if (value === "database" && values[0] === "compute" && values[1] === "set")
@@ -1045,6 +1054,11 @@ export const parseProductCliCommand = (argv: readonly string[]): ProductCliComma
1045
1054
  }
1046
1055
  if (first === "project") {
1047
1056
  const subcommand = values.shift();
1057
+ if (subcommand === "handle" && values.shift() === "check") {
1058
+ if (yes || wait || follow || stdin) throw new InvalidCommandError();
1059
+ const options = parseOptions(values, ["--handle"]);
1060
+ return { kind: "project-handle-check", handle: options["--handle"], credentialStore };
1061
+ }
1048
1062
  if (subcommand === "dev-access" && values.shift() === "create") {
1049
1063
  if (yes || wait || follow || stdin) throw new InvalidCommandError();
1050
1064
  const options = parseOptions(values, ["--project"]);
@@ -83,6 +83,7 @@ import {
83
83
  listEnvironmentSecrets,
84
84
  listFunctionRuns,
85
85
  listProjects,
86
+ getProjectHandleAvailability,
86
87
  planDeployment,
87
88
  planPaidProjectDomain,
88
89
  planDeploymentRollback,
@@ -115,6 +116,7 @@ import {
115
116
  type CurrentIdentity,
116
117
  type DevAccessTicket,
117
118
  type ProjectPage,
119
+ type ProjectHandleAvailability,
118
120
  type ProjectStatus,
119
121
  type PaidDomain,
120
122
  type PaidDomainPlan,
@@ -208,6 +210,7 @@ export interface ProductApi {
208
210
  /** The signed-in user's workspaces; an interactive session is required for this route. */
209
211
  getAccountProfile(): Promise<readonly PublicWorkspace[]>;
210
212
  listProjects(input: { readonly cursor?: string; readonly limit: number }): Promise<ProjectPage>;
213
+ checkProjectHandle(input: { readonly handle: string }): Promise<ProjectHandleAvailability>;
211
214
  getProjectStatus(projectId: string): Promise<ProjectStatus>;
212
215
  writeProjectDatabase(
213
216
  input: ProjectDatabaseWriteRequest & { projectId: string; idempotencyKey: string },
@@ -582,6 +585,12 @@ export class GeneratedSdkProductApi implements ProductApi {
582
585
  return listProjects(input, { client: this.#client });
583
586
  }
584
587
 
588
+ public async checkProjectHandle(input: {
589
+ readonly handle: string;
590
+ }): Promise<ProjectHandleAvailability> {
591
+ return getProjectHandleAvailability({ handle: input.handle }, { client: this.#client });
592
+ }
593
+
585
594
  public async getProjectStatus(projectId: string): Promise<ProjectStatus> {
586
595
  return getProjectStatus({ project_id: projectId }, { client: this.#client });
587
596
  }
@@ -190,7 +190,7 @@ export function assertOrganizationAccount(value: unknown): void {
190
190
  typeof v["workos_organization_id"] !== "string" ||
191
191
  !/^org_[A-Za-z0-9_]+$/u.test(v["workos_organization_id"]) ||
192
192
  (v["plan"] !== "paid" && v["plan"] !== "free") ||
193
- !["free", "stripe", "beta", "manual"].includes(String(v["plan_source"])) ||
193
+ !["free", "stripe", "granted", "manual"].includes(String(v["plan_source"])) ||
194
194
  (v["plan"] === "free") !== (v["plan_source"] === "free")
195
195
  )
196
196
  throw new TypeError("Invalid account scope");
@@ -42,6 +42,7 @@ export {
42
42
  getProjectContext,
43
43
  getProjectCreditBudget,
44
44
  getProjectExport,
45
+ getProjectHandleAvailability,
45
46
  getProjectMailDomain,
46
47
  getProjectSource,
47
48
  getProjectSourceAutoDeploy,
@@ -331,6 +332,11 @@ export type {
331
332
  GetProjectExportErrors,
332
333
  GetProjectExportResponse,
333
334
  GetProjectExportResponses,
335
+ GetProjectHandleAvailabilityData,
336
+ GetProjectHandleAvailabilityError,
337
+ GetProjectHandleAvailabilityErrors,
338
+ GetProjectHandleAvailabilityResponse,
339
+ GetProjectHandleAvailabilityResponses,
334
340
  GetProjectMailDomainData,
335
341
  GetProjectMailDomainError,
336
342
  GetProjectMailDomainErrors,
@@ -467,6 +473,7 @@ export type {
467
473
  ProjectExport,
468
474
  ProjectExportArchive,
469
475
  ProjectFilter,
476
+ ProjectHandleAvailability,
470
477
  ProjectId,
471
478
  ProjectLimit,
472
479
  ProjectMailDomain,
@@ -100,6 +100,8 @@ import type {
100
100
  GetProjectErrors,
101
101
  GetProjectExportErrors,
102
102
  GetProjectExportResponses,
103
+ GetProjectHandleAvailabilityErrors,
104
+ GetProjectHandleAvailabilityResponses,
103
105
  GetProjectMailDomainErrors,
104
106
  GetProjectMailDomainResponses,
105
107
  GetProjectResponses,
@@ -447,7 +449,7 @@ export const getFeatureInterests = <ThrowOnError extends boolean = true>(
447
449
  "data"
448
450
  >({
449
451
  responseStyle: "data",
450
- url: "/v1/beta/feature-interests",
452
+ url: "/v1/site/feature-interests",
451
453
  ...options,
452
454
  ...params,
453
455
  });
@@ -492,7 +494,7 @@ export const registerFeatureInterest = <ThrowOnError extends boolean = true>(
492
494
  "data"
493
495
  >({
494
496
  responseStyle: "data",
495
- url: "/v1/beta/feature-interests",
497
+ url: "/v1/site/feature-interests",
496
498
  ...options,
497
499
  ...params,
498
500
  headers: {
@@ -521,7 +523,7 @@ export const getPublicDeploymentStats = <ThrowOnError extends boolean = true>(
521
523
  "data"
522
524
  >({
523
525
  responseStyle: "data",
524
- url: "/v1/beta/stats",
526
+ url: "/v1/site/stats",
525
527
  ...options,
526
528
  });
527
529
 
@@ -1682,6 +1684,48 @@ export const getProjectStatus = <ThrowOnError extends boolean = true>(
1682
1684
  });
1683
1685
  };
1684
1686
 
1687
+ /**
1688
+ * Check whether a project handle is free
1689
+ *
1690
+ * Reports whether a handle can be used for a project and why not when it cannot, with free alternatives an agent can offer. A handle is one to five lowercase words of letters and digits separated by single hyphens, three to fifty-nine characters, and never one of the reserved words. Availability is answered across all projects without revealing which organization holds a taken handle.
1691
+ */
1692
+ export const getProjectHandleAvailability = <ThrowOnError extends boolean = true>(
1693
+ parameters: {
1694
+ "X-Request-Id"?: string;
1695
+ handle: string;
1696
+ },
1697
+ options?: Options<never, ThrowOnError>,
1698
+ ): RequestResult<
1699
+ GetProjectHandleAvailabilityResponses,
1700
+ GetProjectHandleAvailabilityErrors,
1701
+ ThrowOnError,
1702
+ "data"
1703
+ > => {
1704
+ const params = buildClientParams(
1705
+ [parameters],
1706
+ [
1707
+ {
1708
+ args: [
1709
+ { in: "headers", key: "X-Request-Id" },
1710
+ { in: "path", key: "handle" },
1711
+ ],
1712
+ },
1713
+ ],
1714
+ );
1715
+ return (options?.client ?? client).get<
1716
+ GetProjectHandleAvailabilityResponses,
1717
+ GetProjectHandleAvailabilityErrors,
1718
+ ThrowOnError,
1719
+ "data"
1720
+ >({
1721
+ responseStyle: "data",
1722
+ security: [{ scheme: "bearer", type: "http" }],
1723
+ url: "/v1/project-handles/{handle}",
1724
+ ...options,
1725
+ ...params,
1726
+ });
1727
+ };
1728
+
1685
1729
  /**
1686
1730
  * Create a single-use dev access ticket
1687
1731
  *
@@ -807,7 +807,7 @@ export type OrganizationAccount = {
807
807
  name: string;
808
808
  workos_organization_id: string;
809
809
  plan: "free" | "paid";
810
- plan_source: "free" | "stripe" | "beta" | "manual";
810
+ plan_source: "free" | "stripe" | "granted" | "manual";
811
811
  paid_until: string | null;
812
812
  available_micros: CreditMicros;
813
813
  monthly_micros: CreditMicros;
@@ -845,6 +845,25 @@ export type ProjectEnvironment = {
845
845
  name: string;
846
846
  };
847
847
 
848
+ export type ProjectHandleAvailability = {
849
+ /**
850
+ * The handle exactly as it was asked about.
851
+ */
852
+ handle: string;
853
+ /**
854
+ * True when a project may take this handle now.
855
+ */
856
+ available: boolean;
857
+ /**
858
+ * Why the handle cannot be used. Absent when it is available.
859
+ */
860
+ reason?: "taken" | "too_short" | "too_long" | "invalid_shape" | "prohibited_word";
861
+ /**
862
+ * Free handles to offer instead, empty when the handle is available.
863
+ */
864
+ alternatives: Array<string>;
865
+ };
866
+
848
867
  export type ProjectStatus = {
849
868
  project_id: Ulid;
850
869
  handle: string;
@@ -1589,7 +1608,7 @@ export type GetFeatureInterestsData = {
1589
1608
  };
1590
1609
  path?: never;
1591
1610
  query?: never;
1592
- url: "/v1/beta/feature-interests";
1611
+ url: "/v1/site/feature-interests";
1593
1612
  };
1594
1613
 
1595
1614
  export type GetFeatureInterestsErrors = {
@@ -1633,7 +1652,7 @@ export type RegisterFeatureInterestData = {
1633
1652
  };
1634
1653
  path?: never;
1635
1654
  query?: never;
1636
- url: "/v1/beta/feature-interests";
1655
+ url: "/v1/site/feature-interests";
1637
1656
  };
1638
1657
 
1639
1658
  export type RegisterFeatureInterestErrors = {
@@ -1683,7 +1702,7 @@ export type GetPublicDeploymentStatsData = {
1683
1702
  body?: never;
1684
1703
  path?: never;
1685
1704
  query?: never;
1686
- url: "/v1/beta/stats";
1705
+ url: "/v1/site/stats";
1687
1706
  };
1688
1707
 
1689
1708
  export type GetPublicDeploymentStatsErrors = {
@@ -3255,6 +3274,60 @@ export type GetProjectStatusResponses = {
3255
3274
 
3256
3275
  export type GetProjectStatusResponse = GetProjectStatusResponses[keyof GetProjectStatusResponses];
3257
3276
 
3277
+ export type GetProjectHandleAvailabilityData = {
3278
+ body?: never;
3279
+ headers?: {
3280
+ /**
3281
+ * Optional caller-provided correlation identifier.
3282
+ */
3283
+ "X-Request-Id"?: string;
3284
+ };
3285
+ path: {
3286
+ /**
3287
+ * The handle a customer would like to use.
3288
+ */
3289
+ handle: string;
3290
+ };
3291
+ query?: never;
3292
+ url: "/v1/project-handles/{handle}";
3293
+ };
3294
+
3295
+ export type GetProjectHandleAvailabilityErrors = {
3296
+ /**
3297
+ * The request failed.
3298
+ */
3299
+ 400: ProblemDetails;
3300
+ /**
3301
+ * The request failed.
3302
+ */
3303
+ 401: ProblemDetails;
3304
+ /**
3305
+ * The request failed.
3306
+ */
3307
+ 403: ProblemDetails;
3308
+ /**
3309
+ * The request failed.
3310
+ */
3311
+ 429: ProblemDetails;
3312
+ /**
3313
+ * The request failed.
3314
+ */
3315
+ 503: ProblemDetails;
3316
+ };
3317
+
3318
+ export type GetProjectHandleAvailabilityError =
3319
+ GetProjectHandleAvailabilityErrors[keyof GetProjectHandleAvailabilityErrors];
3320
+
3321
+ export type GetProjectHandleAvailabilityResponses = {
3322
+ /**
3323
+ * Whether the handle is usable, and alternatives when it is not.
3324
+ */
3325
+ 200: ProjectHandleAvailability;
3326
+ };
3327
+
3328
+ export type GetProjectHandleAvailabilityResponse =
3329
+ GetProjectHandleAvailabilityResponses[keyof GetProjectHandleAvailabilityResponses];
3330
+
3258
3331
  export type CreateProjectDevAccessTicketData = {
3259
3332
  body?: never;
3260
3333
  headers?: {