From 69e1fdb20c2a6d47a19d17d2e6e24eb58bdd6c0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=B5=E3=81=81?= Date: Fri, 1 Nov 2024 16:15:36 +0900 Subject: [PATCH] update hook to simpleted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ふぁ --- dist/compatible/openapi-3.0.yaml | 166 ++++++------ .../compatible_discriminator/openapi-3.0.yaml | 166 ++++++------ dist/docs/openapi-3.0.yaml | 166 ++++++------ .../component/response_header_legacy.yaml | 35 --- src/config/component/security_schemes.yaml | 241 ------------------ src/openapi/openapi-3.0.yaml | 132 ++++++++-- test/python/test_serialize.py | 42 +-- tools/build_config.py | 15 +- tools/hooks.py | 74 +++--- 9 files changed, 423 insertions(+), 614 deletions(-) delete mode 100644 src/config/component/response_header_legacy.yaml delete mode 100644 src/config/component/security_schemes.yaml diff --git a/dist/compatible/openapi-3.0.yaml b/dist/compatible/openapi-3.0.yaml index 6f90ec2..009e890 100644 --- a/dist/compatible/openapi-3.0.yaml +++ b/dist/compatible/openapi-3.0.yaml @@ -3123,7 +3123,7 @@ components: name: Accept type: apiKey AcceptEncoding: - description: gzip, deflate, br + description: gzip, deflate, br, zstd in: header name: Accept-Encoding type: apiKey @@ -3151,6 +3151,15 @@ components: in: header name: x-twitter-client-language type: apiKey + ClientTransactionId: + in: header + name: x-client-transaction-id + type: apiKey + ClientUuid: + description: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + in: header + name: x-client-uuid + type: apiKey CookieAuthToken: description: HttpOnly cookie in: cookie @@ -3161,8 +3170,13 @@ components: in: cookie name: ct0 type: apiKey + CookieGt0: + description: document.cookie.split('; ').find(row => row.startsWith('gt0=')); + in: cookie + name: gt0 + type: apiKey CsrfToken: - description: '' + description: document.cookie.split('; ').find(row => row.startsWith('ct0=')); in: header name: x-csrf-token type: apiKey @@ -3171,11 +3185,6 @@ components: in: header name: x-guest-token type: apiKey - Priority: - description: u=1, i - in: header - name: Priority - type: apiKey Referer: description: https://x.com/home in: header @@ -3212,8 +3221,8 @@ components: name: Sec-Fetch-Site type: apiKey UserAgent: - description: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like - Gecko) Chrome/130.0.0.0 Safari/537.36 + description: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, + like Gecko) Chrome/130.0.0.0 Safari/537.36 in: header name: user-agent type: apiKey @@ -3357,27 +3366,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3473,27 +3479,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3589,27 +3592,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3669,27 +3669,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3966,27 +3963,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -6648,26 +6642,28 @@ paths: tags: - other security: -- CsrfToken: [] -- CookieCt0: [] -- GuestToken: [] -- CookieAuthToken: [] -- AuthType: [] -- UserAgent: [] -- BearerAuth: [] -- ActiveUser: [] -- ClientLanguage: [] - Accept: [] - AcceptEncoding: [] - AcceptLanguage: [] +- Referer: [] - SecChUa: [] - SecChUaMobile: [] - SecChUaPlatform: [] - SecFetchDest: [] - SecFetchMode: [] - SecFetchSite: [] -- Referer: [] -- Priority: [] +- UserAgent: [] +- BearerAuth: [] +- ClientTransactionId: [] +- ClientUuid: [] +- CsrfToken: [] +- GuestToken: [] +- ActiveUser: [] +- AuthType: [] +- ClientLanguage: [] +- CookieCt0: [] +- CookieAuthToken: [] +- CookieGt0: [] servers: - url: https://x.com/i/api - url: https://twitter.com/i/api diff --git a/dist/compatible_discriminator/openapi-3.0.yaml b/dist/compatible_discriminator/openapi-3.0.yaml index c705d57..cb0f8a1 100644 --- a/dist/compatible_discriminator/openapi-3.0.yaml +++ b/dist/compatible_discriminator/openapi-3.0.yaml @@ -3123,7 +3123,7 @@ components: name: Accept type: apiKey AcceptEncoding: - description: gzip, deflate, br + description: gzip, deflate, br, zstd in: header name: Accept-Encoding type: apiKey @@ -3151,6 +3151,15 @@ components: in: header name: x-twitter-client-language type: apiKey + ClientTransactionId: + in: header + name: x-client-transaction-id + type: apiKey + ClientUuid: + description: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + in: header + name: x-client-uuid + type: apiKey CookieAuthToken: description: HttpOnly cookie in: cookie @@ -3161,8 +3170,13 @@ components: in: cookie name: ct0 type: apiKey + CookieGt0: + description: document.cookie.split('; ').find(row => row.startsWith('gt0=')); + in: cookie + name: gt0 + type: apiKey CsrfToken: - description: '' + description: document.cookie.split('; ').find(row => row.startsWith('ct0=')); in: header name: x-csrf-token type: apiKey @@ -3171,11 +3185,6 @@ components: in: header name: x-guest-token type: apiKey - Priority: - description: u=1, i - in: header - name: Priority - type: apiKey Referer: description: https://x.com/home in: header @@ -3212,8 +3221,8 @@ components: name: Sec-Fetch-Site type: apiKey UserAgent: - description: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like - Gecko) Chrome/130.0.0.0 Safari/537.36 + description: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, + like Gecko) Chrome/130.0.0.0 Safari/537.36 in: header name: user-agent type: apiKey @@ -3357,27 +3366,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3473,27 +3479,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3589,27 +3592,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3669,27 +3669,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3966,27 +3963,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -6590,26 +6584,28 @@ paths: tags: - other security: -- CsrfToken: [] -- CookieCt0: [] -- GuestToken: [] -- CookieAuthToken: [] -- AuthType: [] -- UserAgent: [] -- BearerAuth: [] -- ActiveUser: [] -- ClientLanguage: [] - Accept: [] - AcceptEncoding: [] - AcceptLanguage: [] +- Referer: [] - SecChUa: [] - SecChUaMobile: [] - SecChUaPlatform: [] - SecFetchDest: [] - SecFetchMode: [] - SecFetchSite: [] -- Referer: [] -- Priority: [] +- UserAgent: [] +- BearerAuth: [] +- ClientTransactionId: [] +- ClientUuid: [] +- CsrfToken: [] +- GuestToken: [] +- ActiveUser: [] +- AuthType: [] +- ClientLanguage: [] +- CookieCt0: [] +- CookieAuthToken: [] +- CookieGt0: [] servers: - url: https://x.com/i/api - url: https://twitter.com/i/api diff --git a/dist/docs/openapi-3.0.yaml b/dist/docs/openapi-3.0.yaml index 85d7f0a..a791a54 100644 --- a/dist/docs/openapi-3.0.yaml +++ b/dist/docs/openapi-3.0.yaml @@ -3123,7 +3123,7 @@ components: name: Accept type: apiKey AcceptEncoding: - description: gzip, deflate, br + description: gzip, deflate, br, zstd in: header name: Accept-Encoding type: apiKey @@ -3151,6 +3151,15 @@ components: in: header name: x-twitter-client-language type: apiKey + ClientTransactionId: + in: header + name: x-client-transaction-id + type: apiKey + ClientUuid: + description: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + in: header + name: x-client-uuid + type: apiKey CookieAuthToken: description: HttpOnly cookie in: cookie @@ -3161,8 +3170,13 @@ components: in: cookie name: ct0 type: apiKey + CookieGt0: + description: document.cookie.split('; ').find(row => row.startsWith('gt0=')); + in: cookie + name: gt0 + type: apiKey CsrfToken: - description: '' + description: document.cookie.split('; ').find(row => row.startsWith('ct0=')); in: header name: x-csrf-token type: apiKey @@ -3171,11 +3185,6 @@ components: in: header name: x-guest-token type: apiKey - Priority: - description: u=1, i - in: header - name: Priority - type: apiKey Referer: description: https://x.com/home in: header @@ -3212,8 +3221,8 @@ components: name: Sec-Fetch-Site type: apiKey UserAgent: - description: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like - Gecko) Chrome/130.0.0.0 Safari/537.36 + description: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, + like Gecko) Chrome/130.0.0.0 Safari/537.36 in: header name: user-agent type: apiKey @@ -3357,27 +3366,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3473,27 +3479,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3589,27 +3592,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3669,27 +3669,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -3966,27 +3963,24 @@ paths: '200': description: Successful operation headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean x-connection-hash: schema: type: string - x-content-type-options: + x-rate-limit-limit: schema: - type: string + type: integer + x-rate-limit-remaining: + schema: + type: integer + x-rate-limit-reset: + schema: + type: integer x-response-time: schema: type: integer - x-transaction: + x-tfe-preserve-body: schema: - type: string + type: boolean x-transaction-id: schema: type: string @@ -8796,26 +8790,28 @@ paths: tags: - other security: -- CsrfToken: [] -- CookieCt0: [] -- GuestToken: [] -- CookieAuthToken: [] -- AuthType: [] -- UserAgent: [] -- BearerAuth: [] -- ActiveUser: [] -- ClientLanguage: [] - Accept: [] - AcceptEncoding: [] - AcceptLanguage: [] +- Referer: [] - SecChUa: [] - SecChUaMobile: [] - SecChUaPlatform: [] - SecFetchDest: [] - SecFetchMode: [] - SecFetchSite: [] -- Referer: [] -- Priority: [] +- UserAgent: [] +- BearerAuth: [] +- ClientTransactionId: [] +- ClientUuid: [] +- CsrfToken: [] +- GuestToken: [] +- ActiveUser: [] +- AuthType: [] +- ClientLanguage: [] +- CookieCt0: [] +- CookieAuthToken: [] +- CookieGt0: [] servers: - url: https://x.com/i/api - url: https://twitter.com/i/api diff --git a/src/config/component/response_header_legacy.yaml b/src/config/component/response_header_legacy.yaml deleted file mode 100644 index b2fc658..0000000 --- a/src/config/component/response_header_legacy.yaml +++ /dev/null @@ -1,35 +0,0 @@ -openapi: 3.0.3 -info: - title: Twitter OpenAPI - version: 0.0.1 -paths: {} - -components: - headers: - status: - schema: - type: string - x-access-level: - schema: - type: string - x-client-event-enabled: - schema: - type: boolean - x-connection-hash: - schema: - type: string - x-content-type-options: - schema: - type: string - x-response-time: - schema: - type: integer - x-transaction: - schema: - type: string - x-transaction-id: - schema: - type: string - x-twitter-response-tags: - schema: - type: string diff --git a/src/config/component/security_schemes.yaml b/src/config/component/security_schemes.yaml deleted file mode 100644 index c56938d..0000000 --- a/src/config/component/security_schemes.yaml +++ /dev/null @@ -1,241 +0,0 @@ -openapi: 3.0.3 -info: - title: Twitter OpenAPI - version: 0.0.1 -paths: - /parameters: - get: - parameters: - - name: user-agent - in: header - required: true - schema: - type: string - default: "Not Implemented" - description: "UserAgent, some APIs may be rejected if changed." - - name: authorization - in: header - required: true - schema: - type: string - default: "Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA" - description: "It is a constant value and does not need to be changed." - - name: x-twitter-active-user - in: header - required: true - schema: - type: string - default: "yes" - description: "Unknown what this value means." - - name: x-twitter-client-language - in: header - required: true - schema: - type: string - default: "en" - description: "language code." - - # Browser Schemes - - name: Accept - in: header - required: true - schema: - type: string - default: "*/*" - description: "*/*" - - name: Accept-Encoding - in: header - required: true - schema: - type: string - default: "gzip, deflate, br" - description: "gzip, deflate, br" - - name: Accept-Language - in: header - required: true - schema: - type: string - default: "en-US,en;q=0.9" - description: "en-US,en;q=0.9" - # - name: Cache-Control - # in: header - # required: true - # schema: - # type: string - # default: "no-cache" - # description: "no-cache" - # - name: Pragma - # in: header - # required: true - # schema: - # type: string - # default: "no-cache" - # description: "no-cache" - - name: Sec-Ch-Ua - in: header - required: true - schema: - type: string - default: '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"' - description: '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"' - - name: Sec-Ch-Ua-Mobile - in: header - required: true - schema: - type: string - default: "?0" - description: "?0" - - name: Sec-Ch-Ua-Platform - in: header - required: true - schema: - type: string - default: '"Windows"' - description: '"Windows"' - - name: Sec-Fetch-Dest - in: header - required: true - schema: - type: string - default: "empty" - description: "empty" - - name: Sec-Fetch-Mode - in: header - required: true - schema: - type: string - default: "cors" - description: "cors" - - name: Sec-Fetch-Site - in: header - required: true - schema: - type: string - default: "same-origin" - description: "same-origin" - - name: Referer - in: header - required: true - schema: - type: string - default: "https://x.com/home" - description: "https://x.com/home" - - name: Priority - in: header - required: true - schema: - type: string - default: "u=1, i" - description: "u=1, i" - - responses: - "200": - description: "" - -components: - securitySchemes: - UserAgent: - description: "Not Implemented" - in: header - name: user-agent - type: apiKey - BearerAuth: - description: AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA - scheme: bearer - type: http - ActiveUser: - description: "yes" - in: header - name: x-twitter-active-user - type: apiKey - ClientLanguage: - description: en - in: header - name: x-twitter-client-language - type: apiKey - - # Browser Schemes - Accept: - description: "*/*" - in: header - name: Accept - type: apiKey - AcceptEncoding: - description: "gzip, deflate, br" - in: header - name: Accept-Encoding - type: apiKey - AcceptLanguage: - description: "en-US,en;q=0.9" - in: header - name: Accept-Language - type: apiKey - # CacheControl: - # description: "no-cache" - # in: header - # name: Cache-Control - # type: apiKey - # Pragma: - # description: "no-cache" - # in: header - # name: Pragma - # type: apiKey - SecChUa: - description: '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"' - in: header - name: Sec-Ch-Ua - type: apiKey - SecChUaMobile: - description: "?0" - in: header - name: Sec-Ch-Ua-Mobile - type: apiKey - SecChUaPlatform: - description: '"Windows"' - in: header - name: Sec-Ch-Ua-Platform - type: apiKey - SecFetchDest: - description: "empty" - in: header - name: Sec-Fetch-Dest - type: apiKey - SecFetchMode: - description: "cors" - in: header - name: Sec-Fetch-Mode - type: apiKey - SecFetchSite: - description: "same-origin" - in: header - name: Sec-Fetch-Site - type: apiKey - Referer: - description: "https://x.com/home" - in: header - name: Referer - type: apiKey - Priority: - description: "u=1, i" - in: header - name: Priority - type: apiKey - -security: - - UserAgent: [] - - BearerAuth: [] - - ActiveUser: [] - - ClientLanguage: [] - - Accept: [] - - AcceptEncoding: [] - - AcceptLanguage: [] - # - CacheControl: [] - # - Pragma: [] - - SecChUa: [] - - SecChUaMobile: [] - - SecChUaPlatform: [] - - SecFetchDest: [] - - SecFetchMode: [] - - SecFetchSite: [] - - Referer: [] - - Priority: [] diff --git a/src/openapi/openapi-3.0.yaml b/src/openapi/openapi-3.0.yaml index 10c73a8..9c77116 100644 --- a/src/openapi/openapi-3.0.yaml +++ b/src/openapi/openapi-3.0.yaml @@ -19,42 +19,144 @@ components: schemas: {} securitySchemes: + Accept: + description: "*/*" + in: header + name: Accept + type: apiKey + AcceptEncoding: + description: "gzip, deflate, br, zstd" + in: header + name: Accept-Encoding + type: apiKey + AcceptLanguage: + description: "en-US,en;q=0.9" + in: header + name: Accept-Language + type: apiKey + Referer: + description: "https://x.com/home" + in: header + name: Referer + type: apiKey + SecChUa: + description: '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"' + in: header + name: Sec-Ch-Ua + type: apiKey + SecChUaMobile: + description: "?0" + in: header + name: Sec-Ch-Ua-Mobile + type: apiKey + SecChUaPlatform: + description: '"Windows"' + in: header + name: Sec-Ch-Ua-Platform + type: apiKey + SecFetchDest: + description: "empty" + in: header + name: Sec-Fetch-Dest + type: apiKey + SecFetchMode: + description: "cors" + in: header + name: Sec-Fetch-Mode + type: apiKey + SecFetchSite: + description: "same-origin" + in: header + name: Sec-Fetch-Site + type: apiKey + UserAgent: + description: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" + in: header + name: user-agent + type: apiKey + BearerAuth: + description: AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA + scheme: bearer + type: http + ClientTransactionId: + type: apiKey + in: header + name: x-client-transaction-id + ClientUuid: + type: apiKey + in: header + name: x-client-uuid + description: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" CsrfToken: type: apiKey in: header name: x-csrf-token - description: "" - - CookieCt0: - type: apiKey - in: cookie - name: ct0 description: "document.cookie.split('; ').find(row => row.startsWith('ct0='));" - GuestToken: type: apiKey in: header name: x-guest-token description: "document.cookie.split('; ').find(row => row.startsWith('gt='));" - - CookieAuthToken: + ActiveUser: + description: "yes" + in: header + name: x-twitter-active-user type: apiKey - in: cookie - name: auth_token - description: "HttpOnly cookie" - AuthType: type: apiKey in: header name: x-twitter-auth-type description: "OAuth2Session if you are logged in" + ClientLanguage: + description: en + in: header + name: x-twitter-client-language + type: apiKey + CookieAuthToken: + type: apiKey + in: cookie + name: auth_token + description: "HttpOnly cookie" + CookieCt0: + type: apiKey + in: cookie + name: ct0 + description: "document.cookie.split('; ').find(row => row.startsWith('ct0='));" + CookieGt0: + type: apiKey + in: cookie + name: gt0 + description: "document.cookie.split('; ').find(row => row.startsWith('gt0='));" security: + # Browser Schemes + - Accept: [] + - AcceptEncoding: [] + - AcceptLanguage: [] + - Referer: [] + - SecChUa: [] + - SecChUaMobile: [] + - SecChUaPlatform: [] + - SecFetchDest: [] + - SecFetchMode: [] + - SecFetchSite: [] + # Other Auth Schemes + - UserAgent: [] + - BearerAuth: [] + # X Schemes + - ClientTransactionId: [] + - ClientUuid: [] - CsrfToken: [] - - CookieCt0: [] - GuestToken: [] - - CookieAuthToken: [] + # Twitter Schemes + - ActiveUser: [] - AuthType: [] + - ClientLanguage: [] + # Cookie Schemes + - CookieCt0: [] + - CookieAuthToken: [] + - CookieGt0: [] + tags: - name: user description: Responses containing User objects. diff --git a/test/python/test_serialize.py b/test/python/test_serialize.py index 4e20ad4..69f5b93 100644 --- a/test/python/test_serialize.py +++ b/test/python/test_serialize.py @@ -162,9 +162,7 @@ def task_callback(file, thread=True): def kebab_to_upper_camel(text: dict[str, Any]) -> dict[str, Any]: res = {} for key, value in text.items(): - new_key = "".join( - [x.capitalize() for x in key.replace("x-twitter-", "").split("-")] - ) + new_key = "".join([x.capitalize() for x in remove_prefix(key).split("-")]) res[new_key] = value return res @@ -174,6 +172,14 @@ def get_header(data: dict, name: str): return {key: value for key, value in data[name].items() if key not in ignore} +def remove_prefix(text: str) -> str: + if text.startswith("x-twitter-"): + return text[10:] + if text.startswith("x-"): + return text[2:] + return text + + def error_dump(e): if ERROR_UNCATCHED: raise @@ -243,23 +249,19 @@ if __name__ == "__main__": ) latest_user_agent = json.loads(latest_user_agent_res.data.decode("utf-8")) api_conf = pt.Configuration( - api_key={ - **kebab_to_upper_camel( - { - **get_header(latest_user_agent, "chrome-fetch"), - "sec-ch-ua-platform": '"Windows"', - "accept-encoding": "identity", - "pragma": "no-cache", - "referer": twitter_url, - "priority": "u=1, i", - "authorization": f"Bearer {access_token}", - "x-twitter-auth-type": "OAuth2Session", - "x-twitter-client-language": "en", - "x-twitter-active-user": "yes", - "x-twitter-csrf-token": cookies["ct0"], - }, - ), - }, + api_key=kebab_to_upper_camel( + { + **get_header(latest_user_agent, "chrome-fetch"), + "sec-ch-ua-platform": '"Windows"', + "accept-encoding": "identity", + "referer": twitter_url, + "authorization": f"Bearer {access_token}", + "x-twitter-auth-type": "OAuth2Session", + "x-twitter-client-language": "en", + "x-twitter-active-user": "yes", + "x-csrf-token": cookies["ct0"], + }, + ), ) api_conf.access_token = access_token api_client = pt.ApiClient(configuration=api_conf, cookie=cookies_str) diff --git a/tools/build_config.py b/tools/build_config.py index 1142062..12d9a84 100644 --- a/tools/build_config.py +++ b/tools/build_config.py @@ -3,10 +3,8 @@ from hooks import ( AddParametersOnContent, AddParametersOnParameters, AddPathQueryIdOnParameters, - AddSecuritySchemesOnSecuritySchemes, RemoveErrorHandle, SetResponsesHeader, - SetUserAgentOnSecuritySchemes, ) @@ -41,15 +39,12 @@ class Config: additionalHooks.append(RemoveErrorHandle()) return { - "openapi": [ - AddSecuritySchemesOnSecuritySchemes(), - SetUserAgentOnSecuritySchemes(), - ], + "openapi": [], "schemas": [], "other": [], "request": { key: [ - SetResponsesHeader(suffix=None), + SetResponsesHeader(), AddPathQueryIdOnParameters(split=-1), getParamHook, *additionalHooks, @@ -58,7 +53,7 @@ class Config: } | { key: [ - SetResponsesHeader(suffix=None), + SetResponsesHeader(), AddPathQueryIdOnParameters(split=-1), AddParametersOnBody( split=-1, @@ -71,14 +66,14 @@ class Config: } | { key: [ - SetResponsesHeader(suffix="legacy"), + SetResponsesHeader(), AddParametersOnParameters(split=2, schemaType=None), ] for key in ["v1.1-get", "v2.0-get"] } | { key: [ - SetResponsesHeader(suffix="legacy"), + SetResponsesHeader(), AddParametersOnBody( split=2, schemaType=None, diff --git a/tools/hooks.py b/tools/hooks.py index 40d0e47..ae05cc7 100644 --- a/tools/hooks.py +++ b/tools/hooks.py @@ -1,6 +1,5 @@ import json -import urllib3 import yaml @@ -61,12 +60,12 @@ class HookBase: with open("src/config/placeholder.json", mode="r", encoding="utf-8") as f: return yaml.safe_load(f) - def load_user_agent(self) -> str: - user_agent = urllib3.PoolManager().request( - "GET", - "https://raw.githubusercontent.com/fa0311/latest-user-agent/main/output.json", - ) - return json.loads(user_agent.data)["chrome-fetch"] + # def load_user_agent(self) -> str: + # user_agent = urllib3.PoolManager().request( + # "GET", + # "https://raw.githubusercontent.com/fa0311/latest-user-agent/main/output.json", + # ) + # return json.loads(user_agent.data)["chrome-fetch"] # HookBase extends @@ -104,22 +103,22 @@ class RequestHookBase(HookBase): # OpenapiHookBase extends -class AddSecuritySchemesOnSecuritySchemes(OpenapiHookBase): - def hook(self, value: dict): - value = super().hook(value) - component = self.load_component("security_schemes") - param = component["components"]["securitySchemes"] - value["components"]["securitySchemes"].update(param) - value["security"].extend(component["security"]) - return value +# class AddSecuritySchemesOnSecuritySchemes(OpenapiHookBase): +# def hook(self, value: dict): +# value = super().hook(value) +# component = self.load_component("security_schemes") +# param = component["components"]["securitySchemes"] +# value["components"]["securitySchemes"].update(param) +# value["security"].extend(component["security"]) +# return value -class SetUserAgentOnSecuritySchemes(OpenapiHookBase): - def hook(self, value: dict): - value = super().hook(value) - param = value["components"]["securitySchemes"] - param["UserAgent"]["description"] = self.load_user_agent() - return value +# class SetUserAgentOnSecuritySchemes(OpenapiHookBase): +# def hook(self, value: dict): +# value = super().hook(value) +# param = value["components"]["securitySchemes"] +# param["UserAgent"]["description"] = self.load_user_agent() +# return value # SchemasHookBase extends @@ -158,22 +157,22 @@ class RequiredCheck(SchemasHookBase): # RequestHookBase extends -class AddSecuritySchemesOnHeader(RequestHookBase): - def hook(self, path: str, value: dict): - path, value = super().hook(path, value) - component = self.load_component("security_schemes") - param = component["paths"]["/parameters"]["get"]["parameters"] - value["parameters"].extend(param) - return path, value +# class AddSecuritySchemesOnHeader(RequestHookBase): +# def hook(self, path: str, value: dict): +# path, value = super().hook(path, value) +# component = self.load_component("security_schemes") +# param = component["paths"]["/parameters"]["get"]["parameters"] +# value["parameters"].extend(param) +# return path, value -class SetUserAgentOnHeader(RequestHookBase): - def hook(self, path: str, value: dict): - path, value = super().hook(path, value) - component = self.load_component("security_schemes") - param = component["paths"]["/parameters"]["get"]["parameters"] - value["parameters"].extend(param) - return path, value +# class SetUserAgentOnHeader(RequestHookBase): +# def hook(self, path: str, value: dict): +# path, value = super().hook(path, value) +# component = self.load_component("security_schemes") +# param = component["paths"]["/parameters"]["get"]["parameters"] +# value["parameters"].extend(param) +# return path, value class ReplaceQueryIdPlaceholder(RequestHookBase): @@ -186,13 +185,12 @@ class ReplaceQueryIdPlaceholder(RequestHookBase): class SetResponsesHeader(RequestHookBase): suffix: str - def __init__(self, suffix: str | None = None): + def __init__(self): super().__init__() - self.suffix = "" if suffix is None else "_" + suffix def hook(self, path: str, value: dict): path, value = super().hook(path, value) - component = self.load_component("response_header" + self.suffix) + component = self.load_component("response_header") value["responses"]["200"]["headers"] = component["components"]["headers"] return path, value