From 415e1b0596f62d0058709b205e426ea3fd3f5ff6 Mon Sep 17 00:00:00 2001 From: Thomas Heartman Date: Thu, 16 Feb 2023 13:36:28 +0100 Subject: [PATCH] Source proxy and Edge docs from GitHub (#3122) ## What The main purpose of this PR is to 1. Delete the proxy docs in this repo and replace them with the proxy's GitHub readme. 2. Add the docs for Unleash Edge. ### Detailed change description This PR contains a lot of small changes in a large number of files. To make it easier to get an overview, here's a detailed description of what happens where: #### In the `website/docs`directory Except for the deletion of the proxy doc, all changes in this directory are rewriting internal links, so that they point to the newly generated document instead. #### `package.json` and `yarn.lock` When including the documentation for Edge, we also want to render the mermaid diagrams it uses. Docusaurus supports this via a plugin. All changes in these files are related to installing that plugin. #### `docusaurus.config.js` There's two types of changes in this file: 1. Mermaid-related changes: we ask docusaurus to render mermaid in markdown files and add the plugin 2. Document generation. There's some rewrites to the sdk doc generation plus an entirely new section that generates docs for Edge and the proxy #### `sidebars.js` Two things: 1. Add the edge docs 2. Move both the Edge and the proxy docs up a level, so that they're directly under "reference docs" instead of nested inside "unleash concepts". #### In the `website/remote-content` directory These are the remote content files. Previously, all of this lived only in a `readme-fns.js` file, but with the introduction of Edge and proxy docs, this has been moved into its own directory and refactored into three files (`shared`, `sdks`, `edge-proxy`). #### `custom.css` Style updates to center mermaid diagrams and provide more space around them. #### In `static/img` The image files that were included in the proxy doc and that have been deleted. ## Why For two reasons: 1. Reduce duplication for the proxy. Have one source of truth. 2. Add docs for edge. ## Discussion points and review wishes This is a big PR, and I don't expect anyone to do a line-by-line review of it, nor do I think that is particularly useful. Instead, I'd like to ask reviewers to: 1. Visit the [documentation preview](https://unleash-docs-git-docs-source-proxy-gh-unleash-team.vercel.app/reference/unleash-proxy) and have a look at both the proxy docs and the Edge docs. Potentially have a look at the SDK docs too to verify that everything still works. 2. Consider whether they think moving the proxy and edge docs up a level (in the sidebar) makes sense. 3. Let me know what slug they'd prefer for the Edge docs. I've gone with `unleash-edge` for now (so that it's `docs.getunleash.io/reference/unleash-edge`), but we could potentially also just use `edge`. WDYT? 4. Read through the detailed changes section. 5. Let me know if they have any other concerns or questions. ## Screenies The new proxy doc: ![image](https://user-images.githubusercontent.com/17786332/219043145-1c75c83e-4191-45a3-acb5-775d05d13862.png) The new edge doc: ![image](https://user-images.githubusercontent.com/17786332/219043220-1f5daf13-972e-4d56-8aaf-70ff1812863e.png) --- .../how-to/how-to-run-the-unleash-proxy.mdx | 6 +- .../how-to/how-to-use-custom-strategies.md | 4 +- .../docs/reference/activation-strategies.md | 2 +- .../reference/api-tokens-and-client-keys.mdx | 12 +- .../reference/custom-activation-strategies.md | 2 +- website/docs/reference/front-end-api.md | 2 +- website/docs/reference/impression-data.md | 2 +- website/docs/reference/sdks/index.md | 4 +- website/docs/reference/unleash-proxy.md | 281 -------------- website/docs/topics/proxy-hosting.mdx | 4 +- website/docs/tutorials/quickstart.md | 4 +- website/docs/tutorials/unleash-overview.md | 2 +- website/docusaurus.config.js | 26 +- website/package.json | 1 + website/readme-fns.js | 206 ---------- website/remote-content/edge-proxy.js | 46 +++ website/remote-content/sdks.js | 119 ++++++ website/remote-content/shared.js | 150 ++++++++ website/sidebars.js | 3 +- website/src/css/custom.css | 7 + website/static/img/The-Unleash-Proxy-API.png | Bin 66445 -> 0 bytes website/static/img/The-unleash-proxy.png | Bin 41639 -> 0 bytes website/yarn.lock | 356 +++++++++++++++++- 23 files changed, 718 insertions(+), 521 deletions(-) delete mode 100644 website/docs/reference/unleash-proxy.md delete mode 100644 website/readme-fns.js create mode 100644 website/remote-content/edge-proxy.js create mode 100644 website/remote-content/sdks.js create mode 100644 website/remote-content/shared.js delete mode 100644 website/static/img/The-Unleash-Proxy-API.png delete mode 100644 website/static/img/The-unleash-proxy.png diff --git a/website/docs/how-to/how-to-run-the-unleash-proxy.mdx b/website/docs/how-to/how-to-run-the-unleash-proxy.mdx index 3f922701bf..a9e6c3499e 100644 --- a/website/docs/how-to/how-to-run-the-unleash-proxy.mdx +++ b/website/docs/how-to/how-to-run-the-unleash-proxy.mdx @@ -10,7 +10,7 @@ Placeholders in the code samples below are delimited by angle brackets (i.e. `

- -The Unleash Proxy is important because you should not expose your entire set of toggle configurations to your end users. Single page apps work in the context of a specific user. The proxy allows you to only provide data that relates to that one user: _The proxy will only return the evaluated toggles (with variants) that should be enabled for that specific user in that specific context._ - -Most of our customers prefer to run the Unleash proxy themselves. We actually prefer this as we don’t want to see your users. Running it is pretty simple, it is either a small Node.js process you start or a docker image you use. (We can of course host the proxy for you also.) - -For more information on the various hosting options and their tradeoffs, refer to the [proxy hosting strategies topic document](../topics/proxy-hosting.mdx). - -## Health endpoint - -The proxy will try to synchronize with the Unleash API at startup, until it has successfully done that the proxy will return `HTTP 503 - Not Read?` for all request. You can use the health endpoint to validate that the proxy is ready to recieve requests: - -```bash -curl http://localhost:3000/proxy/health -I -``` - -```bash -HTTP/1.1 200 OK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag -Content-Type: text/html; charset=utf-8 -Content-Length: 2 -ETag: W/"2-eoX0dku9ba8cNUXvu/DyeabcC+s" -Date: Fri, 04 Jun 2021 10:38:27 GMT -Connection: keep-alive -Keep-Alive: timeout=5 -``` - -## Custom activation strategies - -:::info Limitations for hosted proxies - -Custom activation strategies can **not** be used with the Unleash-hosted proxy available to Pro and Enterprise customers. - -::: - -The Unleash Proxy can load [custom activation strategies](../reference/custom-activation-strategies.md) for front-end client SDKs ([Android](/docs/generated/sdks/client-side/android-proxy.md), [JavaScript](/docs/generated/sdks/client-side/javascript-browser.md), [React](/docs/generated/sdks/client-side/react.md), [iOS](/docs/generated/sdks/client-side/ios-proxy.md), [Flutter](/docs/generated/sdks/client-side/flutter.md)). For a step-by-step guide, refer to the [_how to use custom strategies_ guide](../how-to/how-to-use-custom-strategies.md#step-3-b). - -To load custom strategies, use either of these two options: - -- the **`customStrategies`** option: use this if you're running the Unleash Proxy via Node directly. -- the **`UNLEASH_CUSTOM_STRATEGIES_FILE`** environment variable: use this if you're running the proxy as a container. - -Both options take a list of file paths to JavaScript files that export custom strategy implementations. - -### Custom activation strategy files format - -Each strategy file must export a list of instantiated strategies. A file can export as many strategies as you'd like. - -Here's an example file that exports two custom strategies: - -```js -const { Strategy } = require('unleash-client'); - -class MyCustomStrategy extends Strategy { - // ... strategy implementation -} - -class MyOtherCustomStrategy extends Strategy { - // ... strategy implementation -} - -// export strategies -module.exports = [new MyCustomStrategy(), new MyOtherCustomStrategy()]; -``` - -Refer the [custom activation strategy documentation](../reference/custom-activation-strategies.md#implementation) for more details on how to implement a custom activation strategy. - -## Unleash Proxy API {#unleash-proxy-api} - -The Unleash Proxy has a very simple API. It takes the [Unleash Context](../reference/unleash-context) as input and will return the feature toggles relevant for that specific context. - -

- -### OpenAPI integration and API documentation {#openapi} - -:::info Availability - -The OpenAPI integration is available in versions 0.9 and later of the Unleash proxy. - -::: - -The proxy can optionally expose a runtime-generated OpenAPI JSON spec and a corresponding OpenAPI UI for its API. The OpenAPI UI page is an interactive page where you can discover and test the API endpoints the proxy exposes. The JSON spec can be used to generate an OpenAPI client with OpenAPI tooling such as the [OpenAPI generator](https://openapi-generator.tech/). - -To enable the JSON spec and UI, set `ENABLE_OAS` (environment variable) or `enableOAS` (in-code configuration variable) to `true`. - -The spec and UI can then be found at `/docs/openapi.json` and `/docs/openapi` respectively. - -### Payload - -The `proxy` endpoint returns information about toggles enabled for the current user. The payload is a JSON object with a `toggles` property, which contains a list of toggles. - -```json -{ - "toggles": [ - { - "name": "demo", - "enabled": true, - "variant": { - "name": "disabled", - "enabled": false - } - }, - { - "name": "demoApp.step1", - "enabled": true, - "variant": { - "name": "disabled", - "enabled": false - } - } - ] -} -``` - -#### Toggle data - -The data for a toggle without [variants](../reference/feature-toggle-variants.md) looks like this: - -```json -{ - "name": "basic-toggle", - "enabled": true, - "variant": { - "name": "disabled", - "enabled": false - } -} -``` - -- **`name`**: the name of the feature. -- **`enabled`**: whether the toggle is enabled or not. Will always be `true`. -- **`variant`**: describes whether the toggle has variants and, if it does, what variant is active for this user. If a toggle doesn't have any variants, it will always be `{"name": "disabled", "enabled": false}`. - -:::note The "disabled" variant - -Unleash uses a fallback variant called "disabled" to indicate that a toggle has no variants. However, you are free to create a variant called "disabled" yourself. In that case you can tell them apart by checking the variant's `enabled` property: if the toggle has no variants, `enabled` will be `false`. If the toggle is the "disabled" variant that you created, it will have `enabled` set to `true`. - -::: - -If a toggle has variants, then the variant object can also contain an optional `payload` property. The `payload` will contain data about the variant's payload: what type it is, and what the content is. To learn more about variants and their payloads, check [the feature toggle variants documentation](../reference/feature-toggle-variants.md). - -Variant toggles without payloads look will have their name listed and the `enabled` property set to `true`: - -```json -{ - "name": "toggle-with-variants", - "enabled": true, - "variant": { - "name": "simple", - "enabled": true - } -} -``` - -If the variant has a payload, the optional `payload` property will list the payload's type and it's content in a stringified form: - -```json -{ - "name": "toggle-with-variants", - "enabled": true, - "variant": { - "name": "with-payload-string", - "payload": { - "type": "string", - "value": "this string is the variant's payload" - }, - "enabled": true - } -} -``` - -For the `variant` property: - -- **`name`**: is the name of the variant, as shown in the Admin UI. -- **`enabled`**: indicates whether the variant is enabled or not. If the toggle has variants, this is always `true`. -- **`payload`** (optional): Only present if the variant has a payload. Describes the payload's type and content. - -If the variant has a payload, the `payload` object contains: - -- **`type`**: the type of the variant's payload -- **`value`**: the value of the variant's payload - -The `value` will always be the payload's content as a string, escaped as necessary. For instance, a variant with a JSON payload would look like this: - -```json -{ - "name": "toggle-with-variants", - "enabled": true, - "variant": { - "name": "with-payload-json", - "payload": { - "type": "json", - "value": "{\"description\": \"this is data delivered as a json string\"}" - }, - "enabled": true - } -} -``` - -## How to connect to the Proxy? {#how-to-connect-to-the-proxy} - -The Unleash Proxy takes the heavy lifting of evaluating toggles and only returns enabled toggles and their values to the client. This means that you would get away with a simple http-client in many common use-cases. - -However in some settings you would like a bit more logic around it to make it as fast as possible, and keep up to date with changes. - -- [Android Proxy SDK](/docs/generated/sdks/client-side/android-proxy.md) -- [iOS Proxy SDK](/docs/generated/sdks/client-side/ios-proxy.md) -- [Javascript Proxy SDK](/docs/generated/sdks/client-side/javascript-browser.md) -- [React Proxy SDK](/docs/generated/sdks/client-side/react.md) -- [Svelte Proxy SDK](/docs/generated/sdks/client-side/svelte.md) -- [Vue Proxy SDK](/docs/generated/sdks/client-side/vue.md) - -The proxy is also ideal fit for serverless functions such as AWS Lambda. In that scenario the proxy can run on a small container near the serverless function, preferably in the same VPC, giving the lambda extremely fast access to feature flags, at a predictable cost. diff --git a/website/docs/topics/proxy-hosting.mdx b/website/docs/topics/proxy-hosting.mdx index b4dd0dad2d..9a0dab6337 100644 --- a/website/docs/topics/proxy-hosting.mdx +++ b/website/docs/topics/proxy-hosting.mdx @@ -2,7 +2,7 @@ title: Proxy hosting strategies --- -Because the [Unleash proxy](../reference/unleash-proxy.md) is a separate piece of the Unleash architecture and because it should sit close to your application, there are numerous ways of hosting it. Another important distinction is whether you're hosting Unleash yourself or you have a managed solution. +Because the [Unleash proxy](../generated/unleash-proxy.md) is a separate piece of the Unleash architecture and because it should sit close to your application, there are numerous ways of hosting it. Another important distinction is whether you're hosting Unleash yourself or you have a managed solution. This document describes the three main ways of hosting the proxy alongside the Unleash API and the tradeoffs between hosting the proxy yourself and having Unleash host it for you. @@ -15,7 +15,7 @@ If you want Unleash to host the proxy for you, you should be aware of the follow - This is only available to Pro and Enterprise customers who have signed up for a managed Unleash instance. - Pro customers will get a total of two (2) proxies: One for the "development" environment and one for the "production" environment. - We do allow short spikes in traffic and our adaptive infrastructure will automatically scale your needs. -- Please check the [Fair Use Policy](https://www.getunleash.io/fair-use-policy) to see the limits of the Unleash-hosted proxy. +- Please check the [Fair Use Policy](https://www.getunleash.io/fair-use-policy) to see the limits of the Unleash-hosted proxy. - There's no guarantee that it'll be close to your applications. This means you'll get higher response times. - When we host the proxy, we will also receive whatever end user data you put in the [Unleash context](../reference/unleash-context.md). This may or may not be an issue depending on your business requirements. diff --git a/website/docs/tutorials/quickstart.md b/website/docs/tutorials/quickstart.md index c56087cf92..db56f157d6 100644 --- a/website/docs/tutorials/quickstart.md +++ b/website/docs/tutorials/quickstart.md @@ -12,7 +12,7 @@ NOTE: This is a demo instance set up with the Enterprise version. Some of the fu ### I want to test toggles in a client side environment -To test toggles in a client-side environment, we recommend that you use the [front-end client API](../reference/front-end-api.md). Client-side SDKs act a little differently from server-side SDKs, so the regular client API won't work for this. For more advanced setups, you can also use the [Unleash proxy](../reference/unleash-proxy.md), which offers greater flexibility than the front-end API, but at the cost of increased complexity. +To test toggles in a client-side environment, we recommend that you use the [front-end client API](../reference/front-end-api.md). Client-side SDKs act a little differently from server-side SDKs, so the regular client API won't work for this. For more advanced setups, you can also use the [Unleash proxy](../generated/unleash-proxy.md), which offers greater flexibility than the front-end API, but at the cost of increased complexity. #### Create your first toggle @@ -340,7 +340,7 @@ unleash.start(); #### Run Unleash and the Unleash proxy with Docker -We designed the [front-end API](../reference/front-end-api.md) to make it as easy as possible to get started and to cover basic use cases for front-end clients. However, if you need more flexibility, then you can also use the [Unleash proxy](../reference/unleash-proxy.md). +We designed the [front-end API](../reference/front-end-api.md) to make it as easy as possible to get started and to cover basic use cases for front-end clients. However, if you need more flexibility, then you can also use the [Unleash proxy](../generated/unleash-proxy.md). Follow the steps outlined in the [run Unleash with Docker](#run-unleash-with-docker) section to get the Unleash instance up and running. Once you have done that, you need to first get an API key from your Unleash instance and then use that API key when starting the Unleash proxy. diff --git a/website/docs/tutorials/unleash-overview.md b/website/docs/tutorials/unleash-overview.md index 18d717af11..ee3cb133f1 100644 --- a/website/docs/tutorials/unleash-overview.md +++ b/website/docs/tutorials/unleash-overview.md @@ -25,6 +25,6 @@ Before you can connect your application to Unleash you need a Unleash server. Yo - [**The Unleash API**](/reference/api/unleash) - The Unleash instance. This is where you create feature toggles, configure activation strategies, and parameters, etc. The service holding all feature toggles and their configurations. Configurations declare which activation strategies to use and which parameters they should get. - **The Unleash admin UI** - The bundled web interface for interacting with the Unleash instance. Manage toggles, define strategies, look at metrics, and much more. Use the UI to [create feature toggles](how-to/how-to-create-feature-toggles.md), [manage project access roles](../how-to/how-to-create-and-assign-custom-project-roles.md), [create API tokens](how-to/how-to-create-api-tokens.mdx), and more. - [**Unleash SDKs**](../reference/sdks/index.md) - Unleash SDKs integrate into your applications and get feature configurations from the Unleash API. Use them to check whether features are enabled or disabled and to send metrics to the Unleash API. [See all our SDKs](../reference/sdks/index.md) -- [**The Unleash proxy**](../reference/unleash-proxy.md) - The Unleash proxy sits between front-end and native applications and the Unleash API. You can scale it independently of the Unleash API to handle large request rates without causing issues for the Unleash API. +- [**The Unleash proxy**](../generated/unleash-proxy.md) - The Unleash proxy sits between front-end and native applications and the Unleash API. You can scale it independently of the Unleash API to handle large request rates without causing issues for the Unleash API. To be super fast (_we're talking nano-seconds_), the [client SDK](../reference/sdks/index.md) caches all feature toggles and their current configuration in memory. The activation strategies are also implemented in the SDK. This makes it really fast to check if a toggle is on or off because it is just a simple function operating on local state, without the need to poll data from the database. diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 5981b518a8..a976c37e7f 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -1,4 +1,5 @@ -const { readmes } = require('./readme-fns'); +const { sdks } = require('./remote-content/sdks'); +const { docs: edgeAndProxy } = require('./remote-content/edge-proxy'); // for a given redirect object, modify it's `from` property such that for every // path that doesn't start with `/docs/`, a corresponding path that _does_ start @@ -49,6 +50,7 @@ module.exports = { organizationName: 'Unleash', // Usually your GitHub org/user name. projectName: 'unleash.github.io', // Usually your repo name. trailingSlash: false, + markdown: { mermaid: true }, customFields: { // expose env vars etc here unleashProxyUrl: process.env.UNLEASH_PROXY_URL, @@ -612,11 +614,25 @@ module.exports = { // more info at https://github.com/rdilweb/docusaurus-plugin-remote-content#options name: 'content-sdks', sourceBaseUrl: 'https://raw.githubusercontent.com/Unleash/', // gets prepended to all of the documents when fetching - outDir: 'docs/generated/sdks', // the base directory to output to. - documents: readmes.documentUrls, // the file names to download - modifyContent: readmes.modifyContent, + outDir: 'docs/generated', // the base directory to output to. + documents: sdks.urls, // the file names to download + modifyContent: sdks.modifyContent, + }, + ], + [ + 'docusaurus-plugin-remote-content', + { + // more info at https://github.com/rdilweb/docusaurus-plugin-remote-content#options + name: 'content-external', + sourceBaseUrl: 'https://raw.githubusercontent.com/Unleash/', // gets prepended to all of the documents when fetching + outDir: 'docs/generated/', // the base directory to output to. + documents: edgeAndProxy.urls, // the file names to download + modifyContent: edgeAndProxy.modifyContent, }, ], ], - themes: ['docusaurus-theme-openapi-docs'], // Allows use of @theme/ApiItem and other components + themes: [ + 'docusaurus-theme-openapi-docs', // Allows use of @theme/ApiItem and other components + '@docusaurus/theme-mermaid', + ], }; diff --git a/website/package.json b/website/package.json index ce5fec8001..b99564660b 100644 --- a/website/package.json +++ b/website/package.json @@ -25,6 +25,7 @@ "@docusaurus/plugin-google-analytics": "2.2.0", "@docusaurus/preset-classic": "2.2.0", "@docusaurus/remark-plugin-npm2yarn": "2.2.0", + "@docusaurus/theme-mermaid": "2.2.0", "@mdx-js/react": "1.6.22", "@svgr/webpack": "6.5.1", "browserslist": "^4.16.5", diff --git a/website/readme-fns.js b/website/readme-fns.js deleted file mode 100644 index df798e58b5..0000000000 --- a/website/readme-fns.js +++ /dev/null @@ -1,206 +0,0 @@ -// Type definitions -// -// type Readme = { -// // This is the name that is placed before "SDK" in the sidebar. -// sidebarName: string; -// -// // The repo's primary branch. Falls back to "main" if nothing is defined -// branch?: string; -// -// // If present, this will be used to construct the slug. If no "slugName" is -// // defined, the `sidebarName` will be used to create the slug. -// slugName?: string; -// }; -// -// type ReadmeData = Readme & { repoUrl: string }; - -const CLIENT_SIDE_SDK = 'client-side'; -const SERVER_SIDE_SDK = 'server-side'; - -const serverSideSdks = { - 'unleash-client-go': { - sidebarName: 'Go', - branch: 'v3', - }, - 'unleash-client-java': { - sidebarName: 'Java', - }, - 'unleash-client-node': { - sidebarName: 'Node', - }, - 'unleash-client-php': { - sidebarName: 'PHP', - }, - 'unleash-client-python': { - sidebarName: 'Python', - }, - 'unleash-client-ruby': { - sidebarName: 'Ruby', - }, - 'unleash-client-rust': { - sidebarName: 'Rust', - }, - 'unleash-client-dotnet': { - sidebarName: '.NET', - slugName: 'dotnet', - }, -}; - -const clientSideSdks = { - 'unleash-android-proxy-sdk': { - sidebarName: 'Android', - slugName: 'android-proxy', - }, - unleash_proxy_client_flutter: { - sidebarName: 'Flutter', - }, - 'unleash-proxy-client-swift': { - sidebarName: 'iOS', - slugName: 'ios-proxy', - }, - 'unleash-proxy-client-js': { - sidebarName: 'JavaScript browser', - slugName: 'javascript-browser', - }, - 'proxy-client-react': { - sidebarName: 'React', - }, - 'proxy-client-svelte': { - sidebarName: 'Svelte', - }, - 'proxy-client-vue': { - sidebarName: 'Vue', - }, - 'unleash-client-nextjs': { - sidebarName: 'Next.js', - slugName: 'next-js', - }, -}; - -const allSdks = () => { - const enrich = - (sdkType) => - ([repoName, repoData]) => { - const repoUrl = `https://github.com/Unleash/${repoName}`; - const slugName = ( - repoData.slugName ?? repoData.sidebarName - ).toLowerCase(); - const branch = repoData.branch ?? 'main'; - - return [ - repoName, - { ...repoData, repoUrl, slugName, branch, type: sdkType }, - ]; - }; - - const serverSide = Object.entries(serverSideSdks).map( - enrich(SERVER_SIDE_SDK), - ); - const clientSide = Object.entries(clientSideSdks).map( - enrich(CLIENT_SIDE_SDK), - ); - - return Object.fromEntries(serverSide.concat(clientSide)); -}; - -const SDKS = allSdks(); - -function getReadmeRepoData(filename) { - const repoName = filename.split('/')[0]; - - const repoData = SDKS[repoName]; - - return repoData; -} - -const documentUrls = Object.entries(SDKS).map( - ([repo, { branch }]) => `${repo}/${branch}/README.md`, -); - -// Replace links in the incoming readme content. -// -// There's one cases we want to handle: -// -// 1. Relative links that point to the repo. These must be prefixed with the -// link to the github repo. -// -// Note: You might be tempted to handle absolute links to docs.getunleash.io and -// make them relative. While absolute links will work, they trigger full page -// refreshes. Relative links give a slightly smoother user experience. -// -// However, if the old link goes to a redirect, then the client-side redirect -// will not kick in, so you'll end up with a "Page not found". -const replaceLinks = ({ content, repo }) => { - const markdownLink = /(?<=\[.*\]\(\s?)([^\s\)]+)(?=.*\))/g; - - const replacer = (url) => { - try { - // This constructor will throw if the URL is relative. - // https://developer.mozilla.org/en-US/docs/Web/API/URL/URL - const parsedUrl = new URL(url); - - return url; - } catch { - // case 1 - if (url.startsWith('#')) { - // ignore links to other doc sections - return url; - } else { - const separator = url.startsWith('/') ? '' : '/'; - return `${repo.url}/blob/${repo.branch}${separator}${url}`; - } - } - }; - - return content.replaceAll(markdownLink, replacer); -}; - -const modifyContent = (filename, content) => { - const sdk = getReadmeRepoData(filename); - - const generationTime = new Date(); - - const getConnectionTip = (sdkType) => { - switch (sdkType) { - case CLIENT_SIDE_SDK: - return `To connect to Unleash from a client-side context, you'll need to use the [Unleash front-end API](/reference/front-end-api) ([how do I create an API token?](/how-to/how-to-create-api-tokens.mdx)) or the [Unleash proxy](/reference/unleash-proxy) ([how do I create client keys?](/reference/api-tokens-and-client-keys#proxy-client-keys)).`; - - case SERVER_SIDE_SDK: - default: - return `To connect to Unleash, you'll need your Unleash API url (e.g. \`https:///api\`) and a [server-side API token](/reference/api-tokens-and-client-keys.mdx#client-tokens) ([how do I create an API token?](/how-to/how-to-create-api-tokens.mdx)).`; - } - }; - - return { - filename: `${sdk.type}/${sdk.slugName}.md`, - content: `--- -title: ${sdk.sidebarName} SDK -slug: /reference/sdks/${sdk.slugName} ---- - -:::info Generated content -This document was generated from the README in the [${ - sdk.sidebarName - } SDK's GitHub repository](${sdk.repoUrl}). -::: - -:::tip Connecting to Unleash -${getConnectionTip(sdk.type)} -::: - -${replaceLinks({ content, repo: { url: sdk.repoUrl, branch: sdk.branch } })} - ---- - -This content was generated on -`, - }; -}; - -module.exports.readmes = { - documentUrls, - modifyContent, -}; diff --git a/website/remote-content/edge-proxy.js b/website/remote-content/edge-proxy.js new file mode 100644 index 0000000000..7bb6f81fcb --- /dev/null +++ b/website/remote-content/edge-proxy.js @@ -0,0 +1,46 @@ +const { + enrich, + mapObject, + modifyContent, + getRepoData, + getUrls, +} = require('./shared'); + +const DOCS = mapObject(enrich)({ + 'unleash-proxy': { + sidebarName: 'Unleash Proxy', + slugName: 'unleash-proxy', + }, + 'unleash-edge': { + sidebarName: 'Unleash Edge', + slugName: 'unleash-edge', + }, +}); + +const getAdmonitions = (data) => { + const admonitions = { + 'unleash-proxy': `:::tip + +Looking for how to run the Unleash proxy? Check out the [_how to run the Unleash proxy_ guide](../how-to/how-to-run-the-unleash-proxy.mdx)! + +:::`, 'unleash-edge': `:::caution 🏗️ Under construction! +Unleash Edge is currently considered very experimental. Use it at your own risk. + + +Share your comments in [🗣️ GitHub Discussions](https://github.com/Unleash/unleash/discussions) or the [💬 Unleash community Slack](https://slack.unleash.run/). +:::` + } + + return [admonitions[data.slugName]] +}; + +const modifyContent2 = modifyContent({ + getRepoDataFn: getRepoData(DOCS), + urlPath: '/reference/', + getAdditionalAdmonitions: getAdmonitions, +}); + +module.exports.docs = { + urls: getUrls(DOCS), + modifyContent: modifyContent2, +}; diff --git a/website/remote-content/sdks.js b/website/remote-content/sdks.js new file mode 100644 index 0000000000..c0b07a97f3 --- /dev/null +++ b/website/remote-content/sdks.js @@ -0,0 +1,119 @@ +const { + enrichAdditional, + modifyContent, + getRepoData, + getUrls, +} = require('./shared'); + +// Type definitions +// +// type Readme = { +// // This is the name that is placed before "SDK" in the sidebar. +// sidebarName: string; +// +// // The repo's primary branch. Falls back to "main" if nothing is defined +// branch?: string; +// +// // If present, this will be used to construct the slug. If no "slugName" is +// // defined, the `sidebarName` will be used to create the slug. +// slugName?: string; +// }; +// +// type ReadmeData = Readme & { repoUrl: string }; + +const CLIENT_SIDE_SDK = 'client-side'; +const SERVER_SIDE_SDK = 'server-side'; + +const serverSideSdks = { + 'unleash-client-go': { + sidebarName: 'Go', + branch: 'v3', + }, + 'unleash-client-java': { + sidebarName: 'Java', + }, + 'unleash-client-node': { + sidebarName: 'Node', + }, + 'unleash-client-php': { + sidebarName: 'PHP', + }, + 'unleash-client-python': { + sidebarName: 'Python', + }, + 'unleash-client-ruby': { + sidebarName: 'Ruby', + }, + 'unleash-client-rust': { + sidebarName: 'Rust', + }, + 'unleash-client-dotnet': { + sidebarName: '.NET', + slugName: 'dotnet', + }, +}; + +const clientSideSdks = { + 'unleash-android-proxy-sdk': { + sidebarName: 'Android', + slugName: 'android-proxy', + }, + unleash_proxy_client_flutter: { + sidebarName: 'Flutter', + }, + 'unleash-proxy-client-swift': { + sidebarName: 'iOS', + slugName: 'ios-proxy', + }, + 'unleash-proxy-client-js': { + sidebarName: 'JavaScript browser', + slugName: 'javascript-browser', + }, + 'proxy-client-react': { + sidebarName: 'React', + }, + 'proxy-client-svelte': { + sidebarName: 'Svelte', + }, + 'proxy-client-vue': { + sidebarName: 'Vue', + }, + 'unleash-client-nextjs': { + sidebarName: 'Next.js', + slugName: 'next-js', + }, +}; + +const SDKS = (() => { + const serverSide = Object.entries(serverSideSdks).map( + enrichAdditional({ type: SERVER_SIDE_SDK }), + ); + const clientSide = Object.entries(clientSideSdks).map( + enrichAdditional({ type: CLIENT_SIDE_SDK }), + ); + + return Object.fromEntries(serverSide.concat(clientSide)); +})(); + +const getAdmonitions = (sdk) => { + const admonitions = { + [CLIENT_SIDE_SDK]: `To connect to Unleash from a client-side context, you'll need to use the [Unleash front-end API](/reference/front-end-api) ([how do I create an API token?](/how-to/how-to-create-api-tokens.mdx)) or the [Unleash proxy](/reference/unleash-proxy) ([how do I create client keys?](/reference/api-tokens-and-client-keys#proxy-client-keys)).`, + [SERVER_SIDE_SDK]: `To connect to Unleash, you'll need your Unleash API url (e.g. \`https:///api\`) and a [server-side API token](/reference/api-tokens-and-client-keys.mdx#client-tokens) ([how do I create an API token?](/how-to/how-to-create-api-tokens.mdx)).`, + }; + + const wrap = (text) => `:::tip\n${text}\n:::`; + + return [wrap(admonitions[sdk.type])]; +}; + +const modifyContent2 = modifyContent({ + getRepoDataFn: getRepoData(SDKS), + urlPath: '/reference/sdks', + filePath: (sdk) => `sdks/${sdk.type}`, + getAdditionalAdmonitions: getAdmonitions, +}); + +module.exports.sdks = { + urls: getUrls(SDKS), + modifyContent: modifyContent2, +}; diff --git a/website/remote-content/shared.js b/website/remote-content/shared.js new file mode 100644 index 0000000000..5b50480bf8 --- /dev/null +++ b/website/remote-content/shared.js @@ -0,0 +1,150 @@ +const path = require('path'); + +module.exports.mapObject = (fn) => (o) => + Object.fromEntries(Object.entries(o).map(fn)); + +module.exports.enrichAdditional = + (additionalProperties) => + ([repoName, repoData]) => { + const repoUrl = `https://github.com/Unleash/${repoName}`; + const slugName = ( + repoData.slugName ?? repoData.sidebarName + ).toLowerCase(); + const branch = repoData.branch ?? 'main'; + + return [ + repoName, + { ...repoData, repoUrl, slugName, branch, ...additionalProperties }, + ]; + }; +module.exports.enrich = module.exports.enrichAdditional({}); + +module.exports.getRepoData = (documents) => (filename) => { + const repoName = filename.split('/')[0]; + + const repoData = documents[repoName]; + + return { name: repoName, ...repoData }; +}; + +// Replace links in the incoming readme content. +// +// There's one cases we want to handle: +// +// 1. Relative links that point to the repo. These must be prefixed with the +// link to the github repo. +// +// Note: You might be tempted to handle absolute links to docs.getunleash.io and +// make them relative. While absolute links will work, they trigger full page +// refreshes. Relative links give a slightly smoother user experience. +// +// However, if the old link goes to a redirect, then the client-side redirect +// will not kick in, so you'll end up with a "Page not found". +const replaceLinks = ({ content, repo }) => { + const replace = (processRelativeUrl) => (url) => { + try { + // This constructor will throw if the URL is relative. + // https://developer.mozilla.org/en-US/docs/Web/API/URL/URL + new URL(url); + + return url; + } catch { + const separator = url.startsWith('/') ? '' : '/'; + return processRelativeUrl(url, separator); + } + }; + + const replaceMarkdownLink = replace((url, separator) => { + // case 1 + if (url.startsWith('#')) { + // ignore links to other doc sections + return url; + } else { + return `${repo.url}/blob/${repo.branch}${separator}${url}`; + } + }); + + const replaceImageSrcLink = replace((url, separator) => { + return `https://raw.githubusercontent.com/Unleash/${repo.name}/${repo.branch}${separator}${url}`; + }); + + // matches the URL portion of markdown links like [I go here](path/link "comment") + const markdownLink = /(?<=\[.*\]\(\s?)([^\s\)]+)(?=.*\))/g; + + // matches the URL portion of src links that contain an image file type + // extension, e.g. src="./.github/img/get-request.png" + const imageSrcLink = /(?<=src=")([^")]+\.(png|svg|jpe?g|webp|gif))(?=")/g; + + return content + .replaceAll(markdownLink, replaceMarkdownLink) + .replaceAll(imageSrcLink, replaceImageSrcLink); +}; + +module.exports.modifyContent = + ({ + getRepoDataFn, + filePath = () => {}, + urlPath, + getAdditionalAdmonitions, + }) => + (filename, content) => { + const data = getRepoDataFn(filename); + + const generationTime = new Date(); + + const processedFilename = (() => { + const constructed = + path.join(filePath(data) ?? '', data.slugName) + '.md'; + + // ensure the file path does *not* start with a leading / + return constructed.charAt(0) === '/' + ? constructed.slice(1) + : constructed; + })(); + + const processedSlug = (() => { + const constructed = path.join(urlPath ?? '', data.slugName); + // ensure the slug *does* start with a leading / + const prefix = constructed.charAt(0) === '/' ? '' : '/'; + + return prefix + constructed; + })(); + + const additionalAdmonitions = ( + getAdditionalAdmonitions(data) ?? [] + ).join('\n\n'); + + return { + filename: processedFilename, + content: `--- +title: ${data.sidebarName} +slug: ${processedSlug} +--- + +:::info Generated content +This document was generated from the README in the [${ + data.sidebarName + } GitHub repository](${data.repoUrl}). +::: + +${additionalAdmonitions} + +${replaceLinks({ + content, + repo: { url: data.repoUrl, branch: data.branch, name: data.name }, +})} + +--- + +This content was generated on +`, + }; + }; + +module.exports.getUrls = (documents) => + Object.entries(documents).map( + ([repo, { branch }]) => `${repo}/${branch}/README.md`, + ); diff --git a/website/sidebars.js b/website/sidebars.js index 5b475d6c99..f36ca3b5de 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -328,10 +328,11 @@ module.exports = { 'reference/tags', 'reference/technical-debt', 'reference/unleash-context', - 'reference/unleash-proxy', 'reference/change-requests', ], }, + 'generated/unleash-edge', + 'generated/unleash-proxy', ], }, { diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 9919f41ac7..407c9a386f 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -107,6 +107,13 @@ main :is(p, figure) > img:not([src^="https://img.shields.io/" i], [src*="badge.s margin: auto; } +/* mermaid diagrams */ +.docusaurus-mermaid-container { + display: flex; + justify-content: center; + margin-block: calc(1.5 * var(--ifm-spacing-vertical)); +} + [class^='docTitle'] { font-size: 2.5rem !important; } diff --git a/website/static/img/The-Unleash-Proxy-API.png b/website/static/img/The-Unleash-Proxy-API.png deleted file mode 100644 index 8f8ee55453e996ddbe05f1d40dd380f88a5b9d9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66445 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 Nd{mXK{9qRRzW^mR&~g9( diff --git a/website/static/img/The-unleash-proxy.png b/website/static/img/The-unleash-proxy.png deleted file mode 100644 index 1fbb02d09fd931d72d485e1bce5576dceb5564a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41639 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 2.1.2 < 3" -iconv-lite@0.6.3: +iconv-lite@0.6, iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -8405,6 +8688,11 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +"internmap@1 - 2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" + integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== + interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -9210,6 +9498,11 @@ keyv@^4.0.0: dependencies: json-buffer "3.0.1" +khroma@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/khroma/-/khroma-2.0.0.tgz#7577de98aed9f36c7a474c4d453d94c0d6c6588b" + integrity sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -9361,6 +9654,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + lodash.curry@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" @@ -9661,6 +9959,22 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +mermaid@^9.1.1: + version "9.3.0" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-9.3.0.tgz#8bd7c4a44b53e4e85c53a0a474442e9c273494ae" + integrity sha512-mGl0BM19TD/HbU/LmlaZbjBi//tojelg8P/mxD6pPZTAYaI+VawcyBdqRsoUHSc7j71PrMdJ3HBadoQNdvP5cg== + dependencies: + "@braintree/sanitize-url" "^6.0.0" + d3 "^7.0.0" + dagre-d3-es "7.0.6" + dompurify "2.4.1" + khroma "^2.0.0" + lodash-es "^4.17.21" + moment-mini "^2.24.0" + non-layered-tidy-tree-layout "^2.0.2" + stylis "^4.1.2" + uuid "^9.0.0" + methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -10082,6 +10396,11 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +moment-mini@^2.24.0: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment-mini/-/moment-mini-2.29.4.tgz#cbbcdc58ce1b267506f28ea6668dbe060a32758f" + integrity sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg== + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -10285,6 +10604,11 @@ node-releases@^2.0.6: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +non-layered-tidy-tree-layout@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz#57d35d13c356643fc296a55fb11ac15e74da7804" + integrity sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw== + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -12444,6 +12768,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +robust-predicates@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" + integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -12478,6 +12807,11 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rw@1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + rxjs@^7.5.4: version "7.5.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" @@ -13372,6 +13706,11 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" +stylis@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" + integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== + sucrase@^3.21.0: version "3.28.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.28.0.tgz#7fd8b3118d2155fcdf291088ab77fa6eefd63c4c" @@ -14231,6 +14570,11 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + uvu@^0.5.0: version "0.5.6" resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df"