From e8062837f84ccb3394a12066a9a7c67e6d921fca Mon Sep 17 00:00:00 2001 From: wolfy1339 Date: Sat, 1 Nov 2025 19:41:46 -0400 Subject: [PATCH 1/4] fix: add additional types to binary body endpoints Fixes https://github.com/octokit/octokit.js/issues/2904 --- package.json | 6 +++--- packages/openapi-types-ghec/types.d.ts | 2 +- packages/openapi-types-ghes-3.14/types.d.ts | 2 +- packages/openapi-types-ghes-3.15/types.d.ts | 2 +- packages/openapi-types-ghes-3.16/types.d.ts | 2 +- packages/openapi-types-ghes-3.17/types.d.ts | 2 +- packages/openapi-types-ghes-3.18/types.d.ts | 2 +- packages/openapi-types/types.d.ts | 2 +- scripts/generate-types.js | 20 ++++++++++++++++++-- 9 files changed, 28 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 5068d23e2..0fe29f9f2 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,9 @@ "license": "MIT", "type": "module", "scripts": { - "download": "node scripts/download", - "generate-types": "node scripts/generate-types", - "update-package": "node scripts/update-package", + "download": "node scripts/download.js", + "generate-types": "node scripts/generate-types.js", + "update-package": "node scripts/update-package.js", "lint": "prettier --check '*.{md,json}' 'scripts/*.js' 'packages/**/*.{ts,md,json,d.ts}'", "lint:fix": "prettier --write '*.{md,json}' 'scripts/*.js' 'packages/**/*.{ts,md,json,d.ts}'" }, diff --git a/packages/openapi-types-ghec/types.d.ts b/packages/openapi-types-ghec/types.d.ts index e9e899858..98e4d6365 100644 --- a/packages/openapi-types-ghec/types.d.ts +++ b/packages/openapi-types-ghec/types.d.ts @@ -126354,7 +126354,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string; + "application/octet-stream": string | File | UInt8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.14/types.d.ts b/packages/openapi-types-ghes-3.14/types.d.ts index 5dcc86f30..23987fd0d 100644 --- a/packages/openapi-types-ghes-3.14/types.d.ts +++ b/packages/openapi-types-ghes-3.14/types.d.ts @@ -104161,7 +104161,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string; + "application/octet-stream": string | File | UInt8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.15/types.d.ts b/packages/openapi-types-ghes-3.15/types.d.ts index f764302cd..0275cddfe 100644 --- a/packages/openapi-types-ghes-3.15/types.d.ts +++ b/packages/openapi-types-ghes-3.15/types.d.ts @@ -104990,7 +104990,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string; + "application/octet-stream": string | File | UInt8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.16/types.d.ts b/packages/openapi-types-ghes-3.16/types.d.ts index 030a0190c..bb3878b6c 100644 --- a/packages/openapi-types-ghes-3.16/types.d.ts +++ b/packages/openapi-types-ghes-3.16/types.d.ts @@ -106446,7 +106446,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string; + "application/octet-stream": string | File | UInt8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.17/types.d.ts b/packages/openapi-types-ghes-3.17/types.d.ts index e0d510a8b..9f7f2c202 100644 --- a/packages/openapi-types-ghes-3.17/types.d.ts +++ b/packages/openapi-types-ghes-3.17/types.d.ts @@ -106730,7 +106730,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string; + "application/octet-stream": string | File | UInt8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.18/types.d.ts b/packages/openapi-types-ghes-3.18/types.d.ts index c947e459f..e142fa3b7 100644 --- a/packages/openapi-types-ghes-3.18/types.d.ts +++ b/packages/openapi-types-ghes-3.18/types.d.ts @@ -107812,7 +107812,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string; + "application/octet-stream": string | File | UInt8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types/types.d.ts b/packages/openapi-types/types.d.ts index 556b09065..ec16cdcdd 100644 --- a/packages/openapi-types/types.d.ts +++ b/packages/openapi-types/types.d.ts @@ -114946,7 +114946,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string; + "application/octet-stream": string | File | UInt8Array | Blob; }; }; responses: { diff --git a/scripts/generate-types.js b/scripts/generate-types.js index 98d5c7164..87b72d2fc 100644 --- a/scripts/generate-types.js +++ b/scripts/generate-types.js @@ -3,6 +3,7 @@ import { basename } from "node:path"; import * as prettier from "prettier"; import openapiTS from "openapi-typescript"; +import { type } from "node:os"; if (!process.env.OCTOKIT_OPENAPI_VERSION) { throw new Error("OCTOKIT_OPENAPI_VERSION is not set"); @@ -82,12 +83,27 @@ type Repository = components["schemas"]["full-repository"] { parser: "markdown" }, ), ); - await copyFile("LICENSE", `packages/${packageName}/LICENSE`); + const schemaTS = await openapiTS(`cache/${name}.json`, { + transform(schemaObject, metadata) { + if ( + schemaObject.format === "binary" && + metadata.path.endsWith("application/octet-stream") + ) { + // Make sure that file upload endpoints don't use 'string' type for binary data + // Use some common types that can represent binary data in various environments + return schemaObject.nullable + ? "string | File | UInt8Array | Blob | null" + : "string | File | UInt8Array | Blob"; + } + return undefined; + }, + }); + await writeFile( `packages/${packageName}/types.d.ts`, - await prettier.format(await openapiTS(`cache/${name}.json`), { + await prettier.format(schemaTS, { parser: "typescript", }), ); From 3c1b879f57936adc5c664bdb735d87e4edc13808 Mon Sep 17 00:00:00 2001 From: wolfy1339 Date: Sat, 1 Nov 2025 19:44:33 -0400 Subject: [PATCH 2/4] restore deleted line --- scripts/generate-types.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/generate-types.js b/scripts/generate-types.js index 87b72d2fc..4a26af77a 100644 --- a/scripts/generate-types.js +++ b/scripts/generate-types.js @@ -83,6 +83,7 @@ type Repository = components["schemas"]["full-repository"] { parser: "markdown" }, ), ); + await copyFile("LICENSE", `packages/${packageName}/LICENSE`); const schemaTS = await openapiTS(`cache/${name}.json`, { From 3274312f1e98b5e3ff3dbebf1a02364767d04971 Mon Sep 17 00:00:00 2001 From: wolfy1339 Date: Sat, 1 Nov 2025 19:44:55 -0400 Subject: [PATCH 3/4] remove import --- scripts/generate-types.js | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/generate-types.js b/scripts/generate-types.js index 4a26af77a..a2aaf8980 100644 --- a/scripts/generate-types.js +++ b/scripts/generate-types.js @@ -3,7 +3,6 @@ import { basename } from "node:path"; import * as prettier from "prettier"; import openapiTS from "openapi-typescript"; -import { type } from "node:os"; if (!process.env.OCTOKIT_OPENAPI_VERSION) { throw new Error("OCTOKIT_OPENAPI_VERSION is not set"); From 21b42dae9dbd7c9597cd1c5b506f2fc35135e87a Mon Sep 17 00:00:00 2001 From: wolfy1339 Date: Sat, 1 Nov 2025 20:59:46 -0400 Subject: [PATCH 4/4] fix typo in interface name --- packages/openapi-types-ghec/types.d.ts | 2 +- packages/openapi-types-ghes-3.14/types.d.ts | 2 +- packages/openapi-types-ghes-3.15/types.d.ts | 2 +- packages/openapi-types-ghes-3.16/types.d.ts | 2 +- packages/openapi-types-ghes-3.17/types.d.ts | 2 +- packages/openapi-types-ghes-3.18/types.d.ts | 2 +- packages/openapi-types/types.d.ts | 2 +- scripts/generate-types.js | 4 ++-- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/openapi-types-ghec/types.d.ts b/packages/openapi-types-ghec/types.d.ts index 98e4d6365..28b3523d6 100644 --- a/packages/openapi-types-ghec/types.d.ts +++ b/packages/openapi-types-ghec/types.d.ts @@ -126354,7 +126354,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string | File | UInt8Array | Blob; + "application/octet-stream": string | File | Uint8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.14/types.d.ts b/packages/openapi-types-ghes-3.14/types.d.ts index 23987fd0d..9a4663d07 100644 --- a/packages/openapi-types-ghes-3.14/types.d.ts +++ b/packages/openapi-types-ghes-3.14/types.d.ts @@ -104161,7 +104161,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string | File | UInt8Array | Blob; + "application/octet-stream": string | File | Uint8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.15/types.d.ts b/packages/openapi-types-ghes-3.15/types.d.ts index 0275cddfe..68e290b72 100644 --- a/packages/openapi-types-ghes-3.15/types.d.ts +++ b/packages/openapi-types-ghes-3.15/types.d.ts @@ -104990,7 +104990,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string | File | UInt8Array | Blob; + "application/octet-stream": string | File | Uint8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.16/types.d.ts b/packages/openapi-types-ghes-3.16/types.d.ts index bb3878b6c..8844c256c 100644 --- a/packages/openapi-types-ghes-3.16/types.d.ts +++ b/packages/openapi-types-ghes-3.16/types.d.ts @@ -106446,7 +106446,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string | File | UInt8Array | Blob; + "application/octet-stream": string | File | Uint8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.17/types.d.ts b/packages/openapi-types-ghes-3.17/types.d.ts index 9f7f2c202..56b034abb 100644 --- a/packages/openapi-types-ghes-3.17/types.d.ts +++ b/packages/openapi-types-ghes-3.17/types.d.ts @@ -106730,7 +106730,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string | File | UInt8Array | Blob; + "application/octet-stream": string | File | Uint8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types-ghes-3.18/types.d.ts b/packages/openapi-types-ghes-3.18/types.d.ts index e142fa3b7..678545e75 100644 --- a/packages/openapi-types-ghes-3.18/types.d.ts +++ b/packages/openapi-types-ghes-3.18/types.d.ts @@ -107812,7 +107812,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string | File | UInt8Array | Blob; + "application/octet-stream": string | File | Uint8Array | Blob; }; }; responses: { diff --git a/packages/openapi-types/types.d.ts b/packages/openapi-types/types.d.ts index ec16cdcdd..5e8ef94ef 100644 --- a/packages/openapi-types/types.d.ts +++ b/packages/openapi-types/types.d.ts @@ -114946,7 +114946,7 @@ export interface operations { }; requestBody?: { content: { - "application/octet-stream": string | File | UInt8Array | Blob; + "application/octet-stream": string | File | Uint8Array | Blob; }; }; responses: { diff --git a/scripts/generate-types.js b/scripts/generate-types.js index a2aaf8980..32b717245 100644 --- a/scripts/generate-types.js +++ b/scripts/generate-types.js @@ -94,8 +94,8 @@ type Repository = components["schemas"]["full-repository"] // Make sure that file upload endpoints don't use 'string' type for binary data // Use some common types that can represent binary data in various environments return schemaObject.nullable - ? "string | File | UInt8Array | Blob | null" - : "string | File | UInt8Array | Blob"; + ? "string | File | Uint8Array | Blob | null" + : "string | File | Uint8Array | Blob"; } return undefined; },