@runlot/api 0.1.0-rc.73 → 0.1.0-rc.74

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
@@ -3,10 +3,11 @@ export type { components, paths, operations } from "./schema.js";
3
3
  export declare const API_VERSION: "v1";
4
4
  type Schemas = components["schemas"];
5
5
  /**
6
- * 오퍼레이션의 성공 응답 본문.
6
+ * The success response body of an operation.
7
7
  *
8
- * 메서드 반환형을 손으로 적지 않는 이유는, 손으로 적으면 스펙이 바뀌어도
9
- * 컴파일이 통과하기 때문이다 — 그 어긋남은 런타임에 `undefined` 로 나타난다.
8
+ * We do not write the method return types by hand because a hand-written type
9
+ * still compiles after the spec changes — and that drift shows up at runtime as
10
+ * `undefined`.
10
11
  */
11
12
  type Ok<K extends keyof operations> = operations[K]["responses"] extends {
12
13
  200: {
@@ -82,25 +83,25 @@ export type RepoCommit = Schemas["RepoCommit"];
82
83
  export type AccessPolicy = Schemas["AccessPolicy"];
83
84
  export type AccessBypass = Schemas["AccessBypass"];
84
85
  export type AccessAuthorize = Schemas["AccessAuthorize"];
85
- /** 정책 셋. 라디오 셋이 이 유니온에 붙는다 (docs/access.md §3.1). */
86
+ /** The three policies. The three radio buttons hang off this union (docs/access.md §3.1). */
86
87
  export type AccessMode = NonNullable<AccessPolicy["mode"]>;
87
88
  export type UsageRow = Schemas["UsageRow"];
88
89
  export type Notification = Schemas["Notification"];
89
- /** 알림 종류. 대시보드의 라벨 표가 이 유니온에 붙는다 (§3.1). */
90
+ /** The notification kinds. The dashboard's label table hangs off this union (§3.1). */
90
91
  export type NotificationKind = NonNullable<Notification["kind"]>;
91
92
  export type AuthStatus = Schemas["AuthStatus"];
92
93
  export type AuthSettings = Schemas["AuthSettings"];
93
94
  export type AuthBrand = Schemas["AuthBrand"];
94
95
  export type AuthProviderMeta = Schemas["AuthProviderMeta"];
95
- /** 프로바이더 셋. 화면의 행과 CLI 의 인자가 이 유니온에 붙는다. */
96
+ /** The three providers. The rows on screen and the CLI's argument hang off this union. */
96
97
  export type AuthProvider = Schemas["AuthProvider"];
97
- /** PATCH 의 본문 — `AuthSettings` 의 부분집합. 준 칸만 바뀐다. */
98
+ /** The PATCH body — a subset of `AuthSettings`. Only the fields given change. */
98
99
  export type AuthSettingsInput = NonNullable<Schemas["AuthSettingsPatch"]["settings"]>;
99
100
  export type Hostname = Schemas["Hostname"];
100
101
  export type HostnameList = Schemas["HostnameList"];
101
102
  export type HostnameVerify = Schemas["HostnameVerify"];
102
103
  export type HostnameRecord = Schemas["HostnameRecord"];
103
- /** 상태 넷. 화면의 배지가 이 값에 붙는다 (docs/domains.md §3.3). */
104
+ /** The four states. The badge on screen hangs off this value (docs/domains.md §3.3). */
104
105
  export type HostnameState = NonNullable<Hostname["state"]>;
105
106
  export type Zone = Schemas["Zone"];
106
107
  export type ZoneDetail = Schemas["ZoneDetail"];
@@ -112,9 +113,9 @@ export type DomainList = Schemas["DomainList"];
112
113
  export type DomainAvailability = Schemas["DomainAvailability"];
113
114
  export type DomainContact = Schemas["DomainContact"];
114
115
  export type DomainEvent = Schemas["DomainEvent"];
115
- /** `Domain["state"]` 을 따로 내보낸다 — 화면이 배지 표를 이 유니온으로 못박는다. */
116
+ /** `Domain["state"]` is exported separately — the screen pins its badge table to this union. */
116
117
  export type DomainState = Domain["state"];
117
- /** 서버가 돌려준 오류 봉투를 그대로 들고 있는 예외. */
118
+ /** The exception that carries the server's error envelope unchanged. */
118
119
  export declare class ApiError extends Error {
119
120
  readonly status: number;
120
121
  readonly code: string;
@@ -130,76 +131,82 @@ export declare class Client {
130
131
  constructor(opts: ClientOptions);
131
132
  private headers;
132
133
  private request;
133
- /** JSON 이 아닌 본문 (메일 원문). 오류 처리는 request 와 같다. */
134
+ /** A body that is not JSON (the raw mail). Error handling is the same as request. */
134
135
  private text;
135
136
  private json;
136
137
  devLogin(subject: string): Promise<Ok<"devLogin">>;
137
138
  /**
138
- * 가입을 받아 확인 메일을 보낸다. 세션도 비밀번호도 여기서 생기지 않는다 —
139
- * 비밀번호는 메일함을 여는 사람이 `verifyEmail` 에서 고른다.
139
+ * Takes the sign-up and sends the confirmation mail. Neither a session nor a
140
+ * password is created here — the password is chosen in `verifyEmail` by
141
+ * whoever opens the mailbox.
140
142
  */
141
143
  passwordSignUp(email: string, name?: string): Promise<Ok<"passwordSignUp">>;
142
144
  passwordSignIn(email: string, password: string): Promise<Ok<"passwordSignIn">>;
143
- /** 이메일 존재 여부와 무관하게 같은 accepted 응답을 받는다. */
145
+ /** The same accepted response comes back whether or not the email exists. */
144
146
  passwordForgot(email: string): Promise<Ok<"passwordForgot">>;
145
147
  passwordReset(token: string, password: string): Promise<Ok<"passwordReset">>;
146
- /** 확인 링크를 쓰면서 계정의 첫 비밀번호를 정한다. */
148
+ /** Uses the confirmation link and sets the account's first password. */
147
149
  verifyEmail(token: string, password: string): Promise<Ok<"verifyEmail">>;
148
150
  /**
149
- * GitHub OAuth 시작 URL. 브라우저가 따라가는 302 라 fetch 로 부르지 않고
150
- * `window.location` 에 넣는다. `redirect` 는 서버 허용 목록에 있어야 한다.
151
+ * The GitHub OAuth start URL. It is a 302 the browser follows, so it goes into
152
+ * `window.location` rather than being called with fetch. `redirect` has to be
153
+ * on the server's allow-list.
151
154
  */
152
155
  githubStartUrl(redirect: string): string;
153
- /** Google OAuth 시작 URL. GitHub 과 같은 대시보드 콜백 모양을 쓴다. */
156
+ /** The Google OAuth start URL. Uses the same dashboard callback shape as GitHub. */
154
157
  googleStartUrl(redirect: string): string;
155
158
  /**
156
- * 이 배치의 이름들 (앱 도메인·문서 주소). 인증 없이 부를 수 있다.
159
+ * The names of this deployment (app domain, docs address). Callable without auth.
157
160
  *
158
- * 대시보드가 화면에 도메인을 박지 않기 위한 자리다 (docs/environments.md
159
- * §3.2) — 박아 두면 dev 화면이 프로덕션 주소를 안내하고, 그 안내는 열리기
160
- * 때문에 아무도 틀렸다고 말해 주지 않는다.
161
+ * This exists so the dashboard does not hard-code a domain into the screen
162
+ * (docs/environments.md §3.2) — hard-coded, the dev screen tells people a
163
+ * production address, and because that address opens, nobody ever says it is
164
+ * wrong.
161
165
  */
162
166
  siteConfig(): Promise<Ok<"getSiteConfig">>;
163
167
  me(): Promise<Ok<"getMe">>;
164
168
  listOrgs(): Promise<Ok<"listOrgs">>;
165
- /** 표시 이름만 바꾼다 (admin). 슬러그는 주소가 되는 이름이라 이 표면에 없다. */
169
+ /** Changes the display name only (admin). The slug is the name that becomes an address, so it is not on this surface. */
166
170
  updateOrg(org: string, name: string): Promise<Ok<"updateOrg">>;
167
171
  /**
168
- * 조직을 지운다 (admin). **되돌릴 수 없다.**
172
+ * Deletes the organization (admin). **This cannot be undone.**
169
173
  *
170
- * `confirm` 은 조직 슬러그 그대로여야 한다 — 확인이 서버에 있는 이유는
171
- * 이 표면을 부르는 곳이 셋(화면·CLI·스크립트)이기 때문이다. 살아 있는
172
- * 프로젝트·도메인·저장소·DNS 존이 남아 있으면 409 `org_not_empty` 이고
173
- * `details.holdings` 가 무엇이 남았는지 말한다 — **이미 지운 프로젝트는
174
- * 세지 않는다.**
174
+ * `confirm` has to be the organization slug exactly — the confirmation lives on
175
+ * the server because three places call this surface (the screen, the CLI, and
176
+ * scripts). If a live project, domain, repository, or DNS zone is left, it is a
177
+ * 409 `org_not_empty` and `details.holdings` says what is left — **projects
178
+ * already deleted are not counted.**
175
179
  *
176
- * 답의 `purgeAfter` 는 행이 실제로 사라지는 시각이다. 돌아온 순간 조직은
177
- * 이미 모든 표면에서 사라졌고, 남은 것은 그 시각까지의 보존이다.
180
+ * The `purgeAfter` in the answer is when the rows actually disappear. By the
181
+ * moment it returns the organization is already gone from every surface; what
182
+ * remains is retention until that time.
178
183
  */
179
184
  deleteOrg(org: string, confirm: string): Promise<Ok<"deleteOrg">>;
180
185
  createOrg(slug: string, name: string): Promise<Ok<"createOrg">>;
181
186
  /**
182
- * org 의 최근 알림 (docs/limits.md §3.4).
187
+ * The organization's recent notifications (docs/limits.md §3.4).
183
188
  *
184
- * `sentAt` 이 없는 행은 아직 큐에 있거나 받을 이메일이 없는 것이다 — 후자에게
185
- * 이 목록이 유일한 통로라, 화면은 두 상태를 같게 그린다.
189
+ * A row with no `sentAt` is either still queued or has no email address to
190
+ * reach — and for the second, this list is the only channel, so the screen
191
+ * draws both states the same way.
186
192
  */
187
193
  listNotifications(org: string, limit?: number): Promise<Ok<"listNotifications">>;
188
194
  /**
189
- * 요금제와 결제 상태 (docs/billing.md). `enabled` 가 거짓이면 이 배치에 결제가
190
- * 없다 — 화면은 문의 주소만 둔다.
195
+ * The plan and billing state (docs/billing.md). If `enabled` is false, this
196
+ * deployment has no billing — the screen shows only a contact address.
191
197
  */
192
198
  getBilling(org: string): Promise<Ok<"getBilling">>;
193
199
  /**
194
- * 프로 체크아웃 세션. 돌아온 `url` 로 브라우저를 보낸다. 결제가 끝나도 요금제를
195
- * 바꾸는 것은 웹훅이라, 돌아온 뒤 `getBilling` 을 다시 읽는다.
200
+ * A Pro checkout session. Send the browser to the `url` that comes back. Even
201
+ * once payment finishes, the thing that changes the plan is the webhook, so
202
+ * read `getBilling` again after the browser returns.
196
203
  */
197
204
  createBillingCheckout(org: string, returnTo: string): Promise<Ok<"createBillingCheckout">>;
198
- /** 고객 포털(결제 수단·영수증·해지)의 일회용 `url`. */
205
+ /** A one-time `url` for the customer portal (payment method, receipts, cancellation). */
199
206
  createBillingPortal(org: string, returnTo: string): Promise<Ok<"createBillingPortal">>;
200
- /** 결제 수단 임베드의 고객 세션 토큰 (1 시간). 결제 이력 없는 org 는 404. */
207
+ /** The customer session token for the payment-method embed (1 hour). An org with no payment history gets a 404. */
201
208
  createBillingSession(org: string): Promise<Ok<"createBillingSession">>;
202
- /** 기간 끝 해지 예약(`cancel: true`) 또는 되돌리기. 즉시 회수는 없다. */
209
+ /** Schedules cancellation at the end of the period (`cancel: true`), or undoes it. There is no immediate revocation. */
203
210
  cancelBilling(org: string, body: {
204
211
  cancel: boolean;
205
212
  reason?: string;
@@ -209,67 +216,73 @@ export declare class Client {
209
216
  createProject(org: string, name: string): Promise<Ok<"createProject">>;
210
217
  getProject(org: string, name: string): Promise<Ok<"getProject">>;
211
218
  /**
212
- * 프로젝트 이름을 바꾼다 (admin). **기본 주소도 함께 움직이고 별칭은 없다** —
213
- * 응답이 새 주소를 싣는 이유다. org 슬러그와 달리 바꿀 수 있는 이유는
214
- * 그 이름이 org 와일드카드 인증서의 안쪽 라벨이기 때문이다.
219
+ * Renames the project (admin). **The default address moves with it and there is
220
+ * no alias** — which is why the response carries the new address. Unlike the
221
+ * org slug, this name can change because it is the inner label of the org
222
+ * wildcard certificate.
215
223
  */
216
224
  updateProject(org: string, name: string, next: string): Promise<Ok<"updateProject">>;
217
225
  /**
218
- * 프로젝트 종결을 시작한다 (admin). **되돌릴 수 없고 복구 세대를 남기지
219
- * 않는다.** `confirm` 은 프로젝트 이름 그대로여야 한다.
226
+ * Starts tearing the project down (admin). **This cannot be undone and leaves
227
+ * no recovery generation.** `confirm` has to be the project name exactly.
220
228
  */
221
229
  deleteProject(org: string, name: string, confirm: string): Promise<Ok<"deleteProject">>;
222
- /** 프로젝트가 사라진 뒤에도 종결 연산의 끝을 본다. */
230
+ /** Watches the teardown operation to its end even after the project is gone. */
223
231
  getOrgOperation(org: string, opId: string): Promise<Ok<"getOrgOperation">>;
224
- /** 프로젝트 첫 화면이 한 번에 받는 것. 사용량은 `getUsage` 를 나란히 부른다. */
232
+ /** Everything the project's first screen takes in one call. Usage calls `getUsage` alongside it. */
225
233
  getProjectOverview(org: string, name: string): Promise<Ok<"getProjectOverview">>;
226
234
  listDeployments(org: string, name: string): Promise<Ok<"listDeployments">>;
227
- /** 본문이 곧 번들이다. 다이제스트 하나가 코드와 자산 전부를 덮는다. */
235
+ /** The body is the bundle. One digest covers all of the code and the assets. */
228
236
  /**
229
- * 번들을 올린다. `headers` 는 출처 헤더다 (`X-Runlot-Git-*`, openapi
230
- * createDeployment) — 본문이 번들 그 자체라 메타는 헤더로만 간다.
237
+ * Uploads the bundle. `headers` carries the provenance headers
238
+ * (`X-Runlot-Git-*`, openapi createDeployment) — the body is the bundle
239
+ * itself, so the metadata can only travel in headers.
231
240
  */
232
241
  deploy(org: string, name: string, bundle: Uint8Array, headers?: Record<string, string>): Promise<Ok<"createDeployment">>;
233
- /** 멱등이다. 두 번 불러도 비밀번호는 굴지 않고 같은 접속 정보가 온다. */
242
+ /** Idempotent. Called twice, the password is not rolled and the same connection details come back. */
234
243
  createDatabase(org: string, name: string): Promise<Ok<"createDatabase">>;
235
244
  getDatabase(org: string, name: string): Promise<Ok<"getDatabase">>;
236
245
  /**
237
- * 접속 자격까지. `getDatabase` 와 라우트가 갈린 것은 역할 때문이다 —
238
- * viewer 는 여부를 알아도 되지만 비밀번호는 아니다 (proto/openapi.yaml).
246
+ * The connection credentials as well. The route is split from `getDatabase`
247
+ * because of roles — a viewer may know whether there is a database, but not
248
+ * the password (proto/openapi.yaml).
239
249
  */
240
250
  getDatabaseConnect(org: string, name: string): Promise<Ok<"getDatabaseConnect">>;
241
- /** 접속 끝점만 — 자격 없음. viewer 도 받는다. `runlot port-forward` 가 쓴다. */
251
+ /** The endpoint only — no credentials. A viewer gets it too. Used by `runlot port-forward`. */
242
252
  getDatabaseEndpoint(org: string, name: string): Promise<Ok<"getDatabaseEndpoint">>;
243
- /** 단기 기계 자격 발급. 비밀번호는 이 응답에만 실린다. */
253
+ /** Issues a short-lived machine credential. The password is carried in this response and nowhere else. */
244
254
  createDatabaseToken(org: string, name: string, ttlSeconds?: number): Promise<Ok<"createDatabaseToken">>;
245
255
  listDatabaseTokens(org: string, name: string): Promise<Ok<"listDatabaseTokens">>;
246
256
  deleteDatabaseToken(org: string, name: string, user: string): Promise<void>;
247
257
  /**
248
- * 진단 이미지를 하나 만든다.
258
+ * Makes one diagnostic image.
249
259
  *
250
- * **멱등이 아니다** — 부를 때마다 이미지가 하나 생긴다. 그리고 느리다:
251
- * 응답은 덤프가 끝난 뒤에 오고, 그동안 그 프로젝트의 액터는 붙잡혀 있다
252
- * (proto/openapi.yaml).
260
+ * **Not idempotent** — every call makes another image. And it is slow: the
261
+ * response comes after the dump finishes, and that project's actor is held
262
+ * for the whole of it (proto/openapi.yaml).
253
263
  */
254
264
  exportDatabase(org: string, name: string): Promise<Ok<"exportDatabase">>;
255
265
  /**
256
- * 복원이 고를 수 있는 세대 전부. 최신 순이고, `lastCheckedAt` 은 무변경
257
- * 스킵의 하트비트다 — 세대가 늘지 않는 것과 백업이 죽은 것을 가른다.
266
+ * Every generation a restore can choose, newest first. `lastCheckedAt` is the
267
+ * heartbeat of the no-change skip — it is what tells "no new generations"
268
+ * apart from "the backup is dead".
258
269
  */
259
270
  listGenerations(org: string, name: string): Promise<Ok<"listGenerations">>;
260
271
  /**
261
- * 세대로 되돌린다. **그 사이의 쓰기는 사라진다.**
272
+ * Rolls back to a generation. **Writes made since then are lost.**
262
273
  *
263
- * 202 로 끝난다 — 돌아오는 것은 연산 id 이고, 진행은
264
- * `getDatabaseOperation` 으로 본다. `latest` 는 서버가 풀지 않는다:
265
- * 목록에서 고른 `(epoch, seq)` 를 그대로 싣는다 (proto/openapi.yaml).
274
+ * It ends at 202 — what comes back is an operation id, and progress is read
275
+ * through `getDatabaseOperation`. The server does not resolve `latest`: the
276
+ * `(epoch, seq)` chosen from the list is carried as-is (proto/openapi.yaml).
266
277
  */
267
278
  restoreDatabase(org: string, name: string, epoch: number, seq: number): Promise<Ok<"restoreDatabase">>;
268
279
  /**
269
- * 백업 **안**의 복원점으로 되돌린다 (pg-feather docs/37): `txnId` 는 그 커밋,
270
- * `at` 은 그 시각 이하의 마지막 커밋. 백업 하나가 그 사이의 커밋을 순서대로
271
- * 담으므로 되돌릴 자리가 백업 경계에 묶이지 않는다. 그 밖은 restoreDatabase 와
272
- * 같다 — 202, 연산 id, 되돌리기 전에 안전 백업 하나.
280
+ * Rolls back to a restore point **inside** a backup (pg-feather docs/37):
281
+ * `txnId` is that commit, `at` is the last commit at or before that time. One
282
+ * backup carries the commits in between in order, so the place you can roll
283
+ * back to is not tied to a backup boundary. Everything else is as in
284
+ * restoreDatabase — 202, an operation id, and one safety backup before the
285
+ * rollback.
273
286
  */
274
287
  restoreDatabaseTo(org: string, name: string, target: {
275
288
  txnId: number;
@@ -277,18 +290,19 @@ export declare class Client {
277
290
  at: string;
278
291
  }): Promise<Ok<"restoreDatabase">>;
279
292
  /**
280
- * 데이터베이스를 없앤다. `confirm` 은 프로젝트 이름과 **정확히** 같아야
281
- * 하고, 다르면 서버가 400 `confirm_mismatch` 로 거절한다.
293
+ * Removes the database. `confirm` has to match the project name **exactly**;
294
+ * if it does not, the server refuses with 400 `confirm_mismatch`.
282
295
  */
283
296
  deleteDatabase(org: string, name: string, confirm: string): Promise<Ok<"deleteDatabase">>;
284
- /** 연산 하나의 진행. 연산 id 는 자격이 아니라 프로젝트 경로 아래에 있다. */
297
+ /** The progress of one operation. The operation id is not a credential; it lives under the project path. */
285
298
  getDatabaseOperation(org: string, name: string, opId: string): Promise<Ok<"getDatabaseOperation">>;
286
- /** 되돌릴 수 없는 phase 앞의 연산을 중단한다. */
299
+ /** Aborts an operation that has not yet reached a phase it cannot come back from. */
287
300
  abortDatabaseOperation(org: string, name: string, opId: string): Promise<Ok<"abortDatabaseOperation">>;
288
301
  /**
289
- * 로그 라이브 테일. **JSON 이 아니라 스트림**이라 `request` 를 안 지난다 —
290
- * 돌려주는 것은 줄 단위 `LogEvent` 의 async iterable 이고, `signal` 을 abort
291
- * 하면 연결이 끊긴다. 오류 응답(4xx/5xx)은 다른 메서드와 같은 `ApiError` 다.
302
+ * A live tail of the logs. It is **a stream, not JSON**, so it does not go
303
+ * through `request` — what comes back is an async iterable of line-by-line
304
+ * `LogEvent`, and aborting `signal` closes the connection. An error response
305
+ * (4xx/5xx) is the same `ApiError` as in every other method.
292
306
  */
293
307
  tailLogs(org: string, name: string, opts?: {
294
308
  tail?: number;
@@ -296,213 +310,235 @@ export declare class Client {
296
310
  signal?: AbortSignal;
297
311
  }): AsyncGenerator<LogEvent, void, undefined>;
298
312
  listSecrets(org: string, name: string): Promise<Ok<"listSecrets">>;
299
- /** 값은 이 호출로만 나간다. 어떤 응답에도 값은 없다. */
313
+ /** The value travels in this call only. It is in no response at all. */
300
314
  setSecret(org: string, name: string, secret: string, value: string): Promise<Ok<"setSecret">>;
301
315
  deleteSecret(org: string, name: string, secret: string): Promise<void>;
302
316
  getUsage(org: string, name: string, hours?: number): Promise<Ok<"getUsage">>;
303
- /** 부여 여부·접두·쿼터·사용량. `usedBytes` 는 노드 보고 주기만큼 늦다. */
317
+ /** Grant, prefix, quota, usage. `usedBytes` lags by the node's reporting interval. */
304
318
  getStorage(org: string, name: string): Promise<Ok<"getStorage">>;
305
319
  /**
306
- * 스토리지를 부여한다. 멱등이라 두 번 눌러도 접두는 그대로다. 접두·쿼터를
307
- * 인자로 받지 않는 것이 요점이다 — 접두는 격리의 경계이고 쿼터는 요금제가
308
- * 정한다 (proto/openapi.yaml).
320
+ * Grants storage. It is idempotent, so pressing twice leaves the prefix as it
321
+ * was. Taking neither the prefix nor the quota as an argument is the point —
322
+ * the prefix is the isolation boundary and the quota is set by the plan
323
+ * (proto/openapi.yaml).
309
324
  */
310
325
  grantStorage(org: string, name: string): Promise<Ok<"grantStorage">>;
311
- /** 부여를 뗀다. **객체는 지워지지 않는다** (docs/storage.md §7). */
326
+ /** Removes the grant. **The objects are not deleted** (docs/storage.md §7). */
312
327
  revokeStorage(org: string, name: string): Promise<void>;
313
- /** 부여 여부·주소·발신자·상한·최근 계수. 부여가 없어도 주소는 안내값으로 온다. */
328
+ /** Grant, address, sender, limits, recent counts. The address comes back as a preview even without a grant. */
314
329
  getEmail(org: string, name: string): Promise<Ok<"getEmail">>;
315
- /** 켠다. **멱등**이다 — 주소는 우리가 정한다. 배포가 `"email": true` 를 읽고 부른다. */
330
+ /** Turns it on. **Idempotent** — we choose the address. The deploy reads `"email": true` and calls this. */
316
331
  grantEmail(org: string, name: string): Promise<Ok<"grantEmail">>;
317
- /** 끈다. 그 주소로 오는 메일은 이제 550 이다. */
332
+ /** Turns it off. Mail arriving at that address now gets a 550. */
318
333
  revokeEmail(org: string, name: string): Promise<void>;
319
334
  /**
320
- * 모델 카탈로그. **로그인만 하면 볼 수 있다** — 무엇을 살 수 있는지는 org 의
321
- * 비밀이 아니고, 이 목록이 곧 가격표다.
335
+ * The model catalogue. **Being logged in is enough to see it** — what you can
336
+ * buy is not an organization's secret, and this list is the price table.
322
337
  *
323
- * 단가는 100 만 토큰당 **마이크로센트** 정수다 (1 µ¢ = 1e-8 USD). 소수 자리를
324
- * 서버가 정하지 않는 것이 요점이다 — 작은 호출이 센트로 반올림하면 0 이 된다.
338
+ * Prices are integer **micro-cents** per million tokens (1 µ¢ = 1e-8 USD).
339
+ * Not letting the server pick the decimal place is the point — a small call
340
+ * rounded to cents becomes 0.
325
341
  */
326
342
  listAIModels(): Promise<Ok<"listAIModels">>;
327
- /** 부여 여부·상한·org 잔액·24 h 사용량. 부여가 없어도 상한은 안내값으로 온다. */
343
+ /** Grant, limits, the org balance, 24 h usage. The limits come back as a preview even without a grant. */
328
344
  getAI(org: string, name: string): Promise<Ok<"getAI">>;
329
- /** 켠다. **멱등**이다. 배포가 `"ai": true` 를 읽고 부른다. */
345
+ /** Turns it on. **Idempotent.** The deploy reads `"ai": true` and calls this. */
330
346
  grantAI(org: string, name: string): Promise<Ok<"grantAI">>;
331
- /** 끈다. **원장과 잔액은 그대로다** — 잔액은 org 의 것이고 부여는 프로젝트의 것이다. */
347
+ /** Turns it off. **The ledger and the balance are untouched** — the balance belongs to the org and the grant belongs to the project. */
332
348
  revokeAI(org: string, name: string): Promise<void>;
333
- /** org 크레딧 잔액과 자동 충전 설정. 잔액은 마이크로센트이고 음수일 수 있다. */
349
+ /** The org's credit balance and its automatic top-up settings. The balance is in micro-cents and can be negative. */
334
350
  getAICredit(org: string): Promise<Ok<"getAICredit">>;
335
- /** org 원장 한 장. 커서는 `ledger_id` — 시각으로 자르면 같은 밀리초가 갈린다. */
351
+ /** One page of the org ledger. The cursor is `ledger_id` — cutting on time splits the same millisecond. */
336
352
  listAILedger(org: string, opts?: {
337
353
  limit?: number;
338
354
  before?: number;
339
355
  }): Promise<Ok<"listAILedger">>;
340
356
  /**
341
- * 크레딧 충전 체크아웃. **돌아온 브라우저는 증거가 아니다** — 잔액을 올리는
342
- * 것은 `order.paid` 웹훅 하나이고, 화면은 성공 사건 뒤에 잔액을 폴링한다.
357
+ * The credit top-up checkout. **A browser coming back is not evidence** — the
358
+ * one thing that raises the balance is the `order.paid` webhook, and the
359
+ * screen polls the balance after the success event.
343
360
  */
344
361
  createAICreditCheckout(org: string, microCents: number, returnTo: string): Promise<Ok<"createAICreditCheckout">>;
345
362
  /**
346
- * 자동 충전을 켜거나 끈다. **켜는 것은 명시 동의다** (docs/ai.md §3.5) — 화면이
347
- * 청구 조건을 그대로 보여 주고 체크를 받은 뒤에만 부른다.
363
+ * Turns automatic top-up on or off. **Turning it on is explicit consent**
364
+ * (docs/ai.md §3.5) — the screen shows the charging terms verbatim and calls
365
+ * this only after the box is checked.
348
366
  */
349
367
  setAIAutoTopup(org: string, body: {
350
368
  enabled: boolean;
351
369
  belowMicroCents?: number;
352
370
  microCents?: number;
353
371
  }): Promise<Ok<"setAIAutoTopup"> | void>;
354
- /** 메일 로그 한 장 (docs/email.md §6.1). 시각 역순, 커서. */
372
+ /** One page of the mail log (docs/email.md §6.1). Newest first, cursor-paged. */
355
373
  listMailLog(org: string, name: string, opts?: {
356
374
  direction?: "in" | "out";
357
375
  cursor?: string;
358
376
  limit?: number;
359
377
  }): Promise<Ok<"listMailLog">>;
360
- /** 메일 한 통의 메타. */
378
+ /** The metadata of one message. */
361
379
  getMailLog(org: string, name: string, mailId: string): Promise<Ok<"getMailLog">>;
362
- /** 원문의 URL — 화면이 내려받기 링크로 쓴다 (.eml). */
380
+ /** The URL of the raw message — the screen uses it as a download link (.eml). */
363
381
  mailLogRawURL(org: string, name: string, mailId: string): string;
364
- /** 원문 텍스트. 화면의 상세가 헤더·본문을 그리는 재료. */
382
+ /** The raw text. What the detail view draws the headers and body from. */
365
383
  getMailLogRaw(org: string, name: string, mailId: string): Promise<string>;
366
384
  /**
367
- * 부여 여부·설정·프로바이더·호스트. **가입자는 안 온다** — 그 표는 프로젝트
368
- * DB 안이고 (docs/auth.md §6) 워커의 `env.auth` 만 본다.
385
+ * Grant, settings, providers, hosts. **The signed-up users do not come** —
386
+ * that table is inside the project DB (docs/auth.md §6) and only the worker's
387
+ * `env.auth` sees it.
369
388
  *
370
- * `providers` 에는 client id 만 있다. 클라이언트 시크릿은 봉인돼 어느
371
- * 응답에도 안 나온다.
389
+ * `providers` carries the client id only. The client secret is sealed and
390
+ * appears in no response.
372
391
  */
373
392
  getAuth(org: string, name: string): Promise<Ok<"getAuth">>;
374
393
  /**
375
- * 인증을 켠다 (member). 멱등이다.
394
+ * Turns auth on (member). Idempotent.
376
395
  *
377
- * **데이터베이스가 없으면 409 `database_required`** 다 — 가입자 표가
378
- * 프로젝트 DB 안이라 부여만 세우면 워커가 뜨는 순간 표가 없다. 부르는 쪽은
379
- * 그 코드를 잡아 `"database": true` 선언을 안내한다 — 배포는 순서로 이 코드를 안 본다.
396
+ * **With no database it is 409 `database_required`** — the user table lives
397
+ * inside the project DB, so standing up the grant alone leaves no table the
398
+ * moment the worker starts. The caller catches that code and points at the
399
+ * `"database": true` declaration — the deploy never sees this code, because
400
+ * its ordering rules it out.
380
401
  */
381
402
  grantAuth(org: string, name: string): Promise<Ok<"grantAuth">>;
382
403
  /**
383
- * 설정을 바꾼다 (member). **부분 갱신이다** — 준 칸만 바뀐다. 스위치 하나에
384
- * 전체를 실어 보내면 두 사람이 같은 카드를 만질 때 나중 저장이 앞 저장을
385
- * 덮는다. 부여가 없으면 404 `not_granted`.
404
+ * Changes the settings (member). **A partial update** — only the fields given
405
+ * change. Sending the whole thing on one switch means that when two people
406
+ * touch the same card, the later save overwrites the earlier one. With no
407
+ * grant it is 404 `not_granted`.
386
408
  */
387
409
  updateAuthSettings(org: string, name: string, settings: AuthSettingsInput): Promise<Ok<"updateAuthSettings">>;
388
410
  /**
389
- * 인증을 해제한다 (admin). **가입자는 안 지워진다** — `runlot_auth` 의 표는
390
- * 프로젝트 DB 에 남고, 다시 켜면 같은 사람들이 그대로 로그인한다.
411
+ * Turns auth off (admin). **The signed-up users are not deleted** — the
412
+ * `runlot_auth` tables stay in the project DB, and turning it back on lets the
413
+ * same people log in unchanged.
391
414
  */
392
415
  revokeAuth(org: string, name: string): Promise<void>;
393
416
  /**
394
- * 소셜 프로바이더를 등록하거나 교체한다 (admin). 같은 PUT 이라 멱등이다.
417
+ * Registers or replaces a social provider (admin). It is the same PUT, so it
418
+ * is idempotent.
395
419
  *
396
- * **`clientSecret` 은 다시 볼 수 없다.** 콜백 URL 은 호스트마다
397
- * `https://<host>/__runlot/auth/callback/<provider>` 이고, 호스트 목록은
398
- * 응답의 `hosts` 에 있다.
420
+ * **`clientSecret` cannot be read back.** The callback URL is
421
+ * `https://<host>/__runlot/auth/callback/<provider>` for each host, and the
422
+ * list of hosts is in the response's `hosts`.
399
423
  */
400
424
  setAuthProvider(org: string, name: string, provider: AuthProvider, clientId: string, clientSecret: string): Promise<Ok<"setAuthProvider">>;
401
425
  /**
402
- * 프로바이더를 뗀다 (admin). 그 프로바이더로만 가입한 사람은 로그인할 길을
403
- * 잃지만 사용자 행은 남는다 — 다시 등록하면 같은 계정으로 돌아온다.
426
+ * Removes a provider (admin). Someone who signed up only through that provider
427
+ * loses their way in, but the user row stays — register it again and they come
428
+ * back to the same account.
404
429
  */
405
430
  deleteAuthProvider(org: string, name: string, provider: AuthProvider): Promise<void>;
406
431
  /**
407
- * 이 배포에 누가 닿을 수 있는가. **값은 없다** — 비밀번호도 우회 시크릿도
408
- * 해시로만 살고, 여기 오는 것은 `hasPassword`·`hasBypass` 라는 사실이다.
432
+ * Who can reach this deployment. **No values** — both the password and the
433
+ * bypass secret live only as hashes, and what comes back here is the fact that
434
+ * there is one: `hasPassword` and `hasBypass`.
409
435
  *
410
- * 정책을 한 번도 안 정한 프로젝트는 `mode: "public"` 에 `updatedAt` 이
411
- * 없다. 화면이 그 둘을 가르는 이유는 §7 — 빈 상태 대신 상태 문장이다.
436
+ * A project that has never set a policy is `mode: "public"` with no
437
+ * `updatedAt`. The screen tells those two apart for the reason in §7 — a
438
+ * sentence about the state instead of an empty state.
412
439
  */
413
440
  getAccess(org: string, name: string): Promise<Ok<"getAccess">>;
414
441
  /**
415
- * 정책을 바꾼다 (admin). `password` 를 안 보내면 **있던 비밀번호가 남는다** —
416
- * 모드만 바꾸는 저장이 비밀번호를 지우면 되돌아왔을 때 다시 정해야 한다.
442
+ * Changes the policy (admin). Without a `password`, **the existing password
443
+ * stays** — if a save that only changes the mode wiped the password, coming
444
+ * back to that mode would mean setting it again.
417
445
  */
418
446
  setAccess(org: string, name: string, mode: AccessMode, password?: string): Promise<Ok<"setAccess">>;
419
447
  /**
420
- * 자동화 우회 시크릿을 만든다 (admin). **값은 이 답에만 있다** — 화면은
421
- * 받은 즉시 한 번 보여주고 다시 못 가져온다. 다시 부르면 옛 값이 죽는다.
448
+ * Makes a bypass secret for automation (admin). **The value is in this answer
449
+ * and nowhere else** — the screen shows it once on arrival and can never fetch
450
+ * it again. Calling again kills the old value.
422
451
  */
423
452
  newAccessBypass(org: string, name: string): Promise<Ok<"newAccessBypass">>;
424
- /** 우회를 뗀다 (admin). 없는 우회를 떼는 것도 성공이다. */
453
+ /** Removes the bypass (admin). Removing one that does not exist also succeeds. */
425
454
  revokeAccessBypass(org: string, name: string): Promise<void>;
426
455
  /**
427
- * 보호된 배포로 돌아가는 1 회용 주소를 받는다 (docs/access.md §3.4-3).
456
+ * Gets a one-time address back into a protected deployment (docs/access.md §3.4-3).
428
457
  *
429
- * 프로젝트 경로 아래가 **아니다**: 부르는 화면이 아는 것은 호스트네임뿐이고
430
- * (원 요청이 그리로 갔다), org·프로젝트 이름은 서버가 그것에서 유도한다.
431
- * 받은 `redirect` 로 `location.replace` 하는 것이 호출부의 일이다.
458
+ * It is **not** under the project path: all the calling screen knows is the
459
+ * hostname (the original request went there), and the server derives the org
460
+ * and project names from it. Doing `location.replace` with the `redirect` that
461
+ * comes back is the caller's job.
432
462
  */
433
463
  authorizeAccess(to: string, next?: string): Promise<Ok<"authorizeAccess">>;
434
464
  listMembers(org: string): Promise<Ok<"listMembers">>;
435
- /** 초대가 아니다 — 사용자는 이미 한 번 로그인해 있어야 한다 (404 `user_not_found`). */
465
+ /** This is not an invite — the user must already have logged in once (404 `user_not_found`). */
436
466
  addMember(org: string, provider: "dev" | "github", subject: string, role: Role): Promise<Ok<"addMember">>;
437
467
  setMemberRole(org: string, userId: string, role: Role): Promise<Ok<"setMemberRole">>;
438
468
  /**
439
- * 남을 빼는 것은 admin, **자기를 빼는 것은 탈퇴**라 누구나 할 수 있다
440
- * (docs/members.md). 마지막 admin 은 둘 다 못 한다 (409 `last_admin`).
469
+ * Removing someone else is admin; **removing yourself is leaving**, which
470
+ * anyone can do (docs/members.md). The last admin can do neither
471
+ * (409 `last_admin`).
441
472
  */
442
473
  removeMember(org: string, userId: string): Promise<void>;
443
- /** 대기·만료된 초대 (admin). 수락·폐기된 것은 이력이라 안 온다. */
474
+ /** Pending and expired invites (admin). Accepted and revoked ones are history, so they do not come. */
444
475
  listInvites(org: string): Promise<Ok<"listInvites">>;
445
476
  /**
446
- * 이메일로 부른다 (admin). **같은 주소로 다시 부르면 재발송**이다 — 새 행이
447
- * 아니라 같은 행이 갱신되고 서버가 201 대신 200 을 준다.
477
+ * Invites by email (admin). **Calling again with the same address is a
478
+ * resend** — the same row is updated rather than a new one created, and the
479
+ * server gives 200 instead of 201.
448
480
  */
449
481
  createInvite(org: string, email: string, role: Role): Promise<Ok<"createInvite">>;
450
- /** 폐기 (admin). 아직 안 나간 메일은 안 나간다. */
482
+ /** Revokes an invite (admin). Mail that has not gone out yet does not go out. */
451
483
  revokeInvite(org: string, inviteId: string): Promise<void>;
452
484
  /**
453
- * 초대 미리보기. **세션이 없어도 된다** — 링크를 받은 사람은 아직 로그인
454
- * 전이고, 로그인하기 전에 무엇을 수락하는지 알아야 한다.
485
+ * A preview of the invite. **No session needed** — whoever got the link has
486
+ * not logged in yet, and they need to know what they are accepting before
487
+ * they do.
455
488
  */
456
489
  getInvite(token: string): Promise<Ok<"getInvite">>;
457
- /** 수락 (로그인 필요). 이미 멤버면 역할은 안 바뀐다. */
490
+ /** Accepts (login required). If they are already a member the role does not change. */
458
491
  acceptInvite(token: string): Promise<Ok<"acceptInvite">>;
459
- /** 기본 호스트네임과 커스텀 도메인이 함께 온다 (viewer). */
492
+ /** The default hostname and the custom domains come together (viewer). */
460
493
  listHostnames(org: string, name: string): Promise<Ok<"listHostnames">>;
461
494
  /**
462
- * 커스텀 도메인을 건다 (member).
495
+ * Attaches a custom domain (member).
463
496
  *
464
- * 멱등이다 — 같은 이름을 다시 보내면 있던 행이 그대로 온다. 응답의 `verify`
465
- * 가 고객이 넣어야 하는 CNAME·TXT 다.
497
+ * Idempotent — sending the same name again returns the existing row
498
+ * unchanged. The response's `verify` is the CNAME and TXT the customer has to
499
+ * add.
466
500
  */
467
501
  addHostname(org: string, name: string, hostname: string): Promise<Ok<"addHostname">>;
468
- /** 배경 검증과 같은 판정을 즉시 부른다 (member). */
502
+ /** Runs the same check the background verifier makes, right now (member). */
469
503
  verifyHostname(org: string, name: string, host: string): Promise<Ok<"verifyHostname">>;
470
- /** 커스텀 도메인을 뗀다 (member). 기본 호스트네임은 400 이다. */
504
+ /** Detaches a custom domain (member). The default hostname gives a 400. */
471
505
  deleteHostname(org: string, name: string, host: string): Promise<void>;
472
- /** 이 조직의 존 목록. `rrsets` 는 없다 — 단건 조회에만 실려요. */
506
+ /** The organization's zones. No `rrsets` — those ride only on a single-zone lookup. */
473
507
  listZones(org: string): Promise<Ok<"listZones">>;
474
- /** 멱등이에요. 이미 있는 존은 그대로 돌아와요. */
508
+ /** Idempotent. A zone that already exists comes back unchanged. */
475
509
  createZone(org: string, name: string): Promise<Ok<"createZone">>;
476
510
  getZone(org: string, zone: string): Promise<Ok<"getZone">>;
477
511
  deleteZone(org: string, zone: string): Promise<void>;
478
512
  /**
479
- * rrset 하나를 **통째로** 바꿔요. `records` 가 그 (이름, 타입) 의 새 전부라,
480
- * 값 하나를 더하려면 지금 값을 함께 보내야 해요.
513
+ * Replaces one rrset **whole**. `records` is the complete new set for that
514
+ * (name, type), so adding a single value means sending the current ones with
515
+ * it.
481
516
  */
482
517
  putRRset(org: string, zone: string, name: string, type: RRsetType, ttl: number, records: string[]): Promise<Ok<"putRRset">>;
483
518
  deleteRRset(org: string, zone: string, name: string, type: RRsetType): Promise<void>;
484
519
  setZoneDNSSEC(org: string, zone: string, enabled: boolean): Promise<Ok<"setZoneDNSSEC">>;
485
520
  setZoneDS(org: string, zone: string, ds: string[]): Promise<Ok<"setZoneDS">>;
486
- /** DNS 표면의 공통 접두. */
521
+ /** The shared prefix of the DNS surface. */
487
522
  private dnsPath;
488
- /** `@` 도 `*` 도 이름으로 와요. 네 군데에 같은 문자열을 적지 않아요. */
523
+ /** Both `@` and `*` arrive as a name. Keeps the same string out of four places. */
489
524
  private rrsetPath;
490
525
  /**
491
- * 이름을 찾아본다 (member 이상).
526
+ * Looks a name up (member or above).
492
527
  *
493
- * `priceCents` 는 첫 등록 1 년, `renewalCents` 는 갱신 1 년이다. 둘이
494
- * 나뉘어 있는 이유는 첫해 할인이 흔해서다 — 하나로 접으면 "1 달러에 사서
495
- * 다음 해 15 달러" 를 화면이 말할 수 없다.
528
+ * `priceCents` is the first year of registration; `renewalCents` is one year
529
+ * of renewal. They are separate because a first-year discount is common —
530
+ * folded into one, the screen cannot say "buy it for $1, then $15 next year".
496
531
  */
497
532
  checkDomains(org: string, names: string[]): Promise<Ok<"checkDomains">>;
498
533
  /**
499
- * 도메인을 산다 (admin — 돈을 써요).
534
+ * Buys a domain (admin — this spends money).
500
535
  *
501
- * **ICANN 검증 메일이 `contact.email` 로 가요.** 화면은 사기 전에 그
502
- * 사실을 알려야 해요 (docs/domains.md §5.5).
536
+ * **The ICANN verification mail goes to `contact.email`.** The screen has to
537
+ * say so before the purchase (docs/domains.md §5.5).
503
538
  *
504
- * 같은 요청을 다시 보내는 것이 안전해요 — 끝난 도메인이면 그대로 오고,
505
- * 중간에 멈춘 구매면 그 자리에서 이어 가요.
539
+ * Sending the same request again is safe — a finished domain comes back
540
+ * unchanged, and a purchase that stopped part way resumes from where it
541
+ * stopped.
506
542
  */
507
543
  purchaseDomain(org: string, body: {
508
544
  name: string;
@@ -510,30 +546,30 @@ export declare class Client {
510
546
  contact: DomainContact;
511
547
  projectId?: string;
512
548
  }): Promise<Ok<"purchaseDomain">>;
513
- /** 이미 가진 도메인을 가져와요 (admin). 등록기관을 부르지 않고 존만 만들어요. */
549
+ /** Imports a domain you already own (admin). Creates the zone only; the registrar is not called. */
514
550
  importDomain(org: string, name: string): Promise<Ok<"importDomain">>;
515
551
  listDomains(org: string): Promise<Ok<"listDomains">>;
516
552
  getDomain(org: string, name: string): Promise<Ok<"getDomain">>;
517
553
  renewDomain(org: string, name: string, years: number): Promise<Ok<"renewDomain">>;
518
554
  /**
519
- * 자동 갱신 **의사**만 바꿔요.
555
+ * Changes only the **intent** to auto-renew.
520
556
  *
521
- * 등록기관 쪽 자동 갱신은 그대로 켜져 있어요 — 도메인은 하루 늦으면 잃는
522
- * 자산이라 우리가 먼저 갱신하고 뒤에 청구해요. 화면은 이 사실을 함께
523
- * 말해야 해요.
557
+ * Auto-renew at the registrar stays on — a domain is an asset you lose if you
558
+ * are a day late, so we renew first and bill afterwards. The screen has to say
559
+ * this alongside.
524
560
  */
525
561
  setDomainAutoRenew(org: string, name: string, enabled: boolean): Promise<Ok<"setDomainAutoRenew">>;
526
562
  setDomainLock(org: string, name: string, locked: boolean): Promise<Ok<"setDomainLock">>;
527
- /** 이전 코드예요. 감사에 발급 사실이 남고 **코드는 남지 않아요**. */
563
+ /** The transfer auth code. The audit records that one was issued and **not the code itself**. */
528
564
  domainAuthCode(org: string, name: string): Promise<Ok<"getDomainAuthCode">>;
529
- /** 지금 등록기관에서 다시 읽어요 (member). */
565
+ /** Re-reads from the registrar right now (member). */
530
566
  syncDomain(org: string, name: string): Promise<Ok<"syncDomain">>;
531
- /** 도메인 표면의 공통 접두. 열 군데에 같은 문자열을 적지 않아요. */
567
+ /** The shared prefix of the domain surface. Keeps the same string out of ten places. */
532
568
  private domainsPath;
533
569
  private domainPath;
534
- /** 프로젝트 표면의 공통 접두다. */
570
+ /** The shared prefix of the project surface. */
535
571
  private projectPath;
536
- /** 데이터베이스 표면의 공통 접두다. 다섯 군데에 같은 문자열을 적지 않는다. */
572
+ /** The shared prefix of the database surface. Keeps the same string out of five places. */
537
573
  private dbPath;
538
574
  listRepos(org: string, project: string): Promise<Ok<"listRepos">>;
539
575
  createRepo(org: string, project: string, body: {
@@ -548,13 +584,13 @@ export declare class Client {
548
584
  defaultBranch?: string | undefined;
549
585
  }): Promise<void>;
550
586
  deleteRepo(org: string, project: string, name: string): Promise<void>;
551
- /** ref 이력. force-push 로 잃은 커밋을 되찾는 단서가 여기 있다. */
587
+ /** The ref history. The lead for recovering a commit lost to a force-push is here. */
552
588
  listRefUpdates(org: string, project: string, name: string): Promise<Ok<"listRefUpdates">>;
553
589
  listSSHKeys(): Promise<Ok<"listSSHKeys">>;
554
590
  addSSHKey(publicKey: string, name?: string): Promise<Ok<"addSSHKey">>;
555
591
  deleteSSHKey(keyId: string): Promise<void>;
556
592
  listAccessTokens(): Promise<Ok<"listAccessTokens">>;
557
- /** 평문은 이 응답에 **한 번만** 실린다. */
593
+ /** The plaintext is carried in this response **once** and never again. */
558
594
  createAccessToken(body: {
559
595
  name: string;
560
596
  scope?: TokenScope | undefined;
@@ -565,7 +601,7 @@ export declare class Client {
565
601
  getRepoTree(org: string, project: string, name: string, ref?: string, path?: string): Promise<Ok<"getRepoTree">>;
566
602
  getRepoBlob(org: string, project: string, name: string, ref?: string, path?: string): Promise<Ok<"getRepoBlob">>;
567
603
  getRepoCommits(org: string, project: string, name: string, ref?: string, limit?: number): Promise<Ok<"getRepoCommits">>;
568
- /** 저장소 표면의 공통 접두다. 프로젝트 아래에 있다 (§19). */
604
+ /** The shared prefix of the repository surface. It sits under the project (§19). */
569
605
  private repoPath;
570
606
  rollback(org: string, name: string, version: number): Promise<Ok<"rollback">>;
571
607
  }