@runlot/api 0.1.0-rc.39 → 0.1.0-rc.41
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 +31 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -1
- package/dist/schema.d.ts +417 -9
- package/dist/schema.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/schema.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export interface paths {
|
|
|
38
38
|
/**
|
|
39
39
|
* GitHub OAuth 시작
|
|
40
40
|
* @description `redirect` 는 로그인이 끝난 뒤 토큰을 fragment 로 실어 돌아갈 클라이언트
|
|
41
|
-
* 콜백이다 (`https://dash.runlot.
|
|
41
|
+
* 콜백이다 (`https://dash.runlot.io/login/callback`). 서버의 허용 목록
|
|
42
42
|
* (`RUNLOT_GITHUB_REDIRECTS`, 기본은 `RUNLOT_PUBLIC_URL`) 접두에 맞아야 한다.
|
|
43
43
|
* 302 로 GitHub authorize 페이지로 보낸다. 브라우저가 따라가는 경로라
|
|
44
44
|
* 클라이언트 라이브러리는 부르지 않는다 — `window.location` 으로 연다.
|
|
@@ -128,6 +128,36 @@ export interface paths {
|
|
|
128
128
|
patch?: never;
|
|
129
129
|
trace?: never;
|
|
130
130
|
};
|
|
131
|
+
"/v1/config": {
|
|
132
|
+
parameters: {
|
|
133
|
+
query?: never;
|
|
134
|
+
header?: never;
|
|
135
|
+
path?: never;
|
|
136
|
+
cookie?: never;
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* 이 배치의 이름들
|
|
140
|
+
* @description 대시보드가 **어느 배치에 붙어 있는지** 알아보는 자리다
|
|
141
|
+
* (`docs/environments.md §3.2`). 대시보드는 정적 빌드 하나라 배치마다
|
|
142
|
+
* 다른 값을 알 길이 없었고, 화면이 그것을 문자열로 박고 있었다 —
|
|
143
|
+
* 환경이 둘이 되면 dev 화면이 프로덕션의 주소를 안내하고 그 안내는
|
|
144
|
+
* 그럴듯해서 아무 시험에도 안 잡힌다.
|
|
145
|
+
*
|
|
146
|
+
* 인증이 없다: 로그인 화면에도 문서 링크가 있다. 여기 실리는 것은
|
|
147
|
+
* 랜딩 페이지에 이미 적힌 이름들뿐이다.
|
|
148
|
+
*
|
|
149
|
+
* 기능의 켜짐/꺼짐은 여기 없다 — 결제·저장소·이메일은 각자의 끝점이
|
|
150
|
+
* 자기 상태를 말한다.
|
|
151
|
+
*/
|
|
152
|
+
get: operations["getSiteConfig"];
|
|
153
|
+
put?: never;
|
|
154
|
+
post?: never;
|
|
155
|
+
delete?: never;
|
|
156
|
+
options?: never;
|
|
157
|
+
head?: never;
|
|
158
|
+
patch?: never;
|
|
159
|
+
trace?: never;
|
|
160
|
+
};
|
|
131
161
|
"/v1/me": {
|
|
132
162
|
parameters: {
|
|
133
163
|
query?: never;
|
|
@@ -1399,10 +1429,14 @@ export interface paths {
|
|
|
1399
1429
|
get: operations["listMembers"];
|
|
1400
1430
|
put?: never;
|
|
1401
1431
|
/**
|
|
1402
|
-
* 기존 사용자를 멤버로 넣는다 (
|
|
1403
|
-
* @description **초대가
|
|
1404
|
-
*
|
|
1405
|
-
*
|
|
1432
|
+
* 기존 사용자를 멤버로 넣는다 (운영·자동화용)
|
|
1433
|
+
* @description **초대가 아니다.** 사용자는 이미 한 번 로그인해 `users` 에 있어야 하고
|
|
1434
|
+
* (`provider`+`subject` 로 가리킨다), 없으면 404 `user_not_found`. 이미
|
|
1435
|
+
* 멤버면 409 `already_member` — 역할을 바꾸는 것은 PUT 이다.
|
|
1436
|
+
*
|
|
1437
|
+
* 사람을 부르는 표면은 이것이 아니라 `POST …/invites` 다
|
|
1438
|
+
* (docs/members.md): GitHub 의 `subject` 는 숫자 id 라 관리자가 알 수
|
|
1439
|
+
* 없는 값이고, 이 끝점은 그것을 이미 아는 자동화의 것이다.
|
|
1406
1440
|
*
|
|
1407
1441
|
* admin 이상. 감사 `member.add`.
|
|
1408
1442
|
*/
|
|
@@ -1413,6 +1447,133 @@ export interface paths {
|
|
|
1413
1447
|
patch?: never;
|
|
1414
1448
|
trace?: never;
|
|
1415
1449
|
};
|
|
1450
|
+
"/v1/orgs/{orgSlug}/invites": {
|
|
1451
|
+
parameters: {
|
|
1452
|
+
query?: never;
|
|
1453
|
+
header?: never;
|
|
1454
|
+
path: {
|
|
1455
|
+
orgSlug: components["parameters"]["OrgSlug"];
|
|
1456
|
+
};
|
|
1457
|
+
cookie?: never;
|
|
1458
|
+
};
|
|
1459
|
+
/**
|
|
1460
|
+
* 대기 중인 초대 (`runlot member invites`)
|
|
1461
|
+
* @description **admin 이상.** 멤버 목록은 member 이상이 보지만 초대 목록은 다르다 —
|
|
1462
|
+
* 아직 조직에 없는 사람들의 이메일이고, 그것은 명부가 아니라 관리 작업의
|
|
1463
|
+
* 상태다.
|
|
1464
|
+
*
|
|
1465
|
+
* 수락·폐기된 초대는 안 나온다 (이력의 자리는 감사 기록이다). 만료된
|
|
1466
|
+
* 초대는 나온다 — 거기서 관리자가 할 일이 재발송이다.
|
|
1467
|
+
*/
|
|
1468
|
+
get: operations["listInvites"];
|
|
1469
|
+
put?: never;
|
|
1470
|
+
/**
|
|
1471
|
+
* 이메일로 초대한다 (`runlot member invite`)
|
|
1472
|
+
* @description admin 이상. 메일은 즉시 나가지 않는다 — cp-core 의 발송 회차가 큐를
|
|
1473
|
+
* 훑는다 (`sentAt` 이 비어 있으면 아직 큐에 있다는 뜻이다).
|
|
1474
|
+
*
|
|
1475
|
+
* **같은 주소로 다시 부르면 재발송이다**: 새 초대가 아니라 같은 행이
|
|
1476
|
+
* 갱신되고 (토큰·만료가 새로 서고 역할이 바뀐다) 200 으로 답한다. 새
|
|
1477
|
+
* 초대는 201 이다.
|
|
1478
|
+
*
|
|
1479
|
+
* 이미 멤버인 주소는 409 `already_member`. 대기 중 초대가 너무 많으면
|
|
1480
|
+
* 409 `too_many_invites` — 요금제 한도가 아니라 발신 남용 방지다.
|
|
1481
|
+
*
|
|
1482
|
+
* 수명은 이레, 한 번 쓰면 끝, 언제든 폐기할 수 있다. 감사 `member.invite`.
|
|
1483
|
+
*/
|
|
1484
|
+
post: operations["createInvite"];
|
|
1485
|
+
delete?: never;
|
|
1486
|
+
options?: never;
|
|
1487
|
+
head?: never;
|
|
1488
|
+
patch?: never;
|
|
1489
|
+
trace?: never;
|
|
1490
|
+
};
|
|
1491
|
+
"/v1/orgs/{orgSlug}/invites/{inviteId}": {
|
|
1492
|
+
parameters: {
|
|
1493
|
+
query?: never;
|
|
1494
|
+
header?: never;
|
|
1495
|
+
path: {
|
|
1496
|
+
orgSlug: components["parameters"]["OrgSlug"];
|
|
1497
|
+
inviteId: string;
|
|
1498
|
+
};
|
|
1499
|
+
cookie?: never;
|
|
1500
|
+
};
|
|
1501
|
+
get?: never;
|
|
1502
|
+
put?: never;
|
|
1503
|
+
post?: never;
|
|
1504
|
+
/**
|
|
1505
|
+
* 초대를 취소한다 (`runlot member uninvite`)
|
|
1506
|
+
* @description admin 이상. 아직 안 나간 메일은 **안 나간다** — 폐기가 발송 큐도 비운다.
|
|
1507
|
+
* 이미 수락·폐기된 초대는 404. 감사 `member.uninvite`.
|
|
1508
|
+
*/
|
|
1509
|
+
delete: operations["revokeInvite"];
|
|
1510
|
+
options?: never;
|
|
1511
|
+
head?: never;
|
|
1512
|
+
patch?: never;
|
|
1513
|
+
trace?: never;
|
|
1514
|
+
};
|
|
1515
|
+
"/v1/invites/{token}": {
|
|
1516
|
+
parameters: {
|
|
1517
|
+
query?: never;
|
|
1518
|
+
header?: never;
|
|
1519
|
+
path: {
|
|
1520
|
+
token: string;
|
|
1521
|
+
};
|
|
1522
|
+
cookie?: never;
|
|
1523
|
+
};
|
|
1524
|
+
/**
|
|
1525
|
+
* 초대 미리보기 (인증 없음)
|
|
1526
|
+
* @description **인증이 없다.** 초대 링크를 받은 사람은 아직 로그인하지 않았고, 로그인
|
|
1527
|
+
* 하기 전에 이것이 무엇인지 알아야 한다. 토큰은 32 바이트 난수라 열거할
|
|
1528
|
+
* 수 없고, 그래서 여는 대가가 "우리가 메일을 보낸 사람이 조직 이름을
|
|
1529
|
+
* 본다" 로 끝난다.
|
|
1530
|
+
*
|
|
1531
|
+
* **상태는 오류가 아니라 값이다** (`state`). 만료된 초대에 404 를 주면
|
|
1532
|
+
* 화면이 "링크가 틀렸다" 와 "링크가 늙었다" 를 구분하지 못한다.
|
|
1533
|
+
*
|
|
1534
|
+
* 모르는 토큰은 404 — 오래전에 폐기된 토큰과 같은 답이다.
|
|
1535
|
+
*/
|
|
1536
|
+
get: operations["getInvite"];
|
|
1537
|
+
put?: never;
|
|
1538
|
+
post?: never;
|
|
1539
|
+
delete?: never;
|
|
1540
|
+
options?: never;
|
|
1541
|
+
head?: never;
|
|
1542
|
+
patch?: never;
|
|
1543
|
+
trace?: never;
|
|
1544
|
+
};
|
|
1545
|
+
"/v1/invites/{token}/accept": {
|
|
1546
|
+
parameters: {
|
|
1547
|
+
query?: never;
|
|
1548
|
+
header?: never;
|
|
1549
|
+
path: {
|
|
1550
|
+
token: string;
|
|
1551
|
+
};
|
|
1552
|
+
cookie?: never;
|
|
1553
|
+
};
|
|
1554
|
+
get?: never;
|
|
1555
|
+
put?: never;
|
|
1556
|
+
/**
|
|
1557
|
+
* 초대를 수락한다
|
|
1558
|
+
* @description 로그인이 필요하다. **로그인한 계정의 이메일이 초대한 주소와 같아야
|
|
1559
|
+
* 한다는 규칙은 없다** — GitHub 비공개 이메일로 로그인한 사람은
|
|
1560
|
+
* `users.email` 이 아예 없고, 그 규칙을 넣으면 그 사람은 어떤 조직에도
|
|
1561
|
+
* 들어올 수 없다. 대신 수명 이레 · 한 번 쓰면 끝 · 언제든 폐기이고,
|
|
1562
|
+
* 감사 기록에 초대한 주소와 수락한 계정이 **둘 다** 남는다.
|
|
1563
|
+
*
|
|
1564
|
+
* **이미 멤버면 역할이 안 바뀐다** (`alreadyMember: true`). 초대장 하나가
|
|
1565
|
+
* admin 을 강등하는 표면이 되면 그 강등은 마지막-admin 검사를 지나지
|
|
1566
|
+
* 않는다.
|
|
1567
|
+
*
|
|
1568
|
+
* 감사 `member.accept`.
|
|
1569
|
+
*/
|
|
1570
|
+
post: operations["acceptInvite"];
|
|
1571
|
+
delete?: never;
|
|
1572
|
+
options?: never;
|
|
1573
|
+
head?: never;
|
|
1574
|
+
patch?: never;
|
|
1575
|
+
trace?: never;
|
|
1576
|
+
};
|
|
1416
1577
|
"/v1/orgs/{orgSlug}/members/{userId}": {
|
|
1417
1578
|
parameters: {
|
|
1418
1579
|
query?: never;
|
|
@@ -1434,9 +1595,14 @@ export interface paths {
|
|
|
1434
1595
|
put: operations["setMemberRole"];
|
|
1435
1596
|
post?: never;
|
|
1436
1597
|
/**
|
|
1437
|
-
* 멤버를 뺀다 (`runlot
|
|
1438
|
-
* @description
|
|
1439
|
-
* `
|
|
1598
|
+
* 멤버를 뺀다 · 스스로 나간다 (`runlot member rm`, `runlot member leave`)
|
|
1599
|
+
* @description **남을 빼는 것은 admin 이상, 자기를 빼는 것은 누구나** 할 수 있다
|
|
1600
|
+
* (`userId` 가 자기 자신이면 탈퇴다). admin 만 뺄 수 있게 두면 viewer 로
|
|
1601
|
+
* 초대된 사람이 조직을 나갈 길이 아예 없다.
|
|
1602
|
+
*
|
|
1603
|
+
* 마지막 admin 은 뺄 수도 나갈 수도 없다 (409 `last_admin`). 감사는
|
|
1604
|
+
* 제거가 `member.remove`, 탈퇴가 `member.leave` — 같은 문장이지만 다른
|
|
1605
|
+
* 사건이라 이름이 갈린다.
|
|
1440
1606
|
*/
|
|
1441
1607
|
delete: operations["removeMember"];
|
|
1442
1608
|
options?: never;
|
|
@@ -1465,7 +1631,7 @@ export interface paths {
|
|
|
1465
1631
|
/**
|
|
1466
1632
|
* 커스텀 도메인을 연결한다 (`runlot domain add`)
|
|
1467
1633
|
* @description 이름은 소문자·punycode 로 정규화해 저장한다. 와일드카드와 우리
|
|
1468
|
-
* 도메인(`*.runlot.app`·`*.runlot.dev`·앱 도메인) 아래 이름은 받지 않는다.
|
|
1634
|
+
* 도메인(`*.runlot.app`·`*.runlot.dev`·`*.runlot.io`·앱 도메인) 아래 이름은 받지 않는다.
|
|
1469
1635
|
*
|
|
1470
1636
|
* 레코드는 `pending_dns` 상태로 생성되고 **그 순간부터 해당 이름을 예약한다.** 검증
|
|
1471
1637
|
* 중에도 다른 프로젝트가 같은 이름을 사용할 수 없다. 연결되기 전까지는
|
|
@@ -3026,6 +3192,53 @@ export interface components {
|
|
|
3026
3192
|
/** Format: date-time */
|
|
3027
3193
|
addedAt: string;
|
|
3028
3194
|
};
|
|
3195
|
+
/**
|
|
3196
|
+
* @description `expired` 는 시각 비교의 결과이지 열이 아니다 — 초대는 만료되었다고
|
|
3197
|
+
* 표시되지 않고, 만료 시각이 지났을 뿐이다.
|
|
3198
|
+
* @enum {string}
|
|
3199
|
+
*/
|
|
3200
|
+
InviteState: "pending" | "expired" | "accepted" | "revoked";
|
|
3201
|
+
/**
|
|
3202
|
+
* @description **토큰이 없다.** 평문 토큰은 메일에만 실리고, cp-public 은 그 열을 읽지도
|
|
3203
|
+
* 못한다 (마이그레이션 0043 의 열 단위 GRANT).
|
|
3204
|
+
*/
|
|
3205
|
+
Invite: {
|
|
3206
|
+
/** Format: uuid */
|
|
3207
|
+
inviteId: string;
|
|
3208
|
+
/** Format: email */
|
|
3209
|
+
email: string;
|
|
3210
|
+
role: components["schemas"]["Role"];
|
|
3211
|
+
state: components["schemas"]["InviteState"];
|
|
3212
|
+
/** @description 부른 사람의 이름 또는 이메일. */
|
|
3213
|
+
invitedBy?: string;
|
|
3214
|
+
/** Format: date-time */
|
|
3215
|
+
createdAt: string;
|
|
3216
|
+
/** Format: date-time */
|
|
3217
|
+
expiresAt: string;
|
|
3218
|
+
/**
|
|
3219
|
+
* Format: date-time
|
|
3220
|
+
* @description 비어 있으면 아직 발송 큐에 있다 (발송은 cp-core 의 회차다).
|
|
3221
|
+
*/
|
|
3222
|
+
sentAt?: string;
|
|
3223
|
+
/** @description 마지막 발송 실패 이유. 성공해도 남을 수 있다. */
|
|
3224
|
+
sendError?: string;
|
|
3225
|
+
};
|
|
3226
|
+
/** @description 토큰을 든 사람에게 보이는 초대 (인증 없이 답한다). */
|
|
3227
|
+
InviteView: {
|
|
3228
|
+
orgSlug: string;
|
|
3229
|
+
orgName: string;
|
|
3230
|
+
role: components["schemas"]["Role"];
|
|
3231
|
+
/**
|
|
3232
|
+
* Format: email
|
|
3233
|
+
* @description **초대를 보낸 주소**다. 수락하는 계정의 주소와 다를 수 있고, 화면은
|
|
3234
|
+
* 그 사실을 말해야 한다.
|
|
3235
|
+
*/
|
|
3236
|
+
email: string;
|
|
3237
|
+
invitedBy?: string;
|
|
3238
|
+
state: components["schemas"]["InviteState"];
|
|
3239
|
+
/** Format: date-time */
|
|
3240
|
+
expiresAt: string;
|
|
3241
|
+
};
|
|
3029
3242
|
/**
|
|
3030
3243
|
* @description 워커의 `env.<NAME>` 이 된다. `DB`·`ASSETS`(바인딩 `env.db`·`env.assets` 의 대문자 짝) 와 `RUNLOT_` 접두는 예약이다
|
|
3031
3244
|
* — 앞 둘은 이미 바인딩이고, 뒤는 노드가 프로세스 환경에 쓰는 이름
|
|
@@ -3906,6 +4119,38 @@ export interface operations {
|
|
|
3906
4119
|
};
|
|
3907
4120
|
};
|
|
3908
4121
|
};
|
|
4122
|
+
getSiteConfig: {
|
|
4123
|
+
parameters: {
|
|
4124
|
+
query?: never;
|
|
4125
|
+
header?: never;
|
|
4126
|
+
path?: never;
|
|
4127
|
+
cookie?: never;
|
|
4128
|
+
};
|
|
4129
|
+
requestBody?: never;
|
|
4130
|
+
responses: {
|
|
4131
|
+
/** @description 배치의 이름들 */
|
|
4132
|
+
200: {
|
|
4133
|
+
headers: {
|
|
4134
|
+
[name: string]: unknown;
|
|
4135
|
+
};
|
|
4136
|
+
content: {
|
|
4137
|
+
"application/json": {
|
|
4138
|
+
/**
|
|
4139
|
+
* @description 앱 호스트네임의 접미사 (`<project>.<org>.<appDomain>`).
|
|
4140
|
+
* @example runlot.app
|
|
4141
|
+
*/
|
|
4142
|
+
appDomain: string;
|
|
4143
|
+
/**
|
|
4144
|
+
* @description 공개 문서의 origin. **빈 값일 수 있다** — 그러면 화면은
|
|
4145
|
+
* 문서 링크를 안 그린다 (없는 곳으로 보내는 링크보다 낫다).
|
|
4146
|
+
* @example https://docs.runlot.io
|
|
4147
|
+
*/
|
|
4148
|
+
docsUrl: string;
|
|
4149
|
+
};
|
|
4150
|
+
};
|
|
4151
|
+
};
|
|
4152
|
+
};
|
|
4153
|
+
};
|
|
3909
4154
|
getMe: {
|
|
3910
4155
|
parameters: {
|
|
3911
4156
|
query?: never;
|
|
@@ -5954,6 +6199,169 @@ export interface operations {
|
|
|
5954
6199
|
};
|
|
5955
6200
|
};
|
|
5956
6201
|
};
|
|
6202
|
+
listInvites: {
|
|
6203
|
+
parameters: {
|
|
6204
|
+
query?: never;
|
|
6205
|
+
header?: never;
|
|
6206
|
+
path: {
|
|
6207
|
+
orgSlug: components["parameters"]["OrgSlug"];
|
|
6208
|
+
};
|
|
6209
|
+
cookie?: never;
|
|
6210
|
+
};
|
|
6211
|
+
requestBody?: never;
|
|
6212
|
+
responses: {
|
|
6213
|
+
/** @description 초대 목록 */
|
|
6214
|
+
200: {
|
|
6215
|
+
headers: {
|
|
6216
|
+
[name: string]: unknown;
|
|
6217
|
+
};
|
|
6218
|
+
content: {
|
|
6219
|
+
"application/json": {
|
|
6220
|
+
invites: components["schemas"]["Invite"][];
|
|
6221
|
+
};
|
|
6222
|
+
};
|
|
6223
|
+
};
|
|
6224
|
+
403: components["responses"]["Forbidden"];
|
|
6225
|
+
404: components["responses"]["NotFound"];
|
|
6226
|
+
};
|
|
6227
|
+
};
|
|
6228
|
+
createInvite: {
|
|
6229
|
+
parameters: {
|
|
6230
|
+
query?: never;
|
|
6231
|
+
header?: never;
|
|
6232
|
+
path: {
|
|
6233
|
+
orgSlug: components["parameters"]["OrgSlug"];
|
|
6234
|
+
};
|
|
6235
|
+
cookie?: never;
|
|
6236
|
+
};
|
|
6237
|
+
requestBody: {
|
|
6238
|
+
content: {
|
|
6239
|
+
"application/json": {
|
|
6240
|
+
/** Format: email */
|
|
6241
|
+
email: string;
|
|
6242
|
+
/** @description 기본값 `member`. */
|
|
6243
|
+
role?: components["schemas"]["Role"];
|
|
6244
|
+
};
|
|
6245
|
+
};
|
|
6246
|
+
};
|
|
6247
|
+
responses: {
|
|
6248
|
+
/** @description 기존 초대를 다시 보냈다 */
|
|
6249
|
+
200: {
|
|
6250
|
+
headers: {
|
|
6251
|
+
[name: string]: unknown;
|
|
6252
|
+
};
|
|
6253
|
+
content: {
|
|
6254
|
+
"application/json": components["schemas"]["Invite"];
|
|
6255
|
+
};
|
|
6256
|
+
};
|
|
6257
|
+
/** @description 새 초대 */
|
|
6258
|
+
201: {
|
|
6259
|
+
headers: {
|
|
6260
|
+
[name: string]: unknown;
|
|
6261
|
+
};
|
|
6262
|
+
content: {
|
|
6263
|
+
"application/json": components["schemas"]["Invite"];
|
|
6264
|
+
};
|
|
6265
|
+
};
|
|
6266
|
+
400: components["responses"]["BadRequest"];
|
|
6267
|
+
403: components["responses"]["Forbidden"];
|
|
6268
|
+
404: components["responses"]["NotFound"];
|
|
6269
|
+
/** @description 이미 멤버다 (`already_member`) · 대기 초대가 너무 많다 (`too_many_invites`) */
|
|
6270
|
+
409: {
|
|
6271
|
+
headers: {
|
|
6272
|
+
[name: string]: unknown;
|
|
6273
|
+
};
|
|
6274
|
+
content: {
|
|
6275
|
+
"application/json": components["schemas"]["Error"];
|
|
6276
|
+
};
|
|
6277
|
+
};
|
|
6278
|
+
};
|
|
6279
|
+
};
|
|
6280
|
+
revokeInvite: {
|
|
6281
|
+
parameters: {
|
|
6282
|
+
query?: never;
|
|
6283
|
+
header?: never;
|
|
6284
|
+
path: {
|
|
6285
|
+
orgSlug: components["parameters"]["OrgSlug"];
|
|
6286
|
+
inviteId: string;
|
|
6287
|
+
};
|
|
6288
|
+
cookie?: never;
|
|
6289
|
+
};
|
|
6290
|
+
requestBody?: never;
|
|
6291
|
+
responses: {
|
|
6292
|
+
/** @description 취소했다 */
|
|
6293
|
+
204: {
|
|
6294
|
+
headers: {
|
|
6295
|
+
[name: string]: unknown;
|
|
6296
|
+
};
|
|
6297
|
+
content?: never;
|
|
6298
|
+
};
|
|
6299
|
+
403: components["responses"]["Forbidden"];
|
|
6300
|
+
404: components["responses"]["NotFound"];
|
|
6301
|
+
};
|
|
6302
|
+
};
|
|
6303
|
+
getInvite: {
|
|
6304
|
+
parameters: {
|
|
6305
|
+
query?: never;
|
|
6306
|
+
header?: never;
|
|
6307
|
+
path: {
|
|
6308
|
+
token: string;
|
|
6309
|
+
};
|
|
6310
|
+
cookie?: never;
|
|
6311
|
+
};
|
|
6312
|
+
requestBody?: never;
|
|
6313
|
+
responses: {
|
|
6314
|
+
/** @description 초대 */
|
|
6315
|
+
200: {
|
|
6316
|
+
headers: {
|
|
6317
|
+
[name: string]: unknown;
|
|
6318
|
+
};
|
|
6319
|
+
content: {
|
|
6320
|
+
"application/json": components["schemas"]["InviteView"];
|
|
6321
|
+
};
|
|
6322
|
+
};
|
|
6323
|
+
404: components["responses"]["NotFound"];
|
|
6324
|
+
};
|
|
6325
|
+
};
|
|
6326
|
+
acceptInvite: {
|
|
6327
|
+
parameters: {
|
|
6328
|
+
query?: never;
|
|
6329
|
+
header?: never;
|
|
6330
|
+
path: {
|
|
6331
|
+
token: string;
|
|
6332
|
+
};
|
|
6333
|
+
cookie?: never;
|
|
6334
|
+
};
|
|
6335
|
+
requestBody?: never;
|
|
6336
|
+
responses: {
|
|
6337
|
+
/** @description 수락했다 */
|
|
6338
|
+
200: {
|
|
6339
|
+
headers: {
|
|
6340
|
+
[name: string]: unknown;
|
|
6341
|
+
};
|
|
6342
|
+
content: {
|
|
6343
|
+
"application/json": {
|
|
6344
|
+
orgSlug: string;
|
|
6345
|
+
orgName?: string;
|
|
6346
|
+
role: components["schemas"]["Role"];
|
|
6347
|
+
alreadyMember: boolean;
|
|
6348
|
+
invitedEmail?: string;
|
|
6349
|
+
};
|
|
6350
|
+
};
|
|
6351
|
+
};
|
|
6352
|
+
401: components["responses"]["Unauthorized"];
|
|
6353
|
+
404: components["responses"]["NotFound"];
|
|
6354
|
+
/** @description 이미 수락됨 (`invite_used`) · 취소됨 (`invite_revoked`) · 만료됨 (`invite_expired`) */
|
|
6355
|
+
409: {
|
|
6356
|
+
headers: {
|
|
6357
|
+
[name: string]: unknown;
|
|
6358
|
+
};
|
|
6359
|
+
content: {
|
|
6360
|
+
"application/json": components["schemas"]["Error"];
|
|
6361
|
+
};
|
|
6362
|
+
};
|
|
6363
|
+
};
|
|
6364
|
+
};
|
|
5957
6365
|
setMemberRole: {
|
|
5958
6366
|
parameters: {
|
|
5959
6367
|
query?: never;
|