Skip to content

Use API cache endpoint and service binding in Cloudflare #2952

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 47 commits into from
Mar 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
188565b
Cache getPublishedContentByURL on Cloudflare
SamyPesse Mar 9, 2025
d368b35
Pass the cache on a bunch of functions and add tracing
SamyPesse Mar 10, 2025
9725ee7
Remove unused asyncMutexFunction
SamyPesse Mar 10, 2025
7be7a00
Update to latest version of opennext
SamyPesse Mar 10, 2025
f83a121
bun install
SamyPesse Mar 10, 2025
58b5da1
Use preview package
SamyPesse Mar 10, 2025
ca21a9f
Start setup of service binding
SamyPesse Mar 10, 2025
d8e7cb4
Adapt to new api client
SamyPesse Mar 10, 2025
b732aaa
Remove getCloudflareRequestCache and make cloudflare context optional
SamyPesse Mar 10, 2025
2e4c3e9
Fix TS
SamyPesse Mar 10, 2025
dbd4b8e
Log api
SamyPesse Mar 10, 2025
6d45d81
Use async version
SamyPesse Mar 10, 2025
3be0293
fix more
SamyPesse Mar 10, 2025
5193154
Expose a public url correctly for the api
SamyPesse Mar 10, 2025
35492fd
Log error
SamyPesse Mar 10, 2025
9c2cda7
Generate types
SamyPesse Mar 10, 2025
4e6600f
Move generate type to generate
SamyPesse Mar 10, 2025
f11370c
Try sync mode
SamyPesse Mar 10, 2025
8632e31
Improve biome
SamyPesse Mar 10, 2025
02ec8e3
Fix TS
SamyPesse Mar 10, 2025
e7c43d1
Oups
SamyPesse Mar 10, 2025
b7d9448
Try fixing loop with "generate:types"
SamyPesse Mar 10, 2025
3d06d36
Try hack
SamyPesse Mar 10, 2025
c848a4f
Try something
SamyPesse Mar 10, 2025
c41d86d
Update compatibility_date
SamyPesse Mar 10, 2025
26d2d2c
Log more
SamyPesse Mar 11, 2025
7e22ba4
Test more
SamyPesse Mar 11, 2025
6552522
Fix lookup
SamyPesse Mar 11, 2025
91b3b91
Try more
SamyPesse Mar 11, 2025
1bc63c9
Try
SamyPesse Mar 11, 2025
b22ab49
Try
SamyPesse Mar 11, 2025
77b4f91
Fix import
SamyPesse Mar 11, 2025
48b2e0d
Merge branch 'main' into cf-improve-perfs
SamyPesse Mar 11, 2025
c1a80c7
Simplify
SamyPesse Mar 11, 2025
3ba7e09
Remove generate:types
SamyPesse Mar 11, 2025
17a7988
Merge branch 'main' into cf-improve-perfs
SamyPesse Mar 11, 2025
6201f81
Update to normal version
SamyPesse Mar 11, 2025
a4fefd5
Try normal dynamic import
SamyPesse Mar 11, 2025
1d77641
Fix tests
SamyPesse Mar 11, 2025
f3e6642
Revert "Try normal dynamic import"
SamyPesse Mar 11, 2025
cac87c7
Fix binding for preview
SamyPesse Mar 11, 2025
97bec87
Merge branch 'main' into cf-improve-perfs
SamyPesse Mar 11, 2025
3df7b21
Self-review
SamyPesse Mar 11, 2025
f03f3b7
Log error
SamyPesse Mar 11, 2025
e47ddb7
Merge branch 'main' into cf-improve-perfs
SamyPesse Mar 11, 2025
5d4ec39
Merge branch 'main' into cf-improve-perfs
SamyPesse Mar 11, 2025
62c74e6
Throw error if needed
SamyPesse Mar 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/sour-spiders-bow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@gitbook/cache-tags': minor
---

Export function `getCacheTagForURL` to easily get the cache tag for a URL.
1 change: 1 addition & 0 deletions .github/composite/deploy-cloudflare/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ runs:
GITBOOK_SECRET: ${{ inputs.opItem }}/GITBOOK_SECRET
GITBOOK_APP_URL: ${{ inputs.opItem }}/GITBOOK_APP_URL
GITBOOK_API_URL: ${{ inputs.opItem }}/GITBOOK_API_URL
GITBOOK_API_PUBLIC_URL: ${{ inputs.opItem }}/GITBOOK_API_PUBLIC_URL
GITBOOK_API_TOKEN: ${{ inputs.opItem }}/GITBOOK_API_TOKEN
GITBOOK_INTEGRATIONS_HOST: ${{ inputs.opItem }}/GITBOOK_INTEGRATIONS_HOST
GITBOOK_IMAGE_RESIZE_SIGNING_KEY: ${{ inputs.opItem }}/GITBOOK_IMAGE_RESIZE_SIGNING_KEY
Expand Down
1 change: 1 addition & 0 deletions .github/composite/deploy-vercel/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ runs:
GITBOOK_SECRET: ${{ inputs.opItem }}/GITBOOK_SECRET
GITBOOK_APP_URL: ${{ inputs.opItem }}/GITBOOK_APP_URL
GITBOOK_API_URL: ${{ inputs.opItem }}/GITBOOK_API_URL
GITBOOK_API_PUBLIC_URL: ${{ inputs.opItem }}/GITBOOK_API_PUBLIC_URL
GITBOOK_API_TOKEN: ${{ inputs.opItem }}/GITBOOK_API_TOKEN
GITBOOK_INTEGRATIONS_HOST: ${{ inputs.opItem }}/GITBOOK_INTEGRATIONS_HOST
GITBOOK_IMAGE_RESIZE_SIGNING_KEY: ${{ inputs.opItem }}/GITBOOK_IMAGE_RESIZE_SIGNING_KEY
Expand Down
17 changes: 0 additions & 17 deletions .prettierignore

This file was deleted.

5 changes: 0 additions & 5 deletions .prettierrc.json

This file was deleted.

4 changes: 3 additions & 1 deletion biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
"**/.vercel/**/*",
"**/.cache/**/*",
"**/.wrangler/**/*",
"packages/openapi-parser/src/fixtures/**/*"
"packages/openapi-parser/src/fixtures/**/*",
"packages/emoji-codepoints/index.ts",
"packages/icons/src/data/*.json"
]
},
"formatter": {
Expand Down
23 changes: 12 additions & 11 deletions bun.lock
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"name": "@gitbook/cache-tags",
"version": "0.1.0",
"dependencies": {
"@gitbook/api": "0.96.1",
"@gitbook/api": "*",
"assert-never": "^1.2.1",
},
"devDependencies": {
Expand All @@ -49,9 +49,9 @@
},
"packages/gitbook": {
"name": "gitbook",
"version": "0.7.2",
"version": "0.7.3",
"dependencies": {
"@gitbook/api": "0.96.1",
"@gitbook/api": "*",
"@gitbook/cache-do": "workspace:*",
"@gitbook/cache-tags": "workspace:*",
"@gitbook/colors": "workspace:*",
Expand Down Expand Up @@ -134,7 +134,7 @@
"name": "gitbook-v2",
"version": "0.2.0",
"dependencies": {
"@gitbook/api": "0.96.1",
"@gitbook/api": "*",
"@gitbook/cache-tags": "workspace:*",
"@sindresorhus/fnv1a": "^3.1.0",
"next": "^15.2.1",
Expand All @@ -144,15 +144,15 @@
"warn-once": "^0.1.1",
},
"devDependencies": {
"@opennextjs/cloudflare": "https://pkg.pr.new/opennextjs/opennextjs-cloudflare/@opennextjs/cloudflare@236c84d",
"@opennextjs/cloudflare": "^0.5.10",
"gitbook": "*",
"postcss": "^8",
"tailwindcss": "^3.4.0",
},
},
"packages/icons": {
"name": "@gitbook/icons",
"version": "0.1.0",
"version": "0.2.0",
"bin": {
"gitbook-icons": "./bin/gitbook-icons.js",
},
Expand Down Expand Up @@ -194,9 +194,9 @@
},
"packages/react-contentkit": {
"name": "@gitbook/react-contentkit",
"version": "0.6.1",
"version": "0.6.2",
"dependencies": {
"@gitbook/api": "0.96.1",
"@gitbook/api": "*",
"@gitbook/icons": "workspace:*",
"classnames": "^2.5.1",
},
Expand Down Expand Up @@ -226,7 +226,7 @@
},
"packages/react-openapi": {
"name": "@gitbook/react-openapi",
"version": "1.1.2",
"version": "1.1.3",
"dependencies": {
"@gitbook/openapi-parser": "workspace:*",
"@scalar/api-client-react": "^1.1.36",
Expand Down Expand Up @@ -254,6 +254,7 @@
},
"overrides": {
"@codemirror/state": "6.4.1",
"@gitbook/api": "0.97.0",
"react": "18.3.1",
"react-dom": "18.3.1",
},
Expand Down Expand Up @@ -626,7 +627,7 @@

"@fortawesome/fontawesome-svg-core": ["@fortawesome/[email protected]", "", { "dependencies": { "@fortawesome/fontawesome-common-types": "6.6.0" } }, "sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg=="],

"@gitbook/api": ["@gitbook/api@0.96.1", "", { "dependencies": { "event-iterator": "^2.0.0", "eventsource-parser": "^3.0.0" } }, "sha512-E1hpaFNFoEyc8E4rIQyC6UD3kErGXAI0lKt04zYQQYOBLjRIQ57D4oNIIJBjWn4hHeSxRxWvW3NcxzvOGMmIqQ=="],
"@gitbook/api": ["@gitbook/api@0.97.0", "", { "dependencies": { "event-iterator": "^2.0.0", "eventsource-parser": "^3.0.0" } }, "sha512-bBTy7nprwlwTW/v8S6A9wGFWatU+F33232xF5Tt4GmSBTZSrAKha5wD205Hr+618va+/zipA8o4hdAGPyUNj0A=="],

"@gitbook/cache-do": ["@gitbook/cache-do@workspace:packages/cache-do"],

Expand Down Expand Up @@ -792,7 +793,7 @@

"@opennextjs/aws": ["@opennextjs/aws@https://pkg.pr.new/@opennextjs/aws@756", { "dependencies": { "@aws-sdk/client-cloudfront": "3.398.0", "@aws-sdk/client-dynamodb": "^3.398.0", "@aws-sdk/client-lambda": "^3.398.0", "@aws-sdk/client-s3": "^3.398.0", "@aws-sdk/client-sqs": "^3.398.0", "@node-minify/core": "^8.0.6", "@node-minify/terser": "^8.0.6", "@tsconfig/node18": "^1.0.1", "aws4fetch": "^1.0.18", "chalk": "^5.3.0", "esbuild": "0.19.2", "express": "5.0.1", "path-to-regexp": "^6.3.0", "urlpattern-polyfill": "^10.0.0" }, "bin": { "open-next": "./dist/index.js" } }],

"@opennextjs/cloudflare": ["@opennextjs/cloudflare@https://pkg.pr.new/opennextjs/opennextjs-cloudflare/@opennextjs/cloudflare@236c84d", { "dependencies": { "@ast-grep/napi": "^0.34.1", "@dotenvx/dotenvx": "1.31.0", "@opennextjs/aws": "https://pkg.pr.new/@opennextjs/aws@756", "enquirer": "^2.4.1", "glob": "^11.0.0", "yaml": "^2.7.0" }, "peerDependencies": { "wrangler": "^3.111.0" }, "bin": { "opennextjs-cloudflare": "dist/cli/index.js" } }],
"@opennextjs/cloudflare": ["@opennextjs/cloudflare@0.5.10", "", { "dependencies": { "@ast-grep/napi": "^0.34.1", "@dotenvx/dotenvx": "1.31.0", "@opennextjs/aws": "https://pkg.pr.new/@opennextjs/aws@756", "enquirer": "^2.4.1", "glob": "^11.0.0", "yaml": "^2.7.0" }, "peerDependencies": { "wrangler": "^3.111.0" }, "bin": { "opennextjs-cloudflare": "dist/cli/index.js" } }, "sha512-L/D472YT5OW1LwpFtD/aVXHJYcVPbFVX7XdphlUjCR4+2osSQIDnsuNgfDRydHMDJZMKxeZDc251ZBzUVKpCqw=="],

"@opentelemetry/api": ["@opentelemetry/[email protected]", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="],

Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
"overrides": {
"@codemirror/state": "6.4.1",
"react": "18.3.1",
"react-dom": "18.3.1"
"react-dom": "18.3.1",
"@gitbook/api": "0.97.0"
},
"private": true,
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/cache-tags/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
},
"version": "0.1.0",
"dependencies": {
"@gitbook/api": "0.96.1",
"@gitbook/api": "*",
"assert-never": "^1.2.1"
},
"devDependencies": {
Expand Down
11 changes: 11 additions & 0 deletions packages/cache-tags/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,17 @@ export function getCacheTag(
}
}

/**
* Get the cache tag for a given URL.
*/
export function getCacheTagForURL(url: string | URL) {
const parsedURL = url instanceof URL ? url : new URL(url);
return getCacheTag({
tag: 'url',
hostname: parsedURL.hostname,
});
}

/**
* Get the tags for a computed content source.
*/
Expand Down
7 changes: 4 additions & 3 deletions packages/gitbook-v2/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
"next": "^15.2.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"@gitbook/api": "0.96.1",
"@gitbook/api": "*",
"@gitbook/cache-tags": "workspace:*",
"@sindresorhus/fnv1a": "^3.1.0",
"server-only": "^0.0.1",
"warn-once": "^0.1.1"
},
"devDependencies": {
"gitbook": "*",
"@opennextjs/cloudflare": "https://pkg.pr.new/opennextjs/opennextjs-cloudflare/@opennextjs/cloudflare@236c84d",
"@opennextjs/cloudflare": "^0.5.10",
"tailwindcss": "^3.4.0",
"postcss": "^8"
},
Expand All @@ -26,6 +26,7 @@
"start": "next start",
"build:v2:cloudflare": "opennextjs-cloudflare",
"dev:v2:cloudflare": "wrangler dev --port 8771",
"unit": "bun test"
"unit": "bun test",
"typecheck": "tsc --noEmit"
}
}
2 changes: 2 additions & 0 deletions packages/gitbook-v2/src/app/~gitbook/env/route.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { type NextRequest, NextResponse } from 'next/server';

import {
GITBOOK_API_PUBLIC_URL,
GITBOOK_API_TOKEN,
GITBOOK_API_URL,
GITBOOK_APP_URL,
Expand All @@ -22,6 +23,7 @@ export async function GET(_req: NextRequest) {
GITBOOK_URL,
GITBOOK_APP_URL,
GITBOOK_API_URL,
GITBOOK_API_PUBLIC_URL,
GITBOOK_ASSETS_URL,
GITBOOK_ICONS_URL,
GITBOOK_USER_AGENT,
Expand Down
2 changes: 0 additions & 2 deletions packages/gitbook-v2/src/app/~space/[spaceId]/pdf.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
fetchSpaceContextByIds,
} from '@v2/lib/context';
import { createDataFetcher } from '@v2/lib/data';
import { GITBOOK_API_URL } from '@v2/lib/env';
import { createLinker } from '@v2/lib/links';
import { getAPITokenFromMiddleware } from '@v2/lib/middleware';

Expand All @@ -26,7 +25,6 @@ export async function getSpacePDFContext(
});
const dataFetcher = createDataFetcher({
apiToken: apiToken,
apiEndpoint: GITBOOK_API_URL,
});

const baseContext: GitBookBaseContext = {
Expand Down
5 changes: 2 additions & 3 deletions packages/gitbook-v2/src/lib/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import type {
import { type GitBookDataFetcher, createDataFetcher, throwIfDataError } from '@v2/lib/data';
import { redirect } from 'next/navigation';
import { assert } from 'ts-essentials';
import { GITBOOK_API_TOKEN, GITBOOK_API_URL, GITBOOK_URL } from './env';
import { GITBOOK_URL } from './env';
import { type ImageResizer, createImageResizer } from './images';
import { type GitBookSpaceLinker, createLinker } from './links';

Expand Down Expand Up @@ -113,8 +113,7 @@ export function getBaseContext(input: {
const urlMode = input.urlMode;

const dataFetcher = createDataFetcher({
apiToken: input.apiToken ?? GITBOOK_API_TOKEN,
apiEndpoint: GITBOOK_API_URL,
apiToken: input.apiToken ?? null,
});

const linker = getLinkerForSiteURL({
Expand Down
Loading
Loading