From ce4af35cacb70ca32f03f452606c01d7c1132469 Mon Sep 17 00:00:00 2001 From: Tushar Mathur Date: Wed, 28 Feb 2024 17:46:20 -0500 Subject: [PATCH 01/12] update intro --- docs/getting_started/installation.mdx | 2 +- docs/getting_started/introduction.md | 13 +++++++ docs/guides/context.md | 2 +- docs/intro/_category_.json | 4 -- docs/intro/introduction.md | 52 -------------------------- static/images/docs/architecture.png | Bin 0 -> 239239 bytes 6 files changed, 15 insertions(+), 58 deletions(-) create mode 100644 docs/getting_started/introduction.md delete mode 100644 docs/intro/_category_.json delete mode 100644 docs/intro/introduction.md create mode 100644 static/images/docs/architecture.png diff --git a/docs/getting_started/installation.mdx b/docs/getting_started/installation.mdx index 55ba59b66e..369f1ed8aa 100644 --- a/docs/getting_started/installation.mdx +++ b/docs/getting_started/installation.mdx @@ -1,6 +1,6 @@ --- title: Installation -sidebar_position: 1 +sidebar_position: 2 slug: /getting_started --- diff --git a/docs/getting_started/introduction.md b/docs/getting_started/introduction.md new file mode 100644 index 0000000000..4cbfc7a3a7 --- /dev/null +++ b/docs/getting_started/introduction.md @@ -0,0 +1,13 @@ +--- +title: Introduction +sidebar_position: 1 +slug: / +--- + +Good APIs craft a broad spectrum of functionalities. Yet, the broader their scope, the more they diverge from being the perfect fit for any specific use case. This fundamental discrepancy — the impedance mismatch between the general capabilities of an API and the precise needs of a particular scenario — amplifies the necessity for an orchestration layer. Such a layer adeptly bridges this gap, tailor-fitting generic APIs to meet exact requirements with finesse. Tailcall stands at the forefront of this innovation, seamlessly transforming the way APIs are integrated and interacted with. + +Tailcall introduces a robust DSL (Domain-Specific Language), enabling developers to fine-tune how APIs are orchestrated. This DSL facilitates specifying different caching and batching strategies to enhance the system's efficiency. It also enables precise governance and access control mechanisms. Tailcall serves as a central hub for team collaboration, offering a unified point for managing all APIs, documentation, and more. Once configured, it positions itself between the clients and microservices, adeptly managing all requests and orchestrating them as needed. + +![Architecture Diagram](/images/docs/architecture.png) + +Manually crafting BFF (Backend for Frontend) layers has become outdated. With Tailcall, API orchestration evolves into a streamlined and highly optimized process. It functions as an essential intermediary, intelligently directing requests and assembling responses from each microservice. This approach diminishes the development burden associated with traditional BFF layers but also bolsters performance, reliability, and scalability throughout the application infrastructure. diff --git a/docs/guides/context.md b/docs/guides/context.md index 0534b8aa0d..89dcbaf026 100644 --- a/docs/guides/context.md +++ b/docs/guides/context.md @@ -91,4 +91,4 @@ type Query { Here, `headers.userId` refers to a header called `userId` that should be present in the `context`. The server can use this `userId` to fetch comments for the specified user. -[operator]: /docs/intro/operators +[operator]: /docs/operators diff --git a/docs/intro/_category_.json b/docs/intro/_category_.json deleted file mode 100644 index fa1c06ac80..0000000000 --- a/docs/intro/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Introduction", - "position": 1 -} diff --git a/docs/intro/introduction.md b/docs/intro/introduction.md deleted file mode 100644 index b642ab920c..0000000000 --- a/docs/intro/introduction.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Problem Statement -sidebar_position: 2 -slug: / ---- - -## Traditional API Gateway - -Traditional API Gateways ("TAGs") form the backbone of modern web based application architectures, offering a comprehensive suite of features essential for efficient API management. These gateways handle tasks such as routing, authentication, circuit breaking, caching, logging, monitoring, protocol translation and the list doesn't end! - -API Gateways fail to provide developers with the appropriate abstraction for configuring these capabilities. Typically, a TAG offers primitives based on the underlying protocol (that is, the protocol serving the API). For instance, it allows performing authentication, routing, rate-limiting, etc., based on request headers, URL, or method—all components of the HTTP protocol. This approach occurs because they consider the contents of request and response bodies as simple byte sequences, without examining their actual content. - -Over the years, we have gotten used to consuming and managing APIs this way. Writing our own custom abstractions and sticking it around an existing over the shelf API Gateway. Our personal experience has been that nearly all companies after a certain scale require an abstraction that's specific to their business entities and feel restricted by what the API Gateway can provide. - -## Tailcall API Gateway - -Based on our learnings of writing APIs at massive scale, we believe that the gateway should work around an enterprise's business entities and not the other way round. That is what Tailcall helps you achieve. -Tailcall provides first-class primitives designed to interact with your business entities directly without burdening the developer with the underlying protocol. This approach grants tremendous power and flexibility, transcending protocol constraints and focusing on the nature of the API's data. Let's take the `User` entity as an example: - -```graphql -type User { - id: ID - name: String - email: String - account: Account -} - -type Account { - balance: Float - lastUpdated: Date -} -``` - -Distinct APIs can return the `User` business entity. For example, a `/users` API might deliver the `id`, `name`, and `email`, while a `/accounts/:userId` API could supply the account `balance` and `lastUpdated` for a user. Tailcall's API Gateway enables specifying that requests to access account details require authentication, unlike other requests. - -```graphql -type User { - id: ID - name: String - email: String - account: Account @private -} - -type Account { - balance: Float - lastUpdated: Date -} -``` - -With Tailcall, specifying which parts of an entity should be public or private becomes straightforward, the platform also allows for the obfuscation of fields deemed sensitive or PII in specific contexts. This is all achievable through Tailcall's DSL, which facilitates all these complex operations efficiently and with minimal latency. - -Tailcall's DSL further enhances its capabilities by supporting advanced API Orchestration, moving beyond simple request routing. This feature allows you to outline the desired API structure and guides you in integrating each component within the entity type. For example, consider a transaction API that includes a userId. Traditionally, expanding this userId to access the corresponding user details would involve micro-services. With Tailcall, using its DSL triggers the Tailcall runtime to automatically resolve and populate these details, removing the need for manual coding and making the API management process more efficient. diff --git a/static/images/docs/architecture.png b/static/images/docs/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..7545414f53b78847241706c07bff81ba7ccd9802 GIT binary patch literal 239239 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 literal 0 HcmV?d00001 From f9818f2cfc5a4335badc832d2256e8cd4796bed5 Mon Sep 17 00:00:00 2001 From: neo773 <62795688+neo773@users.noreply.github.com> Date: Thu, 29 Feb 2024 04:56:22 +0530 Subject: [PATCH 02/12] docs: omit operator (#115) * docs: omit operator * fix: add changes * chore: run prettier * fix: add changes * update title * fix: add backlink to modify * fix: typo --------- Co-authored-by: Tushar Mathur --- docs/operators/index.md | 1 + docs/operators/modify.md | 4 ++++ docs/operators/omit.md | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 docs/operators/omit.md diff --git a/docs/operators/index.md b/docs/operators/index.md index b7aa9cdc0d..7d4d406e1c 100644 --- a/docs/operators/index.md +++ b/docs/operators/index.md @@ -19,5 +19,6 @@ Certainly! Here's the table with hyperlinks added back to the operator names: | [@grpc](grpc.md) | Resolves a field or node by a gRPC API. | | [@http](http.md) | Resolves a field or node by a REST API. | | [@modify](modify.md) | Enables changes to attributes of fields or nodes in the schema. | +| [@omit](omit.md) | Excludes fields or nodes from the generated schema, making them inaccessible through the GraphQL API. | | [@server](server.md) | Provides server configurations for behavior tuning and tailcall optimization in specific use-cases. | | [@upstream](upstream.md) | Controls aspects of the upstream server connection, including timeouts and keep-alive settings. | diff --git a/docs/operators/modify.md b/docs/operators/modify.md index 927e14da97..ad36455da7 100644 --- a/docs/operators/modify.md +++ b/docs/operators/modify.md @@ -27,3 +27,7 @@ type User { ``` `@modify(omit: true)` instructs GraphQL to exclude the `id` field from the schema, making it inaccessible to the client. + +:::tip +**@omit** is a standalone operator and is an alias/shorthand for `modify(omit: true)` checkout [documentation](/docs/operators/omit) +::: diff --git a/docs/operators/omit.md b/docs/operators/omit.md new file mode 100644 index 0000000000..d4b7235aed --- /dev/null +++ b/docs/operators/omit.md @@ -0,0 +1,37 @@ +--- +title: "@omit" +--- + +Within a GraphQL schema, the **@omit** operator excludes fields or nodes from the generated schema, making them inaccessible through the GraphQL API. This operator is useful for hiding sensitive information or simplifying your API by removing unnecessary fields. + +## How it works + +When applied to a field or node, the **@omit** operator instructs the Tailcall not to include that field or node in the schema. This means that clients cannot query or mutate data in those fields. + +## Example + +Consider a scenario where you have a `User` type with an embedded `Address` type. If you want to exclude the `Address` type from the schema to simplify the API, you can use the **@omit** operator: + +```graphql showLineNumbers +type Address { + city: String + street: String +} + +type User { + name: String + address: Address @omit +} +``` + +In this example, the `address` field will not be accessible or visible through the GraphQL API. + +## Comparison with `modify` + +The **@omit** operator and `@modify(omit: true)` essentially serve the same purpose in excluding fields from the schema, but they differ in syntax and flexibility. In fact, one can consider **@omit** as a shorthand or alias for the more verbose `@modify(omit: true)`. + +- **@omit** offers a concise way to directly exclude a field or node without additional arguments. + +- `@modify(omit: true)`, as part of the broader **@modify** operator, provides more options, such as field renaming through the `name` argument. This makes it a more flexible choice when you need more than field exclusion. + +For more details on the **@modify** operator and its capabilities, including omitting fields, see the [@modify documentation](/docs/operators/modify#omit). From dd71004854af0d8b227878b9ace797c57e1c0552 Mon Sep 17 00:00:00 2001 From: xonx <119700621+xonx4l@users.noreply.github.com> Date: Thu, 29 Feb 2024 06:58:20 +0530 Subject: [PATCH 03/12] Add:Guide about using HTTP Caching in Tailcall. (#92) * Create HTTP-Caching.md * Update HTTP-Caching.md * Update HTTP-Caching.md * Update HTTP-Caching.md * Update HTTP-Caching.md * chore: update http cache doc --------- Co-authored-by: Tushar Mathur --- .gitignore | 3 ++- docs/guides/http-cache.md | 56 +++++++++++++++++++++++++++++++++++++++ src/css/custom.css | 2 +- 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 docs/guides/http-cache.md diff --git a/.gitignore b/.gitignore index d8df4a5421..2372d9f0bc 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,5 @@ yarn-error.log* .yarn/ .idea/ -src/*/*.json \ No newline at end of file +src/*/*.json +.vscode/ diff --git a/docs/guides/http-cache.md b/docs/guides/http-cache.md new file mode 100644 index 0000000000..4477df0106 --- /dev/null +++ b/docs/guides/http-cache.md @@ -0,0 +1,56 @@ +--- +title: Http Cache +description: A comprehensive guide to leverage HTTP cache for REST APIs using Tailcall +--- + +HTTP Caching in Tailcall is designed to enhance performance and minimize the frequency of requests to upstream services by caching HTTP responses. This guide explains the concept, benefits, and how to effectively implement HTTP caching within Tailcall. + +### Understanding HTTP Caching + +HTTP Caching involves saving copies of HTTP responses to serve identical future requests directly from the cache, bypassing the need for new API calls. This reduces latency, conserves bandwidth, and alleviates the load on upstream services by utilizing a cache keyed by request URLs and headers. + +By default, HTTP caching is turned off in Tailcall. Enabling it requires setting the `httpCache` parameter to `true` in the `@upstream` configuration. Tailcall employs a in-memory _Least_Recently_Used_ (LRU) cache mechanism to manage stored responses, adhering to upstream-provided caching directives like `Cache-Control` to optimize the caching process and minimize redundant upstream API requests. + +### Enabling HTTP Caching + +To activate HTTP caching, adjust the upstream configuration in Tailcall by setting `httpCache` to `true`, as shown in the following example: + +```graphql +schema + @server(port: 4000) + @upstream( + baseURL: "https://api.example.com" + # highlight-start + httpCache: true + # highlight-end + ) { + query: Query +} +``` + +This configuration instructs Tailcall to cache responses from the designated upstream API. + +### Cache-Control headers in responses + +Enabling the `cacheControlHeader` setting in Tailcall ensures that [Cache-Control] headers are included in the responses returned to clients. When activated, Tailcall dynamically sets the `max-age` directive in the `Cache-Control` header to the minimum `max-age` value encountered in any of the responses from upstream services. This approach guarantees that the caching duration for the composite response is conservative, aligning with the shortest cache validity period provided by the upstream services. By default, this feature is disabled (`false`), meaning Tailcall will not modify or add `Cache-Control` headers unless explicitly instructed to do so. This setting is distinct from the general HTTP cache setting, which controls whether responses are cached internally by Tailcall; `cacheControlHeader` specifically controls the caching instructions sent to clients. + +Here is how you can enable the `cacheControlHeader` setting within your Tailcall schema to apply these caching instructions: + +```graphql +schema @server(cacheControlHeader: true) { + query: Query + mutation: Mutation +} +``` + +[cache-control]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control + +### Best Practices for Enhancing REST API Performance with Tailcall + +The combination of `httpCache` and `cacheControlHeader` provides a comprehensive caching solution. While `httpCache` focuses on internal caching to reduce the impact of high latency and frequent requests, `cacheControlHeader` manages client-side caching policies, ensuring an optimal balance between performance, data freshness, and efficient resource use. + +These caching primitives are beneficial for REST APIs that are latency-sensitive, have a high rate of request repetition, or come with explicit caching headers indicating cacheable responses. Together, they tackle the common challenges of optimizing REST API performance by minimizing unnecessary network traffic and server load while ensuring response accuracy. + +To further enhance the performance of any API with Tailcall, integrating the [@cache] directive offers protocol agnostic control over caching at the field level within a GraphQL schema. + +[@cache]: /docs/operators/cache.md diff --git a/src/css/custom.css b/src/css/custom.css index 99436b8554..61437a1fcd 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -55,7 +55,7 @@ } code { - border: none; + border: 1px solid #eee; letter-spacing: 0.00001px; vertical-align: baseline; } From 99dd92a3954851a040d4e5bb6b9442f2a031739b Mon Sep 17 00:00:00 2001 From: Tushar Mathur Date: Wed, 28 Feb 2024 21:05:49 -0500 Subject: [PATCH 04/12] update home page --- src/components/home/Configuration.tsx | 197 ++++++++++++++++++++++++-- 1 file changed, 186 insertions(+), 11 deletions(-) diff --git a/src/components/home/Configuration.tsx b/src/components/home/Configuration.tsx index 9241db7e39..ce1b40246e 100644 --- a/src/components/home/Configuration.tsx +++ b/src/components/home/Configuration.tsx @@ -1,6 +1,8 @@ import React from "react" import Heading from "@theme/Heading" import CodeBlock from "@theme/CodeBlock" +import Tabs from "@theme/Tabs" +import TabItem from "@theme/TabItem" import Link from "@docusaurus/Link" const Configuration = (): JSX.Element => { @@ -17,10 +19,29 @@ const Configuration = (): JSX.Element => {
npm i -g @tailcallhq/tailcall - - {`# app.graphql -schema + + {CodeTabItem({code: GRAPHQL_CONFIG, language: "graphql"})} + {CodeTabItem({code: YML_CONFIG, language: "yaml"})} + {CodeTabItem({code: JSON_CONFIG, language: "json"})} + +
+ + ) +} + +const CodeTabItem = ({code, language}: {code: string; language: "json" | "yaml" | "graphql"}) => ( + + + {code} + + tailcall start ./app.{language} + +) + +export default Configuration + +const GRAPHQL_CONFIG = `schema @server(port: 8000, graphiql: true) @upstream(baseURL: "http://jsonplaceholder.typicode.com") { query: Query @@ -48,12 +69,166 @@ type Post { # Expand a post with user information user: User @http(path: "/users/{{value.userId}}") } - `} - - tailcall start ./app.graphql - - - ) -} +` -export default Configuration +const YML_CONFIG = `server: + graphiql: true + port: 8000 +upstream: + baseURL: http://jsonplaceholder.typicode.com +schema: + query: Query +types: + Post: + fields: + body: + type: String + required: true + cache: null + id: + type: Int + required: true + cache: null + title: + type: String + required: true + cache: null + user: + type: User + http: + path: /users/{{value.userId}} + cache: null + userId: + type: Int + required: true + cache: null + cache: null + Query: + fields: + posts: + type: Post + list: true + http: + path: /posts + cache: null + users: + type: User + list: true + http: + path: /users + cache: null + cache: null + User: + fields: + email: + type: String + required: true + cache: null + id: + type: Int + required: true + cache: null + name: + type: String + required: true + cache: null + username: + type: String + required: true + cache: null + cache: null +` + +const JSON_CONFIG = `{ + "server": { + "graphiql": true, + "port": 8000 + }, + "upstream": { + "baseURL": "http://jsonplaceholder.typicode.com" + }, + "schema": { + "query": "Query" + }, + "types": { + "Post": { + "fields": { + "body": { + "type": "String", + "required": true, + "cache": null + }, + "id": { + "type": "Int", + "required": true, + "cache": null + }, + "title": { + "type": "String", + "required": true, + "cache": null + }, + "user": { + "type": "User", + "http": { + "path": "/users/{{value.userId}}" + }, + "cache": null + }, + "userId": { + "type": "Int", + "required": true, + "cache": null + } + }, + "cache": null + }, + "Query": { + "fields": { + "posts": { + "type": "Post", + "list": true, + "http": { + "path": "/posts" + }, + "cache": null + }, + "users": { + "type": "User", + "list": true, + "http": { + "path": "/users" + }, + "cache": null + } + }, + "cache": null + }, + "User": { + "fields": { + "email": { + "type": "String", + "required": true, + "cache": null + }, + "id": { + "type": "Int", + "required": true, + "cache": null + }, + "name": { + "type": "String", + "required": true, + "cache": null + }, + "username": { + "type": "String", + "required": true, + "cache": null + } + }, + "cache": null + } + } +} +` From 542c618339649b769d51d65e19c26cc0ed5278ec Mon Sep 17 00:00:00 2001 From: Tushar Mathur Date: Wed, 28 Feb 2024 22:12:26 -0500 Subject: [PATCH 05/12] drop operator composition --- docs/guides/client-tuning.md | 3 +- docs/guides/operator-composition.md | 53 ----------------------------- 2 files changed, 2 insertions(+), 54 deletions(-) delete mode 100644 docs/guides/operator-composition.md diff --git a/docs/guides/client-tuning.md b/docs/guides/client-tuning.md index d8b94a24d0..54fd3f7b9d 100644 --- a/docs/guides/client-tuning.md +++ b/docs/guides/client-tuning.md @@ -1,5 +1,6 @@ --- -title: Tuning Client for Performance +title: Client Tuning +description: Tuning client for performance --- ### HTTP (Hypertext Transfer Protocol) diff --git a/docs/guides/operator-composition.md b/docs/guides/operator-composition.md deleted file mode 100644 index c8d81e0941..0000000000 --- a/docs/guides/operator-composition.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Operator Composition" ---- - -# Composition - -You can combine operators to create new and powerful transformations. - -This example demonstrates the concept of composition in GraphQL, allowing the combination of operations (known as "operators") to construct more complex data transformations. - -The given schema is defining two data types - `User` and `Post`. The `User` type has fields `id` and `name`, and the `Post` type initially has fields `user` and `userId`. - -```graphql showLineNumbers -type User { - id: Int - name: String -} - -type Post @addField(name: "userName", path: ["user", "name"]) { - user: User @modify(omit: true) @http(path: "/users/{{userId}}") - userId: Int! -} -``` - -It uses a series of operators to modify the `user` field. - -1. The `@addField(name: "userName", path: ["user", "name"])` operator extracts the `name` field from `user` and adds a field called `userName` to the `Post` - -2. The `@modify(omit: true)` operator removes the `user` field from the final Schema. - -3. The `@http(path: "/users/{{userId}}")` operator instructs the resolver to make an HTTP request to fetch the user data from a specified path (i.e., `/users/{{userId}}`), with `{{userId}}` serving as a placeholder that the system replaces with the actual `userId` upon making the request. - -The schema after this transformation looks like this: - -```graphql showLineNumbers -type User { - id: Int - name: String -} - -type Post { - userName: String - userId: Int! -} -``` - -We've used composition of operators to take a complex object (the `User` inside the `Post`), extract a specific part of it (`name`), name that part (`userName`), and then instruct GraphQL how to fetch the data using an HTTP request. - -:::info -It's important to note that the order of the operators `@modify` and `@http` doesn't matter. The resulting schema will always be the same. -::: - -This is a powerful mechanism that allows you to make your GraphQL schema more precise, easier to understand, and more suitable for the specific needs of your application. From 2cb8741f07ee5151d7d372dd076627d5ae60be6c Mon Sep 17 00:00:00 2001 From: Ravan <69167444+RamK777-stack@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:23:58 +0530 Subject: [PATCH 06/12] feat: Added email validation (#122) * feat: Added email validation * style: lint & minor tweek --------- Co-authored-by: Ram Co-authored-by: amit --- src/components/contact/Hello.tsx | 17 ++++++++++++++--- src/utils/index.ts | 5 +++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/components/contact/Hello.tsx b/src/components/contact/Hello.tsx index b9cbc84999..e3d57908ad 100644 --- a/src/components/contact/Hello.tsx +++ b/src/components/contact/Hello.tsx @@ -3,15 +3,20 @@ import Heading from "@theme/Heading" import toast, {Toaster} from "react-hot-toast" import Grid from "@site/static/images/about/grid-large.svg" import LinkButton from "../shared/LinkButton" -import {analyticsHandler} from "@site/src/utils" +import {analyticsHandler, validateEmail} from "@site/src/utils" import {Theme, radioOptions, zapierLink} from "@site/src/constants" const Hello = (): JSX.Element => { const [email, setEmail] = useState("") const [message, setMessage] = useState("") const [stage, setStage] = useState("") + const [isValid, setIsValid] = useState(true) const sendData = useCallback(async () => { + if (!validateEmail(email)) { + setIsValid(false) + return + } const response = await fetch(zapierLink, { method: "POST", body: JSON.stringify({ @@ -31,6 +36,7 @@ const Hello = (): JSX.Element => { setEmail("") setMessage("") setStage("") + setIsValid(true) } }, [email, message, stage]) @@ -56,10 +62,15 @@ const Hello = (): JSX.Element => { name="email" type="email" value={email} - onChange={(e) => setEmail(e.target.value)} - className="border border-solid border-tailCall-border-light-500 rounded-lg font-space-grotesk h-11 w-[95%] sm:w-[480px] p-SPACE_03 text-content-small outline-none focus:border-x-tailCall-light-700" + onChange={(e) => { + setEmail(e.target.value) + if (!isValid) setIsValid(true) + }} + className={`border border-solid border-tailCall-border-light-500 rounded-lg font-space-grotesk h-11 w-[95%] sm:w-[480px] + p-SPACE_03 text-content-small outline-none focus:border-x-tailCall-light-700 ${isValid ? "is-valid" : "is-invalid"}`} placeholder="you@company.com" /> + {!isValid &&
Please enter a valid email.
}
diff --git a/src/utils/index.ts b/src/utils/index.ts index 54b0fc01da..28e61c85e4 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -19,3 +19,8 @@ export const setBodyOverflow = (value: "initial" | "hidden") => { export const getSearchInputRef = () => { return document.getElementById("search_input_react") } + +export const validateEmail = (email: string) => { + const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ + return regex.test(email) +} From 84b452da5a4e3ef9d315983b21b10ad15a3bac9f Mon Sep 17 00:00:00 2001 From: Jay Kumar <70096901+35C4n0r@users.noreply.github.com> Date: Sat, 2 Mar 2024 13:44:17 +0530 Subject: [PATCH 07/12] fix: fix layout width (#120) * fix: fix layout width * fix: fix scaling of LottieContainer Signed-off-by: Jay * fix: remove scaling odf LottieContainer Signed-off-by: Jay * lint fixes --------- Signed-off-by: Jay Co-authored-by: Tushar Mathur --- src/components/home/Configuration.tsx | 6 +++++- src/components/home/LegacyGateway.tsx | 6 +----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/home/Configuration.tsx b/src/components/home/Configuration.tsx index ce1b40246e..7c74c7cad6 100644 --- a/src/components/home/Configuration.tsx +++ b/src/components/home/Configuration.tsx @@ -32,7 +32,11 @@ const Configuration = (): JSX.Element => { const CodeTabItem = ({code, language}: {code: string; language: "json" | "yaml" | "graphql"}) => ( - + {code} tailcall start ./app.{language} diff --git a/src/components/home/LegacyGateway.tsx b/src/components/home/LegacyGateway.tsx index 26c90abe47..0927f42366 100644 --- a/src/components/home/LegacyGateway.tsx +++ b/src/components/home/LegacyGateway.tsx @@ -32,11 +32,7 @@ const LegacyGateway = (): JSX.Element => {
- +
) From d9fabd6b51a0a9c641a6a957247cdd930d910bae Mon Sep 17 00:00:00 2001 From: neo773 <62795688+neo773@users.noreply.github.com> Date: Sat, 2 Mar 2024 17:50:00 +0530 Subject: [PATCH 08/12] docs: add link operator (#126) * docs: add link operator * fix: add minor change * fix: prettier and write-good * fix: add changes * fix: backlink path * chore: prettier * fix: backlink path for real * update link * update note --------- Co-authored-by: Tushar Mathur --- docs/operators/index.md | 1 + docs/operators/link.md | 68 ++++++++++++++++++++++++++++++++ src/components/contact/Hello.tsx | 4 +- 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 docs/operators/link.md diff --git a/docs/operators/index.md b/docs/operators/index.md index 7d4d406e1c..c8879c1de1 100644 --- a/docs/operators/index.md +++ b/docs/operators/index.md @@ -18,6 +18,7 @@ Certainly! Here's the table with hyperlinks added back to the operator names: | [@graphQL](graphql.md) | Resolves a field or node by a GraphQL API. | | [@grpc](grpc.md) | Resolves a field or node by a gRPC API. | | [@http](http.md) | Resolves a field or node by a REST API. | +| [@link](link.md) | Imports external resources such as config files, certs, protobufs, etc in the schema. | | [@modify](modify.md) | Enables changes to attributes of fields or nodes in the schema. | | [@omit](omit.md) | Excludes fields or nodes from the generated schema, making them inaccessible through the GraphQL API. | | [@server](server.md) | Provides server configurations for behavior tuning and tailcall optimization in specific use-cases. | diff --git a/docs/operators/link.md b/docs/operators/link.md new file mode 100644 index 0000000000..f060eba9ec --- /dev/null +++ b/docs/operators/link.md @@ -0,0 +1,68 @@ +--- +title: "@link" +--- + +The **@link** operator is used for bringing external resources into your GraphQL schema. It makes it easier to include configurations, .proto files for gRPC services, and other files into your schema. With this operator, external resources are either merged with or used effectively in the importing configuration. + +## How it Works + +The `@link` directive requires specifying a source `src`, the resource's type `type`, and an optional identifier `id`. + +- `src`: The source of the link is defined here. It can be either a URL or a file path. When a file path is given, it's relative to the file's location that is importing the link. + +- `type`: This specifies the link's type, which determines how the imported resource is integrated into the schema. For a list of supported types, see the [Supported Types](#supported-types) section. + +- `id`: This is an optional field that assigns a unique identifier to the link. It's helpful for referring to the link within the schema. + +## Example + +The following example illustrates how to utilize the `@link` directive to incorporate a Protocol Buffers (.proto) file for a gRPC service into your GraphQL schema. + +```graphql showLineNumbers +schema + @server(port: 8000, graphiql: true) + @upstream(baseURL: "http://news.local", httpCache: true, batch: {delay: 10}) + @link(id: "news", src: "../src/grpc/news.proto", type: Protobuf) { + query: Query +} + +type Query { + news: NewsData! @grpc(method: "news.NewsService.GetAllNews") +} + +type News { + id: Int + title: String + body: String + postImage: String +} + +type NewsData { + news: [News]! +} +``` + +## Supported Types + +The `@link` directive supports the following types of links: + +- `Config`: Imports a schema configuration file. During the merge, settings from the imported file override those in the main schema for any overlaps, facilitating a modular and scalable approach to schema configuration. The operation is morally equivalent to tailcall's [compose](/docs/guides/cli.md#compose) command. + +- `Protobuf`: Imports a .proto file for gRPC services. This type facilitates the integration of gRPC services into your GraphQL schema by allowing the inclusion of Protocol Buffers definitions. It enables the GraphQL server to communicate with gRPC services directly. For integrating gRPC services, refer to [gRPC Integration Guide](/docs/guides/grpc.md). + +- `Script`: A link to an external JavaScript file that listens on every HTTP request response event. This allows for the execution of custom logic or filters based on the request and response. Example usage: + + ```javascript showLineNumbers + function onRequest({request}) { + // Add a custom header for all outgoing responses + request.headers["X-Custom-Header"] = "Processed" + + // Return the updated request + return {request} + } + ``` + +- `Cert`: Imports a SSL/TLS certificate for HTTPS. +- `Key`: Imports a SSL/TLS private key for HTTPS. + +Each type serves a specific purpose, enabling the flexible integration of external resources into your GraphQL schema. diff --git a/src/components/contact/Hello.tsx b/src/components/contact/Hello.tsx index e3d57908ad..a8e5e84834 100644 --- a/src/components/contact/Hello.tsx +++ b/src/components/contact/Hello.tsx @@ -67,7 +67,9 @@ const Hello = (): JSX.Element => { if (!isValid) setIsValid(true) }} className={`border border-solid border-tailCall-border-light-500 rounded-lg font-space-grotesk h-11 w-[95%] sm:w-[480px] - p-SPACE_03 text-content-small outline-none focus:border-x-tailCall-light-700 ${isValid ? "is-valid" : "is-invalid"}`} + p-SPACE_03 text-content-small outline-none focus:border-x-tailCall-light-700 ${ + isValid ? "is-valid" : "is-invalid" + }`} placeholder="you@company.com" /> {!isValid &&
Please enter a valid email.
} From 81922f9697ce3f08afbfda3e8dfc2f78e1c0b129 Mon Sep 17 00:00:00 2001 From: Tushar Mathur Date: Tue, 5 Mar 2024 13:17:20 +0530 Subject: [PATCH 09/12] update format --- docs/operators/const.md | 90 +++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 43 deletions(-) diff --git a/docs/operators/const.md b/docs/operators/const.md index c453e8cca3..a33d203b15 100644 --- a/docs/operators/const.md +++ b/docs/operators/const.md @@ -4,48 +4,52 @@ title: "@const" The `@const` directive in GraphQL is a powerful tool for embedding data directly into your schema, offering two primary functionalities: -1. **Static Response**: This feature allows for the inclusion of a constant response within the schema definition itself. It is useful for scenarios where the response is static and unchanging. e.g: - - ```graphql - schema { - query: Query - } - - type Query { - user: User @const(data: {name: "John", age: 12}) - } - - type User { - name: String - age: Int - } - ``` - - The const operator also checks the provided value at compile time to ensure it matches the field's schema. If not, the console displays a descriptive error message. - -2. **Dynamic Template**: Beyond static data embedding, the `@const` directive extends its utility to support dynamic data injection through Mustache template syntax. This feature enables the use of placeholders within the constant data, which are then dynamically replaced with actual values at runtime. It supports both scalar values and complex objects, including lists and nested objects, offering flexibility in tailoring responses to specific needs. e.g: - - ```graphql - schema { - query: Query - } - - type Query { - user: User @const(data: {name: "John", workEmail: "john@xyz.com", personalEmail: "john@xyz.com"}) - } - - type User { - name: String - age: Int - personalEmail: String - workEmail: String - emails: Emails @const(data: {emails: {workEmail: "{{value.workEmail}}", personalEmail: "{{value.personalEmail}}"}}) - } - - type Emails { - workEmail: String - personalEmail: String - } - ``` +## Static + +This feature allows for the inclusion of a constant response within the schema definition itself. It is useful for scenarios where the response is unchanging. e.g: + +```graphql +schema { + query: Query +} + +type Query { + user: User @const(data: {name: "John", age: 12}) +} + +type User { + name: String + age: Int +} +``` + +The const operator also checks the provided value at compile time to ensure it matches the field's schema. If not, the console displays a descriptive error message. + +## Dynamic + +Beyond static data embedding, the `@const` directive extends its utility to support dynamic data injection through Mustache template syntax. This feature enables the use of placeholders within the constant data, which are then dynamically replaced with actual values at runtime. It supports both scalar values and complex objects, including lists and nested objects, offering flexibility in tailoring responses to specific needs. e.g: + +```graphql +schema { + query: Query +} + +type Query { + user: User @const(data: {name: "John", workEmail: "john@xyz.com", personalEmail: "john@xyz.com"}) +} + +type User { + name: String + age: Int + personalEmail: String + workEmail: String + emails: Emails @const(data: {emails: {workEmail: "{{value.workEmail}}", personalEmail: "{{value.personalEmail}}"}}) +} + +type Emails { + workEmail: String + personalEmail: String +} +``` In this example, the `@const` directive dynamically generate an `Emails` object based on the provided template data. The placeholders within the template (`{{value.workEmail}}` and `{{value.personalEmail}}`) gets replaced with the actual values specified in the `User` type, allowing for dynamic content generation while still adhering to the schema's structure. From 8221a0fc292727be6dd90b246a0bac4350b1bece Mon Sep 17 00:00:00 2001 From: Tushar Mathur Date: Tue, 5 Mar 2024 20:44:40 +0530 Subject: [PATCH 10/12] update docs --- docs/operators/graphql.md | 2 -- docs/operators/grpc.md | 14 +++++--------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/docs/operators/graphql.md b/docs/operators/graphql.md index 132746451b..cd962270b1 100644 --- a/docs/operators/graphql.md +++ b/docs/operators/graphql.md @@ -2,8 +2,6 @@ title: "@graphQL" --- -## @graphQL - The **@graphQL** operator allows to specify GraphQL API server request to fetch data from. ```graphql showLineNumbers diff --git a/docs/operators/grpc.md b/docs/operators/grpc.md index 524aa564a8..1c44a54617 100644 --- a/docs/operators/grpc.md +++ b/docs/operators/grpc.md @@ -16,8 +16,6 @@ type Query { This schema snippet demonstrates the directive's application, where a query for `users` triggers a gRPC request to the `UserService`'s `ListUsers` method, thereby fetching the user data. -## Understanding the Proto File Structure - The `.proto` file delineates the structure and methods of the gRPC service. A simplified example of such a file is as follows: ```proto @@ -61,9 +59,7 @@ schema @link(src: "./users.proto", type: Protobuf) { Tailcall automatically resolves the protobuf file for any methods referenced in the `@grpc` directive. -### Directive Parameters - -#### `method` +## method This parameter specifies the gRPC service and method to be invoked, formatted as `..`: @@ -73,7 +69,7 @@ type Query { } ``` -#### `baseURL` +## baseURL Defines the base URL for the gRPC API. If not specified, the URL set in the `@upstream` directive is used by default: @@ -83,7 +79,7 @@ type Query { } ``` -#### `body` +## body This parameter outlines the arguments for the gRPC call, allowing for both static and dynamic inputs: @@ -97,7 +93,7 @@ type Query { } ``` -#### `headers` +## headers Custom headers for the gRPC request can be defined, facilitating the transmission of authentication tokens or other contextual data: @@ -108,7 +104,7 @@ type Query { } ``` -#### `groupBy` +## groupBy This argument is employed to optimize batch requests by grouping them based on specified response keys, enhancing performance in scenarios requiring multiple, similar requests: From 9bb9216ba7dc9c2e8c45911443cec3cba2a1ad6b Mon Sep 17 00:00:00 2001 From: Amit Singh Date: Wed, 6 Mar 2024 14:20:44 +0530 Subject: [PATCH 11/12] doc: update request using javascript (#112) * doc: update request using javascript * doc: grammer * style: lint * doc: update as per new changes * style: fmt * update docs * update file name --------- Co-authored-by: Tushar Mathur --- docs/guides/http-filters.md | 100 ++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/guides/http-filters.md diff --git a/docs/guides/http-filters.md b/docs/guides/http-filters.md new file mode 100644 index 0000000000..bfb7755a64 --- /dev/null +++ b/docs/guides/http-filters.md @@ -0,0 +1,100 @@ +--- +title: HTTP Filters +description: Modify upstream requests and responses using Javascript +--- + +Tailcall provides a light-weight JS runtime to modify requests and resolve with custom responses. +The runtime is not a full-fledged Node.js environment and has no access to the file system or the network. It is designed to be used for simple request/response modifications. + +## Getting Started + +To leverage this functionality, a JavaScript function named `onRequest` must be created in a `worker.js` file. This function serves as middleware, allowing for the interception and modification of the request. Here is a simple example of a `worker.js` file that logs the request and returns the original request without any modifications. + +```javascript +function onRequest({request}) { + console.log(`${request.method} ${request.url}`) + + return {request} +} +``` + +Once you have a worker file ready, you link that file to the tailcall configuration using the [@link] operator. + +[@link]: /docs/operators/link + +```graphql +schema @link(type: Script, src: "./worker.js") { + query: Query +} +``` + +Once the worker is linked, you can start the server using the usual [start] command. Making requests to tailcall will now be intercepted by the worker and logged to the console. + +[start]: /docs/guides/cli/#start + +## Modify Request + +You can modify the request by returning a `request` object from the `onRequest` function. Below is an example where we are modifying the request to add a custom header. + +```javascript +function onRequest({request}) { + request.headers["x-custom-header"] = "Hello, Tailcall!" + + return {request} +} +``` + +## Create Response + +You can respond with custom responses by returning a `response` object from the `onRequest` function. Below is an example where we are responding with a custom response for all requests that start with `https://api.example.com`. + +```javascript +function onRequest({request}) { + if (request.url.startsWith("https://api.example.com")) { + return { + response: { + status: 200, + headers: { + "content-type": "application/json" + }, + body: JSON.stringify({message: "Hello, Tailcall!"}) + } + } + } + else { + return {request} + } +``` + +## Schema + +The `onRequest` function takes a single argument that contains the request object. The return value of the `onRequest` function can be a `request` object, or a `response` object. It can not be null or undefined. + +**Request** + +The request object has the following shape: + +```typescript +type Request = { + method: string + url: string + headers: {[key: string]: string} + body?: string +} +``` + +:::important +The http filter doesn't have access to the request's body. However the modified request that's returned can optionally have the body. +::: + +**Response** + +The response object has the following shape: + +```typescript +type Response = { + status: number + headers: {[key: string]: string} + body?: string +} +``` From 04a408196d5e3cad1ea8ad5fac73819089598e88 Mon Sep 17 00:00:00 2001 From: Tushar Mathur Date: Wed, 6 Mar 2024 14:22:29 +0530 Subject: [PATCH 12/12] update doc --- docs/guides/http-filters.md | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/docs/guides/http-filters.md b/docs/guides/http-filters.md index bfb7755a64..6907b2c93e 100644 --- a/docs/guides/http-filters.md +++ b/docs/guides/http-filters.md @@ -66,6 +66,31 @@ function onRequest({request}) { } ``` +## Response Redirect + +Sometimes you might want to redirect the request to a different URL. You can do this by returning a `response` object with a `status` of `301` or `302` and a `Location` header. The following example redirects all requests to `https://example.com` to `https://tailcall.com`. + +```javascript +function onRequest({request}) { + if (request.url.startsWith("https://example.com")) { + return { + response: { + status: 301, + headers: { + Location: "https://tailcall.com", + }, + }, + } + } else { + return {request} + } +} +``` + +:::important +The new request that's created as a result of the redirect will not be intercepted by the worker. +::: + ## Schema The `onRequest` function takes a single argument that contains the request object. The return value of the `onRequest` function can be a `request` object, or a `response` object. It can not be null or undefined. @@ -83,9 +108,7 @@ type Request = { } ``` -:::important -The http filter doesn't have access to the request's body. However the modified request that's returned can optionally have the body. -::: +The http filter doesn't have access to the request's body. However the modified request that's returned can optionally provide the body. **Response**