Skip to content

Commit 2cbb53d

Browse files
committed
Merge branch 'main' into alex/update-sub-processors
2 parents 5657d9b + bb8691e commit 2cbb53d

File tree

366 files changed

+10981
-1098
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

366 files changed

+10981
-1098
lines changed

astro.config.mjs

Lines changed: 204 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export default defineConfig({
3535
enabled: false
3636
},
3737
redirects: {
38+
"/sitemap.xml": "/sitemap-0.xml",
3839
"/developer-tools/kinde-api/register-manage-apis/":
3940
"/developer-tools/your-apis/register-manage-apis/",
4041
"/developer-tools/kinde-api/protect-your-api/":
@@ -60,7 +61,203 @@ export default defineConfig({
6061
"/design/pages/set-language-for-pages/":
6162
"/design/content-customization/set-language-for-pages/",
6263
"/design/pages/internationalization/":
63-
"/design/content-customization/set-language-for-pages/"
64+
"/design/content-customization/set-language-for-pages/",
65+
66+
// Section-level redirects to prevent 404s when users truncate URLs
67+
"/authenticate/":
68+
"/authenticate/about-auth/about-authentication/",
69+
"/billing/":
70+
"/billing/about-billing/about-billing/",
71+
"/build/":
72+
"/build/applications/about-applications/",
73+
"/design/":
74+
"/design/brand/global-brand-defaults/",
75+
"/developer-tools/":
76+
"/developer-tools/about/our-sdks/",
77+
"/get-started/":
78+
"/get-started/apis-and-sdks/about-kinde-apis/",
79+
"/integrate/":
80+
"/integrate/connected-apps/add-connected-apps/",
81+
"/machine-to-machine-applications/":
82+
"/machine-to-machine-applications/about-m2m/authenticate-with-m2m/",
83+
"/manage-your-account/":
84+
"/manage-your-account/business-information/update-your-details/",
85+
"/manage-users/":
86+
"/manage-users/about/manage-users-across-organizations/",
87+
"/properties/":
88+
"/properties/about-properties/application-properties/",
89+
"/releases/":
90+
"/releases/about/about-feature-flags/",
91+
"/trust-center/":
92+
"/trust-center/agreements/terms-of-service/",
93+
"/workflows/":
94+
"/workflows/about-workflows/",
95+
96+
// Authenticate section subfolder redirects
97+
"/authenticate/about-auth/":
98+
"/authenticate/about-auth/about-authentication/",
99+
"/authenticate/auth-guides/":
100+
"/authenticate/auth-guides/enterprise-connections-identity/",
101+
"/authenticate/authentication-methods/":
102+
"/authenticate/authentication-methods/email-authentication/",
103+
"/authenticate/custom-configurations/":
104+
"/authenticate/custom-configurations/authentication-experience/",
105+
"/authenticate/enterprise-connections/":
106+
"/authenticate/enterprise-connections/about-enterprise-connections/",
107+
"/authenticate/manage-authentication/":
108+
"/authenticate/manage-authentication/authenticated-sessions-across-multiple-applications/",
109+
"/authenticate/multi-factor-auth/":
110+
"/authenticate/multi-factor-auth/about-multi-factor-authentication/",
111+
"/authenticate/social-sign-in/":
112+
"/authenticate/social-sign-in/add-social-sign-in/",
113+
114+
// Billing section subfolder redirects
115+
"/billing/about-billing/":
116+
"/billing/about-billing/about-billing/",
117+
"/billing/billing-user-experience/":
118+
"/billing/billing-user-experience/add-pricing-table/",
119+
"/billing/get-started/":
120+
"/billing/get-started/add-billing-role/",
121+
"/billing/manage-plans/":
122+
"/billing/manage-plans/about-plans/",
123+
"/billing/manage-subscribers/":
124+
"/billing/manage-subscribers/add-metered-usage/",
125+
"/billing/payment-management/":
126+
"/billing/payment-management/manage-stripe-connection/",
127+
"/billing/pricing/":
128+
"/billing/pricing/pricing-models/",
129+
130+
// Build section subfolder redirects
131+
"/build/applications/":
132+
"/build/applications/about-applications/",
133+
"/build/domains/":
134+
"/build/domains/pointing-your-domain/",
135+
"/build/env-variables/":
136+
"/build/env-variables/add-manage-env-variables/",
137+
"/build/environments/":
138+
"/build/environments/environments/",
139+
"/build/organizations/":
140+
"/build/organizations/add-and-manage-organizations/",
141+
"/build/set-up-options/":
142+
"/build/set-up-options/access-policies/",
143+
"/build/tokens/":
144+
"/build/tokens/about-access-tokens/",
145+
146+
// Design section subfolder redirects
147+
"/design/brand/":
148+
"/design/brand/global-brand-defaults/",
149+
"/design/content-customization/":
150+
"/design/content-customization/how-content-is-managed/",
151+
"/design/customize-with-code/":
152+
"/design/customize-with-code/connect-repo/",
153+
"/design/pages/":
154+
"/design/pages/page-layout/",
155+
156+
// Developer tools section subfolder redirects
157+
"/developer-tools/about/":
158+
"/developer-tools/about/our-sdks/",
159+
"/developer-tools/account-api/":
160+
"/developer-tools/account-api/about-account-api/",
161+
"/developer-tools/guides/":
162+
"/developer-tools/guides/code-sync-errors/",
163+
"/developer-tools/kinde-api/":
164+
"/developer-tools/kinde-api/about-m2m-scopes/",
165+
"/developer-tools/sdks/backend/":
166+
"/developer-tools/sdks/backend/apollo-graphql/",
167+
"/developer-tools/sdks/frontend/":
168+
"/developer-tools/sdks/frontend/javascript-sdk/",
169+
"/developer-tools/sdks/native/":
170+
"/developer-tools/sdks/native/android-sdk/",
171+
"/developer-tools/your-apis/":
172+
"/developer-tools/your-apis/access-to-your-api/",
173+
174+
// Get started section subfolder redirects
175+
"/get-started/apis-and-sdks/":
176+
"/get-started/apis-and-sdks/about-kinde-apis/",
177+
"/get-started/connect/":
178+
"/get-started/connect/callback-urls/",
179+
"/get-started/guides/":
180+
"/get-started/guides/byo-code/",
181+
"/get-started/learn-about-kinde/":
182+
"/get-started/learn-about-kinde/kinde-product-security/",
183+
"/get-started/switch-to-kinde/":
184+
"/get-started/switch-to-kinde/auth0-to-kinde/",
185+
"/get-started/team-and-account/":
186+
"/get-started/team-and-account/add-team-members/",
187+
188+
// Integrate section subfolder redirects
189+
"/integrate/connected-apps/":
190+
"/integrate/connected-apps/add-connected-apps/",
191+
"/integrate/third-party-tools/":
192+
"/integrate/third-party-tools/cloudflare-zero-trust/",
193+
"/integrate/webhooks/":
194+
"/integrate/webhooks/about-webhooks/",
195+
196+
// Machine-to-machine applications section subfolder redirects
197+
"/machine-to-machine-applications/m2m-application-setup/":
198+
"/machine-to-machine-applications/m2m-application-setup/add-feature-flags-to-m2m-applications/",
199+
"/machine-to-machine-applications/m2m-token-customization/":
200+
"/machine-to-machine-applications/m2m-token-customization/customize-m2m-tokens/",
201+
"/machine-to-machine-applications/m2m-workflow-automation/":
202+
"/machine-to-machine-applications/m2m-workflow-automation/m2m-workflow/",
203+
"/machine-to-machine-applications/organization-scoped-m2m-apps/":
204+
"/machine-to-machine-applications/organization-scoped-m2m-apps/enforce-org-m2m-access-in-your-api/",
205+
"/machine-to-machine-applications/troubleshooting-m2m/":
206+
"/machine-to-machine-applications/troubleshooting-m2m/troubleshoot-m2m-token-errors/",
207+
208+
// Manage your account section subfolder redirects
209+
"/manage-your-account/business-information/":
210+
"/manage-your-account/business-information/change-your-business-time-zone/",
211+
"/manage-your-account/profile-and-plan/":
212+
"/manage-your-account/profile-and-plan/change-kinde-plan/",
213+
"/manage-your-account/your-data/":
214+
"/manage-your-account/your-data/check-your-mau/",
215+
216+
// Manage users section subfolder redirects
217+
"/manage-users/access-control/":
218+
"/manage-users/access-control/accept-policies-signup/",
219+
"/manage-users/add-and-edit/":
220+
"/manage-users/add-and-edit/add-and-edit-users/",
221+
"/manage-users/roles-and-permissions/":
222+
"/manage-users/roles-and-permissions/apply-roles-and-permissions-to-users/",
223+
"/manage-users/view-activity/":
224+
"/manage-users/view-activity/hotjar/",
225+
226+
// Properties section subfolder redirects
227+
"/properties/work-with-properties/":
228+
"/properties/work-with-properties/manage-properties/",
229+
230+
// Releases section subfolder redirects
231+
"/releases/about/":
232+
"/releases/about/about-feature-flags/",
233+
"/releases/feature-flags/":
234+
"/releases/feature-flags/add-feature-flag/",
235+
"/releases/guides/":
236+
"/releases/guides/guide-to-app-store-approvals/",
237+
238+
// Trust center section subfolder redirects
239+
"/trust-center/agreements/":
240+
"/trust-center/agreements/end-user-licence-agreement/",
241+
"/trust-center/kinde-performance/":
242+
"/trust-center/kinde-performance/service-status/",
243+
"/trust-center/privacy-and-compliance/":
244+
"/trust-center/privacy-and-compliance/compliance/",
245+
"/trust-center/security/":
246+
"/trust-center/security/security-at-kinde/",
247+
248+
// Workflows section subfolder redirects
249+
"/workflows/bindings/":
250+
"/workflows/bindings/access-token-binding/",
251+
"/workflows/configuration/":
252+
"/workflows/configuration/bindings/",
253+
"/workflows/example-workflows/":
254+
"/workflows/example-workflows/existing-password-provided-workflow/",
255+
"/workflows/getting-started/":
256+
"/workflows/getting-started/connect-repo-for-workflows/",
257+
"/workflows/manage-workflows/":
258+
"/workflows/manage-workflows/create-workflow/",
259+
"/workflows/observability/":
260+
"/workflows/observability/workflow-build-logs/",
64261
},
65262
markdown: {
66263
rehypePlugins: [
@@ -120,7 +317,12 @@ export default defineConfig({
120317
applyBaseStyles: false
121318
}),
122319
icon(),
123-
sitemap(),
320+
sitemap({
321+
filter: (page) => !page.includes('404'),
322+
customPages: [
323+
'https://docs.kinde.com/'
324+
]
325+
}),
124326
AutoImport({
125327
imports: [
126328
"./src/components/SDKSelector.astro",

customHttp.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ customHeaders:
4444
'sha256-8JLcQFZQruxl3jMUwogr3y5/GMmZPAc+j2mNi7gywmw='
4545
'sha256-w78n7W12c94ck4KhBCBA4NrjqkbDvSutqee+u+no0Tg='
4646
'sha256-/4BQzbQ0kgR1l13wtSM3rZ7nSvyV3PX/ShEfhZA1WoQ='
47-
'sha256-zB5rUhTjHzt+r/RjhhI8CyMb5Y63k+J7ICVfQ7iHJqA=' 'self'
47+
'sha256-zB5rUhTjHzt+r/RjhhI8CyMb5Y63k+J7ICVfQ7iHJqA='
48+
'sha256-fFmtUWM/kGeUru+1rcCArLmnXKoEjis5I/dYQkZA+HM=' 'self'
4849
widgets.kinde.com kinde.com
4950
https://cdn.jsdelivr.net/npm/@scalar/[email protected]/dist/browser/standalone.min.js
5051
- key: Strict-Transport-Security

public/robots.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
User-agent: *
2+
Allow: /
3+
4+
# Sitemap
5+
Sitemap: https://docs.kinde.com/sitemap-0.xml

scripts/validate-links.js

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,48 @@ const __filename = fileURLToPath(import.meta.url);
99
const __dirname = path.dirname(__filename);
1010

1111
const distFolder = path.join(__dirname, "../dist");
12+
const astroConfigPath = path.join(__dirname, "../astro.config.mjs");
13+
14+
// Function to extract redirect destinations from astro.config.mjs
15+
function getRedirectDestinations() {
16+
try {
17+
const configContent = fs.readFileSync(astroConfigPath, "utf-8");
18+
19+
// Extract the redirects object using regex
20+
const redirectsMatch = configContent.match(/redirects:\s*{([^}]+)}/s);
21+
if (!redirectsMatch) {
22+
console.log(chalk.yellow("No redirects found in astro.config.mjs"));
23+
return [];
24+
}
25+
26+
const redirectsSection = redirectsMatch[1];
27+
28+
// Extract all destination URLs (the values after the colons)
29+
const destinationMatches = redirectsSection.match(/:\s*"([^"]+)"/g);
30+
if (!destinationMatches) {
31+
console.log(chalk.yellow("No redirect destinations found in astro.config.mjs"));
32+
return [];
33+
}
34+
35+
// Clean up the matches to get just the URLs
36+
const destinations = destinationMatches.map(match => {
37+
// Remove the ': "' prefix and '"' suffix
38+
return match.replace(/:\s*"/, '').replace(/"$/, '');
39+
});
40+
41+
console.log(chalk.blue(`Found ${destinations.length} redirect destinations`));
42+
return destinations;
43+
44+
} catch (error) {
45+
console.error(chalk.red(`Error reading astro.config.mjs: ${error.message}`));
46+
return [];
47+
}
48+
}
49+
50+
// Function to check if a URL is a redirect destination
51+
function isRedirectDestination(url, redirectDestinations) {
52+
return redirectDestinations.includes(url);
53+
}
1254

1355
// Function to read all HTML files from a directory
1456
function readHtmlFiles(dir) {
@@ -63,7 +105,7 @@ function anchorExists(html, anchor) {
63105
}
64106

65107
// Function to validate links
66-
function validateLinks(htmlFiles) {
108+
function validateLinks(htmlFiles, redirectDestinations) {
67109
let invalidLinks = [];
68110

69111
htmlFiles.forEach((file) => {
@@ -74,6 +116,13 @@ function validateLinks(htmlFiles) {
74116
// Split by the first occurrence of `#` to allow fragments with slashes
75117
const [pathWithoutHash, ...hashParts] = link.split("#");
76118
const hash = hashParts.length ? hashParts.join("#") : null;
119+
120+
// Check if this is a redirect destination - if so, skip validation
121+
if (isRedirectDestination(pathWithoutHash, redirectDestinations)) {
122+
console.log(chalk.yellow(`Skipping redirect destination: ${pathWithoutHash}`));
123+
return;
124+
}
125+
77126
const resolvedPath = path.join(distFolder, pathWithoutHash);
78127
const normalizedPath = path.normalize(resolvedPath);
79128
const ext = path.extname(normalizedPath);
@@ -109,6 +158,9 @@ function validateLinks(htmlFiles) {
109158

110159
// Main function
111160
function main() {
161+
// Get redirect destinations from astro.config.mjs
162+
const redirectDestinations = getRedirectDestinations();
163+
112164
const htmlFiles = readHtmlFiles(distFolder);
113165
const allLinks = new Set();
114166

@@ -118,7 +170,7 @@ function main() {
118170
links.forEach((link) => allLinks.add(link));
119171
});
120172

121-
const invalidLinks = validateLinks(htmlFiles);
173+
const invalidLinks = validateLinks(htmlFiles, redirectDestinations);
122174

123175
if (invalidLinks.length > 0) {
124176
console.log(chalk.red("Invalid Links:"));

src/components/APICards.astro

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
aria-hidden="true"
1212
class="mt-12 text-inherit underline decoration-inherit underline-offset-[6px] transition-all hover:text-current"
1313
>
14-
Explore the Management API reference
14+
Explore the Management API
1515
</p>
1616
<a
1717
href="/kinde-apis/management/"
@@ -25,13 +25,13 @@
2525
>
2626
<h3>Account API</h3>
2727
<p>
28-
For managing the currently signed-in user, includes e.g their profile, roles, permissions, billing info and revoking tokens
28+
For managing the data of signed-in users, including their profile, roles, permissions, billing info and tokens
2929
</p>
3030
<p
3131
aria-hidden="true"
3232
class="mt-12 text-inherit underline decoration-inherit underline-offset-[6px] transition-all hover:text-current"
3333
>
34-
Explore the Account API reference
34+
Explore the Account API
3535
</p>
3636
<a
3737
href="/kinde-apis/frontend/"

0 commit comments

Comments
 (0)