fix(web/app): send query parameters through the generated API client
The `Apis` proxy treated every operation as body-only (`query: false, body: true` on all 439 entries), so `config.params` never reached the generated client. GET calls went out with an empty query string — `/diff/raw` returned 400 for the missing `base`/`head` — and operations with neither query nor body were handed an `undefined` placeholder in the body slot, which pushed the `RequestInit` into the wrong position and dropped credentials, headers and abort signals. - scripts/gen-api-ops.py: derive `path`/`query`/`body` from the generated signatures in `packages/apiclient` instead of hard-coded constants, and flag `bodyFirst` for the one operation whose raw body precedes the query object. - ops.ts: regenerated (84 query, 148 body, 208 neither). - services/api: honour `bodyFirst` when assembling the positional arguments. - repo/commits: `skip`/`max_count` -> `offset`/`limit`; unknown query fields are rejected with 400 by the commit list endpoint. - space-admin: drop the unsupported `sort` query on group listing.
ZhenYi committed
Added scripts/gen-api-ops.py scripts/gen-api-ops.py +125 −0 View scripts/gen-api-ops.py
@@ -0,0 +1,125 @@
1#!/usr/bin/env python3
2"""Regenerate the query/body flags in view/app/src/services/api/ops.ts.
3
4The frontend calls the generated client through the `Apis` proxy, which has to
5know where the query object and the request body sit in each generated
6signature (`(pathParams..., params?, data?, options?)`). The mapping is derived
7from the generated sources in packages/apiclient so it never drifts again:
8
9 query -> a parameter literally named `params`
10 body -> one parameter past the path params and the query object
11 path -> parameters before `params` in the matching `get<Name>Url`
12"""
13
14import glob
15import json
16import re
17import sys
18
19CLIENT = 'packages/apiclient'
20OPS = 'view/app/src/services/api/ops.ts'
21
22
23def paren_block(src, start):
24 i = src.index('(', start)
25 depth = 0
26 for j in range(i, len(src)):
27 if src[j] == '(':
28 depth += 1
29 elif src[j] == ')':
30 depth -= 1
31 if depth == 0:
32 return src[i + 1:j]
33 raise ValueError('unbalanced parenthesis')
34
35
36def split_top(block):
37 out, depth, cur = [], 0, ''
38 for ch in block:
39 if ch in '([{<':
40 depth += 1
41 elif ch in ')]}>':
42 depth -= 1
43 if ch == ',' and depth == 0:
44 out.append(cur)
45 cur = ''
46 else:
47 cur += ch
48 if cur.strip():
49 out.append(cur)
50 return [n.strip() for n in out if n.strip()]
51
52
53def param_name(arg):
54 m = re.match(r'(\w+)\??\s*:', arg)
55 return m.group(1) if m else None
56
57
58def scan_signatures():
59 info = {}
60 for path in glob.glob(f'{CLIENT}/*/*.ts'):
61 if path.endswith('.schemas.ts') or path.endswith('index.ts'):
62 continue
63 src = open(path, encoding='utf-8').read()
64 m = re.search(r'export const (\w+) = async \(', src)
65 if not m:
66 continue
67 args = [a for a in split_top(paren_block(src, m.start())) if param_name(a) != 'options']
68 url = re.search(r'export const (get\w+Url) = \(', src)
69 url_args = [a for a in split_top(paren_block(src, url.start())) if param_name(a) != 'options'] if url else []
70 has_query = any(param_name(a) == 'params' for a in args) or any(param_name(a) == 'params' for a in url_args)
71 path_count = len([a for a in url_args if param_name(a) != 'params'])
72 rest = args[path_count:]
73 body_count = len(rest) - (1 if has_query else 0)
74 if body_count not in (0, 1):
75 raise SystemExit(f'unexpected signature in {path}: {args} / {url_args}')
76 body_first = has_query and body_count == 1 and param_name(rest[0]) != 'params'
77 info[m.group(1)] = {
78 'path': path_count,
79 'query': has_query,
80 'body': body_count == 1,
81 'bodyFirst': body_first,
82 }
83 return info
84
85
86def main():
87 info = scan_signatures()
88 src = open(OPS, encoding='utf-8').read()
89 chunks = re.split(r"(?m)^(?= ')", src)
90 patched, missing, mismatch = [], [], []
91 for chunk in chunks:
92 m = re.search(r"^ '([\w.\-]+)':\s*\{", chunk, re.M)
93 if not m:
94 patched.append(chunk)
95 continue
96 key = m.group(1)
97 fn = re.search(r'fn:\s*api\.(\w+)', chunk)
98 info_for = info.get(fn.group(1)) if fn else None
99 if not info_for:
100 missing.append(key)
101 patched.append(chunk)
102 continue
103 declared = re.search(r'path:\s*(\d+)', chunk)
104 if declared and int(declared.group(1)) != info_for['path']:
105 mismatch.append((key, declared.group(1), info_for['path']))
106 chunk = re.sub(r'path:\s*\d+', f"path: {info_for['path']}", chunk, count=1)
107 chunk = re.sub(r'query:\s*\w+', f"query: {'true' if info_for['query'] else 'false'}", chunk, count=1)
108 chunk = re.sub(r'body:\s*\w+', f"body: {'true' if info_for['body'] else 'false'}", chunk, count=1)
109 chunk = re.sub(r',?\s*bodyFirst:\s*\w+,?', '', chunk)
110 if info_for['bodyFirst']:
111 end = chunk.rfind('}')
112 head = chunk[:end].rstrip()
113 sep = ' ' if head.endswith(',') else ', '
114 chunk = f'{head}{sep}bodyFirst: true {chunk[end:]}'
115 patched.append(chunk)
116 if mismatch:
117 print(json.dumps(mismatch, indent=1))
118 raise SystemExit('path arity disagreed with the generated client')
119 open(OPS, 'w', encoding='utf-8').write(''.join(patched))
120 stats = {'query': sum(v['query'] for v in info.values()), 'body': sum(v['body'] for v in info.values())}
121 print(f'patched {len(info)} operations (query {stats["query"]}, body {stats["body"]}), missing {missing}')
122
123
124if __name__ == '__main__':
125 sys.exit(main())
Modified view/app/src/domains/repo/model/commits.ts view/app/src/domains/repo/model/commits.ts +2 −2 View view/app/src/domains/repo/model/commits.ts
@@ -22,8 +22,8 @@
2222 pathParams: { space_name: space, repo_name: repo },
2323 params: {
2424 revision: opts.revision,
25 skip: opts.skip,
26 max_count: opts.limit,
25 offset: opts.skip,
26 limit: opts.limit,
2727 first_parent: opts.firstParent ?? false,
2828 ...(opts.path ? { path: opts.path } : {}),
2929 },
Modified view/app/src/domains/space/management/model/space-admin.ts view/app/src/domains/space/management/model/space-admin.ts +1 −1 View view/app/src/domains/space/management/model/space-admin.ts
@@ -120,7 +120,7 @@
120120 pageRows<SpaceGroup>(
121121 Apis.space.list_groups({
122122 pathParams: { space_name: spaceName },
123 params: { limit: ADMIN_PAGE_LIMIT, sort: 'position' },
123 params: { limit: ADMIN_PAGE_LIMIT },
124124 }),
125125 )
126126
Modified view/app/src/services/api/index.ts view/app/src/services/api/index.ts +8 −2 View view/app/src/services/api/index.ts
@@ -136,8 +136,14 @@
136136 }
137137 }
138138 for (const name of names) args.push(config.pathParams?.[name])
139 if (entry.query) args.push(query(config.params))
140 if (entry.body) args.push(config.data)
139 const queryArgs = entry.query ? query(config.params) : undefined
140 if (entry.bodyFirst) {
141 if (entry.body) args.push(config.data)
142 if (entry.query) args.push(queryArgs)
143 } else {
144 if (entry.query) args.push(queryArgs)
145 if (entry.body) args.push(config.data)
146 }
141147 const options: RequestInit = { credentials: 'same-origin' }
142148 if (config.headers) options.headers = config.headers
143149 if (config.signal) options.signal = config.signal
Modified view/app/src/services/api/ops.ts view/app/src/services/api/ops.ts +316 −293 View view/app/src/services/api/ops.ts
@@ -6,6 +6,8 @@
66 path: number
77 query: boolean
88 body: boolean
9 /** Rare: the generated signature puts the raw body before the query object. */
10 bodyFirst?: boolean
911}
1012
1113export const OPS: Record<string, OpEntry> = {
@@ -14,47 +16,47 @@
1416 fn: api.accountDeletionStatus as OpEntry['fn'],
1517 path: 0,
1618 query: false,
17 body: true,
19 body: false,
1820 },
1921 'account.cancel_account_deletion': {
2022 fn: api.cancelAccountDeletion as OpEntry['fn'],
2123 path: 0,
2224 query: false,
23 body: true,
25 body: false,
2426 },
25 'account.get_preferences': { fn: api.getPreferences as OpEntry['fn'], path: 0, query: false, body: true },
26 'account.list_agreements': { fn: api.listAgreements as OpEntry['fn'], path: 0, query: false, body: true },
27 'account.list_devices': { fn: api.listDevices as OpEntry['fn'], path: 0, query: false, body: true },
27 'account.get_preferences': { fn: api.getPreferences as OpEntry['fn'], path: 0, query: false, body: false },
28 'account.list_agreements': { fn: api.listAgreements as OpEntry['fn'], path: 0, query: false, body: false },
29 'account.list_devices': { fn: api.listDevices as OpEntry['fn'], path: 0, query: true, body: false },
2830 'account.mark_notifications_read': {
2931 fn: api.markNotificationsRead as OpEntry['fn'],
3032 path: 0,
3133 query: false,
3234 body: true,
3335 },
34 'account.me': { fn: api.me as OpEntry['fn'], path: 0, query: false, body: true },
36 'account.me': { fn: api.me as OpEntry['fn'], path: 0, query: false, body: false },
3537 'account.request_account_deletion': {
3638 fn: api.requestAccountDeletion as OpEntry['fn'],
3739 path: 0,
3840 query: false,
39 body: true,
41 body: false,
4042 },
4143 'account.update_preferences': { fn: api.updatePreferences as OpEntry['fn'], path: 0, query: false, body: true },
4244 'account.update_profile': { fn: api.updateProfile as OpEntry['fn'], path: 0, query: false, body: true },
4345 'account.update_username': { fn: api.updateUsername as OpEntry['fn'], path: 0, query: false, body: true },
44 'analysis.code_activity': { fn: api.codeActivity as OpEntry['fn'], path: 2, query: false, body: true },
45 'analysis.contributors': { fn: api.contributors as OpEntry['fn'], path: 2, query: false, body: true },
46 'analysis.languages': { fn: api.languages as OpEntry['fn'], path: 2, query: false, body: true },
47 'analysis.languages_read': { fn: api.languagesRead as OpEntry['fn'], path: 2, query: false, body: true },
46 'analysis.code_activity': { fn: api.codeActivity as OpEntry['fn'], path: 2, query: true, body: false },
47 'analysis.contributors': { fn: api.contributors as OpEntry['fn'], path: 2, query: false, body: false },
48 'analysis.languages': { fn: api.languages as OpEntry['fn'], path: 2, query: false, body: false },
49 'analysis.languages_read': { fn: api.languagesRead as OpEntry['fn'], path: 2, query: false, body: false },
4850 'archives.create_archive': { fn: api.createArchive as OpEntry['fn'], path: 2, query: false, body: true },
49 'archives.create_bundle': { fn: api.createBundle as OpEntry['fn'], path: 2, query: false, body: true },
50 'archives.get_archive': { fn: api.getArchive as OpEntry['fn'], path: 3, query: false, body: true },
51 'auth.auth_challenge': { fn: api.authChallenge as OpEntry['fn'], path: 0, query: false, body: true },
51 'archives.create_bundle': { fn: api.createBundle as OpEntry['fn'], path: 2, query: false, body: false },
52 'archives.get_archive': { fn: api.getArchive as OpEntry['fn'], path: 3, query: true, body: false },
53 'auth.auth_challenge': { fn: api.authChallenge as OpEntry['fn'], path: 0, query: false, body: false },
5254 'auth.auth_login': { fn: api.authLogin as OpEntry['fn'], path: 0, query: false, body: true },
5355 'auth.auth_login_code': { fn: api.authLoginCode as OpEntry['fn'], path: 0, query: false, body: true },
5456 'auth.auth_login_code_verify': { fn: api.authLoginCodeVerify as OpEntry['fn'], path: 0, query: false, body: true },
5557 'auth.auth_login_verify': { fn: api.authLoginVerify as OpEntry['fn'], path: 0, query: false, body: true },
56 'auth.auth_logout': { fn: api.authLogout as OpEntry['fn'], path: 0, query: false, body: true },
57 'auth.auth_me': { fn: api.authMe as OpEntry['fn'], path: 0, query: false, body: true },
58 'auth.auth_logout': { fn: api.authLogout as OpEntry['fn'], path: 0, query: false, body: false },
59 'auth.auth_me': { fn: api.authMe as OpEntry['fn'], path: 0, query: false, body: false },
5860 'auth.auth_password_reset': { fn: api.authPasswordReset as OpEntry['fn'], path: 0, query: false, body: true },
5961 'auth.auth_password_reset_request': {
6062 fn: api.authPasswordResetRequest as OpEntry['fn'],
@@ -65,10 +67,10 @@
6567 'auth.auth_register': { fn: api.authRegister as OpEntry['fn'], path: 0, query: false, body: true },
6668 'auth.auth_register_code': { fn: api.authRegisterCode as OpEntry['fn'], path: 0, query: false, body: true },
6769 'auth.auth_ssh_key_add': { fn: api.authSshKeyAdd as OpEntry['fn'], path: 0, query: false, body: true },
68 'auth.auth_ssh_key_delete': { fn: api.authSshKeyDelete as OpEntry['fn'], path: 1, query: false, body: true },
69 'auth.auth_ssh_key_list': { fn: api.authSshKeyList as OpEntry['fn'], path: 0, query: false, body: true },
70 'auth.auth_ssh_key_delete': { fn: api.authSshKeyDelete as OpEntry['fn'], path: 1, query: false, body: false },
71 'auth.auth_ssh_key_list': { fn: api.authSshKeyList as OpEntry['fn'], path: 0, query: true, body: false },
7072 'auth.change_password': { fn: api.changePassword as OpEntry['fn'], path: 0, query: false, body: true },
71 'auth.recovery_codes': { fn: api.recoveryCodes as OpEntry['fn'], path: 0, query: false, body: true },
73 'auth.recovery_codes': { fn: api.recoveryCodes as OpEntry['fn'], path: 0, query: false, body: false },
7274 'auth.regenerate_recovery_codes': {
7375 fn: api.regenerateRecoveryCodes as OpEntry['fn'],
7476 path: 0,
@@ -77,12 +79,12 @@
7779 },
7880 'auth.totp_disable': { fn: api.totpDisable as OpEntry['fn'], path: 0, query: false, body: true },
7981 'auth.totp_enable': { fn: api.totpEnable as OpEntry['fn'], path: 0, query: false, body: true },
80 'auth.totp_setup': { fn: api.totpSetup as OpEntry['fn'], path: 0, query: false, body: true },
81 'auth.totp_status': { fn: api.totpStatus as OpEntry['fn'], path: 0, query: false, body: true },
82 'blame.blame': { fn: api.blame as OpEntry['fn'], path: 2, query: false, body: true },
83 'blobs.blob_content': { fn: api.blobContent as OpEntry['fn'], path: 3, query: false, body: true },
84 'blobs.blob_metadata': { fn: api.blobMetadata as OpEntry['fn'], path: 3, query: false, body: true },
85 'blobs.list_lfs_pointers': { fn: api.listLfsPointers as OpEntry['fn'], path: 2, query: false, body: true },
82 'auth.totp_setup': { fn: api.totpSetup as OpEntry['fn'], path: 0, query: false, body: false },
83 'auth.totp_status': { fn: api.totpStatus as OpEntry['fn'], path: 0, query: false, body: false },
84 'blame.blame': { fn: api.blame as OpEntry['fn'], path: 2, query: true, body: false },
85 'blobs.blob_content': { fn: api.blobContent as OpEntry['fn'], path: 3, query: false, body: false },
86 'blobs.blob_metadata': { fn: api.blobMetadata as OpEntry['fn'], path: 3, query: false, body: false },
87 'blobs.list_lfs_pointers': { fn: api.listLfsPointers as OpEntry['fn'], path: 2, query: true, body: false },
8688 'branch_protection.add_branch_whitelist': {
8789 fn: api.addBranchWhitelist as OpEntry['fn'],
8890 path: 3,
@@ -93,26 +95,26 @@
9395 fn: api.listBranchWhitelists as OpEntry['fn'],
9496 path: 3,
9597 query: false,
96 body: true,
98 body: false,
9799 },
98100 'branch_protection.remove_branch_whitelist': {
99101 fn: api.removeBranchWhitelist as OpEntry['fn'],
100102 path: 4,
101103 query: false,
102 body: true,
104 body: false,
103105 },
104106 'branches.create_branch': { fn: api.createBranch as OpEntry['fn'], path: 2, query: false, body: true },
105 'branches.delete_branch': { fn: api.deleteBranch as OpEntry['fn'], path: 3, query: false, body: true },
106 'branches.get_branch': { fn: api.getBranch as OpEntry['fn'], path: 3, query: false, body: true },
107 'branches.list_branches': { fn: api.listBranches as OpEntry['fn'], path: 2, query: false, body: true },
107 'branches.delete_branch': { fn: api.deleteBranch as OpEntry['fn'], path: 3, query: true, body: false },
108 'branches.get_branch': { fn: api.getBranch as OpEntry['fn'], path: 3, query: false, body: false },
109 'branches.list_branches': { fn: api.listBranches as OpEntry['fn'], path: 2, query: true, body: false },
108110 'branches.rename_branch': { fn: api.renameBranch as OpEntry['fn'], path: 3, query: false, body: true },
109 'branches.set_default_branch': { fn: api.setDefaultBranch as OpEntry['fn'], path: 3, query: false, body: true },
111 'branches.set_default_branch': { fn: api.setDefaultBranch as OpEntry['fn'], path: 3, query: false, body: false },
110112 'chat.add_reaction': { fn: api.addReaction as OpEntry['fn'], path: 2, query: false, body: true },
111 'chat.approve_hand': { fn: api.approveHand as OpEntry['fn'], path: 2, query: false, body: true },
113 'chat.approve_hand': { fn: api.approveHand as OpEntry['fn'], path: 2, query: false, body: false },
112114 'chat.bulk_delete_messages': { fn: api.bulkDeleteMessages as OpEntry['fn'], path: 1, query: false, body: true },
113 'chat.cancel_hand': { fn: api.cancelHand as OpEntry['fn'], path: 1, query: false, body: true },
114 'chat.cancel_reminder': { fn: api.cancelReminder as OpEntry['fn'], path: 1, query: false, body: true },
115 'chat.close_dm': { fn: api.closeDm as OpEntry['fn'], path: 1, query: false, body: true },
115 'chat.cancel_hand': { fn: api.cancelHand as OpEntry['fn'], path: 1, query: false, body: false },
116 'chat.cancel_reminder': { fn: api.cancelReminder as OpEntry['fn'], path: 1, query: false, body: false },
117 'chat.close_dm': { fn: api.closeDm as OpEntry['fn'], path: 1, query: false, body: false },
116118 'chat.create_attachment': { fn: api.createAttachment as OpEntry['fn'], path: 0, query: false, body: true },
117119 'chat.create_bookmark': { fn: api.createBookmark as OpEntry['fn'], path: 1, query: false, body: true },
118120 'chat.create_outbound_webhook': { fn: api.createOutboundWebhook as OpEntry['fn'], path: 1, query: false, body: true },
@@ -120,63 +122,68 @@
120122 'chat.create_room': { fn: api.createRoom as OpEntry['fn'], path: 1, query: false, body: true },
121123 'chat.create_thread': { fn: api.createThread as OpEntry['fn'], path: 2, query: false, body: true },
122124 'chat.create_webhook': { fn: api.createWebhook as OpEntry['fn'], path: 1, query: false, body: true },
123 'chat.delete_bookmark': { fn: api.deleteBookmark as OpEntry['fn'], path: 2, query: false, body: true },
124 'chat.delete_draft': { fn: api.deleteDraft as OpEntry['fn'], path: 1, query: false, body: true },
125 'chat.delete_emoji': { fn: api.deleteEmoji as OpEntry['fn'], path: 2, query: false, body: true },
126 'chat.delete_message': { fn: api.deleteMessage as OpEntry['fn'], path: 2, query: false, body: true },
127 'chat.delete_outbound_webhook': { fn: api.deleteOutboundWebhook as OpEntry['fn'], path: 2, query: false, body: true },
128 'chat.delete_room': { fn: api.deleteRoom as OpEntry['fn'], path: 1, query: false, body: true },
129 'chat.delete_webhook': { fn: api.deleteWebhook as OpEntry['fn'], path: 2, query: false, body: true },
130 'chat.deny_hand': { fn: api.denyHand as OpEntry['fn'], path: 2, query: false, body: true },
131 'chat.download_attachment': { fn: api.downloadAttachment as OpEntry['fn'], path: 1, query: false, body: true },
132 'chat.emoji_image': { fn: api.emojiImage as OpEntry['fn'], path: 2, query: false, body: true },
125 'chat.delete_bookmark': { fn: api.deleteBookmark as OpEntry['fn'], path: 2, query: false, body: false },
126 'chat.delete_draft': { fn: api.deleteDraft as OpEntry['fn'], path: 1, query: true, body: false },
127 'chat.delete_emoji': { fn: api.deleteEmoji as OpEntry['fn'], path: 2, query: false, body: false },
128 'chat.delete_message': { fn: api.deleteMessage as OpEntry['fn'], path: 2, query: false, body: false },
129 'chat.delete_outbound_webhook': {
130 fn: api.deleteOutboundWebhook as OpEntry['fn'],
131 path: 2,
132 query: false,
133 body: false,
134 },
135 'chat.delete_room': { fn: api.deleteRoom as OpEntry['fn'], path: 1, query: false, body: false },
136 'chat.delete_webhook': { fn: api.deleteWebhook as OpEntry['fn'], path: 2, query: false, body: false },
137 'chat.deny_hand': { fn: api.denyHand as OpEntry['fn'], path: 2, query: false, body: false },
138 'chat.download_attachment': { fn: api.downloadAttachment as OpEntry['fn'], path: 1, query: true, body: false },
139 'chat.emoji_image': { fn: api.emojiImage as OpEntry['fn'], path: 2, query: false, body: false },
133140 'chat.finalize_attachment': { fn: api.finalizeAttachment as OpEntry['fn'], path: 1, query: false, body: true },
134141 'chat.follow_thread': { fn: api.followThread as OpEntry['fn'], path: 1, query: false, body: true },
135142 'chat.forward_message': { fn: api.forwardMessage as OpEntry['fn'], path: 2, query: false, body: true },
136 'chat.get_attachment': { fn: api.getAttachment as OpEntry['fn'], path: 1, query: false, body: true },
137 'chat.get_draft': { fn: api.getDraft as OpEntry['fn'], path: 1, query: false, body: true },
138 'chat.get_emoji': { fn: api.getEmoji as OpEntry['fn'], path: 2, query: false, body: true },
139 'chat.get_message': { fn: api.getMessage as OpEntry['fn'], path: 2, query: false, body: true },
140 'chat.get_presence': { fn: api.getPresence as OpEntry['fn'], path: 1, query: false, body: true },
141 'chat.get_read_state': { fn: api.getReadState as OpEntry['fn'], path: 1, query: false, body: true },
142 'chat.get_room': { fn: api.getRoom as OpEntry['fn'], path: 1, query: false, body: true },
143 'chat.get_room_setting': { fn: api.getRoomSetting as OpEntry['fn'], path: 1, query: false, body: true },
144 'chat.get_thread': { fn: api.getThread as OpEntry['fn'], path: 1, query: false, body: true },
145 'chat.get_voice_layout': { fn: api.getVoiceLayout as OpEntry['fn'], path: 1, query: false, body: true },
146 'chat.kick_participant': { fn: api.kickParticipant as OpEntry['fn'], path: 2, query: false, body: true },
147 'chat.list_bookmarks': { fn: api.listBookmarks as OpEntry['fn'], path: 1, query: false, body: true },
148 'chat.list_dms': { fn: api.listDms as OpEntry['fn'], path: 0, query: false, body: true },
149 'chat.list_emojis': { fn: api.listEmojis as OpEntry['fn'], path: 1, query: false, body: true },
150 'chat.list_hands': { fn: api.listHands as OpEntry['fn'], path: 1, query: false, body: true },
151 'chat.list_message_history': { fn: api.listMessageHistory as OpEntry['fn'], path: 2, query: false, body: true },
152 'chat.list_messages': { fn: api.listMessages as OpEntry['fn'], path: 1, query: false, body: true },
153 'chat.list_my_drafts': { fn: api.listMyDrafts as OpEntry['fn'], path: 0, query: false, body: true },
154 'chat.list_my_threads': { fn: api.listMyThreads as OpEntry['fn'], path: 0, query: false, body: true },
155 'chat.list_outbound_webhooks': { fn: api.listOutboundWebhooks as OpEntry['fn'], path: 1, query: false, body: true },
156 'chat.list_pins': { fn: api.listPins as OpEntry['fn'], path: 1, query: false, body: true },
157 'chat.list_reactions': { fn: api.listReactions as OpEntry['fn'], path: 2, query: false, body: true },
158 'chat.list_reminders': { fn: api.listReminders as OpEntry['fn'], path: 0, query: false, body: true },
159 'chat.list_space_presences': { fn: api.listSpacePresences as OpEntry['fn'], path: 1, query: false, body: true },
160 'chat.list_space_read_states': { fn: api.listSpaceReadStates as OpEntry['fn'], path: 1, query: false, body: true },
161 'chat.list_space_rooms': { fn: api.listSpaceRooms as OpEntry['fn'], path: 1, query: false, body: true },
162 'chat.list_threads': { fn: api.listThreads as OpEntry['fn'], path: 1, query: false, body: true },
163 'chat.list_webhooks': { fn: api.listWebhooks as OpEntry['fn'], path: 1, query: false, body: true },
164 'chat.livekit_webhook': { fn: api.livekitWebhook as OpEntry['fn'], path: 0, query: false, body: true },
143 'chat.get_attachment': { fn: api.getAttachment as OpEntry['fn'], path: 1, query: false, body: false },
144 'chat.get_draft': { fn: api.getDraft as OpEntry['fn'], path: 1, query: true, body: false },
145 'chat.get_emoji': { fn: api.getEmoji as OpEntry['fn'], path: 2, query: false, body: false },
146 'chat.get_message': { fn: api.getMessage as OpEntry['fn'], path: 2, query: false, body: false },
147 'chat.get_presence': { fn: api.getPresence as OpEntry['fn'], path: 1, query: false, body: false },
148 'chat.get_read_state': { fn: api.getReadState as OpEntry['fn'], path: 1, query: false, body: false },
149 'chat.get_room': { fn: api.getRoom as OpEntry['fn'], path: 1, query: false, body: false },
150 'chat.get_room_setting': { fn: api.getRoomSetting as OpEntry['fn'], path: 1, query: false, body: false },
151 'chat.get_thread': { fn: api.getThread as OpEntry['fn'], path: 1, query: false, body: false },
152 'chat.get_voice_layout': { fn: api.getVoiceLayout as OpEntry['fn'], path: 1, query: false, body: false },
153 'chat.kick_participant': { fn: api.kickParticipant as OpEntry['fn'], path: 2, query: false, body: false },
154 'chat.list_bookmarks': { fn: api.listBookmarks as OpEntry['fn'], path: 1, query: true, body: false },
155 'chat.list_dms': { fn: api.listDms as OpEntry['fn'], path: 0, query: true, body: false },
156 'chat.list_emojis': { fn: api.listEmojis as OpEntry['fn'], path: 1, query: true, body: false },
157 'chat.list_hands': { fn: api.listHands as OpEntry['fn'], path: 1, query: false, body: false },
158 'chat.list_message_history': { fn: api.listMessageHistory as OpEntry['fn'], path: 2, query: false, body: false },
159 'chat.list_messages': { fn: api.listMessages as OpEntry['fn'], path: 1, query: true, body: false },
160 'chat.list_my_drafts': { fn: api.listMyDrafts as OpEntry['fn'], path: 0, query: false, body: false },
161 'chat.list_my_threads': { fn: api.listMyThreads as OpEntry['fn'], path: 0, query: true, body: false },
162 'chat.list_outbound_webhooks': { fn: api.listOutboundWebhooks as OpEntry['fn'], path: 1, query: false, body: false },
163 'chat.list_pins': { fn: api.listPins as OpEntry['fn'], path: 1, query: false, body: false },
164 'chat.list_reactions': { fn: api.listReactions as OpEntry['fn'], path: 2, query: false, body: false },
165 'chat.list_reminders': { fn: api.listReminders as OpEntry['fn'], path: 0, query: false, body: false },
166 'chat.list_space_presences': { fn: api.listSpacePresences as OpEntry['fn'], path: 1, query: false, body: false },
167 'chat.list_space_read_states': { fn: api.listSpaceReadStates as OpEntry['fn'], path: 1, query: false, body: false },
168 'chat.list_space_rooms': { fn: api.listSpaceRooms as OpEntry['fn'], path: 1, query: false, body: false },
169 'chat.list_threads': { fn: api.listThreads as OpEntry['fn'], path: 1, query: true, body: false },
170 'chat.list_webhooks': { fn: api.listWebhooks as OpEntry['fn'], path: 1, query: true, body: false },
171 'chat.livekit_webhook': { fn: api.livekitWebhook as OpEntry['fn'], path: 0, query: false, body: false },
165172 'chat.mark_read': { fn: api.markRead as OpEntry['fn'], path: 1, query: false, body: true },
166173 'chat.mark_thread_read': { fn: api.markThreadRead as OpEntry['fn'], path: 1, query: false, body: true },
167 'chat.moderate_mute': { fn: api.moderateMute as OpEntry['fn'], path: 2, query: false, body: true },
174 'chat.moderate_mute': { fn: api.moderateMute as OpEntry['fn'], path: 2, query: true, body: false },
168175 'chat.open_dm': { fn: api.openDm as OpEntry['fn'], path: 0, query: false, body: true },
169176 'chat.post_via_webhook': { fn: api.postViaWebhook as OpEntry['fn'], path: 1, query: false, body: true },
170 'chat.raise_hand': { fn: api.raiseHand as OpEntry['fn'], path: 1, query: false, body: true },
177 'chat.raise_hand': { fn: api.raiseHand as OpEntry['fn'], path: 1, query: false, body: false },
171178 'chat.remove_reaction': { fn: api.removeReaction as OpEntry['fn'], path: 2, query: false, body: true },
172 'chat.revoke_hand': { fn: api.revokeHand as OpEntry['fn'], path: 2, query: false, body: true },
179 'chat.revoke_hand': { fn: api.revokeHand as OpEntry['fn'], path: 2, query: false, body: false },
173180 'chat.save_voice_layout': { fn: api.saveVoiceLayout as OpEntry['fn'], path: 1, query: false, body: true },
174181 'chat.send_message': { fn: api.sendMessage as OpEntry['fn'], path: 1, query: false, body: true },
175182 'chat.set_message_pin': { fn: api.setMessagePin as OpEntry['fn'], path: 2, query: false, body: true },
176183 'chat.set_presence': { fn: api.setPresence as OpEntry['fn'], path: 0, query: false, body: true },
177 'chat.start_recording': { fn: api.startRecording as OpEntry['fn'], path: 1, query: false, body: true },
178 'chat.stop_recording': { fn: api.stopRecording as OpEntry['fn'], path: 1, query: false, body: true },
179 'chat.unfollow_thread': { fn: api.unfollowThread as OpEntry['fn'], path: 1, query: false, body: true },
184 'chat.start_recording': { fn: api.startRecording as OpEntry['fn'], path: 1, query: false, body: false },
185 'chat.stop_recording': { fn: api.stopRecording as OpEntry['fn'], path: 1, query: false, body: false },
186 'chat.unfollow_thread': { fn: api.unfollowThread as OpEntry['fn'], path: 1, query: false, body: false },
180187 'chat.update_bookmark': { fn: api.updateBookmark as OpEntry['fn'], path: 2, query: false, body: true },
181188 'chat.update_message': { fn: api.updateMessage as OpEntry['fn'], path: 2, query: false, body: true },
182189 'chat.update_outbound_webhook': { fn: api.updateOutboundWebhook as OpEntry['fn'], path: 2, query: false, body: true },
@@ -187,18 +194,18 @@
187194 'chat.update_webhook': { fn: api.updateWebhook as OpEntry['fn'], path: 2, query: false, body: true },
188195 'chat.upload_emoji': { fn: api.uploadEmoji as OpEntry['fn'], path: 1, query: false, body: true },
189196 'chat.upsert_draft': { fn: api.upsertDraft as OpEntry['fn'], path: 1, query: false, body: true },
190 'chat.voice_config': { fn: api.voiceConfig as OpEntry['fn'], path: 0, query: false, body: true },
191 'chat.voice_participants': { fn: api.voiceParticipants as OpEntry['fn'], path: 1, query: false, body: true },
192 'chat.voice_space_states': { fn: api.voiceSpaceStates as OpEntry['fn'], path: 1, query: false, body: true },
193 'chat.voice_token': { fn: api.voiceToken as OpEntry['fn'], path: 1, query: false, body: true },
197 'chat.voice_config': { fn: api.voiceConfig as OpEntry['fn'], path: 0, query: false, body: false },
198 'chat.voice_participants': { fn: api.voiceParticipants as OpEntry['fn'], path: 1, query: false, body: false },
199 'chat.voice_space_states': { fn: api.voiceSpaceStates as OpEntry['fn'], path: 1, query: false, body: false },
200 'chat.voice_token': { fn: api.voiceToken as OpEntry['fn'], path: 1, query: false, body: false },
194201 'cleanup.clear_cleanup_overwrites': {
195202 fn: api.clearCleanupOverwrites as OpEntry['fn'],
196203 path: 3,
197204 query: false,
198 body: true,
205 body: false,
199206 },
200 'cleanup.delete_cleanup_object': { fn: api.deleteCleanupObject as OpEntry['fn'], path: 3, query: false, body: true },
201 'cleanup.list_cleanup_objects': { fn: api.listCleanupObjects as OpEntry['fn'], path: 1, query: false, body: true },
207 'cleanup.delete_cleanup_object': { fn: api.deleteCleanupObject as OpEntry['fn'], path: 3, query: false, body: false },
208 'cleanup.list_cleanup_objects': { fn: api.listCleanupObjects as OpEntry['fn'], path: 1, query: false, body: false },
202209 'cleanup.set_cleanup_archive': { fn: api.setCleanupArchive as OpEntry['fn'], path: 3, query: false, body: true },
203210 'cleanup.set_cleanup_visibility': {
204211 fn: api.setCleanupVisibility as OpEntry['fn'],
@@ -216,20 +223,20 @@
216223 fn: api.deleteCodeComment as OpEntry['fn'],
217224 path: 3,
218225 query: false,
219 body: true,
226 body: false,
220227 },
221 'code-comments.list_code_comments': { fn: api.listCodeComments as OpEntry['fn'], path: 2, query: false, body: true },
228 'code-comments.list_code_comments': { fn: api.listCodeComments as OpEntry['fn'], path: 2, query: true, body: false },
222229 'code-comments.resolve_code_comment': {
223230 fn: api.resolveCodeComment as OpEntry['fn'],
224231 path: 3,
225232 query: false,
226 body: true,
233 body: false,
227234 },
228235 'code-comments.unresolve_code_comment': {
229236 fn: api.unresolveCodeComment as OpEntry['fn'],
230237 path: 3,
231238 query: false,
232 body: true,
239 body: false,
233240 },
234241 'code-comments.update_code_comment': {
235242 fn: api.updateCodeComment as OpEntry['fn'],
@@ -237,26 +244,26 @@
237244 query: false,
238245 body: true,
239246 },
240 'commits.commit_stats': { fn: api.commitStats as OpEntry['fn'], path: 2, query: false, body: true },
241 'commits.get_commit': { fn: api.getCommit as OpEntry['fn'], path: 3, query: false, body: true },
242 'commits.is_ancestor': { fn: api.isAncestor as OpEntry['fn'], path: 2, query: false, body: true },
243 'commits.list_commit_statuses': { fn: api.listCommitStatuses as OpEntry['fn'], path: 3, query: false, body: true },
244 'commits.list_commits': { fn: api.listCommits as OpEntry['fn'], path: 2, query: false, body: true },
245 'commits.rev_parse': { fn: api.revParse as OpEntry['fn'], path: 3, query: false, body: true },
247 'commits.commit_stats': { fn: api.commitStats as OpEntry['fn'], path: 2, query: true, body: false },
248 'commits.get_commit': { fn: api.getCommit as OpEntry['fn'], path: 3, query: false, body: false },
249 'commits.is_ancestor': { fn: api.isAncestor as OpEntry['fn'], path: 2, query: true, body: false },
250 'commits.list_commit_statuses': { fn: api.listCommitStatuses as OpEntry['fn'], path: 3, query: false, body: false },
251 'commits.list_commits': { fn: api.listCommits as OpEntry['fn'], path: 2, query: true, body: false },
252 'commits.rev_parse': { fn: api.revParse as OpEntry['fn'], path: 3, query: false, body: false },
246253 'commits.set_commit_status': { fn: api.setCommitStatus as OpEntry['fn'], path: 2, query: false, body: true },
247 'conflicts.conflict_detail': { fn: api.conflictDetail as OpEntry['fn'], path: 2, query: false, body: true },
248 'conflicts.get_conflicts': { fn: api.getConflicts as OpEntry['fn'], path: 2, query: false, body: true },
254 'conflicts.conflict_detail': { fn: api.conflictDetail as OpEntry['fn'], path: 2, query: true, body: false },
255 'conflicts.get_conflicts': { fn: api.getConflicts as OpEntry['fn'], path: 2, query: true, body: false },
249256 'content.caller_signature': { fn: api.callerSignature as OpEntry['fn'], path: 0, query: false, body: true },
250 'diffs.diff_for_commit': { fn: api.diffForCommit as OpEntry['fn'], path: 3, query: false, body: true },
251 'diffs.diff_raw': { fn: api.diffRaw as OpEntry['fn'], path: 2, query: false, body: true },
252 'diffs.get_diff': { fn: api.getDiff as OpEntry['fn'], path: 2, query: false, body: true },
253 'diffs.range_diff': { fn: api.rangeDiff as OpEntry['fn'], path: 2, query: false, body: true },
257 'diffs.diff_for_commit': { fn: api.diffForCommit as OpEntry['fn'], path: 3, query: false, body: false },
258 'diffs.diff_raw': { fn: api.diffRaw as OpEntry['fn'], path: 2, query: true, body: false },
259 'diffs.get_diff': { fn: api.getDiff as OpEntry['fn'], path: 2, query: true, body: false },
260 'diffs.range_diff': { fn: api.rangeDiff as OpEntry['fn'], path: 2, query: true, body: false },
254261 'hooks.execute_script': { fn: api.executeScript as OpEntry['fn'], path: 3, query: false, body: true },
255262 'issues.add_comment_reaction': { fn: api.addCommentReaction as OpEntry['fn'], path: 4, query: false, body: true },
256263 'issues.add_issue_reaction': { fn: api.addIssueReaction as OpEntry['fn'], path: 3, query: false, body: true },
257 'issues.bind_label': { fn: api.bindLabel as OpEntry['fn'], path: 4, query: false, body: true },
264 'issues.bind_label': { fn: api.bindLabel as OpEntry['fn'], path: 4, query: false, body: false },
258265 'issues.bulk_issues': { fn: api.bulkIssues as OpEntry['fn'], path: 2, query: false, body: true },
259 'issues.close_issue': { fn: api.closeIssue as OpEntry['fn'], path: 3, query: false, body: true },
266 'issues.close_issue': { fn: api.closeIssue as OpEntry['fn'], path: 3, query: false, body: false },
260267 'issues.create_board': { fn: api.createBoard as OpEntry['fn'], path: 1, query: false, body: true },
261268 'issues.create_comment': { fn: api.createComment as OpEntry['fn'], path: 3, query: false, body: true },
262269 'issues.create_dependency': { fn: api.createDependency as OpEntry['fn'], path: 3, query: false, body: true },
@@ -273,71 +280,81 @@
273280 'issues.create_pin': { fn: api.createPin as OpEntry['fn'], path: 2, query: false, body: true },
274281 'issues.create_repo_relation': { fn: api.createRepoRelation as OpEntry['fn'], path: 3, query: false, body: true },
275282 'issues.create_tracked_time': { fn: api.createTrackedTime as OpEntry['fn'], path: 3, query: false, body: true },
276 'issues.delete_board': { fn: api.deleteBoard as OpEntry['fn'], path: 2, query: false, body: true },
277 'issues.delete_comment': { fn: api.deleteComment as OpEntry['fn'], path: 4, query: false, body: true },
278 'issues.delete_dependency': { fn: api.deleteDependency as OpEntry['fn'], path: 4, query: false, body: true },
279 'issues.delete_issue': { fn: api.deleteIssue as OpEntry['fn'], path: 3, query: false, body: true },
283 'issues.delete_board': { fn: api.deleteBoard as OpEntry['fn'], path: 2, query: false, body: false },
284 'issues.delete_comment': { fn: api.deleteComment as OpEntry['fn'], path: 4, query: false, body: false },
285 'issues.delete_dependency': { fn: api.deleteDependency as OpEntry['fn'], path: 4, query: false, body: false },
286 'issues.delete_issue': { fn: api.deleteIssue as OpEntry['fn'], path: 3, query: false, body: false },
280287 'issues.delete_issue_attachment': {
281288 fn: api.deleteIssueAttachment as OpEntry['fn'],
282289 path: 1,
283290 query: false,
284 body: true,
291 body: false,
285292 },
286 'issues.delete_label': { fn: api.deleteLabel as OpEntry['fn'], path: 3, query: false, body: true },
287 'issues.delete_member': { fn: api.deleteMember as OpEntry['fn'], path: 4, query: false, body: true },
288 'issues.delete_milestone': { fn: api.deleteMilestone as OpEntry['fn'], path: 3, query: false, body: true },
289 'issues.delete_pin': { fn: api.deletePin as OpEntry['fn'], path: 3, query: false, body: true },
290 'issues.delete_repo_relation': { fn: api.deleteRepoRelation as OpEntry['fn'], path: 4, query: false, body: true },
291 'issues.delete_tracked_time': { fn: api.deleteTrackedTime as OpEntry['fn'], path: 4, query: false, body: true },
293 'issues.delete_label': { fn: api.deleteLabel as OpEntry['fn'], path: 3, query: false, body: false },
294 'issues.delete_member': { fn: api.deleteMember as OpEntry['fn'], path: 4, query: false, body: false },
295 'issues.delete_milestone': { fn: api.deleteMilestone as OpEntry['fn'], path: 3, query: false, body: false },
296 'issues.delete_pin': { fn: api.deletePin as OpEntry['fn'], path: 3, query: false, body: false },
297 'issues.delete_repo_relation': { fn: api.deleteRepoRelation as OpEntry['fn'], path: 4, query: false, body: false },
298 'issues.delete_tracked_time': { fn: api.deleteTrackedTime as OpEntry['fn'], path: 4, query: false, body: false },
292299 'issues.download_issue_attachment': {
293300 fn: api.downloadIssueAttachment as OpEntry['fn'],
294301 path: 1,
295302 query: false,
296 body: true,
303 body: false,
297304 },
298305 'issues.finalize_issue_attachment': {
299306 fn: api.finalizeIssueAttachment as OpEntry['fn'],
300307 path: 1,
301308 query: false,
302 body: true,
309 body: false,
303310 },
304 'issues.get_board': { fn: api.getBoard as OpEntry['fn'], path: 2, query: false, body: true },
305 'issues.get_comment': { fn: api.getComment as OpEntry['fn'], path: 4, query: false, body: true },
306 'issues.get_issue': { fn: api.getIssue as OpEntry['fn'], path: 3, query: false, body: true },
307 'issues.get_label': { fn: api.getLabel as OpEntry['fn'], path: 3, query: false, body: true },
308 'issues.get_milestone': { fn: api.getMilestone as OpEntry['fn'], path: 3, query: false, body: true },
309 'issues.get_stopwatch': { fn: api.getStopwatch as OpEntry['fn'], path: 3, query: false, body: true },
310 'issues.list_board_pins': { fn: api.listBoardPins as OpEntry['fn'], path: 2, query: false, body: true },
311 'issues.list_boards': { fn: api.listBoards as OpEntry['fn'], path: 1, query: false, body: true },
312 'issues.list_comment_reactions': { fn: api.listCommentReactions as OpEntry['fn'], path: 4, query: false, body: true },
313 'issues.list_comments': { fn: api.listComments as OpEntry['fn'], path: 3, query: false, body: true },
314 'issues.list_comments_tree': { fn: api.listCommentsTree as OpEntry['fn'], path: 3, query: false, body: true },
315 'issues.list_content_history': { fn: api.listContentHistory as OpEntry['fn'], path: 3, query: false, body: true },
316 'issues.list_dependencies': { fn: api.listDependencies as OpEntry['fn'], path: 3, query: false, body: true },
317 'issues.list_dependents': { fn: api.listDependents as OpEntry['fn'], path: 3, query: false, body: true },
318 'issues.list_events': { fn: api.listEvents as OpEntry['fn'], path: 3, query: false, body: true },
319 'issues.list_issue_attachments': { fn: api.listIssueAttachments as OpEntry['fn'], path: 3, query: false, body: true },
320 'issues.list_issue_members': { fn: api.listIssueMembers as OpEntry['fn'], path: 3, query: false, body: true },
321 'issues.list_issue_reactions': { fn: api.listIssueReactions as OpEntry['fn'], path: 3, query: false, body: true },
322 'issues.list_issue_users': { fn: api.listIssueUsers as OpEntry['fn'], path: 3, query: false, body: true },
323 'issues.list_issues': { fn: api.listIssues as OpEntry['fn'], path: 2, query: false, body: true },
324 'issues.list_labels': { fn: api.listLabels as OpEntry['fn'], path: 2, query: false, body: true },
325 'issues.list_labels_for_issue': { fn: api.listLabelsForIssue as OpEntry['fn'], path: 3, query: false, body: true },
326 'issues.list_milestones': { fn: api.listMilestones as OpEntry['fn'], path: 2, query: false, body: true },
327 'issues.list_repo_relations': { fn: api.listRepoRelations as OpEntry['fn'], path: 3, query: false, body: true },
328 'issues.list_tracked_time': { fn: api.listTrackedTime as OpEntry['fn'], path: 3, query: false, body: true },
311 'issues.get_board': { fn: api.getBoard as OpEntry['fn'], path: 2, query: false, body: false },
312 'issues.get_comment': { fn: api.getComment as OpEntry['fn'], path: 4, query: false, body: false },
313 'issues.get_issue': { fn: api.getIssue as OpEntry['fn'], path: 3, query: false, body: false },
314 'issues.get_label': { fn: api.getLabel as OpEntry['fn'], path: 3, query: false, body: false },
315 'issues.get_milestone': { fn: api.getMilestone as OpEntry['fn'], path: 3, query: false, body: false },
316 'issues.get_stopwatch': { fn: api.getStopwatch as OpEntry['fn'], path: 3, query: false, body: false },
317 'issues.list_board_pins': { fn: api.listBoardPins as OpEntry['fn'], path: 2, query: false, body: false },
318 'issues.list_boards': { fn: api.listBoards as OpEntry['fn'], path: 1, query: true, body: false },
319 'issues.list_comment_reactions': {
320 fn: api.listCommentReactions as OpEntry['fn'],
321 path: 4,
322 query: false,
323 body: false,
324 },
325 'issues.list_comments': { fn: api.listComments as OpEntry['fn'], path: 3, query: true, body: false },
326 'issues.list_comments_tree': { fn: api.listCommentsTree as OpEntry['fn'], path: 3, query: false, body: false },
327 'issues.list_content_history': { fn: api.listContentHistory as OpEntry['fn'], path: 3, query: true, body: false },
328 'issues.list_dependencies': { fn: api.listDependencies as OpEntry['fn'], path: 3, query: false, body: false },
329 'issues.list_dependents': { fn: api.listDependents as OpEntry['fn'], path: 3, query: false, body: false },
330 'issues.list_events': { fn: api.listEvents as OpEntry['fn'], path: 3, query: true, body: false },
331 'issues.list_issue_attachments': {
332 fn: api.listIssueAttachments as OpEntry['fn'],
333 path: 3,
334 query: false,
335 body: false,
336 },
337 'issues.list_issue_members': { fn: api.listIssueMembers as OpEntry['fn'], path: 3, query: true, body: false },
338 'issues.list_issue_reactions': { fn: api.listIssueReactions as OpEntry['fn'], path: 3, query: false, body: false },
339 'issues.list_issue_users': { fn: api.listIssueUsers as OpEntry['fn'], path: 3, query: true, body: false },
340 'issues.list_issues': { fn: api.listIssues as OpEntry['fn'], path: 2, query: true, body: false },
341 'issues.list_labels': { fn: api.listLabels as OpEntry['fn'], path: 2, query: true, body: false },
342 'issues.list_labels_for_issue': { fn: api.listLabelsForIssue as OpEntry['fn'], path: 3, query: false, body: false },
343 'issues.list_milestones': { fn: api.listMilestones as OpEntry['fn'], path: 2, query: true, body: false },
344 'issues.list_repo_relations': { fn: api.listRepoRelations as OpEntry['fn'], path: 3, query: false, body: false },
345 'issues.list_tracked_time': { fn: api.listTrackedTime as OpEntry['fn'], path: 3, query: true, body: false },
329346 'issues.mark_issue_read': { fn: api.markIssueRead as OpEntry['fn'], path: 3, query: false, body: true },
330347 'issues.remove_comment_reaction': {
331348 fn: api.removeCommentReaction as OpEntry['fn'],
332349 path: 4,
333 query: false,
334 body: true,
350 query: true,
351 body: false,
335352 },
336 'issues.remove_issue_reaction': { fn: api.removeIssueReaction as OpEntry['fn'], path: 3, query: false, body: true },
337 'issues.reopen_issue': { fn: api.reopenIssue as OpEntry['fn'], path: 3, query: false, body: true },
338 'issues.start_stopwatch': { fn: api.startStopwatch as OpEntry['fn'], path: 3, query: false, body: true },
339 'issues.stop_stopwatch': { fn: api.stopStopwatch as OpEntry['fn'], path: 3, query: false, body: true },
340 'issues.unbind_label': { fn: api.unbindLabel as OpEntry['fn'], path: 4, query: false, body: true },
353 'issues.remove_issue_reaction': { fn: api.removeIssueReaction as OpEntry['fn'], path: 3, query: true, body: false },
354 'issues.reopen_issue': { fn: api.reopenIssue as OpEntry['fn'], path: 3, query: false, body: false },
355 'issues.start_stopwatch': { fn: api.startStopwatch as OpEntry['fn'], path: 3, query: false, body: false },
356 'issues.stop_stopwatch': { fn: api.stopStopwatch as OpEntry['fn'], path: 3, query: false, body: false },
357 'issues.unbind_label': { fn: api.unbindLabel as OpEntry['fn'], path: 4, query: false, body: false },
341358 'issues.update_board': { fn: api.updateBoard as OpEntry['fn'], path: 2, query: false, body: true },
342359 'issues.update_comment': { fn: api.updateComment as OpEntry['fn'], path: 4, query: false, body: true },
343360 'issues.update_issue': { fn: api.updateIssue as OpEntry['fn'], path: 3, query: false, body: true },
@@ -346,192 +363,192 @@
346363 'issues.update_pin': { fn: api.updatePin as OpEntry['fn'], path: 3, query: false, body: true },
347364 'issues.update_tracked_time': { fn: api.updateTrackedTime as OpEntry['fn'], path: 4, query: false, body: true },
348365 'issues.upsert_issue_watch': { fn: api.upsertIssueWatch as OpEntry['fn'], path: 3, query: false, body: true },
349 'lfs.list_locks': { fn: api.listLocks as OpEntry['fn'], path: 2, query: false, body: true },
366 'lfs.list_locks': { fn: api.listLocks as OpEntry['fn'], path: 2, query: true, body: false },
350367 'lfs.lock': { fn: api.lock as OpEntry['fn'], path: 2, query: false, body: true },
351 'lfs.unlock': { fn: api.unlock as OpEntry['fn'], path: 2, query: false, body: true },
352 'lfs.unlock_by_id': { fn: api.unlockById as OpEntry['fn'], path: 3, query: false, body: true },
353 'lfs.verify_locks': { fn: api.verifyLocks as OpEntry['fn'], path: 2, query: false, body: true },
354 'licenses.get_license': { fn: api.getLicense as OpEntry['fn'], path: 1, query: false, body: true },
355 'licenses.list_licenses': { fn: api.listLicenses as OpEntry['fn'], path: 0, query: false, body: true },
356 'logs.path_log': { fn: api.pathLog as OpEntry['fn'], path: 2, query: false, body: true },
368 'lfs.unlock': { fn: api.unlock as OpEntry['fn'], path: 2, query: true, body: false },
369 'lfs.unlock_by_id': { fn: api.unlockById as OpEntry['fn'], path: 3, query: true, body: false },
370 'lfs.verify_locks': { fn: api.verifyLocks as OpEntry['fn'], path: 2, query: true, body: false },
371 'licenses.get_license': { fn: api.getLicense as OpEntry['fn'], path: 1, query: false, body: false },
372 'licenses.list_licenses': { fn: api.listLicenses as OpEntry['fn'], path: 0, query: true, body: false },
373 'logs.path_log': { fn: api.pathLog as OpEntry['fn'], path: 2, query: true, body: false },
357374 'notifications.delete_notification': {
358375 fn: api.deleteNotification as OpEntry['fn'],
359376 path: 1,
360377 query: false,
361 body: true,
378 body: false,
362379 },
363 'notifications.list_notifications': { fn: api.listNotifications as OpEntry['fn'], path: 0, query: false, body: true },
380 'notifications.list_notifications': { fn: api.listNotifications as OpEntry['fn'], path: 0, query: true, body: false },
364381 'notifications.unread_notifications_count': {
365382 fn: api.unreadNotificationsCount as OpEntry['fn'],
366383 path: 0,
367384 query: false,
368 body: true,
385 body: false,
369386 },
370 'patches.patch_generate': { fn: api.patchGenerate as OpEntry['fn'], path: 2, query: false, body: true },
387 'patches.patch_generate': { fn: api.patchGenerate as OpEntry['fn'], path: 2, query: true, body: false },
371388 'patches.patch_parse': { fn: api.patchParse as OpEntry['fn'], path: 0, query: false, body: true },
372389 'protection.create_policy': { fn: api.createPolicy as OpEntry['fn'], path: 2, query: false, body: true },
373 'protection.delete_policy': { fn: api.deletePolicy as OpEntry['fn'], path: 3, query: false, body: true },
374 'protection.get_policy': { fn: api.getPolicy as OpEntry['fn'], path: 3, query: false, body: true },
375 'protection.list_policies': { fn: api.listPolicies as OpEntry['fn'], path: 2, query: false, body: true },
390 'protection.delete_policy': { fn: api.deletePolicy as OpEntry['fn'], path: 3, query: false, body: false },
391 'protection.get_policy': { fn: api.getPolicy as OpEntry['fn'], path: 3, query: false, body: false },
392 'protection.list_policies': { fn: api.listPolicies as OpEntry['fn'], path: 2, query: false, body: false },
376393 'protection.update_policy': { fn: api.updatePolicy as OpEntry['fn'], path: 3, query: false, body: true },
377 'pulls.add_pull_assignee': { fn: api.addPullAssignee as OpEntry['fn'], path: 4, query: false, body: true },
394 'pulls.add_pull_assignee': { fn: api.addPullAssignee as OpEntry['fn'], path: 4, query: false, body: false },
378395 'pulls.attach_pull_label': { fn: api.attachPullLabel as OpEntry['fn'], path: 3, query: false, body: true },
379 'pulls.close_pull': { fn: api.closePull as OpEntry['fn'], path: 3, query: false, body: true },
396 'pulls.close_pull': { fn: api.closePull as OpEntry['fn'], path: 3, query: false, body: false },
380397 'pulls.create_pull': { fn: api.createPull as OpEntry['fn'], path: 2, query: false, body: true },
381398 'pulls.create_pull_comment': { fn: api.createPullComment as OpEntry['fn'], path: 3, query: false, body: true },
382 'pulls.delete_pull': { fn: api.deletePull as OpEntry['fn'], path: 3, query: false, body: true },
383 'pulls.delete_pull_comment': { fn: api.deletePullComment as OpEntry['fn'], path: 4, query: false, body: true },
384 'pulls.detach_pull_label': { fn: api.detachPullLabel as OpEntry['fn'], path: 4, query: false, body: true },
385 'pulls.get_pull': { fn: api.getPull as OpEntry['fn'], path: 3, query: false, body: true },
386 'pulls.get_pull_checks': { fn: api.getPullChecks as OpEntry['fn'], path: 3, query: false, body: true },
387 'pulls.get_pull_files': { fn: api.getPullFiles as OpEntry['fn'], path: 3, query: false, body: true },
388 'pulls.get_pull_gate': { fn: api.getPullGate as OpEntry['fn'], path: 3, query: false, body: true },
389 'pulls.get_pull_patch': { fn: api.getPullPatch as OpEntry['fn'], path: 3, query: false, body: true },
399 'pulls.delete_pull': { fn: api.deletePull as OpEntry['fn'], path: 3, query: false, body: false },
400 'pulls.delete_pull_comment': { fn: api.deletePullComment as OpEntry['fn'], path: 4, query: false, body: false },
401 'pulls.detach_pull_label': { fn: api.detachPullLabel as OpEntry['fn'], path: 4, query: false, body: false },
402 'pulls.get_pull': { fn: api.getPull as OpEntry['fn'], path: 3, query: false, body: false },
403 'pulls.get_pull_checks': { fn: api.getPullChecks as OpEntry['fn'], path: 3, query: false, body: false },
404 'pulls.get_pull_files': { fn: api.getPullFiles as OpEntry['fn'], path: 3, query: false, body: false },
405 'pulls.get_pull_gate': { fn: api.getPullGate as OpEntry['fn'], path: 3, query: false, body: false },
406 'pulls.get_pull_patch': { fn: api.getPullPatch as OpEntry['fn'], path: 3, query: false, body: false },
390407 'pulls.link_issue_pull': { fn: api.linkIssuePull as OpEntry['fn'], path: 3, query: false, body: true },
391 'pulls.list_issue_pulls': { fn: api.listIssuePulls as OpEntry['fn'], path: 3, query: false, body: true },
392 'pulls.list_label_options': { fn: api.listLabelOptions as OpEntry['fn'], path: 2, query: false, body: true },
393 'pulls.list_my_pulls': { fn: api.listMyPulls as OpEntry['fn'], path: 1, query: false, body: true },
394 'pulls.list_pull_assignees': { fn: api.listPullAssignees as OpEntry['fn'], path: 3, query: false, body: true },
395 'pulls.list_pull_comment_tree': { fn: api.listPullCommentTree as OpEntry['fn'], path: 3, query: false, body: true },
396 'pulls.list_pull_comments': { fn: api.listPullComments as OpEntry['fn'], path: 3, query: false, body: true },
397 'pulls.list_pull_commits': { fn: api.listPullCommits as OpEntry['fn'], path: 3, query: false, body: true },
398 'pulls.list_pull_events': { fn: api.listPullEvents as OpEntry['fn'], path: 3, query: false, body: true },
399 'pulls.list_pull_labels': { fn: api.listPullLabels as OpEntry['fn'], path: 3, query: false, body: true },
400 'pulls.list_pulls': { fn: api.listPulls as OpEntry['fn'], path: 2, query: false, body: true },
401 'pulls.lock_pull': { fn: api.lockPull as OpEntry['fn'], path: 3, query: false, body: true },
408 'pulls.list_issue_pulls': { fn: api.listIssuePulls as OpEntry['fn'], path: 3, query: false, body: false },
409 'pulls.list_label_options': { fn: api.listLabelOptions as OpEntry['fn'], path: 2, query: false, body: false },
410 'pulls.list_my_pulls': { fn: api.listMyPulls as OpEntry['fn'], path: 1, query: true, body: false },
411 'pulls.list_pull_assignees': { fn: api.listPullAssignees as OpEntry['fn'], path: 3, query: false, body: false },
412 'pulls.list_pull_comment_tree': { fn: api.listPullCommentTree as OpEntry['fn'], path: 3, query: false, body: false },
413 'pulls.list_pull_comments': { fn: api.listPullComments as OpEntry['fn'], path: 3, query: true, body: false },
414 'pulls.list_pull_commits': { fn: api.listPullCommits as OpEntry['fn'], path: 3, query: false, body: false },
415 'pulls.list_pull_events': { fn: api.listPullEvents as OpEntry['fn'], path: 3, query: true, body: false },
416 'pulls.list_pull_labels': { fn: api.listPullLabels as OpEntry['fn'], path: 3, query: false, body: false },
417 'pulls.list_pulls': { fn: api.listPulls as OpEntry['fn'], path: 2, query: true, body: false },
418 'pulls.lock_pull': { fn: api.lockPull as OpEntry['fn'], path: 3, query: false, body: false },
402419 'pulls.merge_pull': { fn: api.mergePull as OpEntry['fn'], path: 3, query: false, body: true },
403 'pulls.refresh_pull_summary': { fn: api.refreshPullSummary as OpEntry['fn'], path: 3, query: false, body: true },
404 'pulls.remove_pull_assignee': { fn: api.removePullAssignee as OpEntry['fn'], path: 4, query: false, body: true },
405 'pulls.reopen_pull': { fn: api.reopenPull as OpEntry['fn'], path: 3, query: false, body: true },
406 'pulls.resolve_pull_comment': { fn: api.resolvePullComment as OpEntry['fn'], path: 4, query: false, body: true },
407 'pulls.unlink_issue_pull': { fn: api.unlinkIssuePull as OpEntry['fn'], path: 4, query: false, body: true },
408 'pulls.unlock_pull': { fn: api.unlockPull as OpEntry['fn'], path: 3, query: false, body: true },
409 'pulls.unresolve_pull_comment': { fn: api.unresolvePullComment as OpEntry['fn'], path: 4, query: false, body: true },
410 'pulls.update_branch_pull': { fn: api.updateBranchPull as OpEntry['fn'], path: 3, query: false, body: true },
420 'pulls.refresh_pull_summary': { fn: api.refreshPullSummary as OpEntry['fn'], path: 3, query: false, body: false },
421 'pulls.remove_pull_assignee': { fn: api.removePullAssignee as OpEntry['fn'], path: 4, query: false, body: false },
422 'pulls.reopen_pull': { fn: api.reopenPull as OpEntry['fn'], path: 3, query: false, body: false },
423 'pulls.resolve_pull_comment': { fn: api.resolvePullComment as OpEntry['fn'], path: 4, query: false, body: false },
424 'pulls.unlink_issue_pull': { fn: api.unlinkIssuePull as OpEntry['fn'], path: 4, query: false, body: false },
425 'pulls.unlock_pull': { fn: api.unlockPull as OpEntry['fn'], path: 3, query: false, body: false },
426 'pulls.unresolve_pull_comment': { fn: api.unresolvePullComment as OpEntry['fn'], path: 4, query: false, body: false },
427 'pulls.update_branch_pull': { fn: api.updateBranchPull as OpEntry['fn'], path: 3, query: false, body: false },
411428 'pulls.update_pull': { fn: api.updatePull as OpEntry['fn'], path: 3, query: false, body: true },
412429 'pulls.update_pull_comment': { fn: api.updatePullComment as OpEntry['fn'], path: 4, query: false, body: true },
413 'push.push_config': { fn: api.pushConfig as OpEntry['fn'], path: 0, query: false, body: true },
430 'push.push_config': { fn: api.pushConfig as OpEntry['fn'], path: 0, query: false, body: false },
414431 'releases.create_release': { fn: api.createRelease as OpEntry['fn'], path: 2, query: false, body: true },
415 'releases.delete_release': { fn: api.deleteRelease as OpEntry['fn'], path: 3, query: false, body: true },
416 'releases.get_release': { fn: api.getRelease as OpEntry['fn'], path: 3, query: false, body: true },
417 'releases.list_releases': { fn: api.listReleases as OpEntry['fn'], path: 2, query: false, body: true },
432 'releases.delete_release': { fn: api.deleteRelease as OpEntry['fn'], path: 3, query: false, body: false },
433 'releases.get_release': { fn: api.getRelease as OpEntry['fn'], path: 3, query: false, body: false },
434 'releases.list_releases': { fn: api.listReleases as OpEntry['fn'], path: 2, query: true, body: false },
418435 'releases.update_release': { fn: api.updateRelease as OpEntry['fn'], path: 3, query: false, body: true },
419436 'remotes.clone_import': { fn: api.cloneImport as OpEntry['fn'], path: 2, query: false, body: true },
420437 'remotes.fetch_remote': { fn: api.fetchRemote as OpEntry['fn'], path: 2, query: false, body: true },
421 'remotes.list_remotes': { fn: api.listRemotes as OpEntry['fn'], path: 2, query: false, body: true },
438 'remotes.list_remotes': { fn: api.listRemotes as OpEntry['fn'], path: 2, query: false, body: false },
422439 'remotes.push': { fn: api.push as OpEntry['fn'], path: 2, query: false, body: true },
423 'remotes.remove': { fn: api.remove as OpEntry['fn'], path: 3, query: false, body: true },
440 'remotes.remove': { fn: api.remove as OpEntry['fn'], path: 3, query: false, body: false },
424441 'remotes.upsert_remote': { fn: api.upsertRemote as OpEntry['fn'], path: 3, query: false, body: true },
425442 'reports.create_report': { fn: api.createReport as OpEntry['fn'], path: 0, query: false, body: true },
426 'repos.add_topic_to_repo': { fn: api.addTopicToRepo as OpEntry['fn'], path: 3, query: false, body: true },
427 'repos.archive_repo': { fn: api.archiveRepo as OpEntry['fn'], path: 2, query: false, body: true },
443 'repos.add_topic_to_repo': { fn: api.addTopicToRepo as OpEntry['fn'], path: 3, query: false, body: false },
444 'repos.archive_repo': { fn: api.archiveRepo as OpEntry['fn'], path: 2, query: false, body: false },
428445 'repos.create_repo': { fn: api.createRepo as OpEntry['fn'], path: 1, query: false, body: true },
429 'repos.get_repo': { fn: api.getRepo as OpEntry['fn'], path: 2, query: false, body: true },
430 'repos.list_repo_topics': { fn: api.listRepoTopics as OpEntry['fn'], path: 2, query: false, body: true },
431 'repos.list_repos': { fn: api.listRepos as OpEntry['fn'], path: 1, query: false, body: true },
432 'repos.list_stargazers': { fn: api.listStargazers as OpEntry['fn'], path: 2, query: false, body: true },
433 'repos.list_watchers': { fn: api.listWatchers as OpEntry['fn'], path: 2, query: false, body: true },
434 'repos.remove_topic_from_repo': { fn: api.removeTopicFromRepo as OpEntry['fn'], path: 3, query: false, body: true },
435 'repos.star_repo': { fn: api.starRepo as OpEntry['fn'], path: 2, query: false, body: true },
436 'repos.unarchive_repo': { fn: api.unarchiveRepo as OpEntry['fn'], path: 2, query: false, body: true },
437 'repos.unstar_repo': { fn: api.unstarRepo as OpEntry['fn'], path: 2, query: false, body: true },
446 'repos.get_repo': { fn: api.getRepo as OpEntry['fn'], path: 2, query: false, body: false },
447 'repos.list_repo_topics': { fn: api.listRepoTopics as OpEntry['fn'], path: 2, query: false, body: false },
448 'repos.list_repos': { fn: api.listRepos as OpEntry['fn'], path: 1, query: true, body: false },
449 'repos.list_stargazers': { fn: api.listStargazers as OpEntry['fn'], path: 2, query: true, body: false },
450 'repos.list_watchers': { fn: api.listWatchers as OpEntry['fn'], path: 2, query: true, body: false },
451 'repos.remove_topic_from_repo': { fn: api.removeTopicFromRepo as OpEntry['fn'], path: 3, query: false, body: false },
452 'repos.star_repo': { fn: api.starRepo as OpEntry['fn'], path: 2, query: false, body: false },
453 'repos.unarchive_repo': { fn: api.unarchiveRepo as OpEntry['fn'], path: 2, query: false, body: false },
454 'repos.unstar_repo': { fn: api.unstarRepo as OpEntry['fn'], path: 2, query: false, body: false },
438455 'repos.update_repo': { fn: api.updateRepo as OpEntry['fn'], path: 2, query: false, body: true },
439456 'repos.upsert_watch': { fn: api.upsertWatch as OpEntry['fn'], path: 2, query: false, body: true },
440457 'reviews.delete_requested_reviewer': {
441458 fn: api.deleteRequestedReviewer as OpEntry['fn'],
442459 path: 4,
443460 query: false,
444 body: true,
461 body: false,
445462 },
446 'reviews.dismiss_review': { fn: api.dismissReview as OpEntry['fn'], path: 4, query: false, body: true },
447 'reviews.get_review': { fn: api.getReview as OpEntry['fn'], path: 4, query: false, body: true },
463 'reviews.dismiss_review': { fn: api.dismissReview as OpEntry['fn'], path: 4, query: false, body: false },
464 'reviews.get_review': { fn: api.getReview as OpEntry['fn'], path: 4, query: false, body: false },
448465 'reviews.list_requested_reviewers': {
449466 fn: api.listRequestedReviewers as OpEntry['fn'],
450467 path: 3,
451468 query: false,
452 body: true,
469 body: false,
453470 },
454 'reviews.list_reviews': { fn: api.listReviews as OpEntry['fn'], path: 3, query: false, body: true },
471 'reviews.list_reviews': { fn: api.listReviews as OpEntry['fn'], path: 3, query: false, body: false },
455472 'reviews.publish_review': { fn: api.publishReview as OpEntry['fn'], path: 4, query: false, body: true },
456473 'reviews.request_reviewers': { fn: api.requestReviewers as OpEntry['fn'], path: 3, query: false, body: true },
457474 'reviews.submit_review': { fn: api.submitReview as OpEntry['fn'], path: 3, query: false, body: true },
458 'signatures.verify_commit': { fn: api.verifyCommit as OpEntry['fn'], path: 3, query: false, body: true },
459 'signatures.verify_tag': { fn: api.verifyTag as OpEntry['fn'], path: 3, query: false, body: true },
460 'space.approve_join_request': { fn: api.approveJoinRequest as OpEntry['fn'], path: 2, query: false, body: true },
475 'signatures.verify_commit': { fn: api.verifyCommit as OpEntry['fn'], path: 3, query: false, body: false },
476 'signatures.verify_tag': { fn: api.verifyTag as OpEntry['fn'], path: 3, query: false, body: false },
477 'space.approve_join_request': { fn: api.approveJoinRequest as OpEntry['fn'], path: 2, query: false, body: false },
461478 'space.assign_group': { fn: api.assignGroup as OpEntry['fn'], path: 2, query: false, body: true },
462479 'space.create_dir_node': { fn: api.createDirNode as OpEntry['fn'], path: 1, query: false, body: true },
463480 'space.create_group': { fn: api.createGroup as OpEntry['fn'], path: 1, query: false, body: true },
464481 'space.create_join_request': { fn: api.createJoinRequest as OpEntry['fn'], path: 1, query: false, body: true },
465482 'space.create_join_rule': { fn: api.createJoinRule as OpEntry['fn'], path: 1, query: false, body: true },
466 'space.delete_group': { fn: api.deleteGroup as OpEntry['fn'], path: 2, query: false, body: true },
467 'space.delete_join_rule': { fn: api.deleteJoinRule as OpEntry['fn'], path: 2, query: false, body: true },
468 'space.delete_space_image': { fn: api.deleteSpaceImage as OpEntry['fn'], path: 2, query: false, body: true },
469 'space.explore_spaces': { fn: api.exploreSpaces as OpEntry['fn'], path: 0, query: false, body: true },
470 'space.get_group': { fn: api.getGroup as OpEntry['fn'], path: 2, query: false, body: true },
471 'space.get_space_dir_tree': { fn: api.getSpaceDirTree as OpEntry['fn'], path: 1, query: false, body: true },
472 'space.get_space_image': { fn: api.getSpaceImage as OpEntry['fn'], path: 2, query: false, body: true },
473 'space.get_space_image_file': { fn: api.getSpaceImageFile as OpEntry['fn'], path: 2, query: false, body: true },
474 'space.join_group_self': { fn: api.joinGroupSelf as OpEntry['fn'], path: 2, query: false, body: true },
475 'space.leave_group_self': { fn: api.leaveGroupSelf as OpEntry['fn'], path: 2, query: false, body: true },
483 'space.delete_group': { fn: api.deleteGroup as OpEntry['fn'], path: 2, query: false, body: false },
484 'space.delete_join_rule': { fn: api.deleteJoinRule as OpEntry['fn'], path: 2, query: false, body: false },
485 'space.delete_space_image': { fn: api.deleteSpaceImage as OpEntry['fn'], path: 2, query: false, body: false },
486 'space.explore_spaces': { fn: api.exploreSpaces as OpEntry['fn'], path: 0, query: true, body: false },
487 'space.get_group': { fn: api.getGroup as OpEntry['fn'], path: 2, query: false, body: false },
488 'space.get_space_dir_tree': { fn: api.getSpaceDirTree as OpEntry['fn'], path: 1, query: true, body: false },
489 'space.get_space_image': { fn: api.getSpaceImage as OpEntry['fn'], path: 2, query: false, body: false },
490 'space.get_space_image_file': { fn: api.getSpaceImageFile as OpEntry['fn'], path: 2, query: true, body: false },
491 'space.join_group_self': { fn: api.joinGroupSelf as OpEntry['fn'], path: 2, query: false, body: false },
492 'space.leave_group_self': { fn: api.leaveGroupSelf as OpEntry['fn'], path: 2, query: false, body: false },
476493 'space.list_dir_group_overwrites': {
477494 fn: api.listDirGroupOverwrites as OpEntry['fn'],
478495 path: 2,
479496 query: false,
480 body: true,
497 body: false,
481498 },
482499 'space.list_dir_user_overwrites': {
483500 fn: api.listDirUserOverwrites as OpEntry['fn'],
484501 path: 2,
485502 query: false,
486 body: true,
503 body: false,
487504 },
488 'space.list_groups': { fn: api.listGroups as OpEntry['fn'], path: 1, query: false, body: true },
489 'space.list_join_requests': { fn: api.listJoinRequests as OpEntry['fn'], path: 1, query: false, body: true },
490 'space.list_join_rules': { fn: api.listJoinRules as OpEntry['fn'], path: 1, query: false, body: true },
505 'space.list_groups': { fn: api.listGroups as OpEntry['fn'], path: 1, query: true, body: false },
506 'space.list_join_requests': { fn: api.listJoinRequests as OpEntry['fn'], path: 1, query: true, body: false },
507 'space.list_join_rules': { fn: api.listJoinRules as OpEntry['fn'], path: 1, query: false, body: false },
491508 'space.move_dir_node': { fn: api.moveDirNode as OpEntry['fn'], path: 2, query: false, body: true },
492 'space.reject_join_request': { fn: api.rejectJoinRequest as OpEntry['fn'], path: 2, query: false, body: true },
509 'space.reject_join_request': { fn: api.rejectJoinRequest as OpEntry['fn'], path: 2, query: false, body: false },
493510 'space.remove_dir_group_overwrite': {
494511 fn: api.removeDirGroupOverwrite as OpEntry['fn'],
495512 path: 3,
496513 query: false,
497 body: true,
514 body: false,
498515 },
499516 'space.remove_dir_user_overwrite': {
500517 fn: api.removeDirUserOverwrite as OpEntry['fn'],
501518 path: 3,
502519 query: false,
503 body: true,
520 body: false,
504521 },
505 'space.repair_dir_parents': { fn: api.repairDirParents as OpEntry['fn'], path: 1, query: false, body: true },
522 'space.repair_dir_parents': { fn: api.repairDirParents as OpEntry['fn'], path: 1, query: false, body: false },
506523 'space.set_dir_group_overwrite': { fn: api.setDirGroupOverwrite as OpEntry['fn'], path: 3, query: false, body: true },
507524 'space.set_dir_user_overwrite': { fn: api.setDirUserOverwrite as OpEntry['fn'], path: 3, query: false, body: true },
508525 'space.space_archive': { fn: api.spaceArchive as OpEntry['fn'], path: 1, query: false, body: true },
509 'space.space_ban_delete': { fn: api.spaceBanDelete as OpEntry['fn'], path: 2, query: false, body: true },
510 'space.space_ban_get': { fn: api.spaceBanGet as OpEntry['fn'], path: 2, query: false, body: true },
511 'space.space_ban_list': { fn: api.spaceBanList as OpEntry['fn'], path: 1, query: false, body: true },
526 'space.space_ban_delete': { fn: api.spaceBanDelete as OpEntry['fn'], path: 2, query: false, body: false },
527 'space.space_ban_get': { fn: api.spaceBanGet as OpEntry['fn'], path: 2, query: false, body: false },
528 'space.space_ban_list': { fn: api.spaceBanList as OpEntry['fn'], path: 1, query: true, body: false },
512529 'space.space_ban_update': { fn: api.spaceBanUpdate as OpEntry['fn'], path: 2, query: false, body: true },
513530 'space.space_create': { fn: api.spaceCreate as OpEntry['fn'], path: 0, query: false, body: true },
514 'space.space_delete': { fn: api.spaceDelete as OpEntry['fn'], path: 1, query: false, body: true },
515 'space.space_get': { fn: api.spaceGet as OpEntry['fn'], path: 1, query: false, body: true },
531 'space.space_delete': { fn: api.spaceDelete as OpEntry['fn'], path: 1, query: true, body: false },
532 'space.space_get': { fn: api.spaceGet as OpEntry['fn'], path: 1, query: false, body: false },
516533 'space.space_invite_create': { fn: api.spaceInviteCreate as OpEntry['fn'], path: 1, query: false, body: true },
517 'space.space_invite_list': { fn: api.spaceInviteList as OpEntry['fn'], path: 1, query: false, body: true },
534 'space.space_invite_list': { fn: api.spaceInviteList as OpEntry['fn'], path: 1, query: true, body: false },
518535 'space.space_invite_redeem': { fn: api.spaceInviteRedeem as OpEntry['fn'], path: 0, query: false, body: true },
519 'space.space_invite_revoke': { fn: api.spaceInviteRevoke as OpEntry['fn'], path: 2, query: false, body: true },
520 'space.space_leave': { fn: api.spaceLeave as OpEntry['fn'], path: 1, query: false, body: true },
521 'space.space_list': { fn: api.spaceList as OpEntry['fn'], path: 0, query: false, body: true },
536 'space.space_invite_revoke': { fn: api.spaceInviteRevoke as OpEntry['fn'], path: 2, query: false, body: false },
537 'space.space_leave': { fn: api.spaceLeave as OpEntry['fn'], path: 1, query: false, body: false },
538 'space.space_list': { fn: api.spaceList as OpEntry['fn'], path: 0, query: true, body: false },
522539 'space.space_member_add': { fn: api.spaceMemberAdd as OpEntry['fn'], path: 1, query: false, body: true },
523540 'space.space_member_ban': { fn: api.spaceMemberBan as OpEntry['fn'], path: 2, query: false, body: true },
524 'space.space_member_get': { fn: api.spaceMemberGet as OpEntry['fn'], path: 2, query: false, body: true },
525 'space.space_member_list': { fn: api.spaceMemberList as OpEntry['fn'], path: 1, query: false, body: true },
541 'space.space_member_get': { fn: api.spaceMemberGet as OpEntry['fn'], path: 2, query: false, body: false },
542 'space.space_member_list': { fn: api.spaceMemberList as OpEntry['fn'], path: 1, query: true, body: false },
526543 'space.space_member_permissions': {
527544 fn: api.spaceMemberPermissions as OpEntry['fn'],
528545 path: 2,
529546 query: false,
530547 body: true,
531548 },
532 'space.space_member_remove': { fn: api.spaceMemberRemove as OpEntry['fn'], path: 2, query: false, body: true },
549 'space.space_member_remove': { fn: api.spaceMemberRemove as OpEntry['fn'], path: 2, query: true, body: false },
533550 'space.space_member_role': { fn: api.spaceMemberRole as OpEntry['fn'], path: 2, query: false, body: true },
534 'space.space_member_unban': { fn: api.spaceMemberUnban as OpEntry['fn'], path: 2, query: false, body: true },
551 'space.space_member_unban': { fn: api.spaceMemberUnban as OpEntry['fn'], path: 2, query: false, body: false },
535552 'space.space_member_update': { fn: api.spaceMemberUpdate as OpEntry['fn'], path: 2, query: false, body: true },
536553 'space.space_member_update_self': {
537554 fn: api.spaceMemberUpdateSelf as OpEntry['fn'],
@@ -540,77 +557,83 @@
540557 body: true,
541558 },
542559 'space.space_permission_check': { fn: api.spacePermissionCheck as OpEntry['fn'], path: 1, query: false, body: true },
543 'space.space_restore': { fn: api.spaceRestore as OpEntry['fn'], path: 1, query: false, body: true },
560 'space.space_restore': { fn: api.spaceRestore as OpEntry['fn'], path: 1, query: false, body: false },
544561 'space.space_role_assign': { fn: api.spaceRoleAssign as OpEntry['fn'], path: 1, query: false, body: true },
545562 'space.space_role_create': { fn: api.spaceRoleCreate as OpEntry['fn'], path: 1, query: false, body: true },
546 'space.space_role_delete': { fn: api.spaceRoleDelete as OpEntry['fn'], path: 2, query: false, body: true },
547 'space.space_role_get': { fn: api.spaceRoleGet as OpEntry['fn'], path: 2, query: false, body: true },
548 'space.space_role_join': { fn: api.spaceRoleJoin as OpEntry['fn'], path: 2, query: false, body: true },
549 'space.space_role_leave': { fn: api.spaceRoleLeave as OpEntry['fn'], path: 2, query: false, body: true },
550 'space.space_role_list': { fn: api.spaceRoleList as OpEntry['fn'], path: 1, query: false, body: true },
563 'space.space_role_delete': { fn: api.spaceRoleDelete as OpEntry['fn'], path: 2, query: false, body: false },
564 'space.space_role_get': { fn: api.spaceRoleGet as OpEntry['fn'], path: 2, query: false, body: false },
565 'space.space_role_join': { fn: api.spaceRoleJoin as OpEntry['fn'], path: 2, query: false, body: false },
566 'space.space_role_leave': { fn: api.spaceRoleLeave as OpEntry['fn'], path: 2, query: false, body: false },
567 'space.space_role_list': { fn: api.spaceRoleList as OpEntry['fn'], path: 1, query: false, body: false },
551568 'space.space_role_permissions': { fn: api.spaceRolePermissions as OpEntry['fn'], path: 2, query: false, body: true },
552569 'space.space_role_unassign': { fn: api.spaceRoleUnassign as OpEntry['fn'], path: 1, query: false, body: true },
553570 'space.space_role_update': { fn: api.spaceRoleUpdate as OpEntry['fn'], path: 2, query: false, body: true },
554571 'space.space_transfer': { fn: api.spaceTransfer as OpEntry['fn'], path: 1, query: false, body: true },
555572 'space.space_update': { fn: api.spaceUpdate as OpEntry['fn'], path: 1, query: false, body: true },
556 'space.unassign_group': { fn: api.unassignGroup as OpEntry['fn'], path: 3, query: false, body: true },
573 'space.unassign_group': { fn: api.unassignGroup as OpEntry['fn'], path: 3, query: false, body: false },
557574 'space.update_dir_node': { fn: api.updateDirNode as OpEntry['fn'], path: 2, query: false, body: true },
558575 'space.update_group': { fn: api.updateGroup as OpEntry['fn'], path: 2, query: false, body: true },
559576 'space.update_join_rule': { fn: api.updateJoinRule as OpEntry['fn'], path: 2, query: false, body: true },
560 'space.upload_space_image': { fn: api.uploadSpaceImage as OpEntry['fn'], path: 2, query: false, body: true },
561 'space.withdraw_join_request': { fn: api.withdrawJoinRequest as OpEntry['fn'], path: 2, query: false, body: true },
562 'submodules.submodule_list': { fn: api.submoduleList as OpEntry['fn'], path: 2, query: false, body: true },
563 'submodules.submodule_resolve': { fn: api.submoduleResolve as OpEntry['fn'], path: 2, query: false, body: true },
577 'space.upload_space_image': {
578 fn: api.uploadSpaceImage as OpEntry['fn'],
579 path: 2,
580 query: true,
581 body: true,
582 bodyFirst: true,
583 },
584 'space.withdraw_join_request': { fn: api.withdrawJoinRequest as OpEntry['fn'], path: 2, query: false, body: false },
585 'submodules.submodule_list': { fn: api.submoduleList as OpEntry['fn'], path: 2, query: true, body: false },
586 'submodules.submodule_resolve': { fn: api.submoduleResolve as OpEntry['fn'], path: 2, query: true, body: false },
564587 'tag_protection.add_tag_whitelist': { fn: api.addTagWhitelist as OpEntry['fn'], path: 3, query: false, body: true },
565588 'tag_protection.create_tag_policy': { fn: api.createTagPolicy as OpEntry['fn'], path: 2, query: false, body: true },
566 'tag_protection.delete_tag_policy': { fn: api.deleteTagPolicy as OpEntry['fn'], path: 3, query: false, body: true },
567 'tag_protection.get_tag_policy': { fn: api.getTagPolicy as OpEntry['fn'], path: 3, query: false, body: true },
568 'tag_protection.list_tag_policies': { fn: api.listTagPolicies as OpEntry['fn'], path: 2, query: false, body: true },
589 'tag_protection.delete_tag_policy': { fn: api.deleteTagPolicy as OpEntry['fn'], path: 3, query: false, body: false },
590 'tag_protection.get_tag_policy': { fn: api.getTagPolicy as OpEntry['fn'], path: 3, query: false, body: false },
591 'tag_protection.list_tag_policies': { fn: api.listTagPolicies as OpEntry['fn'], path: 2, query: false, body: false },
569592 'tag_protection.list_tag_whitelists': {
570593 fn: api.listTagWhitelists as OpEntry['fn'],
571594 path: 3,
572595 query: false,
573 body: true,
596 body: false,
574597 },
575598 'tag_protection.remove_tag_whitelist': {
576599 fn: api.removeTagWhitelist as OpEntry['fn'],
577600 path: 4,
578601 query: false,
579 body: true,
602 body: false,
580603 },
581604 'tag_protection.update_tag_policy': { fn: api.updateTagPolicy as OpEntry['fn'], path: 3, query: false, body: true },
582605 'tags.create_tag': { fn: api.createTag as OpEntry['fn'], path: 2, query: false, body: true },
583 'tags.delete_tag': { fn: api.deleteTag as OpEntry['fn'], path: 3, query: false, body: true },
584 'tags.get_tag': { fn: api.getTag as OpEntry['fn'], path: 3, query: false, body: true },
585 'tags.list_tags': { fn: api.listTags as OpEntry['fn'], path: 2, query: false, body: true },
606 'tags.delete_tag': { fn: api.deleteTag as OpEntry['fn'], path: 3, query: false, body: false },
607 'tags.get_tag': { fn: api.getTag as OpEntry['fn'], path: 3, query: false, body: false },
608 'tags.list_tags': { fn: api.listTags as OpEntry['fn'], path: 2, query: true, body: false },
586609 'topics.create_topic': { fn: api.createTopic as OpEntry['fn'], path: 0, query: false, body: true },
587 'topics.get_topic': { fn: api.getTopic as OpEntry['fn'], path: 1, query: false, body: true },
588 'topics.list_repos_by_topic': { fn: api.listReposByTopic as OpEntry['fn'], path: 1, query: false, body: true },
589 'topics.list_topics': { fn: api.listTopics as OpEntry['fn'], path: 0, query: false, body: true },
590 'trees.get_tree': { fn: api.getTree as OpEntry['fn'], path: 3, query: false, body: true },
610 'topics.get_topic': { fn: api.getTopic as OpEntry['fn'], path: 1, query: false, body: false },
611 'topics.list_repos_by_topic': { fn: api.listReposByTopic as OpEntry['fn'], path: 1, query: true, body: false },
612 'topics.list_topics': { fn: api.listTopics as OpEntry['fn'], path: 0, query: true, body: false },
613 'trees.get_tree': { fn: api.getTree as OpEntry['fn'], path: 3, query: true, body: false },
591614 'user.create_meme': { fn: api.createMeme as OpEntry['fn'], path: 0, query: false, body: true },
592 'user.delete_avatar': { fn: api.deleteAvatar as OpEntry['fn'], path: 0, query: false, body: true },
593 'user.delete_meme': { fn: api.deleteMeme as OpEntry['fn'], path: 1, query: false, body: true },
615 'user.delete_avatar': { fn: api.deleteAvatar as OpEntry['fn'], path: 0, query: false, body: false },
616 'user.delete_meme': { fn: api.deleteMeme as OpEntry['fn'], path: 1, query: false, body: false },
594617 'user.delete_push_subscription': {
595618 fn: api.deletePushSubscription as OpEntry['fn'],
596619 path: 1,
597620 query: false,
598 body: true,
621 body: false,
599622 },
600 'user.get_avatar': { fn: api.getAvatar as OpEntry['fn'], path: 0, query: false, body: true },
601 'user.get_profile_detail': { fn: api.getProfileDetail as OpEntry['fn'], path: 1, query: false, body: true },
602 'user.list_memes': { fn: api.listMemes as OpEntry['fn'], path: 0, query: false, body: true },
603 'user.list_push_subscriptions': { fn: api.listPushSubscriptions as OpEntry['fn'], path: 0, query: false, body: true },
604 'user.list_saved_messages': { fn: api.listSavedMessages as OpEntry['fn'], path: 0, query: false, body: true },
605 'user.list_sessions': { fn: api.listSessions as OpEntry['fn'], path: 0, query: false, body: true },
606 'user.my_reports': { fn: api.myReports as OpEntry['fn'], path: 0, query: false, body: true },
607 'user.my_spaces': { fn: api.mySpaces as OpEntry['fn'], path: 0, query: false, body: true },
608 'user.my_suspensions': { fn: api.mySuspensions as OpEntry['fn'], path: 0, query: false, body: true },
609 'user.recent_mentions': { fn: api.recentMentions as OpEntry['fn'], path: 0, query: false, body: true },
610 'user.revoke_all_sessions': { fn: api.revokeAllSessions as OpEntry['fn'], path: 0, query: false, body: true },
611 'user.revoke_session': { fn: api.revokeSession as OpEntry['fn'], path: 1, query: false, body: true },
623 'user.get_avatar': { fn: api.getAvatar as OpEntry['fn'], path: 0, query: false, body: false },
624 'user.get_profile_detail': { fn: api.getProfileDetail as OpEntry['fn'], path: 1, query: false, body: false },
625 'user.list_memes': { fn: api.listMemes as OpEntry['fn'], path: 0, query: true, body: false },
626 'user.list_push_subscriptions': { fn: api.listPushSubscriptions as OpEntry['fn'], path: 0, query: true, body: false },
627 'user.list_saved_messages': { fn: api.listSavedMessages as OpEntry['fn'], path: 0, query: true, body: false },
628 'user.list_sessions': { fn: api.listSessions as OpEntry['fn'], path: 0, query: true, body: false },
629 'user.my_reports': { fn: api.myReports as OpEntry['fn'], path: 0, query: true, body: false },
630 'user.my_spaces': { fn: api.mySpaces as OpEntry['fn'], path: 0, query: true, body: false },
631 'user.my_suspensions': { fn: api.mySuspensions as OpEntry['fn'], path: 0, query: true, body: false },
632 'user.recent_mentions': { fn: api.recentMentions as OpEntry['fn'], path: 0, query: true, body: false },
633 'user.revoke_all_sessions': { fn: api.revokeAllSessions as OpEntry['fn'], path: 0, query: false, body: false },
634 'user.revoke_session': { fn: api.revokeSession as OpEntry['fn'], path: 1, query: false, body: false },
612635 'user.save_message': { fn: api.saveMessage as OpEntry['fn'], path: 0, query: false, body: true },
613 'user.unsave_message': { fn: api.unsaveMessage as OpEntry['fn'], path: 1, query: false, body: true },
636 'user.unsave_message': { fn: api.unsaveMessage as OpEntry['fn'], path: 1, query: false, body: false },
614637 'user.update_meme': { fn: api.updateMeme as OpEntry['fn'], path: 1, query: false, body: true },
615638 'user.upload_avatar': { fn: api.uploadAvatar as OpEntry['fn'], path: 0, query: false, body: true },
616639 'user.upsert_push_subscription': {
@@ -619,8 +642,8 @@
619642 query: false,
620643 body: true,
621644 },
622 'users.get_user': { fn: api.getUser as OpEntry['fn'], path: 1, query: false, body: true },
623 'users.get_user_avatar': { fn: api.getUserAvatar as OpEntry['fn'], path: 1, query: false, body: true },
624 'users.get_user_by_username': { fn: api.getUserByUsername as OpEntry['fn'], path: 1, query: false, body: true },
625 'users.list_users_batch': { fn: api.listUsersBatch as OpEntry['fn'], path: 0, query: false, body: true },
645 'users.get_user': { fn: api.getUser as OpEntry['fn'], path: 1, query: false, body: false },
646 'users.get_user_avatar': { fn: api.getUserAvatar as OpEntry['fn'], path: 1, query: true, body: false },
647 'users.get_user_by_username': { fn: api.getUserByUsername as OpEntry['fn'], path: 1, query: false, body: false },
648 'users.list_users_batch': { fn: api.listUsersBatch as OpEntry['fn'], path: 0, query: true, body: false },
626649}