diff --git a/.github/workflows/registry-updates-prod.yaml b/.github/workflows/registry-updates-prod.yaml
new file mode 100644
index 00000000..32e8d71e
--- /dev/null
+++ b/.github/workflows/registry-updates-prod.yaml
@@ -0,0 +1,60 @@
+name: Update Hub DB from GH Registry (prod)
+
+on:
+ push:
+ branches:
+ - main
+ paths:
+ - registry/**
+
+jobs:
+ update_registry_db:
+ runs-on: ubuntu-latest
+ environment: production
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+ with:
+ fetch_depth: 1
+
+ - name: Get all connector version package changes
+ id: connector-version-changed-files
+ uses: tj-actions/changed-files@v44
+ with:
+ json: true
+ escape_json: false
+ files: |
+ registry/**
+
+ - name: Print out all the changed filse
+ env:
+ ADDED_FILES: ${{ steps.connector-version-changed-files.outputs.added_files }}
+ MODIFIED_FILES: ${{ steps.connector-version-changed-files.outputs.modified_files }}
+ DELETED_FILES: ${{ steps.connector-version-changed-files.outputs.deleted_files }}
+ run: |
+ echo "{\"added_files\": $ADDED_FILES, \"modified_files\": $MODIFIED_FILES, \"deleted_files\": $DELETED_FILES}" > changed_files.json
+
+ - name: List changed files
+ id: list_files
+ run: |
+ cat changed_files.json
+
+ - name: Setup Go
+ uses: actions/setup-go@v4
+ with:
+ go-version: 1.21.x
+
+ - name: Run registry automation program
+ env:
+ CHANGED_FILES_PATH: "changed_files.json"
+ PUBLICATION_ENV: "production"
+ CONNECTOR_REGISTRY_GQL_URL: ${{ secrets.CONNECTOR_REGISTRY_GQL_URL }}
+ GCP_BUCKET_NAME: ${{ secrets.GCP_BUCKET_NAME }}
+ GCP_SERVICE_ACCOUNT_DETAILS: ${{ secrets.GCP_SERVICE_ACCOUNT_DETAILS }}
+ CONNECTOR_PUBLICATION_KEY: ${{ secrets.CONNECTOR_PUBLICATION_KEY }}
+ CLOUDINARY_URL: ${{ secrets.CLOUDINARY_URL }}
+ run: |
+ mv changed_files.json registry-automation/changed_files.json
+ cd registry-automation
+ go run main.go ci
diff --git a/.github/workflows/registry-updates.yaml b/.github/workflows/registry-updates.yaml
new file mode 100644
index 00000000..fd0a6afe
--- /dev/null
+++ b/.github/workflows/registry-updates.yaml
@@ -0,0 +1,83 @@
+name: Update Hub DB from GH Registry (Staging)
+
+on:
+ pull_request_target:
+ branches:
+ - main
+ types: [opened, synchronize, reopened]
+ paths:
+ - registry/**
+
+jobs:
+ update_registry_db:
+ runs-on: ubuntu-latest
+ environment: staging
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+ with:
+ # In the case of forked PRs, the forked repository will
+ # be checked out.
+ ref: ${{github.event.pull_request.head.ref}}
+ repository: ${{github.event.pull_request.head.repo.full_name}}
+ fetch-depth: 1
+
+ - name: Check for PR approvals
+ id: check-approval
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const { owner, repo } = context.issue;
+ const pull_number = context.payload.pull_request.number;
+ console.log("Owner and repo and pull_number", owner, repo, pull_number);
+ const { data: reviews } = await github.rest.pulls.listReviews({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ pull_number: context.payload.pull_request.number,
+ });
+ const approved = reviews.some(review => review.state === 'APPROVED');
+ if (!approved) {
+ core.setFailed('This workflow will only run when the PR is approved by someone in Hasura')
+ }
+
+ - name: Get all connector version package changes
+ id: connector-version-changed-files
+ uses: tj-actions/changed-files@v44
+ with:
+ json: true
+ escape_json: false
+ files: |
+ registry/**
+
+ - name: Print out all the changed filse
+ env:
+ ADDED_FILES: ${{ steps.connector-version-changed-files.outputs.added_files }}
+ MODIFIED_FILES: ${{ steps.connector-version-changed-files.outputs.modified_files }}
+ DELETED_FILES: ${{ steps.connector-version-changed-files.outputs.deleted_files }}
+ run: |
+ echo "{\"added_files\": $ADDED_FILES, \"modified_files\": $MODIFIED_FILES, \"deleted_files\": $DELETED_FILES}" > changed_files.json
+
+ - name: List changed files
+ id: list_files
+ run: |
+ cat changed_files.json
+
+ - name: Setup Go
+ uses: actions/setup-go@v4
+ with:
+ go-version: 1.21.x
+
+ - name: Run registry automation program
+ env:
+ CHANGED_FILES_PATH: "changed_files.json"
+ PUBLICATION_ENV: "staging"
+ CONNECTOR_REGISTRY_GQL_URL: ${{ secrets.CONNECTOR_REGISTRY_GQL_URL }}
+ GCP_BUCKET_NAME: ${{ secrets.GCP_BUCKET_NAME }}
+ GCP_SERVICE_ACCOUNT_DETAILS: ${{ secrets.GCP_SERVICE_ACCOUNT_DETAILS }}
+ CONNECTOR_PUBLICATION_KEY: ${{ secrets.CONNECTOR_PUBLICATION_KEY }}
+ CLOUDINARY_URL: ${{ secrets.CLOUDINARY_URL }}
+ run: |
+ mv changed_files.json registry-automation/changed_files.json
+ cd registry-automation
+ go run main.go ci
diff --git a/.gitignore b/.gitignore
index e15b2a27..0d856277 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
# testing
/tmp/empty
+registry-automation/extracted_tgz
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 261eeb9e..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/README.md b/README.md
index 8e798367..c617d1ef 100644
--- a/README.md
+++ b/README.md
@@ -40,3 +40,4 @@ implementation][NDC reference].
[NDC specification]: http://hasura.github.io/ndc-spec/
[NDC reference]: https://github.com/hasura/ndc-spec/tree/main/ndc-reference
+
diff --git a/registry-automation/README.md b/registry-automation/README.md
new file mode 100644
index 00000000..2c0d4852
--- /dev/null
+++ b/registry-automation/README.md
@@ -0,0 +1,38 @@
+# Introduction
+
+## Steps to runs
+
+1. Consider the following `changed_files.json` file:
+```json
+
+{
+ "added_files": [
+ "registry/hasura/azure-cosmos/releases/v0.1.6/connector-packaging.json"
+ ],
+ "modified_files": [
+ "registry/hasura/azure-cosmos/metadata.json"
+ ],
+ "deleted_files": []
+}
+```
+
+2. You will require the following environment variables:
+
+1. GCP_BUCKET_NAME
+2. CLOUDINARY_URL
+3. GCP_SERVICE_ACCOUNT_KEY
+4. CONNECTOR_REGISTRY_GQL_URL
+5. CONNECTOR_PUBLICATION_KEY
+6. GCP_SERVICE_ACCOUNT_DETAILS
+
+
+
+```bash
+
+
+2. Run the following command from the `registry-automation` directory:
+
+
+```bash
+go run main.go ci --changed-files-path changed_files.json
+```
diff --git a/registry-automation/cmd/ci.go b/registry-automation/cmd/ci.go
new file mode 100644
index 00000000..e6c38895
--- /dev/null
+++ b/registry-automation/cmd/ci.go
@@ -0,0 +1,699 @@
+package cmd
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "fmt"
+ "io"
+ "log"
+ "os"
+ "regexp"
+
+ "cloud.google.com/go/storage"
+ "github.com/cloudinary/cloudinary-go/v2"
+ "github.com/cloudinary/cloudinary-go/v2/api/uploader"
+ "github.com/machinebox/graphql"
+ "github.com/spf13/cobra"
+ "google.golang.org/api/option"
+)
+
+// ciCmd represents the ci command
+var ciCmd = &cobra.Command{
+ Use: "ci",
+ Short: "Run the CI workflow for hub registry publication",
+ Run: runCI,
+}
+
+var ciCmdArgs ConnectorRegistryArgs
+
+func init() {
+ rootCmd.AddCommand(ciCmd)
+
+ // Path for the changed files in the PR
+ var changedFilesPathEnv = os.Getenv("CHANGED_FILES_PATH")
+ ciCmd.PersistentFlags().StringVar(&ciCmdArgs.ChangedFilesPath, "changed-files-path", changedFilesPathEnv, "path to a line-separated list of changed files in the PR")
+ if changedFilesPathEnv == "" {
+ ciCmd.MarkPersistentFlagRequired("changed-files-path")
+ }
+
+ // Publication environment
+ var publicationEnv = os.Getenv("PUBLICATION_ENV")
+ ciCmd.PersistentFlags().StringVar(&ciCmdArgs.PublicationEnv, "publication-env", publicationEnv, "publication environment (staging/prod). Default: staging")
+ // default publicationEnv to "staging"
+ if publicationEnv == "" {
+ ciCmd.PersistentFlags().Set("publication-env", "staging")
+ }
+
+}
+
+func buildContext() Context {
+ // Connector registry Hasura GraphQL URL
+ registryGQLURL := os.Getenv("CONNECTOR_REGISTRY_GQL_URL")
+ var registryGQLClient *graphql.Client
+ var storageClient *storage.Client
+ var cloudinaryClient *cloudinary.Cloudinary
+ var cloudinaryWrapper *CloudinaryWrapper
+ var storageWrapper *StorageClientWrapper
+
+ if registryGQLURL == "" {
+ log.Fatalf("CONNECTOR_REGISTRY_GQL_URL is not set")
+ } else {
+ ciCmdArgs.ConnectorRegistryGQLUrl = registryGQLURL
+ registryGQLClient = graphql.NewClient(registryGQLURL)
+ }
+
+ // Connector publication key
+ connectorPublicationKey := os.Getenv("CONNECTOR_PUBLICATION_KEY")
+ if connectorPublicationKey == "" {
+ log.Fatalf("CONNECTOR_PUBLICATION_KEY is not set")
+ } else {
+ ciCmdArgs.ConnectorPublicationKey = connectorPublicationKey
+ }
+
+ // GCP service account details
+ gcpServiceAccountDetails := os.Getenv("GCP_SERVICE_ACCOUNT_DETAILS")
+ if gcpServiceAccountDetails == "" {
+ log.Fatalf("GCP_SERVICE_ACCOUNT_DETAILS is not set")
+ } else {
+ var err error
+ storageClient, err = storage.NewClient(context.Background(), option.WithCredentialsJSON([]byte(gcpServiceAccountDetails)))
+ if err != nil {
+ log.Fatalf("Failed to create Google bucket client: %v", err)
+ }
+ defer storageClient.Close()
+
+ storageWrapper = &StorageClientWrapper{storageClient}
+
+ ciCmdArgs.GCPServiceAccountDetails = gcpServiceAccountDetails
+ }
+
+ // GCP bucket name
+ gcpBucketName := os.Getenv("GCP_BUCKET_NAME")
+ if gcpBucketName == "" {
+ log.Fatalf("GCP_BUCKET_NAME is not set")
+ } else {
+ ciCmdArgs.GCPBucketName = gcpBucketName
+ }
+
+ cloudinaryUrl := os.Getenv("CLOUDINARY_URL")
+
+ if cloudinaryUrl == "" {
+ log.Fatalf("CLOUDINARY_URL is not set")
+ } else {
+ var err error
+ cloudinaryClient, err = cloudinary.NewFromURL(cloudinaryUrl)
+ if err != nil {
+ log.Fatalf("Failed to create cloudinary client: %v", err)
+
+ }
+ cloudinaryWrapper = &CloudinaryWrapper{cloudinaryClient}
+
+ }
+
+ return Context{
+ Env: ciCmdArgs.PublicationEnv,
+ RegistryGQLClient: registryGQLClient,
+ StorageClient: storageWrapper,
+ Cloudinary: cloudinaryWrapper,
+ }
+
+}
+
+type fileProcessor struct {
+ regex *regexp.Regexp
+ process func(matches []string, file string)
+}
+
+// processChangedFiles categorizes changes in connector files within a registry system.
+// It handles new and modified files including metadata, logos, READMEs, and connector versions.
+//
+// The function takes a ChangedFiles struct containing slices of added and modified filenames,
+// and returns a ProcessedChangedFiles struct with categorized changes.
+//
+// Files are processed based on their path and type:
+// - metadata.json: New connectors
+// - logo.(png|svg): New or modified logos
+// - README.md: New or modified READMEs
+// - connector-packaging.json: New connector versions
+//
+// Any files not matching these patterns are logged as skipped.
+//
+// Example usage:
+//
+// changedFiles := ChangedFiles{
+// Added: []string{"registry/namespace1/connector1/metadata.json"},
+// Modified: []string{"registry/namespace2/connector2/README.md"},
+// }
+// result := processChangedFiles(changedFiles)
+func processChangedFiles(changedFiles ChangedFiles) ProcessedChangedFiles {
+ result := ProcessedChangedFiles{
+ NewConnectorVersions: make(map[Connector]map[string]string),
+ ModifiedLogos: make(map[Connector]string),
+ ModifiedReadmes: make(map[Connector]string),
+ NewConnectors: make(map[Connector]MetadataFile),
+ NewLogos: make(map[Connector]string),
+ NewReadmes: make(map[Connector]string),
+ }
+
+ processors := []fileProcessor{
+ {
+ regex: regexp.MustCompile(`^registry/([^/]+)/([^/]+)/metadata.json$`),
+ process: func(matches []string, file string) {
+ // IsNew is set to true because we are processing newly added metadata.json
+ connector := Connector{Name: matches[2], Namespace: matches[1]}
+ result.NewConnectors[connector] = MetadataFile(file)
+ fmt.Printf("Processing metadata file for connector: %s\n", connector.Name)
+ },
+ },
+ {
+ regex: regexp.MustCompile(`^registry/([^/]+)/([^/]+)/logo\.(png|svg)$`),
+ process: func(matches []string, file string) {
+ connector := Connector{Name: matches[2], Namespace: matches[1]}
+ result.NewLogos[connector] = file
+ fmt.Printf("Processing logo file for connector: %s\n", connector.Name)
+ },
+ },
+ {
+ regex: regexp.MustCompile(`^registry/([^/]+)/([^/]+)/README\.md$`),
+ process: func(matches []string, file string) {
+ connector := Connector{Name: matches[2], Namespace: matches[1]}
+ result.NewReadmes[connector] = file
+ fmt.Printf("Processing README file for connector: %s\n", connector.Name)
+ },
+ },
+ {
+ regex: regexp.MustCompile(`^registry/([^/]+)/([^/]+)/releases/([^/]+)/connector-packaging\.json$`),
+ process: func(matches []string, file string) {
+ connector := Connector{Name: matches[2], Namespace: matches[1]}
+ version := matches[3]
+ if _, exists := result.NewConnectorVersions[connector]; !exists {
+ result.NewConnectorVersions[connector] = make(map[string]string)
+ }
+ result.NewConnectorVersions[connector][version] = file
+ },
+ },
+ }
+
+ processFile := func(file string, isModified bool) {
+ for _, processor := range processors {
+ if matches := processor.regex.FindStringSubmatch(file); matches != nil {
+ if isModified {
+ connector := Connector{Name: matches[2], Namespace: matches[1]}
+ if processor.regex.String() == processors[1].regex.String() {
+ result.ModifiedLogos[connector] = file
+ } else if processor.regex.String() == processors[2].regex.String() {
+ result.ModifiedReadmes[connector] = file
+ }
+ } else {
+ processor.process(matches, file)
+ }
+ return
+ }
+ }
+ fmt.Printf("Skipping %s file: %s\n", map[bool]string{true: "modified", false: "newly added"}[isModified], file)
+ }
+
+ for _, file := range changedFiles.Added {
+ processFile(file, false)
+ }
+
+ for _, file := range changedFiles.Modified {
+ processFile(file, true)
+ }
+
+ return result
+}
+
+func processNewConnector(ciCtx Context, connector Connector, metadataFile MetadataFile) (ConnectorOverviewInsert, HubRegistryConnectorInsertInput, error) {
+ // Process the newly added connector
+ // Get the string value from metadataFile
+ var connectorOverviewAndAuthor ConnectorOverviewInsert
+ var hubRegistryConnectorInsertInput HubRegistryConnectorInsertInput
+
+ connectorMetadata, err := readJSONFile[ConnectorMetadata](string(metadataFile))
+ if err != nil {
+ return connectorOverviewAndAuthor, hubRegistryConnectorInsertInput, fmt.Errorf("Failed to parse the connector metadata file: %v", err)
+ }
+
+ docs, err := readFile(fmt.Sprintf("registry/%s/%s/README.md", connector.Namespace, connector.Name))
+
+ if err != nil {
+
+ return connectorOverviewAndAuthor, hubRegistryConnectorInsertInput, fmt.Errorf("Failed to read the README file of the connector: %s : %v", connector.Name, err)
+ }
+
+ logoPath := fmt.Sprintf("registry/%s/%s/logo.png", connector.Namespace, connector.Name)
+
+ uploadedLogoUrl, err := uploadLogoToCloudinary(ciCtx.Cloudinary, Connector{Name: connector.Name, Namespace: connector.Namespace}, logoPath)
+ if err != nil {
+ return connectorOverviewAndAuthor, hubRegistryConnectorInsertInput, err
+ }
+
+ // Get connector info from the registry
+ connectorInfo, err := getConnectorInfoFromRegistry(ciCtx.RegistryGQLClient, connector.Name, connector.Namespace)
+ if err != nil {
+ return connectorOverviewAndAuthor, hubRegistryConnectorInsertInput,
+ fmt.Errorf("Failed to get the connector info from the registry: %v", err)
+ }
+
+ // Check if the connector already exists in the registry
+ if len(connectorInfo.HubRegistryConnector) > 0 {
+ if ciCtx.Env == "staging" {
+ fmt.Printf("Connector already exists in the registry: %s/%s\n", connector.Namespace, connector.Name)
+ fmt.Println("The connector is going to be overwritten in the registry.")
+
+ } else {
+
+ return connectorOverviewAndAuthor, hubRegistryConnectorInsertInput, fmt.Errorf("Attempting to create a new hub connector, but the connector already exists in the registry: %s/%s", connector.Namespace, connector.Name)
+ }
+
+ }
+
+ hubRegistryConnectorInsertInput = HubRegistryConnectorInsertInput{
+ Name: connector.Name,
+ Namespace: connector.Namespace,
+ Title: connectorMetadata.Overview.Title,
+ }
+
+ connectorOverviewAndAuthor = ConnectorOverviewInsert{
+ Name: connector.Name,
+ Namespace: connector.Namespace,
+ Docs: string(docs),
+ Logo: uploadedLogoUrl,
+ Title: connectorMetadata.Overview.Title,
+ Description: connectorMetadata.Overview.Description,
+ IsVerified: connectorMetadata.IsVerified,
+ IsHosted: connectorMetadata.IsHostedByHasura,
+ Author: ConnectorAuthorNestedInsert{
+ Data: ConnectorAuthor{
+ Name: connectorMetadata.Author.Name,
+ SupportEmail: connectorMetadata.Author.SupportEmail,
+ Website: connectorMetadata.Author.Homepage,
+ },
+ },
+ }
+
+ return connectorOverviewAndAuthor, hubRegistryConnectorInsertInput, nil
+}
+
+// runCI is the main function that runs the CI workflow
+func runCI(cmd *cobra.Command, args []string) {
+ ctx := buildContext()
+ changedFilesContent, err := os.Open(ciCmdArgs.ChangedFilesPath)
+ if err != nil {
+ log.Fatalf("Failed to open the file: %v, err: %v", ciCmdArgs.ChangedFilesPath, err)
+ }
+ defer changedFilesContent.Close()
+
+ // Read the changed file's contents. This file contains all the changed files in the PR
+ changedFilesByteValue, err := io.ReadAll(changedFilesContent)
+ if err != nil {
+ log.Fatalf("Failed to read the changed files JSON file: %v", err)
+ }
+
+ var changedFiles ChangedFiles
+ err = json.Unmarshal(changedFilesByteValue, &changedFiles)
+ if err != nil {
+ log.Fatalf("Failed to unmarshal the changed files content: %v", err)
+
+ }
+
+ // Separate the modified files according to the type of file
+
+ // Collect the added or modified connectors
+ processChangedFiles := processChangedFiles(changedFiles)
+
+ newlyAddedConnectorVersions := processChangedFiles.NewConnectorVersions
+ modifiedLogos := processChangedFiles.ModifiedLogos
+ modifiedReadmes := processChangedFiles.ModifiedReadmes
+
+ newlyAddedConnectors := processChangedFiles.NewConnectors
+
+ var newConnectorsToBeAdded NewConnectorsInsertInput
+ newConnectorsToBeAdded.HubRegistryConnectors = make([]HubRegistryConnectorInsertInput, 0)
+ newConnectorsToBeAdded.ConnectorOverviews = make([]ConnectorOverviewInsert, 0)
+ newConnectorOverviewsToBeAdded := make([](ConnectorOverviewInsert), 0)
+ hubRegistryConnectorsToBeAdded := make([](HubRegistryConnectorInsertInput), 0)
+ connectorOverviewUpdates := make([]ConnectorOverviewUpdate, 0)
+ newConnectorVersionsToBeAdded := make([]ConnectorVersion, 0)
+
+ if len(newlyAddedConnectors) > 0 {
+ fmt.Println("New connectors to be added to the registry: ", newlyAddedConnectors)
+
+ for connector, metadataFile := range newlyAddedConnectors {
+ connectorOverviewAndAuthor, hubRegistryConnector, err := processNewConnector(ctx, connector, metadataFile)
+
+ if err != nil {
+ log.Fatalf("Failed to process the new connector: %s/%s, Error: %v", connector.Namespace, connector.Name, err)
+ }
+ newConnectorOverviewsToBeAdded = append(newConnectorOverviewsToBeAdded, connectorOverviewAndAuthor)
+ hubRegistryConnectorsToBeAdded = append(hubRegistryConnectorsToBeAdded, hubRegistryConnector)
+
+ }
+
+ newConnectorsToBeAdded.HubRegistryConnectors = hubRegistryConnectorsToBeAdded
+ newConnectorsToBeAdded.ConnectorOverviews = newConnectorOverviewsToBeAdded
+
+ }
+
+ if len(newlyAddedConnectorVersions) > 0 {
+ newlyAddedConnectors := make(map[Connector]bool)
+ for connector := range newlyAddedConnectorVersions {
+ newlyAddedConnectors[connector] = true
+ }
+ newConnectorVersionsToBeAdded = processNewlyAddedConnectorVersions(ctx, newlyAddedConnectorVersions, newlyAddedConnectors)
+ }
+
+ if len(modifiedReadmes) > 0 {
+ readMeUpdates, err := processModifiedReadmes(modifiedReadmes)
+ if err != nil {
+ log.Fatalf("Failed to process the modified READMEs: %v", err)
+ }
+ connectorOverviewUpdates = append(connectorOverviewUpdates, readMeUpdates...)
+ fmt.Println("Successfully updated the READMEs in the registry.")
+ }
+
+ if len(modifiedLogos) > 0 {
+ logoUpdates, err := processModifiedLogos(modifiedLogos, ctx.Cloudinary)
+ if err != nil {
+ log.Fatalf("Failed to process the modified logos: %v", err)
+ }
+ connectorOverviewUpdates = append(connectorOverviewUpdates, logoUpdates...)
+ fmt.Println("Successfully updated the logos in the registry.")
+ }
+
+ if ctx.Env == "production" {
+ err = registryDbMutation(ctx.RegistryGQLClient, newConnectorsToBeAdded, connectorOverviewUpdates, newConnectorVersionsToBeAdded)
+
+ } else if ctx.Env == "staging" {
+ err = registryDbMutationStaging(ctx.RegistryGQLClient, newConnectorsToBeAdded, connectorOverviewUpdates, newConnectorVersionsToBeAdded)
+ } else {
+ log.Fatalf("Unexpected: invalid publication environment: %s", ctx.Env)
+ }
+
+ if err != nil {
+ log.Fatalf("Failed to update the registry: %v", err)
+ }
+
+ fmt.Println("Successfully processed the changed files in the PR")
+}
+
+func uploadLogoToCloudinary(cloudinary CloudinaryInterface, connector Connector, logoPath string) (string, error) {
+ logoContent, err := readFile(logoPath)
+ if err != nil {
+ fmt.Printf("Failed to read the logo file: %v", err)
+ return "", err
+ }
+
+ imageReader := bytes.NewReader(logoContent)
+
+ uploadResult, err := cloudinary.Upload(context.Background(), imageReader, uploader.UploadParams{
+ PublicID: fmt.Sprintf("%s-%s", connector.Namespace, connector.Name),
+ Format: "png",
+ })
+ if err != nil {
+ return "", fmt.Errorf("Failed to upload the logo to cloudinary for the connector: %s, Error: %v\n", connector.Name, err)
+ }
+ return uploadResult.SecureURL, nil
+}
+
+func processModifiedLogos(modifiedLogos ModifiedLogos, cloudinaryClient CloudinaryInterface) ([]ConnectorOverviewUpdate, error) {
+ // Iterate over the modified logos and update the logos in the registry
+ var connectorOverviewUpdates []ConnectorOverviewUpdate
+
+ for connector, logoPath := range modifiedLogos {
+ // open the logo file
+ uploadedLogoUrl, err := uploadLogoToCloudinary(cloudinaryClient, connector, logoPath)
+ if err != nil {
+ return connectorOverviewUpdates, err
+ }
+
+ var connectorOverviewUpdate ConnectorOverviewUpdate
+
+ if connectorOverviewUpdate.Set.Logo == nil {
+ connectorOverviewUpdate.Set.Logo = new(string)
+ } else {
+ *connectorOverviewUpdate.Set.Logo = ""
+ }
+
+ *connectorOverviewUpdate.Set.Logo = uploadedLogoUrl
+
+ connectorOverviewUpdate.Where.ConnectorName = connector.Name
+ connectorOverviewUpdate.Where.ConnectorNamespace = connector.Namespace
+
+ connectorOverviewUpdates = append(connectorOverviewUpdates, connectorOverviewUpdate)
+
+ }
+
+ return connectorOverviewUpdates, nil
+
+}
+
+func processModifiedReadmes(modifiedReadmes ModifiedReadmes) ([]ConnectorOverviewUpdate, error) {
+ // Iterate over the modified READMEs and update the READMEs in the registry
+ var connectorOverviewUpdates []ConnectorOverviewUpdate
+
+ for connector, readmePath := range modifiedReadmes {
+ // open the README file
+ readmeContent, err := readFile(readmePath)
+ if err != nil {
+ return connectorOverviewUpdates, err
+
+ }
+
+ readMeContentString := string(readmeContent)
+
+ var connectorOverviewUpdate ConnectorOverviewUpdate
+ connectorOverviewUpdate.Set.Docs = &readMeContentString
+
+ connectorOverviewUpdate.Where.ConnectorName = connector.Name
+ connectorOverviewUpdate.Where.ConnectorNamespace = connector.Namespace
+
+ connectorOverviewUpdates = append(connectorOverviewUpdates, connectorOverviewUpdate)
+
+ }
+
+ return connectorOverviewUpdates, nil
+
+}
+
+func processNewlyAddedConnectorVersions(ciCtx Context, newlyAddedConnectorVersions NewConnectorVersions, newConnectorsAdded map[Connector]bool) []ConnectorVersion {
+ // Iterate over the added or modified connectors and upload the connector versions
+ var connectorVersions []ConnectorVersion
+ var uploadConnectorVersionErr error
+ encounteredError := false
+
+ for connectorName, versions := range newlyAddedConnectorVersions {
+ for version, connectorVersionPath := range versions {
+ var connectorVersion ConnectorVersion
+ isNewConnector := newConnectorsAdded[connectorName]
+ connectorVersion, uploadConnectorVersionErr = uploadConnectorVersionPackage(ciCtx, connectorName, version, connectorVersionPath, isNewConnector)
+
+ if uploadConnectorVersionErr != nil {
+ fmt.Printf("Error while processing version and connector: %s - %s, Error: %v", version, connectorName, uploadConnectorVersionErr)
+ encounteredError = true
+ break
+ }
+ connectorVersions = append(connectorVersions, connectorVersion)
+ }
+ if encounteredError {
+ break
+ }
+ }
+
+ if encounteredError {
+ // attempt to cleanup the uploaded connector versions
+ _ = cleanupUploadedConnectorVersions(ciCtx.StorageClient, connectorVersions) // ignore errors while cleaning up
+ // delete the uploaded connector versions from the registry
+ log.Fatalf("Failed to upload the connector version: %v", uploadConnectorVersionErr)
+ }
+
+ fmt.Println("Successfully added connector versions to the registry.")
+
+ return connectorVersions
+
+}
+
+func cleanupUploadedConnectorVersions(client StorageClientInterface, connectorVersions []ConnectorVersion) error {
+ // Iterate over the connector versions and delete the uploaded files
+ // from the google bucket
+ fmt.Println("Cleaning up the uploaded connector versions")
+
+ for _, connectorVersion := range connectorVersions {
+ objectName := generateGCPObjectName(connectorVersion.Namespace, connectorVersion.Name, connectorVersion.Version)
+ err := deleteFile(client, ciCmdArgs.GCPBucketName, objectName)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// uploadConnectorVersionPackage uploads the connector version package to the registry
+func uploadConnectorVersionPackage(ciCtx Context, connector Connector, version string, changedConnectorVersionPath string, isNewConnector bool) (ConnectorVersion, error) {
+
+ var connectorVersion ConnectorVersion
+
+ // connector version's metadata, `registry/mongodb/releases/v1.0.0/connector-packaging.json`
+ connectorVersionPackagingInfo, err := readJSONFile[map[string]interface{}](changedConnectorVersionPath) // Read metadata file
+ if err != nil {
+ return connectorVersion, fmt.Errorf("failed to read the connector packaging file: %v", err)
+ }
+ // Fetch, parse, and reupload the TGZ
+ tgzUrl, ok := connectorVersionPackagingInfo["uri"].(string)
+
+ // Check if the TGZ URL is valid
+ if !ok || tgzUrl == "" {
+ return connectorVersion, fmt.Errorf("invalid or undefined TGZ URL: %v", tgzUrl)
+ }
+
+ connectorVersionMetadata, connectorMetadataTgzPath, err := getConnectorVersionMetadata(tgzUrl, connector, version)
+ if err != nil {
+ return connectorVersion, err
+ }
+
+ uploadedTgzUrl, err := uploadConnectorVersionDefinition(ciCtx, connector.Namespace, connector.Name, version, connectorMetadataTgzPath)
+ if err != nil {
+ return connectorVersion, fmt.Errorf("failed to upload the connector version definition - connector: %v version:%v - err: %v", connector.Name, version, err)
+ } else {
+ // print success message with the name of the connector and the version
+ fmt.Printf("Successfully uploaded the connector version definition in google cloud registry for the connector: %v version: %v\n", connector.Name, version)
+ }
+
+ // Build payload for registry upsert
+ return buildRegistryPayload(ciCtx, connector.Namespace, connector.Name, version, connectorVersionMetadata, uploadedTgzUrl, isNewConnector)
+}
+
+func uploadConnectorVersionDefinition(ciCtx Context, connectorNamespace, connectorName string, connectorVersion string, connectorMetadataTgzPath string) (string, error) {
+ bucketName := ciCmdArgs.GCPBucketName
+ objectName := generateGCPObjectName(connectorNamespace, connectorName, connectorVersion)
+ uploadedTgzUrl, err := uploadFile(ciCtx.StorageClient, bucketName, objectName, connectorMetadataTgzPath)
+
+ if err != nil {
+ return "", err
+ }
+ return uploadedTgzUrl, nil
+}
+
+// Downloads the TGZ File from the URL specified by `tgzUrl`, extracts the TGZ file and returns the content of the
+// connector-definition.yaml present in the .hasura-connector folder.
+func getConnectorVersionMetadata(tgzUrl string, connector Connector, connectorVersion string) (map[string]interface{}, string, error) {
+ var connectorVersionMetadata map[string]interface{}
+ tgzPath, err := getTempFilePath("extracted_tgz")
+ if err != nil {
+ return connectorVersionMetadata, "", fmt.Errorf("failed to get the temp file path: %v", err)
+ }
+ err = downloadFile(tgzUrl, tgzPath, map[string]string{})
+
+ if err != nil {
+ return connectorVersionMetadata, "", fmt.Errorf("failed to download the connector version metadata file from the URL: %v - err: %v", tgzUrl, err)
+ }
+
+ extractedTgzFolderPath := "extracted_tgz"
+
+ if _, err := os.Stat(extractedTgzFolderPath); os.IsNotExist(err) {
+ err := os.Mkdir(extractedTgzFolderPath, 0755)
+ if err != nil {
+ return connectorVersionMetadata, "", fmt.Errorf("failed to read the connector version metadata file: %v", err)
+ }
+ }
+
+ connectorVersionMetadataYamlFilePath, err := extractTarGz(tgzPath, extractedTgzFolderPath+"/"+connector.Namespace+"/"+connector.Name+"/"+connectorVersion)
+ if err != nil {
+ return connectorVersionMetadata, "", fmt.Errorf("failed to read the connector version metadata file: %v", err)
+ } else {
+ fmt.Println("Extracted metadata file at :", connectorVersionMetadataYamlFilePath)
+ }
+
+ connectorVersionMetadata, err = readYAMLFile(connectorVersionMetadataYamlFilePath)
+ if err != nil {
+ return connectorVersionMetadata, "", fmt.Errorf("failed to read the connector version metadata file: %v", err)
+ }
+ return connectorVersionMetadata, tgzPath, nil
+}
+
+// buildRegistryPayload builds the payload for the registry upsert API
+func buildRegistryPayload(
+ ciCtx Context,
+ connectorNamespace string,
+ connectorName string,
+ version string,
+ connectorVersionMetadata map[string]interface{},
+ uploadedConnectorDefinitionTgzUrl string,
+ isNewConnector bool,
+) (ConnectorVersion, error) {
+ var connectorVersion ConnectorVersion
+ var connectorVersionDockerImage string = ""
+ connectorVersionPackagingDefinition, ok := connectorVersionMetadata["packagingDefinition"].(map[interface{}]interface{})
+ if !ok {
+ return connectorVersion, fmt.Errorf("could not find the 'packagingDefinition' of the connector %s version %s in the connector's metadata", connectorName, version)
+ }
+ connectorVersionPackagingType, ok := connectorVersionPackagingDefinition["type"].(string)
+
+ if !ok && (connectorVersionPackagingType == ManagedDockerBuild || connectorVersionPackagingType == PrebuiltDockerImage) {
+ return connectorVersion, fmt.Errorf("invalid or undefined connector type: %v", connectorVersionPackagingDefinition)
+ } else if connectorVersionPackagingType == PrebuiltDockerImage {
+ connectorVersionDockerImage, ok = connectorVersionPackagingDefinition["dockerImage"].(string)
+ if !ok {
+ return connectorVersion, fmt.Errorf("could not find the 'dockerImage' of the PrebuiltDockerImage connector %s version %s in the connector's metadata", connectorName, version)
+ }
+
+ }
+
+ connectorInfo, err := getConnectorInfoFromRegistry(ciCtx.RegistryGQLClient, connectorNamespace, connectorName)
+
+ if err != nil {
+ return connectorVersion, err
+ }
+
+ var isMultitenant bool
+
+ // Check if the connector exists in the registry first
+ if len(connectorInfo.HubRegistryConnector) == 0 {
+
+ if isNewConnector {
+ isMultitenant = false
+ } else {
+ return connectorVersion, fmt.Errorf("Unexpected: Couldn't get the connector info of the connector: %s", connectorName)
+
+ }
+
+ } else {
+ if len(connectorInfo.HubRegistryConnector) == 1 {
+ // check if the connector is multitenant
+ isMultitenant = connectorInfo.HubRegistryConnector[0].MultitenantConnector != nil
+
+ }
+
+ }
+
+ var connectorVersionType string
+
+ if connectorVersionPackagingType == PrebuiltDockerImage {
+ // Note: The connector version type is set to `PreBuiltDockerImage` if the connector version is of type `PrebuiltDockerImage`, this is a HACK because this value might be removed in the future and we might not even need to insert new connector versions in the `hub_registry_connector_version` table.
+ connectorVersionType = "PreBuiltDockerImage"
+ } else {
+ connectorVersionType = ManagedDockerBuild
+ }
+
+ var connectorVersionImage *string
+
+ if connectorVersionDockerImage == "" {
+ connectorVersionImage = nil
+ } else {
+ connectorVersionImage = &connectorVersionDockerImage
+ }
+
+ connectorVersion = ConnectorVersion{
+ Namespace: connectorNamespace,
+ Name: connectorName,
+ Version: version,
+ Image: connectorVersionImage,
+ PackageDefinitionURL: uploadedConnectorDefinitionTgzUrl,
+ IsMultitenant: isMultitenant,
+ Type: connectorVersionType,
+ }
+
+ return connectorVersion, nil
+}
diff --git a/registry-automation/cmd/ci_test.go b/registry-automation/cmd/ci_test.go
new file mode 100644
index 00000000..2b160f8a
--- /dev/null
+++ b/registry-automation/cmd/ci_test.go
@@ -0,0 +1,230 @@
+package cmd
+
+import (
+ "context"
+
+ "testing"
+
+ "github.com/machinebox/graphql"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/mock"
+
+ "cloud.google.com/go/storage"
+
+ "github.com/cloudinary/cloudinary-go/v2/api/uploader"
+)
+
+// Mock structures
+type MockStorageClient struct {
+ mock.Mock
+}
+
+func (m *MockStorageClient) Bucket(name string) *storage.BucketHandle {
+ args := m.Called(name)
+ return args.Get(0).(*storage.BucketHandle)
+}
+
+type MockCloudinaryUploader struct {
+ mock.Mock
+}
+
+type MockCloudinary struct {
+ mock.Mock
+}
+
+func (m *MockCloudinary) Upload(ctx context.Context, file interface{}, uploadParams uploader.UploadParams) (*uploader.UploadResult, error) {
+ args := m.Called(ctx, file, uploadParams)
+ return args.Get(0).(*uploader.UploadResult), args.Error(1)
+}
+
+type MockGraphQLClient struct {
+ mock.Mock
+}
+
+func (m *MockGraphQLClient) Run(ctx context.Context, query *graphql.Request, resp interface{}) error {
+ args := m.Called(ctx, query, resp)
+ return args.Error(0)
+}
+
+func createTestContext() Context {
+ return Context{
+ Env: "staging",
+ RegistryGQLClient: &MockGraphQLClient{},
+ StorageClient: &MockStorageClient{},
+ Cloudinary: &MockCloudinary{},
+ }
+}
+
+// Test processChangedFiles
+func TestProcessChangedFiles(t *testing.T) {
+ testCases := []struct {
+ name string
+ changedFiles ChangedFiles
+ expected ProcessedChangedFiles
+ }{
+ {
+ name: "New connector added",
+ changedFiles: ChangedFiles{
+ Added: []string{"registry/namespace1/connector1/metadata.json"},
+ },
+ expected: ProcessedChangedFiles{
+ NewConnectorVersions: map[Connector]map[string]string{},
+ ModifiedLogos: map[Connector]string{},
+ ModifiedReadmes: map[Connector]string{},
+ NewConnectors: map[Connector]MetadataFile{{Name: "connector1", Namespace: "namespace1"}: "registry/namespace1/connector1/metadata.json"},
+ NewLogos: map[Connector]string{},
+ NewReadmes: map[Connector]string{},
+ },
+ },
+ {
+ name: "Modified logo and README",
+ changedFiles: ChangedFiles{
+ Modified: []string{
+ "registry/namespace1/connector1/logo.png",
+ "registry/namespace1/connector1/README.md",
+ },
+ },
+ expected: ProcessedChangedFiles{
+ NewConnectorVersions: map[Connector]map[string]string{},
+ ModifiedLogos: map[Connector]string{{Name: "connector1", Namespace: "namespace1"}: "registry/namespace1/connector1/logo.png"},
+ ModifiedReadmes: map[Connector]string{{Name: "connector1", Namespace: "namespace1"}: "registry/namespace1/connector1/README.md"},
+ NewConnectors: map[Connector]MetadataFile{},
+ NewLogos: map[Connector]string{},
+ NewReadmes: map[Connector]string{},
+ },
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ result := processChangedFiles(tc.changedFiles)
+ assert.Equal(t, tc.expected, result)
+ })
+ }
+}
+
+// func TestProcessNewConnector(t *testing.T) {
+// ctx := createTestContext()
+// connector := Connector{Name: "testconnector", Namespace: "testnamespace"}
+
+// // Create a temporary directory for our test files
+// tempDir, err := os.MkdirTemp("", "connector-test")
+// assert.NoError(t, err)
+// defer os.RemoveAll(tempDir) // Clean up after the test
+
+// // Set up the directory structure
+// registryDir := filepath.Join(tempDir, "registry", connector.Namespace, connector.Name)
+// err = os.MkdirAll(registryDir, 0755)
+// assert.NoError(t, err)
+
+// // Create the metadata file
+// metadataFile := filepath.Join(registryDir, "metadata.json")
+// tempMetadata := []byte(`{"overview": {"title": "Test Connector", "description": "A test connector"}, "isVerified": true, "isHostedByHasura": false, "author": {"name": "Test Author", "supportEmail": "support@test.com", "homepage": "https://test.com"}}`)
+// err = os.WriteFile(metadataFile, tempMetadata, 0666)
+// assert.NoError(t, err)
+
+// // Create the README file
+// readmeFile := filepath.Join(registryDir, "README.md")
+// err = os.WriteFile(readmeFile, []byte("# Test Connector"), 0644)
+// assert.NoError(t, err)
+
+// // Mock the necessary functions and API calls
+// mockCloudinaryUploader := &MockCloudinaryUploader{}
+// mockCloudinaryUploader.On("Upload", mock.Anything, mock.Anything, mock.Anything).Return(&uploader.UploadResult{SecureURL: "https://res.cloudinary.com/demo/image/upload/logo.png"}, nil)
+
+// mockGraphQLClient := ctx.RegistryGQLClient.(*MockGraphQLClient)
+// mockGraphQLClient.On("Run", mock.Anything, mock.Anything, mock.Anything).Return(nil)
+
+// // Run the function
+// connectorOverviewInsert, hubRegistryConnectorInsert, err := processNewConnector(ctx, connector, MetadataFile(metadataFile))
+
+// // Assert the results
+// assert.NoError(t, err)
+// assert.Equal(t, "testconnector", connectorOverviewInsert.Name)
+// assert.Equal(t, "testnamespace", connectorOverviewInsert.Namespace)
+// assert.Equal(t, "Test Connector", connectorOverviewInsert.Title)
+// assert.Equal(t, "A test connector", connectorOverviewInsert.Description)
+// assert.True(t, connectorOverviewInsert.IsVerified)
+// assert.False(t, connectorOverviewInsert.IsHosted)
+// assert.Equal(t, "Test Author", connectorOverviewInsert.Author.Data.Name)
+// assert.Equal(t, "support@test.com", connectorOverviewInsert.Author.Data.SupportEmail)
+// assert.Equal(t, "https://test.com", connectorOverviewInsert.Author.Data.Website)
+
+// assert.Equal(t, "testconnector", hubRegistryConnectorInsert.Name)
+// assert.Equal(t, "testnamespace", hubRegistryConnectorInsert.Namespace)
+// assert.Equal(t, "Test Connector", hubRegistryConnectorInsert.Title)
+
+// mockCloudinaryUploader.AssertExpectations(t)
+// mockGraphQLClient.AssertExpectations(t)
+// }
+
+// // Test uploadConnectorVersionPackage
+// func TestUploadConnectorVersionPackage(t *testing.T) {
+// ctx := createTestContext()
+// connector := Connector{Name: "testconnector", Namespace: "testnamespace"}
+// version := "v1.0.0"
+// changedConnectorVersionPath := "registry/testnamespace/testconnector/releases/v1.0.0/connector-packaging.json"
+// isNewConnector := true
+
+// // Mock necessary functions
+// mockStorageClient := ctx.StorageClient.(*MockStorageClient)
+// mockStorageClient.On("Bucket", mock.Anything).Return(&storage.BucketHandle{})
+
+// mockGraphQLClient := ctx.RegistryGQLClient.(*MockGraphQLClient)
+// mockGraphQLClient.On("Run", mock.Anything, mock.Anything, mock.Anything).Return(nil)
+
+// // Create temporary files
+// err := os.MkdirAll("registry/testnamespace/testconnector/releases/v1.0.0", 0755)
+// assert.NoError(t, err)
+// defer os.RemoveAll("registry/testnamespace/testconnector")
+
+// packagingContent := []byte(`{"uri": "https://example.com/testconnector-v1.0.0.tgz"}`)
+// err = os.WriteFile(changedConnectorVersionPath, packagingContent, 0644)
+// assert.NoError(t, err)
+
+// // Run the function
+// connectorVersion, err := uploadConnectorVersionPackage(ctx, connector, version, changedConnectorVersionPath, isNewConnector)
+
+// // Assert the results
+// assert.NoError(t, err)
+// assert.Equal(t, "testconnector", connectorVersion.Name)
+// assert.Equal(t, "testnamespace", connectorVersion.Namespace)
+// assert.Equal(t, "v1.0.0", connectorVersion.Version)
+
+// mockStorageClient.AssertExpectations(t)
+// mockGraphQLClient.AssertExpectations(t)
+// }
+
+// // Test buildRegistryPayload
+// func TestBuildRegistryPayload(t *testing.T) {
+// ctx := createTestContext()
+// connectorNamespace := "testnamespace"
+// connectorName := "testconnector"
+// version := "v1.0.0"
+// connectorVersionMetadata := map[string]interface{}{
+// "packagingDefinition": map[string]interface{}{
+// "type": "ManagedDockerBuild",
+// },
+// }
+// uploadedConnectorDefinitionTgzUrl := "https://example.com/test.tgz"
+// isNewConnector := true
+
+// // Mock the GraphQL client
+// mockGraphQLClient := ctx.RegistryGQLClient.(*MockGraphQLClient)
+// mockGraphQLClient.On("Run", mock.Anything, mock.Anything, mock.Anything).Return(nil)
+
+// // Run the function
+// connectorVersion, err := buildRegistryPayload(ctx, connectorNamespace, connectorName, version, connectorVersionMetadata, uploadedConnectorDefinitionTgzUrl, isNewConnector)
+
+// // Assert the results
+// assert.NoError(t, err)
+// assert.Equal(t, connectorNamespace, connectorVersion.Namespace)
+// assert.Equal(t, connectorName, connectorVersion.Name)
+// assert.Equal(t, version, connectorVersion.Version)
+// assert.Equal(t, uploadedConnectorDefinitionTgzUrl, connectorVersion.PackageDefinitionURL)
+// assert.Equal(t, "ManagedDockerBuild", connectorVersion.Type)
+// assert.False(t, connectorVersion.IsMultitenant)
+// assert.Nil(t, connectorVersion.Image)
+
+// mockGraphQLClient.AssertExpectations(t)
+// }
diff --git a/registry-automation/cmd/gcp.go b/registry-automation/cmd/gcp.go
new file mode 100644
index 00000000..4896a92d
--- /dev/null
+++ b/registry-automation/cmd/gcp.go
@@ -0,0 +1,45 @@
+// Description: This file contains the functions to interact with Google Cloud Storage.
+package cmd
+
+import (
+ "context"
+ "fmt"
+ "io"
+ "os"
+)
+
+// deleteFile deletes a file from Google Cloud Storage
+func deleteFile(client StorageClientInterface, bucketName, objectName string) error {
+ bucket := client.Bucket(bucketName)
+ object := bucket.Object(objectName)
+
+ return object.Delete(context.Background())
+}
+
+// uploadFile uploads a file to Google Cloud Storage
+// document this function with comments
+func uploadFile(client StorageClientInterface, bucketName, objectName, filePath string) (string, error) {
+ bucket := client.Bucket(bucketName)
+ object := bucket.Object(objectName)
+ newCtx := context.Background()
+ wc := object.NewWriter(newCtx)
+
+ file, err := os.Open(filePath)
+ if err != nil {
+ return "", fmt.Errorf("failed to open file: %v", err)
+ }
+ defer file.Close()
+
+ if _, err := io.Copy(wc, file); err != nil {
+ return "", fmt.Errorf("failed to upload file: %w", err)
+ }
+ if err := wc.Close(); err != nil {
+ return "", fmt.Errorf("failed to close writer: %w", err)
+ }
+
+ // Return the public URL of the uploaded object.
+ publicURL := fmt.Sprintf("https://storage.googleapis.com/%s/%s", bucketName, objectName)
+
+ fmt.Printf("File %s uploaded to bucket %s as %s and is available at %s.\n", filePath, bucketName, objectName, publicURL)
+ return publicURL, nil
+}
diff --git a/registry-automation/cmd/registry_db.go b/registry-automation/cmd/registry_db.go
new file mode 100644
index 00000000..bad68d36
--- /dev/null
+++ b/registry-automation/cmd/registry_db.go
@@ -0,0 +1,283 @@
+package cmd
+
+import (
+ "context"
+ "fmt"
+
+ "github.com/machinebox/graphql"
+)
+
+type HubRegistryConnectorInsertInput struct {
+ Name string `json:"name"`
+ Title string `json:"title"`
+ Namespace string `json:"namespace"`
+}
+
+type NewConnectorsInsertInput struct {
+ HubRegistryConnectors []HubRegistryConnectorInsertInput `json:"hub_registry_connectors"`
+ ConnectorOverviews []ConnectorOverviewInsert `json:"connector_overviews"`
+}
+
+// struct to store the response of teh GetConnectorInfo query
+type GetConnectorInfoResponse struct {
+ HubRegistryConnector []struct {
+ Name string `json:"name"`
+ MultitenantConnector *struct {
+ ID string `json:"id"`
+ } `json:"multitenant_connector"`
+ } `json:"hub_registry_connector"`
+}
+
+func insertHubRegistryConnector(client graphql.Client, newConnectors NewConnectorsInsertInput) error {
+ var respData map[string]interface{}
+
+ ctx := context.Background()
+
+ req := graphql.NewRequest(`
+mutation InsertHubRegistryConnector ($hub_registry_connectors:[hub_registry_connector_insert_input!]!, $connector_overview_objects: [connector_overview_insert_input!]!){
+
+ insert_hub_registry_connector(objects: $hub_registry_connectors) {
+affected_rows
+ }
+ insert_connector_overview(objects: $connector_overview_objects) {
+ affected_rows
+ }
+}
+`)
+
+ // add the payload to the request
+ req.Var("hub_registry_connectors", newConnectors.HubRegistryConnectors)
+ req.Var("connectors_overviews", newConnectors.ConnectorOverviews)
+
+ // set the headers
+ req.Header.Set("x-hasura-role", "connector_publishing_automation")
+ req.Header.Set("x-connector-publication-key", ciCmdArgs.ConnectorPublicationKey)
+
+ // Execute the GraphQL query and check the response.
+ if err := client.Run(ctx, req, &respData); err != nil {
+ return err
+ } else {
+ connectorNames := make([]string, 0)
+ for _, connector := range newConnectors.HubRegistryConnectors {
+ connectorNames = append(connectorNames, fmt.Sprintf("%s/%s", connector.Namespace, connector.Name))
+ }
+ fmt.Printf("Successfully inserted the following connectors in the registry: %+v\n", connectorNames)
+ }
+
+ return nil
+}
+
+func getConnectorInfoFromRegistry(client GraphQLClientInterface, connectorNamespace string, connectorName string) (GetConnectorInfoResponse, error) {
+ var respData GetConnectorInfoResponse
+
+ ctx := context.Background()
+
+ req := graphql.NewRequest(`
+query GetConnectorInfo ($name: String!, $namespace: String!) {
+ hub_registry_connector(where: {_and: [{name: {_eq: $name}}, {namespace: {_eq: $namespace}}]}) {
+ name
+ multitenant_connector {
+ id
+ }
+ }
+}`)
+ req.Var("name", connectorName)
+ req.Var("namespace", connectorNamespace)
+
+ req.Header.Set("x-hasura-role", "connector_publishing_automation")
+ req.Header.Set("x-connector-publication-key", ciCmdArgs.ConnectorPublicationKey)
+
+ // Execute the GraphQL query and check the response.
+ if err := client.Run(ctx, req, &respData); err != nil {
+ return respData, err
+ } else {
+ if len(respData.HubRegistryConnector) == 0 {
+ return respData, nil
+ }
+ }
+
+ return respData, nil
+}
+
+func updateRegistryGQL(client graphql.Client, payload []ConnectorVersion) error {
+ var respData map[string]interface{}
+
+ ctx := context.Background()
+
+ req := graphql.NewRequest(`
+mutation InsertConnectorVersion($connectorVersion: [hub_registry_connector_version_insert_input!]!) {
+ insert_hub_registry_connector_version(objects: $connectorVersion, on_conflict: {constraint: connector_version_namespace_name_version_key, update_columns: [image, package_definition_url, is_multitenant]}) {
+ affected_rows
+ returning {
+ id
+ }
+ }
+}`)
+ // add the payload to the request
+ req.Var("connectorVersion", payload)
+
+ req.Header.Set("x-hasura-role", "connector_publishing_automation")
+ req.Header.Set("x-connector-publication-key", ciCmdArgs.ConnectorPublicationKey)
+
+ // Execute the GraphQL query and check the response.
+ if err := client.Run(ctx, req, &respData); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func updateConnectorOverview(updates ConnectorOverviewUpdates) error {
+ var respData map[string]interface{}
+ client := graphql.NewClient(ciCmdArgs.ConnectorRegistryGQLUrl)
+ ctx := context.Background()
+
+ req := graphql.NewRequest(`
+mutation UpdateConnector ($updates: [connector_overview_updates!]!) {
+ update_connector_overview_many(updates: $updates) {
+ affected_rows
+ }
+}`)
+
+ // add the payload to the request
+ req.Var("updates", updates.Updates)
+
+ req.Header.Set("x-hasura-role", "connector_publishing_automation")
+ req.Header.Set("x-connector-publication-key", ciCmdArgs.ConnectorPublicationKey)
+
+ // Execute the GraphQL query and check the response.
+ if err := client.Run(ctx, req, &respData); err != nil {
+ return err
+ } else {
+ fmt.Printf("Successfully updated the connector overview: %+v\n", respData)
+ }
+
+ return nil
+}
+
+type ConnectorAuthorNestedInsertOnConflict struct {
+ Constraint string `json:"constraint"`
+ UpdateCols []string `json:"update_columns,omitempty"`
+}
+
+type ConnectorAuthorNestedInsert struct {
+ Data ConnectorAuthor `json:"data"`
+ OnConflict *ConnectorAuthorNestedInsertOnConflict `json:"on_conflict,omitempty"`
+}
+
+type ConnectorOverviewInsert struct {
+ Namespace string `json:"namespace"`
+ Name string `json:"name"`
+ Title string `json:"title"`
+ Description string `json:"description"`
+ Logo string `json:"logo"`
+ Docs string `json:"docs"`
+ IsVerified bool `json:"is_verified"`
+ IsHosted bool `json:"is_hosted_by_hasura"`
+ Author ConnectorAuthorNestedInsert `json:"author"`
+}
+
+type ConnectorAuthor struct {
+ Name string `json:"name"`
+ SupportEmail string `json:"support_email"`
+ Website string `json:"website"`
+}
+
+// registryDbMutation is a function to insert data into the registry database, all the mutations are done in a single transaction.
+func registryDbMutation(client GraphQLClientInterface, newConnectors NewConnectorsInsertInput, connectorOverviewUpdates []ConnectorOverviewUpdate, connectorVersionInserts []ConnectorVersion) error {
+ var respData map[string]interface{}
+ ctx := context.Background()
+ mutationQuery := `
+mutation HubRegistryMutationRequest (
+ $hub_registry_connectors:[hub_registry_connector_insert_input!]!,
+ $connector_overview_inserts: [connector_overview_insert_input!]!,
+ $connector_overview_updates: [connector_overview_updates!]!,
+ $connector_version_inserts: [hub_registry_connector_version_insert_input!]!
+){
+
+ insert_hub_registry_connector(objects: $hub_registry_connectors) {
+affected_rows
+ }
+ insert_connector_overview(objects: $connector_overview_inserts) {
+ affected_rows
+ }
+ insert_hub_registry_connector_version(objects: $connector_version_inserts, on_conflict: {constraint: connector_version_namespace_name_version_key, update_columns: [image, package_definition_url, is_multitenant]}) {
+ affected_rows
+ }
+
+ update_connector_overview_many(updates: $connector_overview_updates) {
+ affected_rows
+ }
+}
+`
+ req := graphql.NewRequest(mutationQuery)
+ req.Var("hub_registry_connectors", newConnectors.HubRegistryConnectors)
+ req.Var("connector_overview_inserts", newConnectors.ConnectorOverviews)
+ req.Var("connector_overview_updates", connectorOverviewUpdates)
+ req.Var("connector_version_inserts", connectorVersionInserts)
+
+ req.Header.Set("x-hasura-role", "connector_publishing_automation")
+ req.Header.Set("x-connector-publication-key", ciCmdArgs.ConnectorPublicationKey)
+
+ // Execute the GraphQL query and check the response.
+ if err := client.Run(ctx, req, &respData); err != nil {
+ return err
+ }
+
+ return nil
+
+}
+
+// registryDbMutation is a function to insert data into the registry database, all the mutations are done in a single transaction.
+func registryDbMutationStaging(client GraphQLClientInterface, newConnectors NewConnectorsInsertInput, connectorOverviewUpdates []ConnectorOverviewUpdate, connectorVersionInserts []ConnectorVersion) error {
+ var respData map[string]interface{}
+ ctx := context.Background()
+ mutationQuery := `
+mutation HubRegistryMutationRequest (
+ $hub_registry_connectors:[hub_registry_connector_insert_input!]!,
+ $connector_overview_inserts: [connector_overview_insert_input!]!,
+ $connector_overview_updates: [connector_overview_updates!]!,
+ $connector_version_inserts: [hub_registry_connector_version_insert_input!]!
+){
+
+ insert_hub_registry_connector(objects: $hub_registry_connectors, on_conflict: {constraint: connector_pkey}) {
+affected_rows
+ }
+ insert_connector_overview(objects: $connector_overview_inserts, on_conflict: {constraint: connector_overview_pkey, update_columns: [docs, logo]}) {
+ affected_rows
+ }
+ insert_hub_registry_connector_version(objects: $connector_version_inserts, on_conflict: {constraint: connector_version_namespace_name_version_key, update_columns: [image, package_definition_url, is_multitenant]}) {
+ affected_rows
+ }
+
+ update_connector_overview_many(updates: $connector_overview_updates) {
+ affected_rows
+ }
+}
+`
+
+ // update newConnectors.ConnectorOverviews to have on_conflict
+ for i := range newConnectors.ConnectorOverviews {
+ newConnectors.ConnectorOverviews[i].Author.OnConflict = &ConnectorAuthorNestedInsertOnConflict{
+ Constraint: "connector_author_connector_title_key",
+ UpdateCols: []string{},
+ }
+ }
+
+ req := graphql.NewRequest(mutationQuery)
+ req.Var("hub_registry_connectors", newConnectors.HubRegistryConnectors)
+ req.Var("connector_overview_inserts", newConnectors.ConnectorOverviews)
+ req.Var("connector_overview_updates", connectorOverviewUpdates)
+ req.Var("connector_version_inserts", connectorVersionInserts)
+
+ req.Header.Set("x-hasura-role", "connector_publishing_automation")
+ req.Header.Set("x-connector-publication-key", ciCmdArgs.ConnectorPublicationKey)
+
+ // Execute the GraphQL query and check the response.
+ if err := client.Run(ctx, req, &respData); err != nil {
+ return err
+ }
+
+ return nil
+
+}
diff --git a/registry-automation/cmd/root.go b/registry-automation/cmd/root.go
new file mode 100644
index 00000000..9cf49a5d
--- /dev/null
+++ b/registry-automation/cmd/root.go
@@ -0,0 +1,29 @@
+package cmd
+
+import (
+ "os"
+
+ "github.com/spf13/cobra"
+)
+
+// rootCmd represents the base command when called without any subcommands
+var rootCmd = &cobra.Command{
+ Use: "registry-automation",
+ Short: "Commands associated with automation for the hub registry",
+}
+
+// Execute adds all child commands to the root command and sets flags appropriately.
+// This is called by main.main(). It only needs to happen once to the rootCmd.
+func Execute() {
+ err := rootCmd.Execute()
+ if err != nil {
+ os.Exit(1)
+ }
+}
+
+func init() {
+ // Here you will define your flags and configuration settings.
+ // Cobra supports persistent flags, which, if defined here,
+ // will be global for your application.
+
+}
diff --git a/registry-automation/cmd/types.go b/registry-automation/cmd/types.go
new file mode 100644
index 00000000..ae51bbf6
--- /dev/null
+++ b/registry-automation/cmd/types.go
@@ -0,0 +1,185 @@
+package cmd
+
+import (
+ "cloud.google.com/go/storage"
+ "context"
+ "encoding/json"
+ "github.com/cloudinary/cloudinary-go/v2"
+ "github.com/cloudinary/cloudinary-go/v2/api/uploader"
+ "github.com/machinebox/graphql"
+)
+
+type ChangedFiles struct {
+ Added []string `json:"added_files"`
+ Modified []string `json:"modified_files"`
+ Deleted []string `json:"deleted_files"`
+}
+
+// ConnectorVersion represents a version of a connector, this type is
+// used to insert a new version of a connector in the registry.
+type ConnectorVersion struct {
+ // Namespace of the connector, e.g. "hasura"
+ Namespace string `json:"namespace"`
+ // Name of the connector, e.g. "mongodb"
+ Name string `json:"name"`
+ // Semantic version of the connector version, e.g. "v1.0.0"
+ Version string `json:"version"`
+ // Docker image of the connector version (optional)
+ // This field is only required if the connector version is of type `PrebuiltDockerImage`
+ Image *string `json:"image,omitempty"`
+ // URL to the connector's metadata
+ PackageDefinitionURL string `json:"package_definition_url"`
+ // Is the connector version multitenant?
+ IsMultitenant bool `json:"is_multitenant"`
+ // Type of the connector packaging `PrebuiltDockerImage`/`ManagedDockerBuild`
+ Type string `json:"type"`
+}
+
+// Create a struct with the following fields:
+// type string
+// image *string (optional)
+type ConnectionVersionMetadata struct {
+ Type string `yaml:"type"`
+ Image *string `yaml:"image,omitempty"`
+}
+
+type WhereClause struct {
+ ConnectorName string
+ ConnectorNamespace string
+}
+
+func (wc WhereClause) MarshalJSON() ([]byte, error) {
+ where := map[string]interface{}{
+ "_and": []map[string]interface{}{
+ {"name": map[string]string{"_eq": wc.ConnectorName}},
+ {"namespace": map[string]string{"_eq": wc.ConnectorNamespace}},
+ },
+ }
+ return json.Marshal(where)
+}
+
+type ConnectorOverviewUpdate struct {
+ Set struct {
+ Docs *string `json:"docs,omitempty"`
+ Logo *string `json:"logo,omitempty"`
+ } `json:"_set"`
+ Where WhereClause `json:"where"`
+}
+
+type ConnectorOverviewUpdates struct {
+ Updates []ConnectorOverviewUpdate `json:"updates"`
+}
+
+const (
+ ManagedDockerBuild = "ManagedDockerBuild"
+ PrebuiltDockerImage = "PrebuiltDockerImage"
+)
+
+// Type to represent the metadata.json file
+type ConnectorMetadata struct {
+ Overview struct {
+ Namespace string `json:"namespace"`
+ Description string `json:"description"`
+ Title string `json:"title"`
+ Logo string `json:"logo"`
+ Tags []string `json:"tags"`
+ LatestVersion string `json:"latest_version"`
+ } `json:"overview"`
+ Author struct {
+ SupportEmail string `json:"support_email"`
+ Homepage string `json:"homepage"`
+ Name string `json:"name"`
+ } `json:"author"`
+
+ IsVerified bool `json:"is_verified"`
+ IsHostedByHasura bool `json:"is_hosted_by_hasura"`
+ HasuraHubConnector struct {
+ Namespace string `json:"namespace"`
+ Name string `json:"name"`
+ } `json:"hasura_hub_connector"`
+ SourceCode struct {
+ IsOpenSource bool `json:"is_open_source"`
+ Repository string `json:"repository"`
+ } `json:"source_code"`
+}
+
+// Make a struct with the fields expected in the command line arguments
+type ConnectorRegistryArgs struct {
+ ChangedFilesPath string
+ PublicationEnv string
+ ConnectorRegistryGQLUrl string
+ ConnectorPublicationKey string
+ GCPServiceAccountDetails string
+ GCPBucketName string
+ CloudinaryUrl string
+}
+
+type MetadataFile string
+
+type NewConnectors map[Connector]MetadataFile
+
+type ProcessedChangedFiles struct {
+ NewConnectorVersions NewConnectorVersions
+ ModifiedLogos ModifiedLogos
+ ModifiedReadmes ModifiedReadmes
+ NewConnectors NewConnectors
+ NewLogos NewLogos
+ NewReadmes NewReadmes
+}
+
+type GraphQLClientInterface interface {
+ Run(ctx context.Context, req *graphql.Request, resp interface{}) error
+}
+
+type StorageClientWrapper struct {
+ *storage.Client
+}
+
+func (s *StorageClientWrapper) Bucket(name string) *storage.BucketHandle {
+ return s.Client.Bucket(name)
+}
+
+type StorageClientInterface interface {
+ Bucket(name string) *storage.BucketHandle
+}
+
+type CloudinaryInterface interface {
+ Upload(ctx context.Context, file interface{}, uploadParams uploader.UploadParams) (*uploader.UploadResult, error)
+}
+
+type CloudinaryWrapper struct {
+ *cloudinary.Cloudinary
+}
+
+func (c *CloudinaryWrapper) Upload(ctx context.Context, file interface{}, uploadParams uploader.UploadParams) (*uploader.UploadResult, error) {
+ return c.Cloudinary.Upload.Upload(ctx, file, uploadParams)
+}
+
+//
+
+type Context struct {
+ Env string
+ RegistryGQLClient GraphQLClientInterface
+ StorageClient StorageClientInterface
+ Cloudinary CloudinaryInterface
+}
+
+// Type that uniquely identifies a connector
+type Connector struct {
+ Name string `json:"name"`
+ Namespace string `json:"namespace"`
+}
+
+type NewConnectorVersions map[Connector]map[string]string
+
+// ModifiedLogos represents the modified logos in the PR, the key is the connector name and the value is the path to the modified logo
+type ModifiedLogos map[Connector]string
+
+// ModifiedReadmes represents the modified READMEs in the PR, the key is the connector name and the value is the path to the modified README
+type ModifiedReadmes map[Connector]string
+
+// ModifiedLogos represents the modified logos in the PR, the key is the connector name and the value is the path to the modified logo
+type NewLogos map[Connector]string
+
+// ModifiedReadmes represents the modified READMEs in the PR, the key is the connector name and the value is the path to the modified README
+type NewReadmes map[Connector]string
diff --git a/registry-automation/cmd/utils.go b/registry-automation/cmd/utils.go
new file mode 100644
index 00000000..178ec188
--- /dev/null
+++ b/registry-automation/cmd/utils.go
@@ -0,0 +1,150 @@
+package cmd
+
+import (
+ "encoding/json"
+ "fmt"
+ "gopkg.in/yaml.v2"
+ "io"
+ "net/http"
+ "os"
+ "os/exec"
+)
+
+func generateGCPObjectName(namespace, connectorName, version string) string {
+ return fmt.Sprintf("packages/%s/%s/%s/package.tgz", namespace, connectorName, version)
+}
+
+func downloadFile(sourceURL, destination string, headers map[string]string) error {
+ // Create a new HTTP client
+ client := &http.Client{}
+
+ // Create a new GET request
+ req, err := http.NewRequest("GET", sourceURL, nil)
+ if err != nil {
+ return fmt.Errorf("error creating request: %v", err)
+ }
+
+ // Add headers
+ for key, value := range headers {
+ req.Header.Set(key, value)
+ }
+
+ // Send the request
+ resp, err := client.Do(req)
+ if err != nil {
+ return fmt.Errorf("error sending request: %v", err)
+ }
+ defer resp.Body.Close()
+
+ // Create the destination file
+ outFile, err := os.Create(destination)
+ if err != nil {
+ return fmt.Errorf("error creating destination file: %v", err)
+ }
+ defer outFile.Close()
+
+ // Write the response body to the file
+ _, err = io.Copy(outFile, resp.Body)
+ if err != nil {
+ return fmt.Errorf("error writing to file: %v", err)
+ }
+ return nil
+}
+
+// Reads a JSON file and attempts to parse the content of the file
+// into the type T.
+// Note: The location is relative to the root of the repository
+func readJSONFile[T any](location string) (T, error) {
+ // Read the file
+ var result T
+ fileBytes, err := readFile(location)
+ if err != nil {
+ return result, err
+ }
+
+ if err := json.Unmarshal(fileBytes, &result); err != nil {
+ return result, fmt.Errorf("error parsing JSON: %v", err)
+ }
+
+ return result, nil
+}
+
+// Note: The location is relative to the root of the repository
+func readFile(location string) ([]byte, error) {
+ // Read the file
+
+ fileBytes, err := os.ReadFile("../" + location)
+ if err != nil {
+ return fileBytes, fmt.Errorf("error reading file at location: %s %v", location, err)
+ }
+
+ return fileBytes, nil
+}
+
+// getTempFilePath generates a random file name in the specified directory.
+func getTempFilePath(directory string) (string, error) {
+
+ // Ensure the directory exists
+ err := os.MkdirAll(directory, os.ModePerm)
+ if err != nil {
+ panic(fmt.Errorf("error creating directory: %v", err))
+ }
+
+ // Generate a random file name
+
+ tempFile, err := os.CreateTemp(directory, "connector-*.tar.gz")
+ if err != nil {
+ return "", fmt.Errorf("error creating temp file: %v", err)
+ }
+ defer tempFile.Close()
+
+ return tempFile.Name(), nil
+
+}
+
+func extractTarGz(src, dest string) (string, error) {
+ // Create the destination directory
+ // Get the present working directory
+ pwd := os.Getenv("PWD")
+ filepath := pwd + "/" + dest
+
+ if err := os.MkdirAll(filepath, 0755); err != nil {
+ return "", fmt.Errorf("error creating destination directory: %v", err)
+ }
+ // Run the tar command with the -xvzf options
+ cmd := exec.Command("tar", "-xvzf", src, "-C", dest)
+
+ // Execute the command
+ if err := cmd.Run(); err != nil {
+ return "", fmt.Errorf("error extracting tar.gz file: %v", err)
+ }
+
+ return fmt.Sprintf("%s/.hasura-connector/connector-metadata.yaml", filepath), nil
+}
+
+// Write a function that accepts a file path to a YAML file and returns
+// the contents of the file as a map[string]interface{}.
+// readYAMLFile accepts a file path to a YAML file and returns the contents of the file as a map[string]interface{}.
+func readYAMLFile(filePath string) (map[string]interface{}, error) {
+ // Open the file
+ file, err := os.Open(filePath)
+ if err != nil {
+ return nil, fmt.Errorf("failed to open file: %w", err)
+ }
+ defer file.Close()
+
+ // Read the file contents
+ data, err := io.ReadAll(file)
+ if err != nil {
+ return nil, fmt.Errorf("failed to read file: %w", err)
+ }
+
+ // Unmarshal the YAML contents into a map
+ var result map[string]interface{}
+ err = yaml.Unmarshal(data, &result)
+ if err != nil {
+ return nil, fmt.Errorf("failed to unmarshal YAML: %w", err)
+ }
+
+ return result, nil
+}
diff --git a/registry-automation/go.mod b/registry-automation/go.mod
new file mode 100644
index 00000000..2c03147d
--- /dev/null
+++ b/registry-automation/go.mod
@@ -0,0 +1,61 @@
+module github.com/hasura/ndc-hub/registry-automation
+
+go 1.21.4
+
+require (
+ github.com/cloudinary/cloudinary-go/v2 v2.8.0
+ github.com/spf13/cobra v1.8.0
+ github.com/stretchr/testify v1.9.0
+)
+
+require (
+ github.com/creasty/defaults v1.7.0 // indirect
+ github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/gorilla/schema v1.4.1 // indirect
+ github.com/matryer/is v1.4.1 // indirect
+ github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
+
+require (
+ cloud.google.com/go v0.115.0 // indirect
+ cloud.google.com/go/auth v0.7.1 // indirect
+ cloud.google.com/go/auth/oauth2adapt v0.2.3 // indirect
+ cloud.google.com/go/compute/metadata v0.5.0 // indirect
+ cloud.google.com/go/iam v1.1.11 // indirect
+ cloud.google.com/go/storage v1.43.0
+ github.com/felixge/httpsnoop v1.0.4 // indirect
+ github.com/go-logr/logr v1.4.2 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
+ github.com/google/s2a-go v0.1.7 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.5 // indirect
+ github.com/inconshreveable/mousetrap v1.1.0 // indirect
+ github.com/machinebox/graphql v0.2.2
+ github.com/pkg/errors v0.9.1 // indirect
+ github.com/spf13/pflag v1.0.5 // indirect
+ go.opencensus.io v0.24.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect
+ go.opentelemetry.io/otel v1.28.0 // indirect
+ go.opentelemetry.io/otel/metric v1.28.0 // indirect
+ go.opentelemetry.io/otel/trace v1.28.0 // indirect
+ golang.org/x/crypto v0.25.0 // indirect
+ golang.org/x/net v0.27.0 // indirect
+ golang.org/x/oauth2 v0.21.0 // indirect
+ golang.org/x/sync v0.7.0 // indirect
+ golang.org/x/sys v0.22.0 // indirect
+ golang.org/x/text v0.16.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ google.golang.org/api v0.188.0
+ google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240711142825-46eb208f015d // indirect
+ google.golang.org/grpc v1.65.0 // indirect
+ google.golang.org/protobuf v1.34.2 // indirect
+ gopkg.in/yaml.v2 v2.4.0
+)
diff --git a/registry-automation/go.sum b/registry-automation/go.sum
new file mode 100644
index 00000000..f44c7142
--- /dev/null
+++ b/registry-automation/go.sum
@@ -0,0 +1,197 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14=
+cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU=
+cloud.google.com/go/auth v0.7.1 h1:Iv1bbpzJ2OIg16m94XI9/tlzZZl3cdeR3nGVGj78N7s=
+cloud.google.com/go/auth v0.7.1/go.mod h1:VEc4p5NNxycWQTMQEDQF0bd6aTMb6VgYDXEwiJJQAbs=
+cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI=
+cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I=
+cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=
+cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=
+cloud.google.com/go/iam v1.1.11 h1:0mQ8UKSfdHLut6pH9FM3bI55KWR46ketn0PuXleDyxw=
+cloud.google.com/go/iam v1.1.11/go.mod h1:biXoiLWYIKntto2joP+62sd9uW5EpkZmKIvfNcTWlnQ=
+cloud.google.com/go/longrunning v0.5.9 h1:haH9pAuXdPAMqHvzX0zlWQigXT7B0+CL4/2nXXdBo5k=
+cloud.google.com/go/longrunning v0.5.9/go.mod h1:HD+0l9/OOW0za6UWdKJtXoFAX/BGg/3Wj8p10NeWF7c=
+cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs=
+cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cloudinary/cloudinary-go/v2 v2.8.0 h1:6o2mL5Obm92Q0TuX6yXfdpXSImbsYVYlOPOnpwjfobo=
+github.com/cloudinary/cloudinary-go/v2 v2.8.0/go.mod h1:ireC4gqVetsjVhYlwjUJwKTbZuWjEIynbR9zQTlqsvo=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/creasty/defaults v1.7.0 h1:eNdqZvc5B509z18lD8yc212CAqJNvfT1Jq6L8WowdBA=
+github.com/creasty/defaults v1.7.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
+github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=
+github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=
+github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
+github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
+github.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBYGmXdxA=
+github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E=
+github.com/gorilla/schema v1.4.1 h1:jUg5hUjCSDZpNGLuXQOgIWGdlgrIdYvgQ0wZtdK1M3E=
+github.com/gorilla/schema v1.4.1/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM=
+github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/machinebox/graphql v0.2.2 h1:dWKpJligYKhYKO5A2gvNhkJdQMNZeChZYyBbrZkBZfo=
+github.com/machinebox/graphql v0.2.2/go.mod h1:F+kbVMHuwrQ5tYgU9JXlnskM8nOaFxCAEolaQybkjWA=
+github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ=
+github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
+github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
+go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg=
+go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo=
+go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4=
+go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q=
+go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s=
+go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw=
+go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg=
+go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g=
+go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
+golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
+golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
+golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
+golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
+golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
+golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.188.0 h1:51y8fJ/b1AaaBRJr4yWm96fPcuxSo0JcegXE3DaHQHw=
+google.golang.org/api v0.188.0/go.mod h1:VR0d+2SIiWOYG3r/jdm7adPW9hI2aRv9ETOSCQ9Beag=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d h1:/hmn0Ku5kWij/kjGsrcJeC1T/MrJi2iNWwgAqrihFwc=
+google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY=
+google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d h1:kHjw/5UfflP/L5EbledDrcG4C2597RtymmGRZvHiCuY=
+google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d/go.mod h1:mw8MG/Qz5wfgYr6VqVCiZcHe/GJEfI+oGGDCohaVgB0=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240711142825-46eb208f015d h1:JU0iKnSg02Gmb5ZdV8nYsKEKsP6o/FGVWTrw4i1DA9A=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240711142825-46eb208f015d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
+google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
+google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/registry-automation/main.go b/registry-automation/main.go
new file mode 100644
index 00000000..4f168b4b
--- /dev/null
+++ b/registry-automation/main.go
@@ -0,0 +1,7 @@
+package main
+
+import "github.com/hasura/ndc-hub/registry-automation/cmd"
+
+func main() {
+ cmd.Execute()
+}
diff --git a/registry/citus/README.md b/registry/citus/README.md
deleted file mode 100644
index e63f5909..00000000
--- a/registry/citus/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Overview
-
-`ndc-postgres` provides a Hasura Data Connector to the PostgreSQL database,
-which can expose and run GraphQL queries via the Hasura v3 Project.
-
-- [PostgreSQL Connector information in the Hasura Connectors directory](https://hasura.io/connectors/postgres)
-- [GitHub repository](https://github.com/hasura/ndc-postgres)
-
-The connector implements the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html),
-but does not currently support column relationship arguments in queries, or functions.
-
-Visit the
-[Hasura v3 Documentation](https://hasura.io/docs/3.0/native-data-connectors/postgresql)
-for more information.
-
-The connector supports the Citus database extensions to PostgreSQL.
-
-## Deployment
-
-The connector is hosted by Hasura and can be used from the [Hasura v3 Console](https://console.hasura.io).
-
-## Usage
-
-Follow the [Quick Start Guide](https://hasura.io/docs/3.0/quickstart/)
-To use the PostgreSQL data connector from the [Hasura v3 Console](https://console.hasura.io).
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
-if you encounter any problems!
diff --git a/registry/clickhouse/README.md b/registry/clickhouse/README.md
deleted file mode 100644
index a80dde6a..00000000
--- a/registry/clickhouse/README.md
+++ /dev/null
@@ -1,83 +0,0 @@
-## Overview
-
-The Clickhouse Native Data Connector allows for connecting to a Clickhouse instance giving you an instant GraphQL API on top of your Clickhouse data.
-This uses the [Rust Data Connector SDK](https://github.com/hasura/ndc-hub#rusk-sdk) from the [Data connector Hub](https://github.com/hasura/ndc-hub) and implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
-
-ClickHouse is a powerful open-source columnar database that offers a range of features designed for speed and efficiency in processing large volumes of data. ClickHouse is an excellent choice for a database when you are dealing with large volumes of data and require high-speed data retrieval, aggregation, and analysis. It's particularly well-suited for real-time analytics and handling time-series data, log data, or any scenario where read operations vastly outnumber writes. ClickHouse thrives in environments where query performance and the ability to generate reports quickly are critical, such as in financial analysis, IoT data management, and online analytical processing (OLAP). Furthermore, its column-oriented architecture makes it ideal for queries that need to scan large datasets but only access a subset of columns.
-
-## Connect to Hasura
-
-Please refer to the [Getting Started - Create an API](https://hasura.io/docs/3.0/getting-started/create-a-project) documentation if you get stuck during any of the steps outlined below.
-
-### Prerequisites
-1. Install the [new Hasura CLI](https://hasura.io/docs/3.0/cli/installation) — to quickly and easily create and manage your Hasura projects and builds.
-2. (recommended) Install the [Hasura VS Code extension](https://marketplace.visualstudio.com/items?itemName=HasuraHQ.hasura) — with support for other editors coming soon!
-3. Create a [Clickhouse account](https://clickhouse.cloud/signUp?loc=nav-get-started) if you don't already have one.
-4. Make sure to make your Clickhouse service open to the public or add Hasura's IP to the allowlist.
-
-### Create Project and Connect Clickhouse
-
-Login to Hasura Cloud with the CLI
-
-```
-ddn login
-```
-
-Create a new project using the [create project](https://hasura.io/docs/3.0/cli/commands/create-project/) command in the CLI and change to the new directory that was generated.
-
-```
-ddn create project --dir ./my-first-supergraph
-cd my-first-supergraph
-```
-
-Run the add [connector-manifest](https://hasura.io/docs/3.0/cli/commands/add-connector-manifest/) command to create a connector for Clickhouse in your project.
-
-```
-ddn add connector-manifest clickhouse_connector --subgraph app --hub-connector hasura/clickhouse --type cloud
-```
-
-Add values for your Clickhouse username, password, and connection string to corresponding definition found in: `app/clickhouse/connector/clickhouse_connector.build.hml`
-
-```
-kind: ConnectorManifest
-version: v1
-spec:
- supergraphManifests:
- - base
-definition:
- name: clickhouse_connector
- type: cloud
- connector:
- type: hub
- name: hasura/clickhouse:v0.2.5
- deployments:
- - context: .
- env:
- CLICKHOUSE_PASSWORD:
- value: ""
- CLICKHOUSE_URL:
- value: ""
- CLICKHOUSE_USERNAME:
- value: ""
-```
-
-Note: You can also use environment variables for these values. Please refer to our [Getting Started - Add a connector manifest](https://hasura.io/docs/3.0/cli/commands/add-connector-manifest/) for more details.
-
-### Update Connector, Track Models and Build
-
-At this point you can either run the [dev](https://hasura.io/docs/3.0/cli/commands/dev/) mode to watch your project and create new builds as changes are made to your metadata using [Hasura’s LSP](https://hasura.io/docs/3.0/glossary/#lsp-language-server-protocol) and [VSCode extension](https://marketplace.visualstudio.com/items?itemName=HasuraHQ.hasura).
-
-```
-ddn dev
-```
-
-Alternatively, you can run the following commands to add specific models, in this example the `Trips` table and `MonthlyRevenue` view if added the view following the steps mentioned above.
-```
-ddn update connector-manifest clickhouse_connector
-ddn update data-connector-link clickhouse_connector
-ddn add model --data-connector-link clickhouse_connector --name Trips
-ddn add model --data-connector-link clickhouse_connector --name MonthlyRevenue
-ddn build supergraph-manifest
-```
-
-You are now ready to start using your API! During the previous step the console will return some information including the Console URL. Load this link in your browser to explore the API you have created for your Clickhouse database. The UI will resemble something like this.
\ No newline at end of file
diff --git a/registry/clickhouse/metadata.json b/registry/clickhouse/metadata.json
deleted file mode 100644
index 466d9de2..00000000
--- a/registry/clickhouse/metadata.json
+++ /dev/null
@@ -1,171 +0,0 @@
-{
- "overview": {
- "namespace": "hasura",
- "description": "The Clickhouse Native Data Connector allows for connecting to a Clickhouse instance giving you an instant GraphQL API on top of your Clickhouse data.",
- "title": "Clickhouse Native Data Connector",
- "logo": "logo.png",
- "tags": [
- "database"
- ],
- "latest_version": "v0.2.8"
- },
- "author": {
- "support_email": "support@hasura.io",
- "homepage": "https://hasura.io",
- "name": "Hasura"
- },
- "is_verified": true,
- "is_hosted_by_hasura": false,
- "packages": [
- {
- "version": "0.2.8",
- "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.8/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "4de1a70042d222040523faf6aa1771be23d5156258318272fc31fa1dd49c41ea"
- },
- "source": {
- "hash": "f1629f715770358e587a25f9a0ca015728d422dd"
- }
- },
- {
- "version": "0.2.7",
- "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.7/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "a6acbd32400b2a74009009933a8469892bf7781969e58aef7532121198af1e4f"
- },
- "source": {
- "hash": "ece8fb0fcfcd9650dd5060f882baa94889eccf2e"
- }
- },
- {
- "version": "0.2.6",
- "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.6/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "c20dd539761084f9a3a0effa68011a6d57da92dbdf4f805bac93bc825f5c40ef"
- },
- "source": {
- "hash": "7bafb9fd2b9c3288b6f7279c3d62793cc78d8fe0"
- }
- },
- {
- "version": "0.2.5",
- "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.5/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "8504769a2bd8ac63f979dc5447dc106da4360cfbcdcacc9edb8765eb434e1e11"
- },
- "source": {
- "hash": "c89d9410cf885cbfe4156c9e7bf65211144018df"
- }
- },
- {
- "version": "0.2.4",
- "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.4/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "8ab07763d887848a555f26aae973e34e872ec0617ccc17d2eac96d67fe223e87"
- },
- "source": {
- "hash": "cd1f81b98b264df1e20f7f84a664fb272fac19b1"
- }
- },
- {
- "version": "0.2.3",
- "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.3/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "f1b1020e57fdb969b545f0e5ad37f1000c2e5084041695cc2e885e4cb634b35c"
- },
- "source": {
- "hash": "97175685b51a31a5ac99672746901d0df6d4eb35"
- }
- },
- {
- "version": "0.2.2",
- "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.2/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "198ed9a830a403cf855d449b3d99313ad01de4df21663c0648ab95fa25b58325"
- },
- "source": {
- "hash": "6b349d7f0e8449611a24d6b8cad34aeb3162b583"
- }
- },
- {
- "version": "0.2.1",
- "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.1/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "5e88d1b7fb14638ceeaf5b6fac775b6cc68d62d8537fc25cd8e87cdf4dfb443e"
- },
- "source": {
- "hash": "521365decd10db124c9865bd29fc4e60025a6892"
- }
- },
- {
- "version": "0.2.0",
- "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.0/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "94bacc789b3c3ea5e92b324e43bf054abaef1c0b7ce87d78ea12a34b33d7d6e5"
- },
- "source": {
- "hash": "4ec3b65c4fdbb37896e105ca89f8bdb1c25b277b"
- }
- }
- ],
- "source_code": {
- "is_open_source": true,
- "repository": "https://github.com/hasura/ndc-clickhouse/",
- "version": [
- {
- "tag": "v0.2.8",
- "hash": "f1629f715770358e587a25f9a0ca015728d422dd",
- "is_verified": true
- },
- {
- "tag": "v0.2.7",
- "hash": "ece8fb0fcfcd9650dd5060f882baa94889eccf2e",
- "is_verified": true
- },
- {
- "tag": "v0.2.6",
- "hash": "7bafb9fd2b9c3288b6f7279c3d62793cc78d8fe0",
- "is_verified": true
- },
- {
- "tag": "v0.2.5",
- "hash": "c89d9410cf885cbfe4156c9e7bf65211144018df",
- "is_verified": true
- },
- {
- "tag": "v0.2.4",
- "hash": "cd1f81b98b264df1e20f7f84a664fb272fac19b1",
- "is_verified": true
- },
- {
- "tag": "v0.2.3",
- "hash": "97175685b51a31a5ac99672746901d0df6d4eb35",
- "is_verified": true
- },
- {
- "tag": "v0.2.2",
- "hash": "6b349d7f0e8449611a24d6b8cad34aeb3162b583",
- "is_verified": true
- },
- {
- "tag": "v0.2.1",
- "hash": "521365decd10db124c9865bd29fc4e60025a6892",
- "is_verified": true
- },
- {
- "tag": "v0.2.0",
- "hash": "4ec3b65c4fdbb37896e105ca89f8bdb1c25b277b",
- "is_verified": true
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/registry/cockroach/README.md b/registry/cockroach/README.md
deleted file mode 100644
index fdad4553..00000000
--- a/registry/cockroach/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Overview
-
-`ndc-postgres` provides a Hasura Data Connector to the PostgreSQL database,
-which can expose and run GraphQL queries via the Hasura v3 Project.
-
-- [PostgreSQL Connector information in the Hasura Connectors directory](https://hasura.io/connectors/postgres)
-- [GitHub repository](https://github.com/hasura/ndc-postgres)
-
-The connector implements the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html),
-but does not currently support column relationship arguments in queries, or functions.
-
-Visit the
-[Hasura v3 Documentation](https://hasura.io/docs/3.0/native-data-connectors/postgresql)
-for more information.
-
-The connector supports the [CockroachDB](https://www.cockroachlabs.com/) PostgreSQL-compatible database.
-
-## Deployment
-
-The connector is hosted by Hasura and can be used from the [Hasura v3 Console](https://console.hasura.io).
-
-## Usage
-
-Follow the [Quick Start Guide](https://hasura.io/docs/3.0/quickstart/)
-To use the PostgreSQL data connector from the [Hasura v3 Console](https://console.hasura.io).
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
-if you encounter any problems!
diff --git a/registry/go/README.md b/registry/go/README.md
deleted file mode 100644
index 2b108ff1..00000000
--- a/registry/go/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-## Overview
-
-The Go connector allows you to expose Go functions as NDC functions/procedures for use in your Hasura DDN subgraphs.
-The connector provides a boilerplate with NDC Go SDK and a generation tool to generate NDC schema and DRY functions from Go code.
-
-- [GitHub Repository](https://github.com/hasura/ndc-sdk-go)
-
-## How to Use
-
-See the README file in the boilerplate which is generated from [this template](https://github.com/hasura/ndc-sdk-go/blob/main/cmd/ndc-go-sdk/templates/new/README.md.tmpl), or see [README of the generation tool on the GitHub repository](https://github.com/hasura/ndc-sdk-go/blob/main/cmd/ndc-go-sdk/README.md) for more context.
-
-## Compatibility
-
-| Go Version | SDK Version |
-| ---------- | ----------- |
-| 1.21+ | v1.x |
-| 1.19+ | v0.x |
diff --git a/registry/go/metadata.json b/registry/go/metadata.json
deleted file mode 100644
index bb5bd470..00000000
--- a/registry/go/metadata.json
+++ /dev/null
@@ -1,79 +0,0 @@
-{
- "overview": {
- "namespace": "hasura",
- "description": "The Go connector allows you to expose Go functions as NDC functions/procedures for use in your Hasura DDN subgraphs.",
- "title": "Go Connector",
- "logo": "logo.svg",
- "tags": [],
- "latest_version": "v1.1.0"
- },
- "author": {
- "support_email": "support@hasura.io",
- "homepage": "https://hasura.io",
- "name": "Hasura"
- },
- "is_verified": true,
- "is_hosted_by_hasura": false,
- "packages": [
- {
- "version": "v1.1.2",
- "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v1.1.2/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "2e037c86fd4da3f07417a7216a7921b885a4e13b8da15210e1cd13cc4ee728f1"
- },
- "source": {
- "hash": "32e28e549f11b790c320b6a79ad33ad8e6df5bd7"
- }
- },
- {
- "version": "v1.0.0",
- "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v1.0.0/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "906db79cf5565eaca731436180295d2d7ee81246b57cc7dcdde14585841f53a5"
- },
- "source": {
- "hash": "42259e9a9c719131721f0058c552e9b8a4a36973"
- }
- },
- {
- "version": "v0.5.2",
- "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v0.5.2/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "dfb2ea7499744a1ad00673703eed28bccaf38b4866721f5b0aacb546d788a659"
- },
- "source": {
- "hash": "79788195359a5e3cf0fc8896b61eb8f4d9196427"
- }
- },
- {
- "version": "v0.4.0",
- "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v0.4.0/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "13e6c4e970e032307cbb9edbb9d79ad555880c46d8a58d98f23ce441cef7d7b2"
- },
- "source": {
- "hash": "ac27498b6dbd5e803ca97e0fc702f52e2d9b429d"
- }
- }
- ],
- "source_code": {
- "is_open_source": true,
- "repository": "https://github.com/hasura/ndc-sdk-go",
- "version": [
- {
- "tag": "v1.0.0",
- "hash": "42259e9a9c719131721f0058c552e9b8a4a36973",
- "is_verified": true
- },
- {
- "tag": "v0.4.0",
- "hash": "ac27498b6dbd5e803ca97e0fc702f52e2d9b429d",
- "is_verified": true
- }
- ]
- }
-}
diff --git a/registry/hasura/azure-cosmos/README.md b/registry/hasura/azure-cosmos/README.md
new file mode 100644
index 00000000..5f89006d
--- /dev/null
+++ b/registry/hasura/azure-cosmos/README.md
@@ -0,0 +1,81 @@
+# Azure Cosmos DB for NoSQL Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0/latest/connectors/azure-cosmos/)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-azure--cosmos-blue.svg?style=flat)](https://hasura.io/connectors/azure-cosmos)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
+
+With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your data models in Azure
+Cosmos DB for NoSQL Database containers. This connector supports Azure Cosmos DB for NoSQL's functionalities listed in
+the table below, allowing for efficient and scalable data operations.
+
+This connector is built using the [TypeScript Data Connector SDK](https://github.com/hasura/ndc-sdk-typescript) and
+implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [Connector information in the Hasura Hub](https://hasura.io/connectors/azure-cosmos)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the Azure Cosmos DB for NoSQL connector:
+
+| Feature | Supported | Notes |
+|---------------------------------|-----------|-------|
+| Native Queries + Logical Models | ✅ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Nested Objects | ✅ | |
+| Nested Arrays | ✅ | |
+| Nested Filtering | ✅ | |
+| Nested Sorting | ❌ | |
+| Nested Relationships | ❌ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the Azure Cosmos DB for NoSQL connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector by choosing `hasura/azure-cosmos`. When the wizard runs, you'll also be prompted to enter the following
+env vars necessary for your connector to function:
+
+| Name | Description | Required |
+| -------------------------------- | ----------------------------------------------------------------------------------- | -------- |
+| AZURE_COSMOS_KEY | The Azure Cosmos DB for NoSQL DB key | Yes |
+| AZURE_COSMOS_DB_NAME | Name of the Azure Cosmos DB for NoSQL DB | Yes |
+| AZURE_COSMOS_ENDPOINT | Endpoint of the Azure Cosmos DB for NoSQL DB | Yes |
+| AZURE_COSMOS_MANAGED_CLIENT_ID | Managed client ID of the Azure Cosmos DB for NoSQL | Yes |
+| AZURE_COSMOS_NO_OF_ROWS_TO_FETCH | Maximum number of rows to fetch per container to infer the schema of the container. | No |
+
+Note: `AZURE_COSMOS_CONNECTOR_NO_OF_ROWS_TO_FETCH` is an optional field, with 100 rows to be fetched by default.
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## Contributing
+
+We're happy to receive any contributions from the community. Please refer to our
+[development guide](https://github.com/hasura/ndc-azure-cosmos-connector/blob/main/docs/development.md).
+
+## License
+
+The Hasura Azure Cosmos DB for NoSQL connector is available under the
+[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/azure-cosmos/logo.png b/registry/hasura/azure-cosmos/logo.png
new file mode 100644
index 00000000..001667d8
Binary files /dev/null and b/registry/hasura/azure-cosmos/logo.png differ
diff --git a/registry/hasura/azure-cosmos/metadata.json b/registry/hasura/azure-cosmos/metadata.json
new file mode 100644
index 00000000..209dc85b
--- /dev/null
+++ b/registry/hasura/azure-cosmos/metadata.json
@@ -0,0 +1,39 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to a Azure Cosmos DB for NoSQL and expose it to Hasura v3 Project",
+ "title": "Azure Cosmos DB for NoSQL Connector",
+ "logo": "logo.png",
+ "tags": [],
+ "latest_version": "v0.1.6"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": true,
+ "packages": [],
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-azure-cosmos-connector/",
+ "version": [
+ {
+ "tag": "v0.1.3",
+ "hash": "97032d1a41fd932d637b5ba24ca6611d9e1f4905",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.2",
+ "hash": "f67b2f80d64175a055a9489d4e59f30d5d3870a0",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.6",
+ "hash": "eb6beadf7d6102c647820a8ebb957b6f99b68f59",
+ "is_verified": true
+ }
+ ]
+ }
+ }
diff --git a/registry/hasura/azure-cosmos/releases/v0.1.2/connector-packaging.json b/registry/hasura/azure-cosmos/releases/v0.1.2/connector-packaging.json
new file mode 100644
index 00000000..d60eb2e7
--- /dev/null
+++ b/registry/hasura/azure-cosmos/releases/v0.1.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.2",
+ "uri": "https://github.com/hasura/ndc-azure-cosmos-connector/releases/download/v0.1.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "09ce246a9039d2aaf799a7e0402b243fb3763ba802535348a9fee243de1bf1b7"
+ },
+ "source": {
+ "hash": "f67b2f80d64175a055a9489d4e59f30d5d3870a0"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/azure-cosmos/releases/v0.1.3/connector-packaging.json b/registry/hasura/azure-cosmos/releases/v0.1.3/connector-packaging.json
new file mode 100644
index 00000000..3a268c01
--- /dev/null
+++ b/registry/hasura/azure-cosmos/releases/v0.1.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.3",
+ "uri": "https://github.com/hasura/ndc-azure-cosmos-connector/releases/download/v0.1.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "34655ff615be0d5738ffe1811972776808e9880a6fa3ec673123844c648154d7"
+ },
+ "source": {
+ "hash": "97032d1a41fd932d637b5ba24ca6611d9e1f4905"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/azure-cosmos/releases/v0.1.6/connector-packaging.json b/registry/hasura/azure-cosmos/releases/v0.1.6/connector-packaging.json
new file mode 100644
index 00000000..6b00fbfc
--- /dev/null
+++ b/registry/hasura/azure-cosmos/releases/v0.1.6/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.6",
+ "uri": "https://github.com/hasura/ndc-azure-cosmos-connector/releases/download/v0.1.6/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "c95285f38d38b213c1163ce60be87d868645d065c36ed4bac6b99ed89f5e5184"
+ },
+ "source": {
+ "hash": "eb6beadf7d6102c647820a8ebb957b6f99b68f59"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/azure-cosmos/releases/v0.1.7/connector-packaging.json b/registry/hasura/azure-cosmos/releases/v0.1.7/connector-packaging.json
new file mode 100644
index 00000000..21d4a4bc
--- /dev/null
+++ b/registry/hasura/azure-cosmos/releases/v0.1.7/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.7",
+ "uri": "https://github.com/hasura/ndc-azure-cosmos-connector/releases/download/v0.1.7/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "7871b676682fc72054166bde70384957bf744f04ed7a8352867cda04fbede904"
+ },
+ "source": {
+ "hash": "eb6beadf7d6102c647820a8ebb957b6f99b68f59"
+ }
+}
diff --git a/registry/hasura/azure-cosmos/releases/v0.2.0/connector-packaging.json b/registry/hasura/azure-cosmos/releases/v0.2.0/connector-packaging.json
new file mode 100644
index 00000000..5819d034
--- /dev/null
+++ b/registry/hasura/azure-cosmos/releases/v0.2.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.0",
+ "uri": "https://github.com/hasura/ndc-azure-cosmos-connector/releases/download/v0.2.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "4457e122a608f055fae0cc312b6850c0213ddbbfbce1b0af8356b5c00f2f322f"
+ },
+ "source": {
+ "hash": "5478d2a3b282d7a61961a8de8f7df3ebbb29c5c4"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/bigquery/README.md b/registry/hasura/bigquery/README.md
new file mode 100644
index 00000000..07619a99
--- /dev/null
+++ b/registry/hasura/bigquery/README.md
@@ -0,0 +1,91 @@
+# BigQuery Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-bigquery-blue.svg?style=flat)](https://hasura.io/connectors/bigquery)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
+
+With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your data models in
+BigQuery. This connector supports BigQuery's functionalities listed in the table below, allowing for efficient and
+scalable data operations. Additionally, users benefit from all the powerful features of Hasura’s Data Delivery Network
+(DDN) platform, including query pushdown capabilities that delegate query operations to the database, thereby enhancing
+query optimization and performance.
+
+This connector is built using the [Rust Data Connector SDK](https://github.com/hasura/ndc-hub#rusk-sdk) and implements
+the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [See the listing in the Hasura Hub](https://hasura.io/connectors/bigquery)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0/)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the BigQuery connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----- |
+| Native Queries + Logical Models | ❌ | |
+| Native Mutations | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ❌ | |
+| Views | ✅ | |
+| Remote Relationships | ❌ | |
+| Stored Procedures | ❌ | |
+| Custom Fields | ❌ | |
+| Mutations | ❌ | |
+| Distinct | ✅ | |
+| Enums | ❌ | |
+| Naming Conventions | ❌ | |
+| Default Values | ❌ | |
+| User-defined Functions | ❌ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the BigQuery connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector by choosing `hasura/bigquery`. When the wizard runs, you'll also be prompted to enter the following env
+vars necessary for your connector to function:
+
+### Environment Variables
+
+| Name | Description | Required | Default |
+| --------------------------- | ---------------------------------------------- | -------- | ------- |
+| HASURA_BIGQUERY_SERVICE_KEY | The service key of the BigQuery project | Yes | N/A |
+| HASURA_BIGQUERY_PROJECT_ID | The project ID of the BigQuery databse project | Yes | N/A |
+| HASURA_BIGQUERY_DATASET_ID | The dataset ID of the BigQuery databse project | Yes | N/A |
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## Documentation
+
+View the full documentation for the ndc-bigquery connector [here](./docs/readme.md).
+
+## Contributing
+
+We're happy to receive any contributions from the community. Please refer to our
+[development guide](./docs/development.md).
+
+## License
+
+The Hasura BigQuery connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/bigquery/logo.png b/registry/hasura/bigquery/logo.png
new file mode 100644
index 00000000..fa2a54e9
Binary files /dev/null and b/registry/hasura/bigquery/logo.png differ
diff --git a/registry/hasura/bigquery/metadata.json b/registry/hasura/bigquery/metadata.json
new file mode 100644
index 00000000..c2b35936
--- /dev/null
+++ b/registry/hasura/bigquery/metadata.json
@@ -0,0 +1,41 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to a BigQuery database and expose it to Hasura v3 Project",
+ "title": "BigQuery Connector",
+ "logo": "logo.png",
+ "tags": ["database"],
+ "latest_version": "v0.1.1"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": true,
+ "packages": [
+ {
+ "version": "0.1.1",
+ "uri": "https://github.com/hasura/ndc-bigquery/releases/download/v0.1.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "39ab09c4b96fa2ab285272e89c6d445fb7d5c0c33fd356cbe5bde99690a83781"
+ },
+ "source": {
+ "hash": "10ac176c590840971354a611c156aef6bc9915c4"
+ }
+ }
+ ],
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-bigquery/",
+ "version": [
+ {
+ "tag": "v0.1.1",
+ "hash": "10ac176c590840971354a611c156aef6bc9915c4",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/bigquery/releases/v0.1.1/connector-packaging.json b/registry/hasura/bigquery/releases/v0.1.1/connector-packaging.json
new file mode 100644
index 00000000..e29a4a6d
--- /dev/null
+++ b/registry/hasura/bigquery/releases/v0.1.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.1",
+ "uri": "https://github.com/hasura/ndc-bigquery/releases/download/v0.1.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "39ab09c4b96fa2ab285272e89c6d445fb7d5c0c33fd356cbe5bde99690a83781"
+ },
+ "source": {
+ "hash": "10ac176c590840971354a611c156aef6bc9915c4"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/cassandra/README.md b/registry/hasura/cassandra/README.md
new file mode 100644
index 00000000..f8bb5b6c
--- /dev/null
+++ b/registry/hasura/cassandra/README.md
@@ -0,0 +1,86 @@
+# Cassandra Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0/getting-started/overview/)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-sqlserver-blue.svg?style=flat)](https://hasura.io/connectors/sqlserver)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
+
+With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your data models in Cassandra.
+This connector supports Cassandra's functionalities listed in the table below, allowing for efficient and scalable data
+operations. Additionally, users benefit from all the powerful features of Hasura’s Data Delivery Network (DDN) platform,
+including query pushdown capabilities that delegate query operations to the database, thereby enhancing query
+optimization and performance.
+
+This connector implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [Connector information in the Hasura Hub](https://hasura.io/connectors/cassandra)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the Cassandra connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----- |
+| Native Queries + Logical Models | ✅ | |
+| Native Mutations | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ✅ | |
+| Views | ✅ | |
+| Remote Relationships | ✅ | |
+| Custom Fields | ❌ | |
+| Mutations | ❌ | |
+| Distinct | ❌ | |
+| Enums | ❌ | |
+| Naming Conventions | ❌ | |
+| Default Values | ❌ | |
+| User-defined Functions | ❌ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+## Using the Cassandra connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Name | Description | Required |
+|-----------------------|-----------------------------------------|----------|
+| CASSANDRA_HOST | Cassandra Host | true |
+| CASSANDRA_KEYSPACE | Cassandra KeySpace | true |
+| CASSANDRA_USERNAME | Cassandra username | true |
+| CASSANDRA_PASSWORD | Cassandra password | true |
+| CASSANDRA_PORT | Cassandra port | false |
+| CASSANDRA_DC | Cassandra Data Center | false |
+| CASSANDRA_SSL_CA_PATH | Cassandra self-signed root cert path | false |
+| CASSANDRA_SSL | Cassandra SSL | false |
+
+
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## License
+
+The Hasura Cassandra connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/cassandra/logo.png b/registry/hasura/cassandra/logo.png
new file mode 100644
index 00000000..cb003c2d
Binary files /dev/null and b/registry/hasura/cassandra/logo.png differ
diff --git a/registry/hasura/cassandra/metadata.json b/registry/hasura/cassandra/metadata.json
new file mode 100644
index 00000000..d13e3484
--- /dev/null
+++ b/registry/hasura/cassandra/metadata.json
@@ -0,0 +1,30 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "The Cassandra Native Data Connector allows for connecting to a Cassandra instance giving you an instant GraphQL API on top of your Cassandra data.",
+ "title": "Cassandra Native Data Connector",
+ "logo": "logo.png",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v1.0.7"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-cassandra/",
+ "version": [
+ {
+ "tag": "v1.0.7",
+ "hash": "79d7ef00c57f5b58e5e4f27e8ec89ffc2a685ec7",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/cassandra/releases/v1.0.7/connector-packaging.json b/registry/hasura/cassandra/releases/v1.0.7/connector-packaging.json
new file mode 100644
index 00000000..4d10f659
--- /dev/null
+++ b/registry/hasura/cassandra/releases/v1.0.7/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "1.0.7",
+ "uri": "https://github.com/hasura/ndc-cassandra/releases/download/v1.0.7/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "6f10cb6e2fd436e61e81328f27df03f262154ecf03238cd030ec49c75b0f97a9"
+ },
+ "source": {
+ "hash": "79d7ef00c57f5b58e5e4f27e8ec89ffc2a685ec7"
+ }
+}
diff --git a/registry/hasura/clickhouse/README.md b/registry/hasura/clickhouse/README.md
new file mode 100644
index 00000000..d53dd4bb
--- /dev/null
+++ b/registry/hasura/clickhouse/README.md
@@ -0,0 +1,19 @@
+## Overview
+
+The ClickHouse Native Data Connector allows for connecting to a ClickHouse instance giving you an instant GraphQL API on top of your ClickHouse data.
+This uses the [Rust Data Connector SDK](https://github.com/hasura/ndc-hub#rusk-sdk) from the [Data connector Hub](https://github.com/hasura/ndc-hub) and implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+ClickHouse is a powerful open-source columnar database that offers a range of features designed for speed and efficiency in processing large volumes of data. ClickHouse is an excellent choice for a database when you are dealing with large volumes of data and require high-speed data retrieval, aggregation, and analysis. It's particularly well-suited for real-time analytics and handling time-series data, log data, or any scenario where read operations vastly outnumber writes. ClickHouse thrives in environments where query performance and the ability to generate reports quickly are critical, such as in financial analysis, IoT data management, and online analytical processing (OLAP). Furthermore, its column-oriented architecture makes it ideal for queries that need to scan large datasets but only access a subset of columns.
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+5. Create a [ClickHouse account](https://clickhouse.cloud/signUp?loc=nav-get-started) if you don't already have one.
+6. Make sure to make your ClickHouse service open to the public or add Hasura's IP to the allowlist.
+
+## Using the ClickHouse connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=ClickHouse) to get started with the ClickHouse connector.
diff --git a/registry/clickhouse/logo.png b/registry/hasura/clickhouse/logo.png
similarity index 100%
rename from registry/clickhouse/logo.png
rename to registry/hasura/clickhouse/logo.png
diff --git a/registry/hasura/clickhouse/metadata.json b/registry/hasura/clickhouse/metadata.json
new file mode 100644
index 00000000..05e18ab7
--- /dev/null
+++ b/registry/hasura/clickhouse/metadata.json
@@ -0,0 +1,110 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "The Clickhouse Native Data Connector allows for connecting to a Clickhouse instance giving you an instant GraphQL API on top of your Clickhouse data.",
+ "title": "Clickhouse Native Data Connector",
+ "logo": "logo.png",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v1.0.4"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-clickhouse/",
+ "version": [
+ {
+ "tag": "v1.0.4",
+ "hash": "2702f3f3cd1b399a42d451f9fcfe75d641b1cfeb",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.3",
+ "hash": "e359aed45779b3c249c164f76cd6450c272739ce",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "ec2463375b9244e008005d44a2b82288867c2d4e",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "a5df7ec5d5a7ca65dcf6a16460dacbd0b81e39f2",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "3da872909893964aabaedb4659af129f0ceaa565",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.11",
+ "hash": "7ef634c61649a17deb867e5a36db4220c66f0013",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.10",
+ "hash": "dbe5b7765b1c9276e5734c8fbc5005e7b71d0500",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.9",
+ "hash": "93752f433f4e7c91f0c13d92ea9369deb97d1970",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.8",
+ "hash": "f1629f715770358e587a25f9a0ca015728d422dd",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.7",
+ "hash": "ece8fb0fcfcd9650dd5060f882baa94889eccf2e",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.6",
+ "hash": "7bafb9fd2b9c3288b6f7279c3d62793cc78d8fe0",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.5",
+ "hash": "c89d9410cf885cbfe4156c9e7bf65211144018df",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.4",
+ "hash": "cd1f81b98b264df1e20f7f84a664fb272fac19b1",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.3",
+ "hash": "97175685b51a31a5ac99672746901d0df6d4eb35",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.2",
+ "hash": "6b349d7f0e8449611a24d6b8cad34aeb3162b583",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.1",
+ "hash": "521365decd10db124c9865bd29fc4e60025a6892",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.0",
+ "hash": "4ec3b65c4fdbb37896e105ca89f8bdb1c25b277b",
+ "is_verified": true
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.1/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.1/connector-packaging.json
new file mode 100644
index 00000000..4b2af140
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.1",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "5e88d1b7fb14638ceeaf5b6fac775b6cc68d62d8537fc25cd8e87cdf4dfb443e"
+ },
+ "source": {
+ "hash": "521365decd10db124c9865bd29fc4e60025a6892"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.10/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.10/connector-packaging.json
new file mode 100644
index 00000000..7c6cddfa
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.10/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.10",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.10/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "4eb32262e528d0261afd0f6a4b283a6fe3fd0edf395b732fe6abcacfdf4ff999"
+ },
+ "source": {
+ "hash": "dbe5b7765b1c9276e5734c8fbc5005e7b71d0500"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.11/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.11/connector-packaging.json
new file mode 100644
index 00000000..98affcb8
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.11/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.11",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.11/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "97dccf8cfac9865eb6a0e3aee65fcd91a7c14a48e1f65cf985df3734f596e13b"
+ },
+ "source": {
+ "hash": "7ef634c61649a17deb867e5a36db4220c66f0013"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.2/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.2/connector-packaging.json
new file mode 100644
index 00000000..c4c74542
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.2",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "198ed9a830a403cf855d449b3d99313ad01de4df21663c0648ab95fa25b58325"
+ },
+ "source": {
+ "hash": "6b349d7f0e8449611a24d6b8cad34aeb3162b583"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.3/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.3/connector-packaging.json
new file mode 100644
index 00000000..e8c0c7b1
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.3",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "f1b1020e57fdb969b545f0e5ad37f1000c2e5084041695cc2e885e4cb634b35c"
+ },
+ "source": {
+ "hash": "97175685b51a31a5ac99672746901d0df6d4eb35"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.4/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.4/connector-packaging.json
new file mode 100644
index 00000000..e71969cf
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.4/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.4",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.4/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "8ab07763d887848a555f26aae973e34e872ec0617ccc17d2eac96d67fe223e87"
+ },
+ "source": {
+ "hash": "cd1f81b98b264df1e20f7f84a664fb272fac19b1"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.5/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.5/connector-packaging.json
new file mode 100644
index 00000000..85909a0a
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.5/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.5",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.5/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "8504769a2bd8ac63f979dc5447dc106da4360cfbcdcacc9edb8765eb434e1e11"
+ },
+ "source": {
+ "hash": "c89d9410cf885cbfe4156c9e7bf65211144018df"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.6/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.6/connector-packaging.json
new file mode 100644
index 00000000..69684a34
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.6/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.6",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.6/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "c20dd539761084f9a3a0effa68011a6d57da92dbdf4f805bac93bc825f5c40ef"
+ },
+ "source": {
+ "hash": "7bafb9fd2b9c3288b6f7279c3d62793cc78d8fe0"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.7/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.7/connector-packaging.json
new file mode 100644
index 00000000..c1513463
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.7/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.7",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.7/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "a6acbd32400b2a74009009933a8469892bf7781969e58aef7532121198af1e4f"
+ },
+ "source": {
+ "hash": "ece8fb0fcfcd9650dd5060f882baa94889eccf2e"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.8/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.8/connector-packaging.json
new file mode 100644
index 00000000..66c3d5bb
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.8/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.8",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.8/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "4de1a70042d222040523faf6aa1771be23d5156258318272fc31fa1dd49c41ea"
+ },
+ "source": {
+ "hash": "f1629f715770358e587a25f9a0ca015728d422dd"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v0.2.9/connector-packaging.json b/registry/hasura/clickhouse/releases/v0.2.9/connector-packaging.json
new file mode 100644
index 00000000..f89da44f
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v0.2.9/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.9",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v0.2.9/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "7c1f2915336dfcea291e3dc50b7cfd7df72216346b8f4d6a4073e13d55c53b90"
+ },
+ "source": {
+ "hash": "93752f433f4e7c91f0c13d92ea9369deb97d1970"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v1.0.0/connector-packaging.json b/registry/hasura/clickhouse/releases/v1.0.0/connector-packaging.json
new file mode 100644
index 00000000..dbfbd5ac
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v1.0.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.0",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v1.0.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e872f3a10ac9a3c6ab81fe958263941b0a998e5bce2d978685a65cfe679e53c6"
+ },
+ "source": {
+ "hash": "3da872909893964aabaedb4659af129f0ceaa565"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v1.0.1/connector-packaging.json b/registry/hasura/clickhouse/releases/v1.0.1/connector-packaging.json
new file mode 100644
index 00000000..2e0fe051
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v1.0.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.1",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v1.0.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "0069c1d611e0edaafc88de0ee3d22f5f6ed813757d077885c0c3caa1d8ef7d14"
+ },
+ "source": {
+ "hash": "a5df7ec5d5a7ca65dcf6a16460dacbd0b81e39f2"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v1.0.2/connector-packaging.json b/registry/hasura/clickhouse/releases/v1.0.2/connector-packaging.json
new file mode 100644
index 00000000..30627125
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v1.0.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.2",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v1.0.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "4eec86f9b52036cd1d6642b8fb3cb27ccc0dfe4a9a273fe2186c02cf0482f2fc"
+ },
+ "source": {
+ "hash": "ec2463375b9244e008005d44a2b82288867c2d4e"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v1.0.3/connector-packaging.json b/registry/hasura/clickhouse/releases/v1.0.3/connector-packaging.json
new file mode 100644
index 00000000..6be655ac
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v1.0.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.3",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v1.0.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e8dfc5d3a0706ebe9391fa7a1735d42395211bd462ad7f3cfe135b17036ec9e5"
+ },
+ "source": {
+ "hash": "e359aed45779b3c249c164f76cd6450c272739ce"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/clickhouse/releases/v1.0.4/connector-packaging.json b/registry/hasura/clickhouse/releases/v1.0.4/connector-packaging.json
new file mode 100644
index 00000000..b9178453
--- /dev/null
+++ b/registry/hasura/clickhouse/releases/v1.0.4/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.4",
+ "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v1.0.4/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e1528c4e7453839547c43fb831f5733cbbb3254da49e7df6226e1f83fc467f3f"
+ },
+ "source": {
+ "hash": "2702f3f3cd1b399a42d451f9fcfe75d641b1cfeb"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/duckdb/README.md b/registry/hasura/duckdb/README.md
new file mode 100644
index 00000000..00e60f11
--- /dev/null
+++ b/registry/hasura/duckdb/README.md
@@ -0,0 +1,95 @@
+# Hasura DuckDB Connector
+
+
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/connectors/duckdb)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-duckdb-blue.svg?style=flat)](https://hasura.io/connectors/duckdb)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](https://github.com/hasura/ndc-duckdb/blob/main/LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](https://github.com/hasura/ndc-duckdb/blob/main/README.md)
+
+The Hasura DuckDB Connector allows for connecting to a DuckDB database or a MotherDuck hosted DuckDB database to give
+you an instant GraphQL API on top of your DuckDB data.
+
+This connector is built using the [Typescript Data Connector SDK](https://github.com/hasura/ndc-sdk-typescript) and
+implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [See the listing in the Hasura Hub](https://hasura.io/connectors/duckdb)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0/index/)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the DuckDB connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----- |
+| Native Queries + Logical Models | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ❌ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ✅ | |
+| Views | ❌ | |
+| Distinct | ❌ | |
+| Remote Relationships | ✅ | |
+| Custom Fields | ❌ | |
+| Mutations | ❌ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+5. Have a [MotherDuck](https://motherduck.com/) hosted DuckDB database, or a persitent DuckDB database file — for
+ supplying data to your API.
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the DuckDB connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Name | Description |
+| ---------- | ------------------------------------------------------------------------------------------- |
+| DUCKDB_URL | The connection string for the DuckDB database, or the file path to the DuckDB database file |
+
+If you are attaching to a local DuckDB file, first make sure that the file is located inside the connector directory.
+For example, if you had a `data.duckdb` file you could place it at `/app/connector/duckdb/data.duckdb`. Files in the
+connector directory get mounted to `/etc/connector/`.
+
+**Your experience mounting files may vary, and while useful to explore a file locally, it's not recommended to attempt
+to deploy a connector using a locally mounted file.**
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## Documentation
+
+View the full documentation for the DuckDB connector
+[here](https://github.com/hasura/ndc-duckdb/blob/main/docs/index.md).
+
+## Contributing
+
+Check out our [contributing guide](https://github.com/hasura/ndc-duckdb/blob/main/docs/contributing.md) for more
+details.
+
+## License
+
+The DuckDB connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/duckdb/logo.svg b/registry/hasura/duckdb/logo.svg
new file mode 100644
index 00000000..c6d5d2f0
--- /dev/null
+++ b/registry/hasura/duckdb/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/registry/hasura/duckdb/metadata.json b/registry/hasura/duckdb/metadata.json
new file mode 100644
index 00000000..9231638a
--- /dev/null
+++ b/registry/hasura/duckdb/metadata.json
@@ -0,0 +1,35 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to a DuckDB database and expose them to Hasura v3 Project",
+ "title": "(MotherDuck) DuckDB Native Data Connector",
+ "logo": "logo.svg",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v0.1.0"
+ },
+ "author": {
+ "support_email": "Community Supported",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": false,
+ "is_hosted_by_hasura": true,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-duckdb",
+ "version": [
+ {
+ "tag": "v0.0.17",
+ "hash": "875c5fb4539febea0e5dad569fd8b64557870c1c",
+ "is_verified": false
+ },
+ {
+ "tag": "v0.1.0",
+ "hash": "580d059cf6250da21e7fdb9bcfc78f6803c626f5",
+ "is_verified": false
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/duckdb/releases/v0.0.17/connector-packaging.json b/registry/hasura/duckdb/releases/v0.0.17/connector-packaging.json
new file mode 100644
index 00000000..001fa1af
--- /dev/null
+++ b/registry/hasura/duckdb/releases/v0.0.17/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.17",
+ "uri": "https://github.com/hasura/ndc-duckdb/releases/download/v0.0.17/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "3449766fff1794f0866f19505355b37d151d91682e1f784aef664b91abd57570"
+ },
+ "source": {
+ "hash": "875c5fb4539febea0e5dad569fd8b64557870c1c"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/duckdb/releases/v0.0.9/connector-packaging.json b/registry/hasura/duckdb/releases/v0.0.9/connector-packaging.json
new file mode 100644
index 00000000..120e0e0d
--- /dev/null
+++ b/registry/hasura/duckdb/releases/v0.0.9/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.9",
+ "uri": "https://github.com/hasura/ndc-duckdb/releases/download/v0.0.9/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "1117ed3274a7cdab4ab61082cf860ad045d242e5e7ffb1ac8f76bb1053e63094"
+ },
+ "source": {
+ "hash": "5da63b6d05a87529967346b24f80d25bcf16f103"
+ }
+}
diff --git a/registry/hasura/duckdb/releases/v0.1.0/connector-packaging.json b/registry/hasura/duckdb/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..117716c7
--- /dev/null
+++ b/registry/hasura/duckdb/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-duckdb/releases/download/v0.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "fefe1c9bb0299af3eb9a7b8c6219ce8bebb7f8b45f08efc83b091a79eb389378"
+ },
+ "source": {
+ "hash": "580d059cf6250da21e7fdb9bcfc78f6803c626f5"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/elasticsearch/README.md b/registry/hasura/elasticsearch/README.md
new file mode 100644
index 00000000..6fc1f98f
--- /dev/null
+++ b/registry/hasura/elasticsearch/README.md
@@ -0,0 +1,97 @@
+# Elasticsearch Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-elasticsearch-blue.svg?style=flat)](https://hasura.io/connectors/elasticsearch)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0)
+
+With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your documents in
+Elasticsearch. This connector supports Elasticsearch functionalities listed in the table below, allowing for efficient
+and scalable data operations. Additionally, you will benefit from all the powerful features of Hasura’s Data Delivery
+Network (DDN) platform, including query pushdown capabilities that delegate all query operations to the Elasticsearch,
+thereby enhancing query optimization and performance.
+
+This connector is built using the [Go Data Connector SDK](https://github.com/hasura/ndc-sdk-go) and implements the
+[Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [See the listing in the Hasura Hub](https://hasura.io/connectors/elasticsearch)
+- [Hasura DDN Documentation](https://hasura.io/docs/3.0)
+- [Hasura DDN Quickstart](https://hasura.io/docs/3.0/getting-started/quickstart)
+- [GraphQL on Elasticsearch](https://hasura.io/graphql/database/elasticsearch)
+
+Docs for the Elasticsearch data connector:
+
+- [Architecture](https://github.com/hasura/ndc-elasticsearch/blob/main/docs/architecture.md)
+- [Code of Conduct](https://github.com/hasura/ndc-elasticsearch/blob/main/docs/code-of-conduct.md)
+- [Contributing](https://github.com/hasura/ndc-elasticsearch/blob/main/docs/contributing.md)
+- [Configuration](https://github.com/hasura/ndc-elasticsearch/blob/main/docs/configuration.md)
+- [Development](https://github.com/hasura/ndc-elasticsearch/blob/main/docs/development.md)
+- [Security](https://github.com/hasura/ndc-elasticsearch/blob/main/docs/security.md)
+- [Support](https://github.com/hasura/ndc-elasticsearch/blob/main/docs/support.md)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the Elasticsearch connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----- |
+| Native Queries + Logical Models | ✅ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Nested Objects | ✅ | |
+| Nested Arrays | ✅ | |
+| Nested Filtering | ✅ | |
+| Nested Sorting | ❌ | |
+| Nested Relationships | ❌ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the Elasticsearch connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Environment Variable | Description | Required | Example Value |
+| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------- |
+| `ELASTICSEARCH_URL` | The comma-separated list of Elasticsearch host addresses for connection (Use `local.hasura.dev` instead of `localhost` if your connector is running on your local machine) | Yes | `https://example.es.gcp.cloud.es.io:9200` |
+| `ELASTICSEARCH_USERNAME` | The username for authenticating to the Elasticsearch cluster | Yes | `admin` |
+| `ELASTICSEARCH_PASSWORD` | The password for the Elasticsearch user account | Yes | `default` |
+| `ELASTICSEARCH_API_KEY` | The Elasticsearch API key for authenticating to the Elasticsearch cluster | No | `ABCzYWk0NEI0aDRxxxxxxxxxx1k6LWVQa2gxMUpRTUstbjNwTFIzbGoyUQ==` |
+| `ELASTICSEARCH_CA_CERT_PATH` | The path to the Certificate Authority (CA) certificate for verifying the Elasticsearch server's SSL certificate | No | `/etc/connector/cacert.pem` |
+| `ELASTICSEARCH_INDEX_PATTERN` | The pattern for matching Elasticsearch indices, potentially including wildcards, used by the connector | No | `hasura*` |
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## Contributing
+
+Check out our [contributing guide](https://github.com/hasura/ndc-elasticsearch/blob/main/docs/contributing.md) for more
+details.
+
+## License
+
+The Elasticsearch connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/elasticsearch/logo.png b/registry/hasura/elasticsearch/logo.png
new file mode 100644
index 00000000..06b4a258
Binary files /dev/null and b/registry/hasura/elasticsearch/logo.png differ
diff --git a/registry/hasura/elasticsearch/metadata.json b/registry/hasura/elasticsearch/metadata.json
new file mode 100644
index 00000000..05f0f659
--- /dev/null
+++ b/registry/hasura/elasticsearch/metadata.json
@@ -0,0 +1,139 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "The Hasura Elasticsearch Connector allows for connecting to a Elasticsearch search engine, giving you an instant GraphQL API on top of your Elasticsearch data.",
+ "title": "Elasticsearch Native Data Connector",
+ "logo": "logo.png",
+ "tags": [
+ "search"
+ ],
+ "latest_version": "v1.0.3"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": true,
+ "packages": [
+ {
+ "version": "0.1.0",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v0.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "a856e10b6b30b516db2bb38af08037ad5db32bfd4ec072270fb8685872e13d5b"
+ },
+ "source": {
+ "hash": "4c6fabedaf3a28cdd6c55a18a37e1db974a83262"
+ }
+ },
+ {
+ "version": "0.1.1",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v0.1.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "60629c9b24467fa4ed58c87732410203eedbdee31cdd18e90c635f10d23a8e23"
+ },
+ "source": {
+ "hash": "413a2a4ddfd1910757c40c38e9a18148bc3b3bdc"
+ }
+ },
+ {
+ "version": "0.2.0",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v0.2.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "7ba4762ae3863a2ea149a5ecf4a93f19a7889f9d36dde27b1cb60b6758ad0e3a"
+ },
+ "source": {
+ "hash": "f5938f8c76829de7f16cf291c95a06f590b16d9a"
+ }
+ },
+ {
+ "version": "1.0.0",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v1.0.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "6ca06b00361a272b0afd7ce5ac314a12460b9c99336e43a4a317de00f00ae6ae"
+ },
+ "source": {
+ "hash": "9f1f508f551b4a9dec02c49e3312f38c24bb16c4"
+ }
+ },
+ {
+ "version": "1.0.1",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v1.0.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "83b0b4f5b1f60a50e303f6354c4d48d397fc7d0a361eb8a14d8fe11b63fe6abd"
+ },
+ "source": {
+ "hash": "72fad205f57e88781da6acafe1e03a7d220467c7"
+ }
+ },
+ {
+ "version": "1.0.2",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v1.0.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "d9548c6463e29f2b7c2d40923cee2c2073b0ff7cefe83b68f7cb7b0d485cf8f1"
+ },
+ "source": {
+ "hash": "19c1dfbce44db9fb9a71e9ca68c93de2d5fade6c"
+ }
+ },
+ {
+ "version": "1.0.3",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v1.0.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "42090a8ad64abe5002b2053041c308ab66dde430186eeb7b6ee76eb9bf8095be"
+ },
+ "source": {
+ "hash": "4993fed05687b9464c64d44140cd801471ef32b9"
+ }
+ }
+ ],
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-elasticsearch/",
+ "version": [
+ {
+ "tag": "v0.1.0",
+ "hash": "4c6fabedaf3a28cdd6c55a18a37e1db974a83262",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.1",
+ "hash": "413a2a4ddfd1910757c40c38e9a18148bc3b3bdc",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.0",
+ "hash": "f5938f8c76829de7f16cf291c95a06f590b16d9a",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "9f1f508f551b4a9dec02c49e3312f38c24bb16c4",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "72fad205f57e88781da6acafe1e03a7d220467c7",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "19c1dfbce44db9fb9a71e9ca68c93de2d5fade6c",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.3",
+ "hash": "4993fed05687b9464c64d44140cd801471ef32b9",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/elasticsearch/releases/v0.1.0/connector-packaging.json b/registry/hasura/elasticsearch/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..32c4dfcf
--- /dev/null
+++ b/registry/hasura/elasticsearch/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v0.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "a856e10b6b30b516db2bb38af08037ad5db32bfd4ec072270fb8685872e13d5b"
+ },
+ "source": {
+ "hash": "4c6fabedaf3a28cdd6c55a18a37e1db974a83262"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/elasticsearch/releases/v0.1.1/connector-packaging.json b/registry/hasura/elasticsearch/releases/v0.1.1/connector-packaging.json
new file mode 100644
index 00000000..601a6f3e
--- /dev/null
+++ b/registry/hasura/elasticsearch/releases/v0.1.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.1",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v0.1.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "60629c9b24467fa4ed58c87732410203eedbdee31cdd18e90c635f10d23a8e23"
+ },
+ "source": {
+ "hash": "413a2a4ddfd1910757c40c38e9a18148bc3b3bdc"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/elasticsearch/releases/v0.2.0/connector-packaging.json b/registry/hasura/elasticsearch/releases/v0.2.0/connector-packaging.json
new file mode 100644
index 00000000..03fddc85
--- /dev/null
+++ b/registry/hasura/elasticsearch/releases/v0.2.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.0",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v0.2.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "7ba4762ae3863a2ea149a5ecf4a93f19a7889f9d36dde27b1cb60b6758ad0e3a"
+ },
+ "source": {
+ "hash": "f5938f8c76829de7f16cf291c95a06f590b16d9a"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/elasticsearch/releases/v1.0.0/connector-packaging.json b/registry/hasura/elasticsearch/releases/v1.0.0/connector-packaging.json
new file mode 100644
index 00000000..915b6fd6
--- /dev/null
+++ b/registry/hasura/elasticsearch/releases/v1.0.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.0",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v1.0.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "6ca06b00361a272b0afd7ce5ac314a12460b9c99336e43a4a317de00f00ae6ae"
+ },
+ "source": {
+ "hash": "9f1f508f551b4a9dec02c49e3312f38c24bb16c4"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/elasticsearch/releases/v1.0.1/connector-packaging.json b/registry/hasura/elasticsearch/releases/v1.0.1/connector-packaging.json
new file mode 100644
index 00000000..9e59d405
--- /dev/null
+++ b/registry/hasura/elasticsearch/releases/v1.0.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.1",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v1.0.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "83b0b4f5b1f60a50e303f6354c4d48d397fc7d0a361eb8a14d8fe11b63fe6abd"
+ },
+ "source": {
+ "hash": "72fad205f57e88781da6acafe1e03a7d220467c7"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/elasticsearch/releases/v1.0.2/connector-packaging.json b/registry/hasura/elasticsearch/releases/v1.0.2/connector-packaging.json
new file mode 100644
index 00000000..b9a1987a
--- /dev/null
+++ b/registry/hasura/elasticsearch/releases/v1.0.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.2",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v1.0.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "d9548c6463e29f2b7c2d40923cee2c2073b0ff7cefe83b68f7cb7b0d485cf8f1"
+ },
+ "source": {
+ "hash": "19c1dfbce44db9fb9a71e9ca68c93de2d5fade6c"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/elasticsearch/releases/v1.0.3/connector-packaging.json b/registry/hasura/elasticsearch/releases/v1.0.3/connector-packaging.json
new file mode 100644
index 00000000..832d6b92
--- /dev/null
+++ b/registry/hasura/elasticsearch/releases/v1.0.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.3",
+ "uri": "https://github.com/hasura/ndc-elasticsearch/releases/download/v1.0.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "42090a8ad64abe5002b2053041c308ab66dde430186eeb7b6ee76eb9bf8095be"
+ },
+ "source": {
+ "hash": "4993fed05687b9464c64d44140cd801471ef32b9"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/go/README.md b/registry/hasura/go/README.md
new file mode 100644
index 00000000..e6dc282d
--- /dev/null
+++ b/registry/hasura/go/README.md
@@ -0,0 +1,36 @@
+## Overview
+
+The Go connector allows you to expose Go functions as NDC functions/procedures for use in your Hasura DDN subgraphs. The
+connector provides a boilerplate with NDC Go SDK and a generation tool to generate NDC schema and DRY functions from Go
+code.
+
+- [GitHub Repository](https://github.com/hasura/ndc-sdk-go)
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the Go connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/business-logic/go#add-the-go-connector-to-a-project) to get
+started with the Go connector.
+
+## Compatibility
+
+| Go Version | SDK Version |
+| ---------- | ----------- |
+| 1.21+ | v1.x |
+| 1.19+ | v0.x |
+
+## More Information
+
+- [Hasura DDN Documentation](https://hasura.io/docs/3.0/business-logic/go)
+- [GitHub Repository](https://github.com/hasura/ndc-sdk-go/tree/main/cmd/hasura-ndc-go)
diff --git a/registry/go/logo.svg b/registry/hasura/go/logo.svg
similarity index 100%
rename from registry/go/logo.svg
rename to registry/hasura/go/logo.svg
diff --git a/registry/hasura/go/metadata.json b/registry/hasura/go/metadata.json
new file mode 100644
index 00000000..cf73be01
--- /dev/null
+++ b/registry/hasura/go/metadata.json
@@ -0,0 +1,68 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "The Go connector allows you to expose Go functions as NDC functions/procedures for use in your Hasura DDN subgraphs.",
+ "title": "Go Connector",
+ "logo": "logo.svg",
+ "tags": [],
+ "latest_version": "v1.5.1"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-sdk-go",
+ "version": [
+ {
+ "tag": "v1.5.1",
+ "hash": "e6a7fd89d13f0a8b12732ee88ae5bbe775ec60ba",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.4.0",
+ "hash": "c31575e0eb0c55e0f326c859f7c1a830dc09c424",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.3.1",
+ "hash": "f6093ca96fe64063df786159a2bb061c01d9197d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.2.3",
+ "hash": "1fdc72d31dccae129d6d626dea6e31b5cd3b0b18",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.2",
+ "hash": "32e28e549f11b790c320b6a79ad33ad8e6df5bd7",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "42259e9a9c719131721f0058c552e9b8a4a36973",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.6.3",
+ "hash": "726b3fbb442fae62d18840905545f1d663baf87b",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.5.2",
+ "hash": "79788195359a5e3cf0fc8896b61eb8f4d9196427",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.4.0",
+ "hash": "ac27498b6dbd5e803ca97e0fc702f52e2d9b429d",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/go/releases/v0.4.0/connector-packaging.json b/registry/hasura/go/releases/v0.4.0/connector-packaging.json
new file mode 100644
index 00000000..bd289378
--- /dev/null
+++ b/registry/hasura/go/releases/v0.4.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.4.0",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v0.4.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "13e6c4e970e032307cbb9edbb9d79ad555880c46d8a58d98f23ce441cef7d7b2"
+ },
+ "source": {
+ "hash": "ac27498b6dbd5e803ca97e0fc702f52e2d9b429d"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/go/releases/v0.5.2/connector-packaging.json b/registry/hasura/go/releases/v0.5.2/connector-packaging.json
new file mode 100644
index 00000000..898ed0eb
--- /dev/null
+++ b/registry/hasura/go/releases/v0.5.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.5.2",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v0.5.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "820018ed9e9f19fd969a87ce7c5da1e6d8408a271290c5fa63a5730ad391f26d"
+ },
+ "source": {
+ "hash": "79788195359a5e3cf0fc8896b61eb8f4d9196427"
+ }
+}
diff --git a/registry/hasura/go/releases/v0.6.3/connector-packaging.json b/registry/hasura/go/releases/v0.6.3/connector-packaging.json
new file mode 100644
index 00000000..d9d102f5
--- /dev/null
+++ b/registry/hasura/go/releases/v0.6.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.6.3",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v0.6.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e991b20f53c2d0bfd6fc11468c177154b38eb23ad5b708c0cd408b533b8404e8"
+ },
+ "source": {
+ "hash": "726b3fbb442fae62d18840905545f1d663baf87b"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/go/releases/v0.6.5/connector-packaging.json b/registry/hasura/go/releases/v0.6.5/connector-packaging.json
new file mode 100644
index 00000000..c9074751
--- /dev/null
+++ b/registry/hasura/go/releases/v0.6.5/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.6.5",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v0.6.5/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "83aa8fb301c562af143c18faaa51d1ba849e960196ff3abe3407275916f6ad71"
+ },
+ "source": {
+ "hash": "c9e64bdf5972aca5f9c350ff6e6b05eff32af7c9"
+ }
+}
diff --git a/registry/hasura/go/releases/v1.0.0/connector-packaging.json b/registry/hasura/go/releases/v1.0.0/connector-packaging.json
new file mode 100644
index 00000000..8df6d091
--- /dev/null
+++ b/registry/hasura/go/releases/v1.0.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.0",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v1.0.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "906db79cf5565eaca731436180295d2d7ee81246b57cc7dcdde14585841f53a5"
+ },
+ "source": {
+ "hash": "42259e9a9c719131721f0058c552e9b8a4a36973"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/go/releases/v1.1.2/connector-packaging.json b/registry/hasura/go/releases/v1.1.2/connector-packaging.json
new file mode 100644
index 00000000..f16c490e
--- /dev/null
+++ b/registry/hasura/go/releases/v1.1.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.1.2",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v1.1.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "2691a5a266da6a17c1d6681c7524ef85ce35842d391769decccd6ba4f05e3ac4"
+ },
+ "source": {
+ "hash": "32e28e549f11b790c320b6a79ad33ad8e6df5bd7"
+ }
+}
diff --git a/registry/hasura/go/releases/v1.2.3/connector-packaging.json b/registry/hasura/go/releases/v1.2.3/connector-packaging.json
new file mode 100644
index 00000000..cf31e4f5
--- /dev/null
+++ b/registry/hasura/go/releases/v1.2.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.2.3",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v1.2.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "c8baf7a8eead7fa705871269f4fe552cb0c3e8d7cc98bace6448a8a63f96fa89"
+ },
+ "source": {
+ "hash": "1fdc72d31dccae129d6d626dea6e31b5cd3b0b18"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/go/releases/v1.2.5/connector-packaging.json b/registry/hasura/go/releases/v1.2.5/connector-packaging.json
new file mode 100644
index 00000000..6d6c27ec
--- /dev/null
+++ b/registry/hasura/go/releases/v1.2.5/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.2.5",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v1.2.5/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "06cb73837c36969c0d9249816ff5061854f2eced0ea3f24c7c8b7867e9f5653c"
+ },
+ "source": {
+ "hash": "53706fbf16bab34ee7a375b8f502016725a4928c"
+ }
+}
diff --git a/registry/hasura/go/releases/v1.3.1/connector-packaging.json b/registry/hasura/go/releases/v1.3.1/connector-packaging.json
new file mode 100644
index 00000000..347fc613
--- /dev/null
+++ b/registry/hasura/go/releases/v1.3.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.3.1",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v1.3.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "36b14d6475c749bbb1d29c0371bb7091a0cd5db54d2f83caae3f3a15505dedb9"
+ },
+ "source": {
+ "hash": "f6093ca96fe64063df786159a2bb061c01d9197d"
+ }
+}
diff --git a/registry/hasura/go/releases/v1.4.0/connector-packaging.json b/registry/hasura/go/releases/v1.4.0/connector-packaging.json
new file mode 100644
index 00000000..efd405c8
--- /dev/null
+++ b/registry/hasura/go/releases/v1.4.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.4.0",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v1.4.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "a24b5a8a6cc58280868f31f1e8bb39b420d4829efe68bcbeb6992be1a2c2fee5"
+ },
+ "source": {
+ "hash": "c31575e0eb0c55e0f326c859f7c1a830dc09c424"
+ }
+}
diff --git a/registry/hasura/go/releases/v1.5.1/connector-packaging.json b/registry/hasura/go/releases/v1.5.1/connector-packaging.json
new file mode 100644
index 00000000..8cdb3efc
--- /dev/null
+++ b/registry/hasura/go/releases/v1.5.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.5.1",
+ "uri": "https://github.com/hasura/ndc-sdk-go/releases/download/v1.5.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "153379fbbedfe4e6682dc882bdf60bb5285c884328c3b29dfe0e36db8c80fe86"
+ },
+ "source": {
+ "hash": "e6a7fd89d13f0a8b12732ee88ae5bbe775ec60ba"
+ }
+}
diff --git a/registry/hasura/graphql/README.md b/registry/hasura/graphql/README.md
new file mode 100644
index 00000000..cae2f659
--- /dev/null
+++ b/registry/hasura/graphql/README.md
@@ -0,0 +1,40 @@
+## Overview
+
+The Hasura GraphQL Connector allows for connecting to a GraphQL API and bringing it into Hasura DDN supergraph as a
+single unified API. It can also be used to bring in your current Hasura v2 graphQL API into Hasura DDN and our
+recommended approach is to create a new subgraph for the v2 API.
+
+For Hasura v2 users, this functionality is the replacement of
+[remote schemas](https://hasura.io/docs/latest/remote-schemas/overview/) functionality in v3 (DDN).
+
+The `ndc-graphql` data connector is open source and can be found in the
+[ndc-graphql GitHub repository](https://github.com/hasura/ndc-graphql).
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the GraphQL connector
+
+Check out the
+[Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=GraphQL) to get
+started with the GraphQL connector.
+
+## Deployment
+
+The connector is hosted by Hasura and can be used from the [Hasura v3 CLI](https://hasura.io/docs/3.0/cli/overview/) and
+[Console](https://console.hasura.io). Please follow either the
+[Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or
+[deploying the connector](https://hasura.io/docs/3.0/connectors/deployment).
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)if you encounter any problems!
diff --git a/registry/hasura/graphql/logo.svg b/registry/hasura/graphql/logo.svg
new file mode 100644
index 00000000..14082a52
--- /dev/null
+++ b/registry/hasura/graphql/logo.svg
@@ -0,0 +1,64 @@
+
+
+
+
\ No newline at end of file
diff --git a/registry/hasura/graphql/metadata.json b/registry/hasura/graphql/metadata.json
new file mode 100644
index 00000000..85c69f13
--- /dev/null
+++ b/registry/hasura/graphql/metadata.json
@@ -0,0 +1,48 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "The GraphQL Native Data Connector allows for connecting to any GraphQL endpoint",
+ "title": "GraphQL Native Data Connector",
+ "logo": "logo.svg",
+ "tags": [],
+ "latest_version": "v0.2.0"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-graphql/",
+ "version": [
+ {
+ "tag": "v0.2.0",
+ "hash": "6296807daffb437a2f4dd158cab4c58d51ecd37c",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.3",
+ "hash": "4262e34d57255c622a47daa408eba8c25fb279f7",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.2",
+ "hash": "1cfb5d3e52d914acf4e5e96edd54d7fc744ec304",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.1",
+ "hash": "85b80185e28eb7f6721fc50ecd2552f96633e5db",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.0",
+ "hash": "8fb41a151b3852fadcfadbe17695605f77aaa240",
+ "is_verified": true
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/graphql/releases/v0.1.0/connector-packaging.json b/registry/hasura/graphql/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..7ccd6462
--- /dev/null
+++ b/registry/hasura/graphql/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-graphql/releases/download/v0.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "30d6883c57b146812fb141feb3b4680a9ffe214cb13e04b0618a8da069d1286c"
+ },
+ "source": {
+ "hash": "8fb41a151b3852fadcfadbe17695605f77aaa240"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/graphql/releases/v0.1.1/connector-packaging.json b/registry/hasura/graphql/releases/v0.1.1/connector-packaging.json
new file mode 100644
index 00000000..ed5c99c4
--- /dev/null
+++ b/registry/hasura/graphql/releases/v0.1.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.1",
+ "uri": "https://github.com/hasura/ndc-graphql/releases/download/v0.1.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "8a5acec98e28953b22932d7a3734f7e7e535ac9478058b4d06ad9da5dc21ce1d"
+ },
+ "source": {
+ "hash": "85b80185e28eb7f6721fc50ecd2552f96633e5db"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/graphql/releases/v0.1.2/connector-packaging.json b/registry/hasura/graphql/releases/v0.1.2/connector-packaging.json
new file mode 100644
index 00000000..2b0e2fa3
--- /dev/null
+++ b/registry/hasura/graphql/releases/v0.1.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.2",
+ "uri": "https://github.com/hasura/ndc-graphql/releases/download/v0.1.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "85aa0294a4a13da85c2932254878814f60f8e9b61621232675b5dfa551248a77"
+ },
+ "source": {
+ "hash": "1cfb5d3e52d914acf4e5e96edd54d7fc744ec304"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/graphql/releases/v0.1.3/connector-packaging.json b/registry/hasura/graphql/releases/v0.1.3/connector-packaging.json
new file mode 100644
index 00000000..93e7fea1
--- /dev/null
+++ b/registry/hasura/graphql/releases/v0.1.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.3",
+ "uri": "https://github.com/hasura/ndc-graphql/releases/download/v0.1.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "4045cfd23f6ed4bf747241f967a7717dd391b5fe8285ec486584427698cf9881"
+ },
+ "source": {
+ "hash": "4262e34d57255c622a47daa408eba8c25fb279f7"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/graphql/releases/v0.2.0/connector-packaging.json b/registry/hasura/graphql/releases/v0.2.0/connector-packaging.json
new file mode 100644
index 00000000..cab549d5
--- /dev/null
+++ b/registry/hasura/graphql/releases/v0.2.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.0",
+ "uri": "https://github.com/hasura/ndc-graphql/releases/download/v0.2.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "5cfa92fe3b713312d24060b81677616e96b0454e5e719d7f416d162f3a9c07f1"
+ },
+ "source": {
+ "hash": "6296807daffb437a2f4dd158cab4c58d51ecd37c"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/README.md b/registry/hasura/mongodb/README.md
new file mode 100644
index 00000000..3e17e1e9
--- /dev/null
+++ b/registry/hasura/mongodb/README.md
@@ -0,0 +1,25 @@
+## Overview
+
+`ndc-mongodb` provides a Hasura Data Connector to the MongoDB database,
+which can expose and run GraphQL queries via the Hasura v3 Project.
+
+- [GitHub repository](https://github.com/hasura/ndc-mongodb)
+
+The connector implements the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html),
+but does not currently support mutations, column relationship arguments in queries, functions or procedures.
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+## Using the MongoDB connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=MongoDB) to get started with the ClickHouse connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/mongodb/logo.png b/registry/hasura/mongodb/logo.png
similarity index 100%
rename from registry/mongodb/logo.png
rename to registry/hasura/mongodb/logo.png
diff --git a/registry/hasura/mongodb/metadata.json b/registry/hasura/mongodb/metadata.json
new file mode 100644
index 00000000..39eab698
--- /dev/null
+++ b/registry/hasura/mongodb/metadata.json
@@ -0,0 +1,80 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to a MongoDB database and expose it to Hasura v3 Project",
+ "title": "MongoDB Connector",
+ "logo": "logo.png",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v1.3.0"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-mongodb/",
+ "version": [
+ {
+ "tag": "v1.3.0",
+ "hash": "47fc3c301203d0118940a317e7c634e768b8898a",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.2.0",
+ "hash": "2e0696e8bd587c18f067e683ec367f6ba350537f",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "eab726516ecfcee76abeab1b92f3b5d6cba10976",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4beb7ddabddc3035ca5cc7bd85493a71a2e34147",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.0",
+ "hash": "175272912b86a11359a9b6b7fd72c7a6e2326bf1",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.0.6",
+ "hash": "6e842c308eeee38d3bc393e6b99157961ca3ed03",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.0.5",
+ "hash": "055154b5d84f05ff0049aa75a29b85caf89822f6",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.0.4",
+ "hash": "38a4a56134a909001b645c659062ae393c2cebe0",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.0.3",
+ "hash": "b50094a368f8fbab7c37e4b83ef5dc1249a4a5d5",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.0.2",
+ "hash": "90c336c4d1d949d62dd25b04742e650fb6d458e0",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.0.1",
+ "hash": "c32adbde478147518f65ff465c40a0703239288a",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/mongodb/releases/v0.0.1/connector-packaging.json b/registry/hasura/mongodb/releases/v0.0.1/connector-packaging.json
new file mode 100644
index 00000000..f5136044
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v0.0.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.1",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "2cd3584557be7e2870f3488a30cac6219924b3f7accd9f5f473285323843a0f4"
+ },
+ "source": {
+ "hash": "c32adbde478147518f65ff465c40a0703239288a"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v0.0.2/connector-packaging.json b/registry/hasura/mongodb/releases/v0.0.2/connector-packaging.json
new file mode 100644
index 00000000..c977f037
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v0.0.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.2",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "f014459e9dbcce8bafe1c33c74b1fa1720d544bc283cc819c81d719028219846"
+ },
+ "source": {
+ "hash": "90c336c4d1d949d62dd25b04742e650fb6d458e0"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v0.0.3/connector-packaging.json b/registry/hasura/mongodb/releases/v0.0.3/connector-packaging.json
new file mode 100644
index 00000000..123edb61
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v0.0.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.3",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "04e4d3bb29bdb96766fa3cf0b9c9d4173550dced5c6c36b1a1d32545b5c0bd30"
+ },
+ "source": {
+ "hash": "b50094a368f8fbab7c37e4b83ef5dc1249a4a5d5"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v0.0.4/connector-packaging.json b/registry/hasura/mongodb/releases/v0.0.4/connector-packaging.json
new file mode 100644
index 00000000..193e0111
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v0.0.4/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.4",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.4/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "7b826a79686b48e58819751091fac62071df75ca9fd617b80709fe098a054f26"
+ },
+ "source": {
+ "hash": "38a4a56134a909001b645c659062ae393c2cebe0"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v0.0.5/connector-packaging.json b/registry/hasura/mongodb/releases/v0.0.5/connector-packaging.json
new file mode 100644
index 00000000..c42cbeb7
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v0.0.5/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.5",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.5/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "2064a98d223240b912720f0528c6b9a7107a42e4452407c2b75e77dcfdbd4227"
+ },
+ "source": {
+ "hash": "055154b5d84f05ff0049aa75a29b85caf89822f6"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v0.0.6/connector-packaging.json b/registry/hasura/mongodb/releases/v0.0.6/connector-packaging.json
new file mode 100644
index 00000000..a3bcfd00
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v0.0.6/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.6",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.6/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "24370c44a8ff92dce488569717956069f2a50de7a8f54547b140d85a17b52875"
+ },
+ "source": {
+ "hash": "6e842c308eeee38d3bc393e6b99157961ca3ed03"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v0.1.0/connector-packaging.json b/registry/hasura/mongodb/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..acfe5550
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "adb5ce24e053117ba33c16ecf54bdc5a678790f3b31801645911fdf7091a58e0"
+ },
+ "source": {
+ "hash": "175272912b86a11359a9b6b7fd72c7a6e2326bf1"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v1.0.0/connector-packaging.json b/registry/hasura/mongodb/releases/v1.0.0/connector-packaging.json
new file mode 100644
index 00000000..3824bbef
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v1.0.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.0",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v1.0.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "0dc038620f40911a2c5662b61d8e2ac9605876c80b3eb3cbae5cc1ebcd5b611f"
+ },
+ "source": {
+ "hash": "4beb7ddabddc3035ca5cc7bd85493a71a2e34147"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v1.1.0/connector-packaging.json b/registry/hasura/mongodb/releases/v1.1.0/connector-packaging.json
new file mode 100644
index 00000000..6d1a9268
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v1.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.1.0",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v1.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e0b616454261c1d07b058578f26ba928c832b11805ade1474e274c945e12e088"
+ },
+ "source": {
+ "hash": "eab726516ecfcee76abeab1b92f3b5d6cba10976"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v1.2.0/connector-packaging.json b/registry/hasura/mongodb/releases/v1.2.0/connector-packaging.json
new file mode 100644
index 00000000..0425d36b
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v1.2.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.2.0",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v1.2.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "b5c317d6b122f191d2e72227d587076153cd93e5101d5830446d131dd32311a5"
+ },
+ "source": {
+ "hash": "2e0696e8bd587c18f067e683ec367f6ba350537f"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mongodb/releases/v1.3.0/connector-packaging.json b/registry/hasura/mongodb/releases/v1.3.0/connector-packaging.json
new file mode 100644
index 00000000..4cd462ed
--- /dev/null
+++ b/registry/hasura/mongodb/releases/v1.3.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.3.0",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v1.3.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "f67bcd8ad5a39e1d93e73e5259c5fd8e4f8a55f9ab4d897980c1d7d43d01f2b9"
+ },
+ "source": {
+ "hash": "47fc3c301203d0118940a317e7c634e768b8898a"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mysql/README.md b/registry/hasura/mysql/README.md
new file mode 100644
index 00000000..a61c4c8e
--- /dev/null
+++ b/registry/hasura/mysql/README.md
@@ -0,0 +1,77 @@
+# MySQL Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0/getting-started/overview/)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-sqlserver-blue.svg?style=flat)](https://hasura.io/connectors/sqlserver)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
+
+With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your data models in MySQL.
+This connector supports MySQL's functionalities listed in the table below, allowing for efficient and scalable data
+operations. Additionally, users benefit from all the powerful features of Hasura’s Data Delivery Network (DDN) platform,
+including query pushdown capabilities that delegate query operations to the database, thereby enhancing query
+optimization and performance.
+
+This connector implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [Connector information in the Hasura Hub](https://hasura.io/connectors/mysql)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the MySQL connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----- |
+| Native Queries + Logical Models | ✅ | |
+| Native Mutations | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ✅ | |
+| Views | ✅ | |
+| Remote Relationships | ✅ | |
+| Custom Fields | ❌ | |
+| Mutations | ❌ | |
+| Distinct | ❌ | |
+| Enums | ❌ | |
+| Naming Conventions | ❌ | |
+| Default Values | ❌ | |
+| User-defined Functions | ❌ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+## Using the MySQL connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Name | Description | Required |
+| -------- | --------------------------------------- | -------- |
+| JDBC_URL | The JDBC URL to connect to the database | Yes |
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## License
+
+The Hasura MySQL connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/mysql/logo.svg b/registry/hasura/mysql/logo.svg
new file mode 100644
index 00000000..53371d09
--- /dev/null
+++ b/registry/hasura/mysql/logo.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/registry/hasura/mysql/metadata.json b/registry/hasura/mysql/metadata.json
new file mode 100644
index 00000000..e255fa48
--- /dev/null
+++ b/registry/hasura/mysql/metadata.json
@@ -0,0 +1,75 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to a MySQL database and expose it to Hasura v3 Project",
+ "title": "MySQL Connector",
+ "logo": "logo.svg",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v1.0.2"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": true,
+ "packages": [
+ {
+ "version": "0.1.0",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/mysql%2Fv0.1.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "09b51f9be725099345159880d21efb712776bfd09291a0daa81d7e7b1418ca2c"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+ },
+ {
+ "version": "1.0.1",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/mysql%2Fv1.0.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "4503cb8961e3c2c8aede3183187fb69862ac1442a89085d35cf1d4a4989d6db9"
+ },
+ "source": {
+ "hash": "fbeb926e1d5550bec78a042a36d5ac2a8fba4c9f"
+ }
+ },
+ {
+ "version": "1.0.2",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/mysql%2Fv1.0.2/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "86be6695432bef7cfcdccfc376c18f3c89ffefe6d139869ab4739709dd980141"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+ }
+ ],
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-jvm-mono",
+ "version": [
+ {
+ "tag": "mysql/v0.1.0",
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e",
+ "is_verified": true
+ },
+ {
+ "tag": "mysql/v1.0.1",
+ "hash": "fbeb926e1d5550bec78a042a36d5ac2a8fba4c9f",
+ "is_verified": true
+ },
+ {
+ "tag": "mysql/v1.0.2",
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/mysql/releases/v0.1.0/connector-packaging.json b/registry/hasura/mysql/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..1901a5e4
--- /dev/null
+++ b/registry/hasura/mysql/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/mysql%2Fv0.1.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "9807b4467dae194f558af17970cb3ba4f7faf4f3a0c14f2a114a7296498cf025"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mysql/releases/v1.0.1/connector-packaging.json b/registry/hasura/mysql/releases/v1.0.1/connector-packaging.json
new file mode 100644
index 00000000..df47ea20
--- /dev/null
+++ b/registry/hasura/mysql/releases/v1.0.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.1",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/mysql%2Fv1.0.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "4503cb8961e3c2c8aede3183187fb69862ac1442a89085d35cf1d4a4989d6db9"
+ },
+ "source": {
+ "hash": "fbeb926e1d5550bec78a042a36d5ac2a8fba4c9f"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/mysql/releases/v1.0.2/connector-packaging.json b/registry/hasura/mysql/releases/v1.0.2/connector-packaging.json
new file mode 100644
index 00000000..4f3e2972
--- /dev/null
+++ b/registry/hasura/mysql/releases/v1.0.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.2",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/mysql%2Fv1.0.2/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "86be6695432bef7cfcdccfc376c18f3c89ffefe6d139869ab4739709dd980141"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/README.md b/registry/hasura/nodejs/README.md
new file mode 100644
index 00000000..8ea0dbc8
--- /dev/null
+++ b/registry/hasura/nodejs/README.md
@@ -0,0 +1,25 @@
+## Overview
+
+The NodeJS Lambda connector allows you to expose TypeScript functions as Commands in your Hasura DDN Supergraph.
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the NodeJS Lambda connector
+
+Check out the
+[Hasura docs here](https://hasura.io/docs/3.0/business-logic/typescript#add-the-typescript-connector-to-a-project) to
+get started with the NodeJS Lambda connector.
+
+## More Information
+
+- [ndc-nodejs-lambda GitHub Repository](https://github.com/hasura/ndc-nodejs-lambda)
diff --git a/registry/nodejs-lambda/logo.png b/registry/hasura/nodejs/logo.png
similarity index 100%
rename from registry/nodejs-lambda/logo.png
rename to registry/hasura/nodejs/logo.png
diff --git a/registry/hasura/nodejs/metadata.json b/registry/hasura/nodejs/metadata.json
new file mode 100644
index 00000000..4bb64ce5
--- /dev/null
+++ b/registry/hasura/nodejs/metadata.json
@@ -0,0 +1,73 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "The NodeJS Lambda connector allows you to expose TypeScript functions as NDC functions/procedures for use in your Hasura DDN subgraphs.",
+ "title": "NodeJS Lambda Connector",
+ "logo": "logo.png",
+ "tags": [],
+ "latest_version": "v1.8.0"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-nodejs-lambda/",
+ "version": [
+ {
+ "tag": "v1.8.0",
+ "hash": "c1442716e822f7748e06aa25dd4f348e536d60cd",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.7.0",
+ "hash": "1adf00b7c36dd811d5e15894c1a141149db6325f",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.6.0",
+ "hash": "2fb76722db449b5525d1dcce33cf48ee0cf44ad8",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.5.0",
+ "hash": "2a9a04d0a1c8116d9b864a83d81817ccddae355d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.4.1",
+ "hash": "9b5f795aca98854205ba5646162d1df7f060d642",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.4.0",
+ "hash": "53ae3870e4f332310a7b6e359188371aa16714cf",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.3.0",
+ "hash": "faf8cc78db442e53ca0cf6cdf79c9feb0cfc8052",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.2.0",
+ "hash": "a13236051b836e4506463ff8c7e152f69c787680",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "32e33529d5cfc5c1dbc4245e384f22099654d02d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "c7ef1aa899e1f83cc2935c2f91f4b9010411d716",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/nodejs/releases/v1.0.0/connector-packaging.json b/registry/hasura/nodejs/releases/v1.0.0/connector-packaging.json
new file mode 100644
index 00000000..001fa49c
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.0.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.0",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.0.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "8b24669349ab79b0222268d11b4a3396c5caced4764192fb5b49ccde2bfc6e34"
+ },
+ "source": {
+ "hash": "c7ef1aa899e1f83cc2935c2f91f4b9010411d716"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/releases/v1.1.0/connector-packaging.json b/registry/hasura/nodejs/releases/v1.1.0/connector-packaging.json
new file mode 100644
index 00000000..1d960db1
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.1.0",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "22a80de2739d7aaaea55dbc8c9d668dcfd0919eedc4f611b171de65db7548d03"
+ },
+ "source": {
+ "hash": "32e33529d5cfc5c1dbc4245e384f22099654d02d"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/releases/v1.2.0/connector-packaging.json b/registry/hasura/nodejs/releases/v1.2.0/connector-packaging.json
new file mode 100644
index 00000000..1e523cef
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.2.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.2.0",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.2.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "fd8bd48a32226894ad617d7b60c60b2966ab942dccd6e92823ef0d87d847350e"
+ },
+ "source": {
+ "hash": "a13236051b836e4506463ff8c7e152f69c787680"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/releases/v1.3.0/connector-packaging.json b/registry/hasura/nodejs/releases/v1.3.0/connector-packaging.json
new file mode 100644
index 00000000..e9ea8aed
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.3.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.3.0",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.3.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "29c521170a74b3cf67bff824c293af15d683651b7727d5884423fcfd2ac44777"
+ },
+ "source": {
+ "hash": "faf8cc78db442e53ca0cf6cdf79c9feb0cfc8052"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/releases/v1.4.0/connector-packaging.json b/registry/hasura/nodejs/releases/v1.4.0/connector-packaging.json
new file mode 100644
index 00000000..c2286e5a
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.4.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.4.0",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.4.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "f0ea6693f5a37159882695f5cb330359e7124bf9e08ac81363ed065790200077"
+ },
+ "source": {
+ "hash": "53ae3870e4f332310a7b6e359188371aa16714cf"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/releases/v1.4.1/connector-packaging.json b/registry/hasura/nodejs/releases/v1.4.1/connector-packaging.json
new file mode 100644
index 00000000..df479378
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.4.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.4.1",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.4.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "18c7be3cbf6fd507233577729df248852ead22a7f4b29e0b8538cc74925c83c0"
+ },
+ "source": {
+ "hash": "9b5f795aca98854205ba5646162d1df7f060d642"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/releases/v1.5.0/connector-packaging.json b/registry/hasura/nodejs/releases/v1.5.0/connector-packaging.json
new file mode 100644
index 00000000..051e09f0
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.5.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.5.0",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.5.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "d89466e19ad8aeb94bff9e34623f075fee1cb955d5e8ae5ed316df38f1b400c6"
+ },
+ "source": {
+ "hash": "2a9a04d0a1c8116d9b864a83d81817ccddae355d"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/releases/v1.6.0/connector-packaging.json b/registry/hasura/nodejs/releases/v1.6.0/connector-packaging.json
new file mode 100644
index 00000000..1a5ddf3f
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.6.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.6.0",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.6.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "f69645af8190a93484a8c374830c788035ebf91135e53f57e214b04fe69475e7"
+ },
+ "source": {
+ "hash": "2fb76722db449b5525d1dcce33cf48ee0cf44ad8"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/releases/v1.7.0/connector-packaging.json b/registry/hasura/nodejs/releases/v1.7.0/connector-packaging.json
new file mode 100644
index 00000000..6736397d
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.7.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.7.0",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.7.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "3d3a7f5595751ed1fabb9ce493454fce55f8410fca4f1632dd30605155426327"
+ },
+ "source": {
+ "hash": "1adf00b7c36dd811d5e15894c1a141149db6325f"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/nodejs/releases/v1.8.0/connector-packaging.json b/registry/hasura/nodejs/releases/v1.8.0/connector-packaging.json
new file mode 100644
index 00000000..9909fc09
--- /dev/null
+++ b/registry/hasura/nodejs/releases/v1.8.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.8.0",
+ "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.8.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "4df5634a7afc6cfacdb019257138a234b3a60b846e3740e38886ce80d43c3fdd"
+ },
+ "source": {
+ "hash": "c1442716e822f7748e06aa25dd4f348e536d60cd"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/openapi/README.md b/registry/hasura/openapi/README.md
new file mode 100644
index 00000000..d9041131
--- /dev/null
+++ b/registry/hasura/openapi/README.md
@@ -0,0 +1,82 @@
+# OpenAPI Lambda Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-openapi-blue.svg?style=flat)](https://hasura.io/connectors/open-api-lambda)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0)
+
+The OpenAPI Lambda Connector allows you to import APIs that are documented in the OpenAPI/Swagger format into the Hasura
+Supergraph. The connector exposes REST API endpoints as Typescript functions, which can be exposed as GraphQL queries or
+mutations via the [NodeJS Lambda Connector](https://github.com/hasura/ndc-nodejs-lambda).
+
+Functions that wrap GET requests are marked with a `@readonly` annotation, and are exposed as GraphQL Queries by the
+[NodeJS Lambda Connector](https://github.com/hasura/ndc-nodejs-lambda). All other request types are exposed as GraphQL
+Mutations.
+
+This Connector implements the [Data Connector Spec](https://github.com/hasura/ndc-spec)
+
+- [See the listing in the Hasura Hub](https://hasura.io/connectors/open-api-lambda)
+- [Hasura DDN Documentation](https://hasura.io/docs/3.0)
+- [Hasura DDN Quickstart](https://hasura.io/docs/3.0/getting-started/quickstart)
+- [NodeJS Lambda Connector](https://github.com/hasura/ndc-nodejs-lambda)
+
+Docs for the OpenAPI data connector:
+
+- [Documentation](https://github.com/hasura/ndc-open-api-lambda/blob/main/docs/documentation.md)
+- [Contributing](https://github.com/hasura/ndc-open-api-lambda/blob/main/docs/contributing.md)
+- [Code of Conduct](https://github.com/hasura/ndc-open-api-lambda/blob/main/docs/code-of-conduct.md)
+- [Relase Document](https://github.com/hasura/ndc-open-api-lambda/blob/main/docs/release.md)
+
+## Features
+
+- Convert Open API/swagger documentation into Typescript functions compatible with NodeJS Lambda Connector
+- Supported request types
+
+| Request Type | Query | Path | Body | Headers |
+| ------------ | ----- | ---- | ---- | ------- |
+| GET | ✅ | ✅ | NA | ✅ |
+| POST | ✅ | ✅ | ✅ | ✅ |
+| DELETE | ✅ | ✅ | ✅ | ✅ |
+| PUT | ✅ | ✅ | ✅ | ✅ |
+| PATCH | ✅ | ✅ | ✅ | ✅ |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the OpenAPI Lambda connector
+
+Check out the
+[Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source?db=OpenAPI) to get
+started with the OpenAPI Lambda connector.
+
+## Saving User Changes
+
+Please refer to
+[Saving User Changes](https://github.com/hasura/ndc-open-api-lambda/blob/main/docs/documentation.md#saving-user-changes).
+
+## Known Limitations
+
+- Support for [Relaxed Types](https://github.com/hasura/ndc-nodejs-lambda/tree/main?tab=readme-ov-file#relaxed-types) is
+ a WiP.
+- [Types not supported by the NodeJS Lambda Connector](https://github.com/hasura/ndc-nodejs-lambda?tab=readme-ov-file#unsupported-types)
+ are not supported.
+
+## Contributing
+
+Check out our [contributing guide](.docs/contributing.md) for more details.
+
+## Changelog
+
+Please refer to the [changelog](https://github.com/hasura/ndc-open-api-lambda/blob/main/changelog.md).
+
+## License
+
+The Open API Lambda Connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/openapi/logo.png b/registry/hasura/openapi/logo.png
new file mode 100644
index 00000000..b8fdac69
Binary files /dev/null and b/registry/hasura/openapi/logo.png differ
diff --git a/registry/hasura/openapi/metadata.json b/registry/hasura/openapi/metadata.json
new file mode 100644
index 00000000..3a04de96
--- /dev/null
+++ b/registry/hasura/openapi/metadata.json
@@ -0,0 +1,43 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "The OpenAPI Lambda Connector allows you to import already existing APIs specified by the Open API Spec into you Hasura DDN subgraphs",
+ "title": "OpenAPI Lambda Connector",
+ "logo": "logo.png",
+ "tags": [],
+ "latest_version": "v0.2.0"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-open-api-lambda/",
+ "version": [
+ {
+ "tag": "v0.0.1-alpha",
+ "hash": "3cc70a7c4715c72e8dcb56c78c66967c5f687148",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.0.2-alpha",
+ "hash": "35ba5da05dba1602fea40a3a8fba3652fd1c3e12",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.0",
+ "hash": "d0c628e9206d397373f42faaf3733f6ada94b56c",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.1",
+ "hash": "4b70712933de7a7ed475407ccd0be7bed1611ae8",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/openapi/releases/v0.0.2-alpha/connector-packaging.json b/registry/hasura/openapi/releases/v0.0.2-alpha/connector-packaging.json
new file mode 100644
index 00000000..c2d0b86c
--- /dev/null
+++ b/registry/hasura/openapi/releases/v0.0.2-alpha/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.2-alpha",
+ "uri": "https://github.com/hasura/ndc-open-api-lambda/releases/download/v0.0.2-alpha/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "25ec7152d795871e1d2944665ef48012520181afaf6f7c66a030c3a443edbeb3"
+ },
+ "source": {
+ "hash": "35ba5da05dba1602fea40a3a8fba3652fd1c3e12"
+ }
+}
diff --git a/registry/hasura/openapi/releases/v0.1.0/connector-packaging.json b/registry/hasura/openapi/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..7029b11a
--- /dev/null
+++ b/registry/hasura/openapi/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-open-api-lambda/releases/download/v0.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "f371014bc0f8a873644bd0127531aa6354b9fca1e5680b12c567c3a3fc4204a5"
+ },
+ "source": {
+ "hash": "d0c628e9206d397373f42faaf3733f6ada94b56c"
+ }
+}
diff --git a/registry/hasura/openapi/releases/v0.1.1/connector-packaging.json b/registry/hasura/openapi/releases/v0.1.1/connector-packaging.json
new file mode 100644
index 00000000..e3e02875
--- /dev/null
+++ b/registry/hasura/openapi/releases/v0.1.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.1",
+ "uri": "https://github.com/hasura/ndc-open-api-lambda/releases/download/v0.1.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "a7365a6f7780dcfae85cc787e2de83ea22d416a1d4a9fc597b68227bf978e264"
+ },
+ "source": {
+ "hash": "4b70712933de7a7ed475407ccd0be7bed1611ae8"
+ }
+}
diff --git a/registry/hasura/openapi/releases/v0.1.2/connector-packaging.json b/registry/hasura/openapi/releases/v0.1.2/connector-packaging.json
new file mode 100644
index 00000000..0e2d5082
--- /dev/null
+++ b/registry/hasura/openapi/releases/v0.1.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.2",
+ "uri": "https://github.com/hasura/ndc-open-api-lambda/releases/download/v0.1.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "2b7199b43c48e8823f99a037921935f4ad500161ff8df4c5ae868cbd58f25b5b"
+ },
+ "source": {
+ "hash": "a1fd7e016fc24107d35374a09fad24b4fc9c09d7"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/openapi/releases/v0.1.3/connector-packaging.json b/registry/hasura/openapi/releases/v0.1.3/connector-packaging.json
new file mode 100644
index 00000000..c7147b90
--- /dev/null
+++ b/registry/hasura/openapi/releases/v0.1.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.3",
+ "uri": "https://github.com/hasura/ndc-open-api-lambda/releases/download/v0.1.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "9fd6e2785d437b4a8b95eb0586dbe1b03f1d634d85a9c17394af7b734ebd4634"
+ },
+ "source": {
+ "hash": "7a0177198da5e0691e01ba4378b90d7ad1e42044"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/openapi/releases/v0.1.4/connector-packaging.json b/registry/hasura/openapi/releases/v0.1.4/connector-packaging.json
new file mode 100644
index 00000000..9a1e2551
--- /dev/null
+++ b/registry/hasura/openapi/releases/v0.1.4/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.4",
+ "uri": "https://github.com/hasura/ndc-open-api-lambda/releases/download/v0.1.4/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "228a792a958ebc57869eb7bc47bc7b8e80dc94ca2121047aa81eac90da855b82"
+ },
+ "source": {
+ "hash": "95b64da4484b7cf547e0436ab4dd56f5ff4991a7"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/openapi/releases/v0.1.5/connector-packaging.json b/registry/hasura/openapi/releases/v0.1.5/connector-packaging.json
new file mode 100644
index 00000000..539ae78b
--- /dev/null
+++ b/registry/hasura/openapi/releases/v0.1.5/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.5",
+ "uri": "https://github.com/hasura/ndc-open-api-lambda/releases/download/v0.1.5/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "253f250632159b8e7929ca461ab05d0101418b01826541762372e56f00a276cc"
+ },
+ "source": {
+ "hash": "934491f158736401449c8144186330a1eeac78b7"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/openapi/releases/v0.2.0/connector-packaging.json b/registry/hasura/openapi/releases/v0.2.0/connector-packaging.json
new file mode 100644
index 00000000..4887904b
--- /dev/null
+++ b/registry/hasura/openapi/releases/v0.2.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.0",
+ "uri": "https://github.com/hasura/ndc-open-api-lambda/releases/download/v0.2.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "6b766e1e2c7c21eddc8d6b7aa024c791a51716f8cdccdf8b8ae2e77f5b3b70e2"
+ },
+ "source": {
+ "hash": "fa033ba34c5a40e5907a6c6277ecbe941a08edfc"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/oracle/README.md b/registry/hasura/oracle/README.md
new file mode 100644
index 00000000..a92df5c1
--- /dev/null
+++ b/registry/hasura/oracle/README.md
@@ -0,0 +1,77 @@
+# Oracle Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0/getting-started/overview/)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-sqlserver-blue.svg?style=flat)](https://hasura.io/connectors/sqlserver)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
+
+With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your data models in Oracle.
+This connector supports Oracle's functionalities listed in the table below, allowing for efficient and scalable data
+operations. Additionally, users benefit from all the powerful features of Hasura’s Data Delivery Network (DDN) platform,
+including query pushdown capabilities that delegate query operations to the database, thereby enhancing query
+optimization and performance.
+
+This connector implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [Connector information in the Hasura Hub](https://hasura.io/connectors/oracle)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the Oracle connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----- |
+| Native Queries + Logical Models | ✅ | |
+| Native Mutations | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ✅ | |
+| Views | ✅ | |
+| Remote Relationships | ✅ | |
+| Custom Fields | ❌ | |
+| Mutations | ❌ | |
+| Distinct | ❌ | |
+| Enums | ❌ | |
+| Naming Conventions | ❌ | |
+| Default Values | ❌ | |
+| User-defined Functions | ❌ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+## Using the Oracle connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Name | Description | Required |
+| -------- | --------------------------------------- | -------- |
+| JDBC_URL | The JDBC URL to connect to the database | Yes |
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## License
+
+The Hasura Oracle connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/oracle/logo.svg b/registry/hasura/oracle/logo.svg
new file mode 100644
index 00000000..3f4e051f
--- /dev/null
+++ b/registry/hasura/oracle/logo.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/registry/hasura/oracle/metadata.json b/registry/hasura/oracle/metadata.json
new file mode 100644
index 00000000..85bea5dc
--- /dev/null
+++ b/registry/hasura/oracle/metadata.json
@@ -0,0 +1,75 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to an Oracle database and expose it to Hasura v3 Project",
+ "title": "Oracle Connector",
+ "logo": "logo.svg",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v1.0.2"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": true,
+ "packages": [
+ {
+ "version": "0.1.0",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/oracle%2Fv0.1.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "0d837408a213f55df34062b96a2ac7fabcf8c61891918b6b2754d90fc61dd24c"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+ },
+ {
+ "version": "1.0.1",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/oracle%2Fv1.0.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "58ed43d43e0afc74d24c6ec1552ab3fbcc48cf108420f1f6dd6f7bd960b2d126"
+ },
+ "source": {
+ "hash": "fbeb926e1d5550bec78a042a36d5ac2a8fba4c9f"
+ }
+ },
+ {
+ "version": "1.0.2",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/oracle%2Fv1.0.2/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "14891c40124d06c7732f0ca6559c62f3f8bdb1a0d802d4079868aae8a6013935"
+ },
+ "source": {
+ "hash": "ef3dd9d851e62c18fc1fbee5d049b61065f37f72"
+ }
+ }
+ ],
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-jvm-mono",
+ "version": [
+ {
+ "tag": "oracle/v0.1.0",
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e",
+ "is_verified": true
+ },
+ {
+ "tag": "oracle/v1.0.1",
+ "hash": "fbeb926e1d5550bec78a042a36d5ac2a8fba4c9f",
+ "is_verified": true
+ },
+ {
+ "tag": "oracle/v1.0.2",
+ "hash": "ef3dd9d851e62c18fc1fbee5d049b61065f37f72",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/oracle/releases/v0.1.0/connector-packaging.json b/registry/hasura/oracle/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..c973add8
--- /dev/null
+++ b/registry/hasura/oracle/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/oracle%2Fv0.1.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "33a52fa0070ee4c956fbae37212b2012ff5f637dc90e2b47ee1899a39b3d34a6"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/oracle/releases/v1.0.1/connector-packaging.json b/registry/hasura/oracle/releases/v1.0.1/connector-packaging.json
new file mode 100644
index 00000000..457b60c1
--- /dev/null
+++ b/registry/hasura/oracle/releases/v1.0.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.1",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/oracle%2Fv1.0.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "58ed43d43e0afc74d24c6ec1552ab3fbcc48cf108420f1f6dd6f7bd960b2d126"
+ },
+ "source": {
+ "hash": "fbeb926e1d5550bec78a042a36d5ac2a8fba4c9f"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/oracle/releases/v1.0.2/connector-packaging.json b/registry/hasura/oracle/releases/v1.0.2/connector-packaging.json
new file mode 100644
index 00000000..3b78ba32
--- /dev/null
+++ b/registry/hasura/oracle/releases/v1.0.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.2",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/oracle%2Fv1.0.2/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "14891c40124d06c7732f0ca6559c62f3f8bdb1a0d802d4079868aae8a6013935"
+ },
+ "source": {
+ "hash": "ef3dd9d851e62c18fc1fbee5d049b61065f37f72"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/phoenix/README.md b/registry/hasura/phoenix/README.md
new file mode 100644
index 00000000..ce1330f8
--- /dev/null
+++ b/registry/hasura/phoenix/README.md
@@ -0,0 +1,68 @@
+# Apache Phoenix Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0/getting-started/overview/)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-phoenix-blue.svg?style=flat)](https://hasura.io/connectors/phoenix)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
+
+With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your data models in
+Phoenix. This connector supports Phoenix's functionalities listed in the table below, allowing for
+efficient and scalable data operations. Additionally, users benefit from all the powerful features of Hasura’s Data
+Delivery Network (DDN) platform, including query pushdown capabilities that delegate query operations to the database,
+thereby enhancing query optimization and performance.
+
+This connector implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [Connector information in the Hasura Hub](https://hasura.io/connectors/phoenix)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the Phoenix connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----- |
+| Native Queries + Logical Models | ✅ | |
+| Native Mutations | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ❌ | |
+| Views | ✅ | |
+| Remote Relationships | ✅ | |
+| Custom Fields | ❌ | |
+| Mutations | ❌ | |
+| Distinct | ❌ | |
+| Enums | ❌ | |
+| Naming Conventions | ❌ | |
+| Default Values | ❌ | |
+| User-defined Functions | ❌ | |
+
+## Before you get Started
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Install the [CLI](https://hasura.io/docs/3.0/cli/installation/)
+3. Install the [Hasura VS Code extension](https://marketplace.visualstudio.com/items?itemName=HasuraHQ.hasura)
+4. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+5. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+## Using the connector
+
+To use the Phoenix connector, follow these steps in a Hasura project:
+(Note: for more information on the following steps, please refer to the Postgres connector
+documentation [here](https://hasura.io/docs/3.0/getting-started/connect-to-data/connect-a-source))
+
+
+The connector requires a JDBC URL to function.
+For example:
+
+```sh
+JDBC_URL="jdbc:phoenix:localhost:2181:/hbase"
+```
+
+## License
+
+The Hasura Phoenix connector is available under the [Apache License
+2.0](https://www.apache.org/licenses/LICENSE-2.0).
\ No newline at end of file
diff --git a/registry/hasura/phoenix/logo.png b/registry/hasura/phoenix/logo.png
new file mode 100644
index 00000000..9a1e8ca5
Binary files /dev/null and b/registry/hasura/phoenix/logo.png differ
diff --git a/registry/hasura/phoenix/metadata.json b/registry/hasura/phoenix/metadata.json
new file mode 100644
index 00000000..23e6a0a1
--- /dev/null
+++ b/registry/hasura/phoenix/metadata.json
@@ -0,0 +1,43 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to an Apache Phoenix database and expose it to Hasura v3 Project",
+ "title": "Apache Phoenix Connector",
+ "logo": "logo.png",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v1.0.0"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": true,
+ "packages": [
+ {
+ "version": "1.0.0",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/phoenix%2Fv1.0.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "6875748c433e772da7603e3b4fd0798b4c2321a4"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+ }
+ ],
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-jvm-mono",
+ "version": [
+ {
+ "tag": "phoenix/v1.0.0",
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/phoenix/releases/v1.0.0/connector-packaging.json b/registry/hasura/phoenix/releases/v1.0.0/connector-packaging.json
new file mode 100644
index 00000000..06f25bf8
--- /dev/null
+++ b/registry/hasura/phoenix/releases/v1.0.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.0",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/phoenix%2Fv1.0.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "dea7bcd0784bce3a2b8f7a573f793f24f511f793c2b117636235ff883c351e68"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+}
\ No newline at end of file
diff --git a/registry/postgres/README.md b/registry/hasura/postgres/README.md
similarity index 97%
rename from registry/postgres/README.md
rename to registry/hasura/postgres/README.md
index 248ea288..ceb7944d 100644
--- a/registry/postgres/README.md
+++ b/registry/hasura/postgres/README.md
@@ -4,10 +4,10 @@ The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL dat
Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
-The `ndc-postgres` data connector is open source and can be found in the [ndc-postgres GitHub repository](https://github.com/hasura/ndc-postgres).
+The `ndc-postgres` data connector is open source and can be found in the [ndc-postgres GitHub repository](https://github.com/hasura/ndc-postgres).
Visit the
-[Hasura DDN PostgreSQL Documentation](https://hasura.io/docs/3.0/connectors/postgresql/)
+[Hasura DDN PostgreSQL Documentation](https://hasura.io/docs/3.0/connectors/postgresql/)
for more information about specific features that are available for the PostgreSQL Connector.
## Deployment
diff --git a/registry/aurora/README.md b/registry/hasura/postgres/aliased_connectors/aurora/README.md
similarity index 80%
rename from registry/aurora/README.md
rename to registry/hasura/postgres/aliased_connectors/aurora/README.md
index ec61f75d..a07b9d09 100644
--- a/registry/aurora/README.md
+++ b/registry/hasura/postgres/aliased_connectors/aurora/README.md
@@ -6,19 +6,19 @@ As much as possible we attempt to provide explicit support for database projects
Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
-The `ndc-postgres` data connector is open source and can be found in the [ndc-postgres GitHub repository](https://github.com/hasura/ndc-postgres).
+The `ndc-postgres` data connector is open source and can be found in the [ndc-postgres GitHub repository](https://github.com/hasura/ndc-postgres).
Visit the
-[Hasura DDN PostgreSQL Documentation](https://hasura.io/docs/3.0/connectors/postgresql/)
+[Hasura DDN PostgreSQL Documentation](https://hasura.io/docs/3.0/connectors/postgresql/)
for more information about specific features that are available for the PostgreSQL Connector.
## Deployment
The connector is hosted by Hasura and can be used from the [Hasura v3 Console](https://console.hasura.io).
-## Usage
+## Using the PostgreSQL connector
-The Hasura PostgreSQL connector can be deployed using the [Hasura CLI](https://hasura.io/docs/3.0/cli/overview) by following either the [Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or [deploying the connector](https://hasura.io/docs/3.0/connectors/deployment).
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
## Troubleshooting
diff --git a/registry/aurora/logo.svg b/registry/hasura/postgres/aliased_connectors/aurora/logo.svg
similarity index 100%
rename from registry/aurora/logo.svg
rename to registry/hasura/postgres/aliased_connectors/aurora/logo.svg
diff --git a/registry/aurora/metadata.json b/registry/hasura/postgres/aliased_connectors/aurora/metadata.json
similarity index 53%
rename from registry/aurora/metadata.json
rename to registry/hasura/postgres/aliased_connectors/aurora/metadata.json
index b4199c7c..6dcf0551 100644
--- a/registry/aurora/metadata.json
+++ b/registry/hasura/postgres/aliased_connectors/aurora/metadata.json
@@ -7,7 +7,7 @@
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/aliased_connectors/citus/README.md b/registry/hasura/postgres/aliased_connectors/citus/README.md
new file mode 100644
index 00000000..9989e011
--- /dev/null
+++ b/registry/hasura/postgres/aliased_connectors/citus/README.md
@@ -0,0 +1,16 @@
+## Overview
+
+The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
+
+Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
+
+The connector supports the Citus database extensions to PostgreSQL.
+
+## Using the PostgreSQL connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/citus/logo.svg b/registry/hasura/postgres/aliased_connectors/citus/logo.svg
similarity index 100%
rename from registry/citus/logo.svg
rename to registry/hasura/postgres/aliased_connectors/citus/logo.svg
diff --git a/registry/citus/metadata.json b/registry/hasura/postgres/aliased_connectors/citus/metadata.json
similarity index 53%
rename from registry/citus/metadata.json
rename to registry/hasura/postgres/aliased_connectors/citus/metadata.json
index 7e1bd28c..fb75e63f 100644
--- a/registry/citus/metadata.json
+++ b/registry/hasura/postgres/aliased_connectors/citus/metadata.json
@@ -7,7 +7,7 @@
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/aliased_connectors/cockroach/README.md b/registry/hasura/postgres/aliased_connectors/cockroach/README.md
new file mode 100644
index 00000000..67c957bf
--- /dev/null
+++ b/registry/hasura/postgres/aliased_connectors/cockroach/README.md
@@ -0,0 +1,16 @@
+## Overview
+
+The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
+
+Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
+
+The connector supports the CockroachDB flavor of PostgreSQL.
+
+## Using the PostgreSQL connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/cockroach/logo.png b/registry/hasura/postgres/aliased_connectors/cockroach/logo.png
similarity index 100%
rename from registry/cockroach/logo.png
rename to registry/hasura/postgres/aliased_connectors/cockroach/logo.png
diff --git a/registry/cockroach/metadata.json b/registry/hasura/postgres/aliased_connectors/cockroach/metadata.json
similarity index 53%
rename from registry/cockroach/metadata.json
rename to registry/hasura/postgres/aliased_connectors/cockroach/metadata.json
index 5c460c8c..2323ee2f 100644
--- a/registry/cockroach/metadata.json
+++ b/registry/hasura/postgres/aliased_connectors/cockroach/metadata.json
@@ -7,7 +7,7 @@
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/aliased_connectors/neon/README.md b/registry/hasura/postgres/aliased_connectors/neon/README.md
new file mode 100644
index 00000000..93467bbf
--- /dev/null
+++ b/registry/hasura/postgres/aliased_connectors/neon/README.md
@@ -0,0 +1,16 @@
+## Overview
+
+The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
+
+Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
+
+The connector supports the [Neon](https://neon.tech) Postgres offering.
+
+## Using the PostgreSQL connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/neon/logo.svg b/registry/hasura/postgres/aliased_connectors/neon/logo.svg
similarity index 100%
rename from registry/neon/logo.svg
rename to registry/hasura/postgres/aliased_connectors/neon/logo.svg
diff --git a/registry/neon/metadata.json b/registry/hasura/postgres/aliased_connectors/neon/metadata.json
similarity index 53%
rename from registry/neon/metadata.json
rename to registry/hasura/postgres/aliased_connectors/neon/metadata.json
index 89baf3d9..84a94970 100644
--- a/registry/neon/metadata.json
+++ b/registry/hasura/postgres/aliased_connectors/neon/metadata.json
@@ -7,7 +7,7 @@
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/aliased_connectors/postgres-alloydb/README.md b/registry/hasura/postgres/aliased_connectors/postgres-alloydb/README.md
new file mode 100644
index 00000000..002ebd8e
--- /dev/null
+++ b/registry/hasura/postgres/aliased_connectors/postgres-alloydb/README.md
@@ -0,0 +1,16 @@
+## Overview
+
+The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
+
+Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
+
+The connector supports the [AlloyDB](https://cloud.google.com/alloydb) Postgres offering.
+
+## Using the PostgreSQL connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/postgres-alloydb/logo.png b/registry/hasura/postgres/aliased_connectors/postgres-alloydb/logo.png
similarity index 100%
rename from registry/postgres-alloydb/logo.png
rename to registry/hasura/postgres/aliased_connectors/postgres-alloydb/logo.png
diff --git a/registry/postgres-alloydb/metadata.json b/registry/hasura/postgres/aliased_connectors/postgres-alloydb/metadata.json
similarity index 53%
rename from registry/postgres-alloydb/metadata.json
rename to registry/hasura/postgres/aliased_connectors/postgres-alloydb/metadata.json
index 404680c6..53f3d91d 100644
--- a/registry/postgres-alloydb/metadata.json
+++ b/registry/hasura/postgres/aliased_connectors/postgres-alloydb/metadata.json
@@ -7,7 +7,7 @@
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/aliased_connectors/postgres-azure/README.md b/registry/hasura/postgres/aliased_connectors/postgres-azure/README.md
new file mode 100644
index 00000000..92fdc8e7
--- /dev/null
+++ b/registry/hasura/postgres/aliased_connectors/postgres-azure/README.md
@@ -0,0 +1,16 @@
+## Overview
+
+The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
+
+Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
+
+The connector supports the [Azure](https://azure.microsoft.com/en-us/products/postgresql) Postgres offering.
+
+## Using the PostgreSQL connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/postgres-azure/logo.png b/registry/hasura/postgres/aliased_connectors/postgres-azure/logo.png
similarity index 100%
rename from registry/postgres-azure/logo.png
rename to registry/hasura/postgres/aliased_connectors/postgres-azure/logo.png
diff --git a/registry/postgres-azure/metadata.json b/registry/hasura/postgres/aliased_connectors/postgres-azure/metadata.json
similarity index 53%
rename from registry/postgres-azure/metadata.json
rename to registry/hasura/postgres/aliased_connectors/postgres-azure/metadata.json
index ec0dfb84..e5f4f2c9 100644
--- a/registry/postgres-azure/metadata.json
+++ b/registry/hasura/postgres/aliased_connectors/postgres-azure/metadata.json
@@ -7,7 +7,7 @@
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/aliased_connectors/postgres-cosmos/README.md b/registry/hasura/postgres/aliased_connectors/postgres-cosmos/README.md
new file mode 100644
index 00000000..cc26b288
--- /dev/null
+++ b/registry/hasura/postgres/aliased_connectors/postgres-cosmos/README.md
@@ -0,0 +1,16 @@
+## Overview
+
+The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
+
+Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
+
+The connector supports the [Azure Cosmos DB for PostgreSQL](https://azure.microsoft.com/en-us/products/postgresql) offering.
+
+## Using the PostgreSQL connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/postgres-cosmos/logo.png b/registry/hasura/postgres/aliased_connectors/postgres-cosmos/logo.png
similarity index 100%
rename from registry/postgres-cosmos/logo.png
rename to registry/hasura/postgres/aliased_connectors/postgres-cosmos/logo.png
diff --git a/registry/postgres-cosmos/metadata.json b/registry/hasura/postgres/aliased_connectors/postgres-cosmos/metadata.json
similarity index 51%
rename from registry/postgres-cosmos/metadata.json
rename to registry/hasura/postgres/aliased_connectors/postgres-cosmos/metadata.json
index d348a791..1e52afdd 100644
--- a/registry/postgres-cosmos/metadata.json
+++ b/registry/hasura/postgres/aliased_connectors/postgres-cosmos/metadata.json
@@ -2,12 +2,12 @@
"overview": {
"namespace": "hasura",
"description": "Connect Hasura DDN to a Azure Cosmos DB for PostgreSQL database",
- "title": "Azure CosmosDB PostgreSQL",
+ "title": "Azure Cosmos DB for PostgreSQL",
"logo": "logo.png",
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/aliased_connectors/postgres-gcp/README.md b/registry/hasura/postgres/aliased_connectors/postgres-gcp/README.md
new file mode 100644
index 00000000..94a0458a
--- /dev/null
+++ b/registry/hasura/postgres/aliased_connectors/postgres-gcp/README.md
@@ -0,0 +1,16 @@
+## Overview
+
+The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
+
+Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
+
+The connector supports the [Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres) offering.
+
+## Using the PostgreSQL connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/postgres-gcp/logo.png b/registry/hasura/postgres/aliased_connectors/postgres-gcp/logo.png
similarity index 100%
rename from registry/postgres-gcp/logo.png
rename to registry/hasura/postgres/aliased_connectors/postgres-gcp/logo.png
diff --git a/registry/postgres-gcp/metadata.json b/registry/hasura/postgres/aliased_connectors/postgres-gcp/metadata.json
similarity index 53%
rename from registry/postgres-gcp/metadata.json
rename to registry/hasura/postgres/aliased_connectors/postgres-gcp/metadata.json
index b33877af..adb538a3 100644
--- a/registry/postgres-gcp/metadata.json
+++ b/registry/hasura/postgres/aliased_connectors/postgres-gcp/metadata.json
@@ -7,7 +7,7 @@
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/aliased_connectors/postgres-timescaledb/README.md b/registry/hasura/postgres/aliased_connectors/postgres-timescaledb/README.md
new file mode 100644
index 00000000..55b6d18f
--- /dev/null
+++ b/registry/hasura/postgres/aliased_connectors/postgres-timescaledb/README.md
@@ -0,0 +1,16 @@
+## Overview
+
+The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
+
+Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
+
+The connector supports the [TimescaleDB](https://www.timescale.com/) Postgres offering.
+
+## Using the PostgreSQL connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/postgres-timescaledb/logo.png b/registry/hasura/postgres/aliased_connectors/postgres-timescaledb/logo.png
similarity index 100%
rename from registry/postgres-timescaledb/logo.png
rename to registry/hasura/postgres/aliased_connectors/postgres-timescaledb/logo.png
diff --git a/registry/postgres-timescaledb/metadata.json b/registry/hasura/postgres/aliased_connectors/postgres-timescaledb/metadata.json
similarity index 53%
rename from registry/postgres-timescaledb/metadata.json
rename to registry/hasura/postgres/aliased_connectors/postgres-timescaledb/metadata.json
index 9e18acf1..3e89786e 100644
--- a/registry/postgres-timescaledb/metadata.json
+++ b/registry/hasura/postgres/aliased_connectors/postgres-timescaledb/metadata.json
@@ -7,7 +7,7 @@
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/aliased_connectors/yugabyte/README.md b/registry/hasura/postgres/aliased_connectors/yugabyte/README.md
new file mode 100644
index 00000000..d62e423b
--- /dev/null
+++ b/registry/hasura/postgres/aliased_connectors/yugabyte/README.md
@@ -0,0 +1,16 @@
+## Overview
+
+The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
+
+Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
+
+The connector supports the [Yugabyte](https://www.yugabyte.com/) Postgres offering.
+
+## Using the PostgreSQL connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/getting-started/build/connect-to-data/connect-a-source/?db=PostgreSQL) to get started with the PostgreSQL connector.
+
+## Troubleshooting
+
+Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+if you encounter any problems!
diff --git a/registry/yugabyte/logo.svg b/registry/hasura/postgres/aliased_connectors/yugabyte/logo.svg
similarity index 100%
rename from registry/yugabyte/logo.svg
rename to registry/hasura/postgres/aliased_connectors/yugabyte/logo.svg
diff --git a/registry/yugabyte/metadata.json b/registry/hasura/postgres/aliased_connectors/yugabyte/metadata.json
similarity index 100%
rename from registry/yugabyte/metadata.json
rename to registry/hasura/postgres/aliased_connectors/yugabyte/metadata.json
diff --git a/registry/postgres/logo.png b/registry/hasura/postgres/logo.png
similarity index 100%
rename from registry/postgres/logo.png
rename to registry/hasura/postgres/logo.png
diff --git a/registry/postgres/metadata.json b/registry/hasura/postgres/metadata.json
similarity index 53%
rename from registry/postgres/metadata.json
rename to registry/hasura/postgres/metadata.json
index 5f5a34fd..ea1ba8b6 100644
--- a/registry/postgres/metadata.json
+++ b/registry/hasura/postgres/metadata.json
@@ -7,7 +7,7 @@
"tags": [
"database"
],
- "latest_version": "v0.7.0"
+ "latest_version": "v1.1.1"
},
"author": {
"support_email": "support@hasura.io",
@@ -34,6 +34,41 @@
"tag": "v0.7.0",
"hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec",
"is_verified": true
+ },
+ {
+ "tag": "v0.7.1",
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.8.0",
+ "hash": "4513112",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.0",
+ "hash": "4af168d",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.1",
+ "hash": "e2fd651",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.0.2",
+ "hash": "1378805",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.0",
+ "hash": "a57c0b5",
+ "is_verified": true
+ },
+ {
+ "tag": "v1.1.1",
+ "hash": "fc6a7a7",
+ "is_verified": true
}
]
}
diff --git a/registry/hasura/postgres/releases/v0.5.1/connector-packaging.json b/registry/hasura/postgres/releases/v0.5.1/connector-packaging.json
new file mode 100644
index 00000000..71869c6d
--- /dev/null
+++ b/registry/hasura/postgres/releases/v0.5.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.5.1",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v0.5.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e219c7511e1ba994f3089db6bde5c0fd80a9744d12f04e4a13fdca41cf234433"
+ },
+ "source": {
+ "hash": "bdb270288188d0e32e564ea369e27da6d73833c5"
+ }
+}
diff --git a/registry/hasura/postgres/releases/v0.5.2/connector-packaging.json b/registry/hasura/postgres/releases/v0.5.2/connector-packaging.json
new file mode 100644
index 00000000..fd7f4e85
--- /dev/null
+++ b/registry/hasura/postgres/releases/v0.5.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.5.2",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v0.5.2/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e577b0f90d4611f293064478ddc647f9a14004307852efa6a87973622889faad"
+ },
+ "source": {
+ "hash": "805bc53209b9c8f7ca184b5a76bf86da5f47a1a3"
+ }
+}
diff --git a/registry/hasura/postgres/releases/v0.6.0/connector-packaging.json b/registry/hasura/postgres/releases/v0.6.0/connector-packaging.json
new file mode 100644
index 00000000..33e89824
--- /dev/null
+++ b/registry/hasura/postgres/releases/v0.6.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.6.0",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v0.6.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "49b491928898f5ed251ea67dccb4eeca99fbdcc0855ce6331d7e5cb2a2cf339e"
+ },
+ "source": {
+ "hash": "582c771c06b0ee5b4a5541ebc75dd483a6376c48"
+ }
+}
diff --git a/registry/hasura/postgres/releases/v0.7.0/connector-packaging.json b/registry/hasura/postgres/releases/v0.7.0/connector-packaging.json
new file mode 100644
index 00000000..960f98e7
--- /dev/null
+++ b/registry/hasura/postgres/releases/v0.7.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.7.0",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v0.7.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "ca0ff962cd836c4cb19ad89590896c02e9538b5b6fabc99f93b96b5db9ddd988"
+ },
+ "source": {
+ "hash": "0c6fbadcaceb08791fe98f3e68294c739decfbec"
+ }
+}
diff --git a/registry/hasura/postgres/releases/v0.7.1/connector-packaging.json b/registry/hasura/postgres/releases/v0.7.1/connector-packaging.json
new file mode 100644
index 00000000..d9e124c2
--- /dev/null
+++ b/registry/hasura/postgres/releases/v0.7.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.7.1",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v0.7.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "881fe5d046665d16eeb11410813335b0f3fc54ea6f948a7b5683fdc8eceeb281"
+ },
+ "source": {
+ "hash": "53565d6b4d342f98eed5cb2a91bebac745aa1d13"
+ }
+}
diff --git a/registry/hasura/postgres/releases/v0.8.0/connector-packaging.json b/registry/hasura/postgres/releases/v0.8.0/connector-packaging.json
new file mode 100644
index 00000000..f1c698ee
--- /dev/null
+++ b/registry/hasura/postgres/releases/v0.8.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.8.0",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v0.8.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "828dcbc1c1951c6dd4324cbaf41410076507094be88e278b8710aaccbf87af32"
+ },
+ "source": {
+ "hash": "45131122d3f153cfee3df1e1b8077dd21a37e386"
+ }
+}
diff --git a/registry/hasura/postgres/releases/v1.0.0/connector-packaging.json b/registry/hasura/postgres/releases/v1.0.0/connector-packaging.json
new file mode 100644
index 00000000..0b279c87
--- /dev/null
+++ b/registry/hasura/postgres/releases/v1.0.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.0",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v1.0.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e9d4b11b29f5bc721b3cd596cdfcf4de7e8463c5510ea104b673215e876a9139"
+ },
+ "source": {
+ "hash": "4af168d5638545f0e5c9e864ad4b4b28b7e860eb"
+ }
+}
diff --git a/registry/hasura/postgres/releases/v1.0.1/connector-packaging.json b/registry/hasura/postgres/releases/v1.0.1/connector-packaging.json
new file mode 100644
index 00000000..92e04f7c
--- /dev/null
+++ b/registry/hasura/postgres/releases/v1.0.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.1",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v1.0.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "c88e3199aa42b5a758941b0d0c6ed98396b7a1be3076c25daacd1ad7d92aa8f5"
+ },
+ "source": {
+ "hash": "e2fd65143411400ec612a20100e7ed3a7ed8f298"
+ }
+}
diff --git a/registry/hasura/postgres/releases/v1.0.2/connector-packaging.json b/registry/hasura/postgres/releases/v1.0.2/connector-packaging.json
new file mode 100644
index 00000000..782ab69d
--- /dev/null
+++ b/registry/hasura/postgres/releases/v1.0.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.2",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v1.0.2/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "38d4f4a843b3cc7c1b798c21594c8ffcbcd7595c5d456927ea61fe02a7f9d80f"
+ },
+ "source": {
+ "hash": "1378805c72a16934788d3ab6a5bc767f8f0b9741"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/postgres/releases/v1.1.0/connector-packaging.json b/registry/hasura/postgres/releases/v1.1.0/connector-packaging.json
new file mode 100644
index 00000000..d679124a
--- /dev/null
+++ b/registry/hasura/postgres/releases/v1.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.1.0",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v1.1.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "a5f358cea0bade28b00fa868e055a29bab158173ec8a65ec2a2d4cc9ff060d3d"
+ },
+ "source": {
+ "hash": "a57c0b5c76f98ea1da33d5aa649b6e8d071c3d4a"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/postgres/releases/v1.1.1/connector-packaging.json b/registry/hasura/postgres/releases/v1.1.1/connector-packaging.json
new file mode 100644
index 00000000..d8025f12
--- /dev/null
+++ b/registry/hasura/postgres/releases/v1.1.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.1.1",
+ "uri": "https://github.com/hasura/ndc-postgres/releases/download/v1.1.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "bb03bd400417e61884f2f7bafe5054b24a1377adcd22e749e4e3d0cc3b3d70bf"
+ },
+ "source": {
+ "hash": "fc6a7a742a0adb3b2923316e678003322fbd821b"
+ }
+}
diff --git a/registry/postgres-timescaledb/README.md b/registry/hasura/prometheus/README.md
similarity index 53%
rename from registry/postgres-timescaledb/README.md
rename to registry/hasura/prometheus/README.md
index f6e6ff31..e4d1c7ed 100644
--- a/registry/postgres-timescaledb/README.md
+++ b/registry/hasura/prometheus/README.md
@@ -1,16 +1,10 @@
## Overview
-The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
-
-As much as possible we attempt to provide explicit support for database projects that identify as being derived from PostgreSQL such as [Timescale PostgreSQL](https://www.timescale.com/).
+The Hasura Prometheus Connector allows for connecting Hasura to a Prometheus API server giving you an instant GraphQL API on top of your Prometheus data.
Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
-The `ndc-postgres` data connector is open source and can be found in the [ndc-postgres GitHub repository](https://github.com/hasura/ndc-postgres).
-
-Visit the
-[Hasura DDN PostgreSQL Documentation](https://hasura.io/docs/3.0/connectors/postgresql/)
-for more information about specific features that are available for the PostgreSQL Connector.
+The data connector is open source and can be found in the [ndc-prometheus GitHub repository](https://github.com/hasura/ndc-prometheus).
## Deployment
@@ -18,9 +12,9 @@ The connector is hosted by Hasura and can be used from the [Hasura v3 Console](h
## Usage
-The Hasura PostgreSQL connector can be deployed using the [Hasura CLI](https://hasura.io/docs/3.0/cli/overview) by following either the [Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or [deploying the connector](https://hasura.io/docs/3.0/connectors/deployment).
+The Hasura Prometheus connector can be deployed using the [Hasura CLI](https://hasura.io/docs/3.0/cli/overview) by following either the [Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or [deploying the connector](https://hasura.io/docs/3.0/connectors/deployment).
## Troubleshooting
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
+Please [submit a Github issue](https://github.com/hasura/ndc-prometheus/issues/new)
if you encounter any problems!
diff --git a/registry/hasura/prometheus/logo.svg b/registry/hasura/prometheus/logo.svg
new file mode 100644
index 00000000..5c51f66d
--- /dev/null
+++ b/registry/hasura/prometheus/logo.svg
@@ -0,0 +1,50 @@
+
+
+
+
\ No newline at end of file
diff --git a/registry/hasura/prometheus/metadata.json b/registry/hasura/prometheus/metadata.json
new file mode 100644
index 00000000..3eb06950
--- /dev/null
+++ b/registry/hasura/prometheus/metadata.json
@@ -0,0 +1,38 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect Hasura DDN to a Prometheus API server",
+ "title": "Prometheus Data Connector",
+ "logo": "logo.svg",
+ "tags": ["database"],
+ "latest_version": "v0.3.1"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": true,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-prometheus",
+ "version": [
+ {
+ "tag": "v0.0.4",
+ "hash": "69915e6c9736f38a0952c5ce8ad9a2d180783a43",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1.0",
+ "hash": "3d45dd1628d268906c8b56ecf235d6c280c29ca9",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.3.1",
+ "hash": "7a1911709873636e821af8313492e747ea717c14",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/prometheus/releases/v0.0.4/connector-packaging.json b/registry/hasura/prometheus/releases/v0.0.4/connector-packaging.json
new file mode 100644
index 00000000..566010dc
--- /dev/null
+++ b/registry/hasura/prometheus/releases/v0.0.4/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.4",
+ "uri": "https://github.com/hasura/ndc-prometheus/releases/download/v0.0.4/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "83acab73b703ff37c6322b990e2782331cffbfe64bf67fb0b2734b3f651689d9"
+ },
+ "source": {
+ "hash": "69915e6c9736f38a0952c5ce8ad9a2d180783a43"
+ }
+}
diff --git a/registry/hasura/prometheus/releases/v0.1.0/connector-packaging.json b/registry/hasura/prometheus/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..f38a8aaa
--- /dev/null
+++ b/registry/hasura/prometheus/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-prometheus/releases/download/v0.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "efe31157e7a2a580239b18f964c1ad2720e67f65e8ecbad29b8346b76fb3ae22"
+ },
+ "source": {
+ "hash": "3d45dd1628d268906c8b56ecf235d6c280c29ca9"
+ }
+}
diff --git a/registry/hasura/prometheus/releases/v0.3.1/connector-packaging.json b/registry/hasura/prometheus/releases/v0.3.1/connector-packaging.json
new file mode 100644
index 00000000..a499af39
--- /dev/null
+++ b/registry/hasura/prometheus/releases/v0.3.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.3.1",
+ "uri": "https://github.com/hasura/ndc-prometheus/releases/download/v0.3.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "218dea726017cc865b9ba746e5150427df5519bb52eb09fbcce38cde1d681598"
+ },
+ "source": {
+ "hash": "7a1911709873636e821af8313492e747ea717c14"
+ }
+}
diff --git a/registry/hasura/python/README.md b/registry/hasura/python/README.md
new file mode 100644
index 00000000..68cdac91
--- /dev/null
+++ b/registry/hasura/python/README.md
@@ -0,0 +1,52 @@
+# Hasura Python Lambda Connector
+
+
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/connectors/python)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-python-blue.svg?style=flat)](https://hasura.io/connectors/python)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](https://github.com/hasura/ndc-python-lambda/blob/main/LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](https://github.com/hasura/ndc-python-lambda/blob/main/README.md)
+
+This connector allows you to write Python code and call it using Hasura!
+
+With Hasura, you can integrate -- and even host -- this business logic directly with Hasura DDN and your API.
+
+You can handle custom business logic using the Python Lambda data connector. Using this connector, you can transform or
+enrich data before it reaches your customers, or perform any other business logic you may need.
+
+You can then integrate these functions as individual commands in your metadata and API. This process enables you to
+simplify client applications and speed up your backend development!
+
+This connector is built using the [Python Data Connector SDK](https://github.com/hasura/ndc-sdk-python) and implements
+the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the Python Lambda connector
+
+Check out the [Hasura docs here](https://hasura.io/docs/3.0/business-logic/python#add-the-python-connector-to-a-project)
+to get started with the Python Lambda connector.
+
+## Documentation
+
+View the full documentation for the Python Lambda connector
+[here](https://github.com/hasura/ndc-python-lambda/blob/main/docs/index.md).
+
+## Contributing
+
+Check out our [contributing guide](https://github.com/hasura/ndc-python-lambda/blob/main/docs/contributing.md) for more
+details.
+
+## License
+
+The Turso connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/python/logo.svg b/registry/hasura/python/logo.svg
new file mode 100644
index 00000000..e771ee25
--- /dev/null
+++ b/registry/hasura/python/logo.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/registry/hasura/python/metadata.json b/registry/hasura/python/metadata.json
new file mode 100644
index 00000000..4a448104
--- /dev/null
+++ b/registry/hasura/python/metadata.json
@@ -0,0 +1,33 @@
+{
+ "overview":{
+ "namespace":"hasura",
+ "description":"The Python Lambda Connector allows you to expose Python functions as NDC functions/procedures for use in your Hasura DDN subgraphs.",
+ "title":"Python Lambda Connector",
+ "logo":"logo.svg",
+ "tags":["lambda"],
+ "latest_version":"v0.1.0"
+ },
+ "author":{
+ "support_email":"support@hasura.io",
+ "homepage":"https://hasura.io",
+ "name":"Hasura"
+ },
+ "is_verified":false,
+ "is_hosted_by_hasura":false,
+ "source_code":{
+ "is_open_source":true,
+ "repository":"https://github.com/hasura/ndc-python-lambda",
+ "version":[
+ {
+ "tag":"v0.0.45",
+ "hash":"76a3d43d8ccf990b14812d9c0c354c4320b810f6",
+ "is_verified": false
+ },
+ {
+ "tag":"v0.1.0",
+ "hash":"6f83afe355a60bd9677536e1bb13b212dca5460a",
+ "is_verified": false
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/python/releases/v0.0.29/connector-packaging.json b/registry/hasura/python/releases/v0.0.29/connector-packaging.json
new file mode 100644
index 00000000..56708a02
--- /dev/null
+++ b/registry/hasura/python/releases/v0.0.29/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.29",
+ "uri": "https://github.com/hasura/ndc-python-lambda/releases/download/v0.0.29/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "913c7f91535ddabc6d49bbfbe4ba3a5f42bc812ae6dc3849419314c772933b28"
+ },
+ "source": {
+ "hash": "d3257fb98e7e4ed41f7a6482c523c66d03efc374"
+ }
+}
diff --git a/registry/hasura/python/releases/v0.0.30/connector-packaging.json b/registry/hasura/python/releases/v0.0.30/connector-packaging.json
new file mode 100644
index 00000000..29030db0
--- /dev/null
+++ b/registry/hasura/python/releases/v0.0.30/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.30",
+ "uri": "https://github.com/hasura/ndc-python-lambda/releases/download/v0.0.30/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "dbd59f1da60cee002c5fbbd9e48798578aa7fcdf4b65d2fe06d157869837d6df"
+ },
+ "source": {
+ "hash": "eb1c3d90eea1ff09c04914b60d9254eb85cc489f"
+ }
+}
diff --git a/registry/hasura/python/releases/v0.0.32/connector-packaging.json b/registry/hasura/python/releases/v0.0.32/connector-packaging.json
new file mode 100644
index 00000000..c8038641
--- /dev/null
+++ b/registry/hasura/python/releases/v0.0.32/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.32",
+ "uri": "https://github.com/hasura/ndc-python-lambda/releases/download/v0.0.32/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "18d2c5e1449b3b23499093b4282fe27d6667df20685c1be4deac73daf31fbc1d"
+ },
+ "source": {
+ "hash": "c65fb03c8f756340cf9b85885ef98bdf1712321b"
+ }
+}
diff --git a/registry/hasura/python/releases/v0.0.33/connector-packaging.json b/registry/hasura/python/releases/v0.0.33/connector-packaging.json
new file mode 100644
index 00000000..e27afef0
--- /dev/null
+++ b/registry/hasura/python/releases/v0.0.33/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.33",
+ "uri": "https://github.com/hasura/ndc-python-lambda/releases/download/v0.0.33/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "11cd4be00dbfa3fa33b4067acb8b8b6086d0f935ead19e823d91ce7e6df7a0fb"
+ },
+ "source": {
+ "hash": "c8b46112a6ae4da231c07f4edf478cd2c336772e"
+ }
+}
diff --git a/registry/hasura/python/releases/v0.0.41/connector-packaging.json b/registry/hasura/python/releases/v0.0.41/connector-packaging.json
new file mode 100644
index 00000000..7994b281
--- /dev/null
+++ b/registry/hasura/python/releases/v0.0.41/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.41",
+ "uri": "https://github.com/hasura/ndc-python-lambda/releases/download/v0.0.41/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "0e9d93ed0bc48328dc78a7f428308988d09a18acbde64ce94d7c973fc555a07b"
+ },
+ "source": {
+ "hash": "02344cb606f2a851ecb1545ce894a697bc533e13"
+ }
+}
diff --git a/registry/hasura/python/releases/v0.0.45/connector-packaging.json b/registry/hasura/python/releases/v0.0.45/connector-packaging.json
new file mode 100644
index 00000000..bc4c332d
--- /dev/null
+++ b/registry/hasura/python/releases/v0.0.45/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.45",
+ "uri": "https://github.com/hasura/ndc-python-lambda/releases/download/v0.0.45/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e9ba6388e4d3fad8c09dd3b696df5c97666f4551d47062b8dd7f311f1918269d"
+ },
+ "source": {
+ "hash": "76a3d43d8ccf990b14812d9c0c354c4320b810f6"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/python/releases/v0.1.0/connector-packaging.json b/registry/hasura/python/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..fe0cc94d
--- /dev/null
+++ b/registry/hasura/python/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-python-lambda/releases/download/v0.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "4bd56df0920b1f889292a1ef12a0735a9883c47edef7a3cfbdc4c7db37dcf644"
+ },
+ "source": {
+ "hash": "6f83afe355a60bd9677536e1bb13b212dca5460a"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/qdrant/README.md b/registry/hasura/qdrant/README.md
new file mode 100644
index 00000000..55b33733
--- /dev/null
+++ b/registry/hasura/qdrant/README.md
@@ -0,0 +1,89 @@
+# Hasura Qdrant Connector
+
+
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/connectors/qdrant)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-qdrant-blue.svg?style=flat)](https://hasura.io/connectors/qdrant)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](https://github.com/hasura/ndc-qdrant/blob/main/LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](https://github.com/hasura/ndc-qdrant/blob/main/README.md)
+
+The Hasura Qdrant Connector allows for connecting to a Qdrant database to give you an instant GraphQL API on top of your
+Qdrant data.
+
+This connector is built using the [Typescript Data Connector SDK](https://github.com/hasura/ndc-sdk-typescript) and
+implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [See the listing in the Hasura Hub](https://hasura.io/connectors/qdrant)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0/index/)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the Qdrant connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ------------------------------------------------------------------ |
+| Native Queries + Logical Models | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ❌ | |
+| Sort | ❌ | |
+| Paginate | ✅ | Pagination offset field only works for documents with Integer ID's |
+| Nested Objects | ✅ | |
+| Nested Arrays | ✅ | |
+| Nested Filtering | ❌ | |
+| Nested Sorting | ❌ | |
+| Nested Relationships | ❌ | |
+| Vector Search | ✅ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+5. Have a [Qdrant](https://qdrant.tech/) hosted database, or a locally running Qdrant database — for supplying data to
+ your API.
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the Qdrant connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Name | Description |
+| -------------- | --------------------------------------------- |
+| QDRANT_URL | The connection string for the Qdrant database |
+| QDRANT_API_KEY | The Qdrant API Key |
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## Documentation
+
+View the full documentation for the Qdrant connector
+[here](https://github.com/hasura/ndc-qdrant/blob/main/docs/index.md).
+
+## Contributing
+
+Check out our [contributing guide](https://github.com/hasura/ndc-qdrant/blob/main/docs/contributing.md) for more
+details.
+
+## License
+
+The Qdrant connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/qdrant/logo.png b/registry/hasura/qdrant/logo.png
similarity index 100%
rename from registry/qdrant/logo.png
rename to registry/hasura/qdrant/logo.png
diff --git a/registry/hasura/qdrant/metadata.json b/registry/hasura/qdrant/metadata.json
new file mode 100644
index 00000000..5d8cfcac
--- /dev/null
+++ b/registry/hasura/qdrant/metadata.json
@@ -0,0 +1,35 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "The Qdrant Data Connector allows for connecting to a Qdrant instance giving you an instant GraphQL API on top of your Qdrant Vector Data.",
+ "title": "Qdrant Data Connector",
+ "logo": "logo.png",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v0.3.0"
+ },
+ "author": {
+ "support_email": "Community Supported",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": false,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-qdrant",
+ "version": [
+ {
+ "tag": "v0.2.1",
+ "hash": "2effed689bd2f97c9649d1b8f9966533ed1d82a0",
+ "is_verified": false
+ },
+ {
+ "tag": "v0.3.0",
+ "hash": "5eda2128fcbe710741f07a404a6eb69214da2731",
+ "is_verified": false
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/qdrant/releases/v0.1.7/connector-packaging.json b/registry/hasura/qdrant/releases/v0.1.7/connector-packaging.json
new file mode 100644
index 00000000..6df9f8c6
--- /dev/null
+++ b/registry/hasura/qdrant/releases/v0.1.7/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.7",
+ "uri": "https://github.com/hasura/ndc-qdrant/releases/download/v0.1.7/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "6ed4b6252e9f3f91d68deb4195a11b70fe14691b155af792ec91f8aee743b587"
+ },
+ "source": {
+ "hash": "848a9022df832b4595473f8bae4b3a66564f0bda"
+ }
+}
diff --git a/registry/hasura/qdrant/releases/v0.1.9/connector-packaging.json b/registry/hasura/qdrant/releases/v0.1.9/connector-packaging.json
new file mode 100644
index 00000000..285b79ea
--- /dev/null
+++ b/registry/hasura/qdrant/releases/v0.1.9/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.9",
+ "uri": "https://github.com/hasura/ndc-qdrant/releases/download/v0.1.9/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "38a83f9851a6600e23eeda5e2c07f2aba492b6298a7a0c434a70af9d143ec4f4"
+ },
+ "source": {
+ "hash": "c07dbcfbf00a1c4549eaf2860afad018910c830a"
+ }
+}
diff --git a/registry/hasura/qdrant/releases/v0.2.1/connector-packaging.json b/registry/hasura/qdrant/releases/v0.2.1/connector-packaging.json
new file mode 100644
index 00000000..4264026b
--- /dev/null
+++ b/registry/hasura/qdrant/releases/v0.2.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.1",
+ "uri": "https://github.com/hasura/ndc-qdrant/releases/download/v0.2.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "007cfaa76e45d3df2c2f50e1fdf0d4a3122a48895088958eaa972aee5ce49ac8"
+ },
+ "source": {
+ "hash": "2effed689bd2f97c9649d1b8f9966533ed1d82a0"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/qdrant/releases/v0.3.0/connector-packaging.json b/registry/hasura/qdrant/releases/v0.3.0/connector-packaging.json
new file mode 100644
index 00000000..7cf389ad
--- /dev/null
+++ b/registry/hasura/qdrant/releases/v0.3.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.3.0",
+ "uri": "https://github.com/hasura/ndc-qdrant/releases/download/v0.3.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "bc0c8761906430f0309f68ea9e843c543889833471cdcdcfb15414c4d510eaee"
+ },
+ "source": {
+ "hash": "5eda2128fcbe710741f07a404a6eb69214da2731"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/sendgrid/README.md b/registry/hasura/sendgrid/README.md
new file mode 100644
index 00000000..fd120b7f
--- /dev/null
+++ b/registry/hasura/sendgrid/README.md
@@ -0,0 +1,50 @@
+## Overview
+
+This connector uses the SendGrid v3 API to:
+
+* List email templates
+* Send emails
+
+## Prerequisites
+
+1. [Create a SendGrid API account](https://signup.sendgrid.com/)
+2. [Create a SendGrid API key](https://app.sendgrid.com/settings/api_keys)
+2. Create a [Hasura Cloud account](https://console.hasura.io)
+3. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+4. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+5. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the SendGrid Connector
+
+Add the SendGrid connector to your DDN project by running
+
+```
+> ddn connector init -i
+```
+
+Select the SendGrid connector from the list and provide a name for the connector and your SendGrid API key.
+
+Then you need to introspect the connector to get its schema:
+
+```
+> ddn connector introspect
+```
+
+And then you can add all the SendGrid commands to your supergraph:
+
+```
+> ddn command add "*"
+```
+
+You can now build your supergraph, run it locally, and open the Hasura Console to try it out:
+
+```
+> ddn supergraph build local
+> ddn run docker-start
+> ddn console --local
+```
diff --git a/registry/sendgrid/logo.png b/registry/hasura/sendgrid/logo.png
similarity index 100%
rename from registry/sendgrid/logo.png
rename to registry/hasura/sendgrid/logo.png
diff --git a/registry/hasura/sendgrid/metadata.json b/registry/hasura/sendgrid/metadata.json
new file mode 100644
index 00000000..da67679d
--- /dev/null
+++ b/registry/hasura/sendgrid/metadata.json
@@ -0,0 +1,60 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to SendGrid v3 API and expose it to Hasura DDN project",
+ "title": "SendGrid Connector",
+ "logo": "logo.png",
+ "tags": [
+ "email"
+ ],
+ "latest_version": "v0.6.0"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-sendgrid/",
+ "version": [
+ {
+ "tag": "v0.6.0",
+ "hash": "dcd4ca3025783ca732077fd71b094db3902785dd",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.5.0",
+ "hash": "b373cbc42968e9619d2ecfda8ef08f1d0f970619",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.4",
+ "hash": "4eba05262ceb31e2af885717b93d7d487b27275c",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.3",
+ "hash": "4d129449d3faa295fb145bc99b1f69db73314cce",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2.1",
+ "hash": "e06860bb3ceedf7ec76e5b8559238bca527422b4",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.2",
+ "hash": "c0b3f13893e24a41df084985908af7ced0265498",
+ "is_verified": true
+ },
+ {
+ "tag": "v0.1",
+ "hash": "8dc16c427e4e0136ebf0cfba1de3831c7939befb",
+ "is_verified": true
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/sendgrid/releases/v0.5.0/connector-packaging.json b/registry/hasura/sendgrid/releases/v0.5.0/connector-packaging.json
new file mode 100644
index 00000000..d8124845
--- /dev/null
+++ b/registry/hasura/sendgrid/releases/v0.5.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.5.0",
+ "uri": "https://github.com/hasura/ndc-sendgrid/releases/download/v0.5.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "ef9b4beb8c3db01856e04524c8debab3b8495421416d20c40faa63cdac73f07e"
+ },
+ "source": {
+ "hash": "b373cbc42968e9619d2ecfda8ef08f1d0f970619"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/sendgrid/releases/v0.6.0/connector-packaging.json b/registry/hasura/sendgrid/releases/v0.6.0/connector-packaging.json
new file mode 100644
index 00000000..5ff03c5a
--- /dev/null
+++ b/registry/hasura/sendgrid/releases/v0.6.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.6.0",
+ "uri": "https://github.com/hasura/ndc-sendgrid/releases/download/v0.6.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "e4277682dd5b1705d863966177af3c597693494d7bc109fb1b9fbdf978637d8e"
+ },
+ "source": {
+ "hash": "dcd4ca3025783ca732077fd71b094db3902785dd"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/singlestore/README.md b/registry/hasura/singlestore/README.md
new file mode 100644
index 00000000..3acb622f
--- /dev/null
+++ b/registry/hasura/singlestore/README.md
@@ -0,0 +1,124 @@
+# SingleStore Data Connector
+
+
+
+
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0/latest/connectors/singesltore/)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-singlestore-blue.svg?style=flat)](https://hasura.io/connectors/singlestore)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
+
+The Hasura SingleStore Connector ("the connector") enables you to connect to a SingleStore database and gives instant
+access to a GraphQL API on top of your data.
+
+This connector is built using the [Typescript Data Connector SDK](https://github.com/hasura/ndc-sdk-typescript) and, it
+implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+
+
+- [See the listing in the Hasura Hub](https://hasura.io/connectors/singlestore)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0)
+
+## Features
+
+The following matrix lists the features supported by the Hasura SingleStore connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----------- |
+| Native Queries + Logical Models | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ✅ | |
+| Views | ✅ | |
+| Distinct | ✅ | |
+| Remote Relationships | ✅ | |
+| Mutations | ❌ | coming soon |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+5. An active [SingleStore](https://www.singlestore.com/) deployment that serves as the data source for the API.
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the SingleStore connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Name | Default | Description |
+| ----------------------------------- | --------- | --------------------------------------------------------------------------------------------------- |
+| SINGLESTORE_HOST | localhost | Hostname of the SingleStore database to connect with. |
+| SINGLESTORE_PORT | 3306 | Port number of the SingleStore database. |
+| SINGLESTORE_USER | | SingleStore user to authenticate as. |
+| SINGLESTORE_PASSWORD | | Password of the SingleStore database user. |
+| SINGLESTORE_DATABASE | | Name of the SingleStore database to connect with. |
+| SINGLESTORE_SSL_CA | | CA certificate. |
+| SINGLESTORE_SSL_CERT | | Certificate chain in PEM format. |
+| SINGLESTORE_SSL_KEY | | Private key in PEM format. |
+| SINGLESTORE_SSL_CIPHERS | | Cipher suite specification. If specified, it replaces the default value. |
+| SINGLESTORE_SSL_PASSPHRASE | | Shared passphrase used for a single private key. |
+| SINGLESTORE_SSL_REJECT_UNAUTHORIZED | true | If enabled, the server rejects any connection that is not authorized with the list of supplied CAs. |
+
+The connector uses [MySQL2](https://sidorares.github.io/node-mysql2/docs) library to establish a connection. For more
+information, refer to [Connection options](https://www.npmjs.com/package/mysql#connection-options) and
+[Pool options](https://www.npmjs.com/package/mysql#pool-options).
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+### Note
+
+SingleStore does not support foreign keys. Relationships between tables must be added manually. You can define
+relationships by appending relationship information to the `.hml` files generated in the previous step. For information
+on defining relationships, refer to [Relationships](https://hasura.io/docs/3.0/supergraph-modeling/relationships/). For
+example, to add a relationship from a `message` table to the `user` table, append following text to the `DbMessage.hml`
+file:
+
+```hml
+---
+kind: Relationship
+version: v1
+definition:
+ name: user
+ sourceType: DbMessage
+ target:
+ model:
+ name: DbUser
+ subgraph: app
+ relationshipType: Object
+ mapping:
+ - source:
+ fieldPath:
+ - fieldName: userId
+ target:
+ modelField:
+ - fieldName: id
+ description: The user details for a message
+```
+
+## License
+
+The SingleStore connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/singlestore/logo.png b/registry/hasura/singlestore/logo.png
new file mode 100644
index 00000000..c3eee058
Binary files /dev/null and b/registry/hasura/singlestore/logo.png differ
diff --git a/registry/hasura/singlestore/metadata.json b/registry/hasura/singlestore/metadata.json
new file mode 100644
index 00000000..f7e8f6ab
--- /dev/null
+++ b/registry/hasura/singlestore/metadata.json
@@ -0,0 +1,50 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "The Hasura SingleStore Connector enables you to connect to a SingleStore database and gives instant access to a GraphQL API on top of your data.",
+ "title": "SingleStore Data Connector",
+ "logo": "logo.png",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v0.0.4"
+ },
+ "author": {
+ "support_email": "integrations@singlestore.com",
+ "homepage": "https://www.singlestore.com/",
+ "name": "SingleStore"
+ },
+ "is_verified": false,
+ "is_hosted_by_hasura": false,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/singlestore-labs/singlestore-hasura-connector/",
+ "version": [
+ {
+ "tag": "v0.0.1",
+ "hash": "a9caa889c13a251040003c0934c7e67fccfd7de4",
+ "is_verified": false
+ },
+ {
+ "tag": "v0.0.2",
+ "hash": "2afe3150215fbd6bf8a93ee6f853ad232e5d101d",
+ "is_verified": false
+ },
+ {
+ "tag": "v0.0.3",
+ "hash": "72ed900d5cc6819614fa27bba7bdba8977eedc6d",
+ "is_verified": false
+ },
+ {
+ "tag": "v0.0.4",
+ "hash": "4a7e713a767d9899c6b81d455ba76b7b75602d06",
+ "is_verified": false
+ },
+ {
+ "tag": "v0.0.4",
+ "hash": "f26ee20fedf4578a29ff3199561b2882d70f915a",
+ "is_verified": false
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/singlestore/releases/v0.0.1/connector-packaging.json b/registry/hasura/singlestore/releases/v0.0.1/connector-packaging.json
new file mode 100644
index 00000000..a233f2eb
--- /dev/null
+++ b/registry/hasura/singlestore/releases/v0.0.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.1",
+ "uri": "https://github.com/singlestore-labs/singlestore-hasura-connector/releases/download/v0.0.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "7cc9f73cb966c2b69ef54d5f0e346407d3555ed1ac08f361f16157540bb80041"
+ },
+ "source": {
+ "hash": "a9caa889c13a251040003c0934c7e67fccfd7de4"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/singlestore/releases/v0.0.2/connector-packaging.json b/registry/hasura/singlestore/releases/v0.0.2/connector-packaging.json
new file mode 100644
index 00000000..d12b6c7a
--- /dev/null
+++ b/registry/hasura/singlestore/releases/v0.0.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.2",
+ "uri": "https://github.com/singlestore-labs/singlestore-hasura-connector/releases/download/v0.0.2/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "7faa80c1d6c64137f45582aec7a052ca046376b66a081589925d8b7975cc3fe9"
+ },
+ "source": {
+ "hash": "2afe3150215fbd6bf8a93ee6f853ad232e5d101d"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/singlestore/releases/v0.0.3/connector-packaging.json b/registry/hasura/singlestore/releases/v0.0.3/connector-packaging.json
new file mode 100644
index 00000000..73016048
--- /dev/null
+++ b/registry/hasura/singlestore/releases/v0.0.3/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.3",
+ "uri": "https://github.com/singlestore-labs/singlestore-hasura-connector/releases/download/v0.0.3/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "69b44fa9549c041bb1d0570847f18180402eef3d3ee1281b20fae45693444d5b"
+ },
+ "source": {
+ "hash": "72ed900d5cc6819614fa27bba7bdba8977eedc6d"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/singlestore/releases/v0.0.4/connector-packaging.json b/registry/hasura/singlestore/releases/v0.0.4/connector-packaging.json
new file mode 100644
index 00000000..1fae3aae
--- /dev/null
+++ b/registry/hasura/singlestore/releases/v0.0.4/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.4",
+ "uri": "https://github.com/singlestore-labs/singlestore-hasura-connector/releases/download/v0.0.4/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "1532508dfff96f003adc16ad9b440b779733ee8fdfe9d1b07c4f8d8edea05188"
+ },
+ "source": {
+ "hash": "f26ee20fedf4578a29ff3199561b2882d70f915a"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/snowflake/README.md b/registry/hasura/snowflake/README.md
new file mode 100644
index 00000000..03bd3dad
--- /dev/null
+++ b/registry/hasura/snowflake/README.md
@@ -0,0 +1,82 @@
+# Snowflake Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0/getting-started/overview/)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-sqlserver-blue.svg?style=flat)](https://hasura.io/connectors/sqlserver)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
+
+With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your data models in
+Snowflake. This connector supports Snowflake's functionalities listed in the table below, allowing for efficient and
+scalable data operations. Additionally, users benefit from all the powerful features of Hasura’s Data Delivery Network
+(DDN) platform, including query pushdown capabilities that delegate query operations to the database, thereby enhancing
+query optimization and performance.
+
+This connector implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [Connector information in the Hasura Hub](https://hasura.io/connectors/snowflake)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the Snowflake connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----- |
+| Native Queries + Logical Models | ✅ | |
+| Native Mutations | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ✅ | |
+| Views | ✅ | |
+| Remote Relationships | ✅ | |
+| Custom Fields | ❌ | |
+| Mutations | ❌ | |
+| Distinct | ❌ | |
+| Enums | ❌ | |
+| Naming Conventions | ❌ | |
+| Default Values | ❌ | |
+| User-defined Functions | ❌ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the Snowflake connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Name | Description | Required |
+| ------------ | ------------------------------------------------------------ | -------- |
+| JDBC_URL | The JDBC URL to connect to the database | Yes |
+| JDBC_SCHEMAS | A comma-separated list of schemas to include in the metadata | Yes |
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## License
+
+The Hasura Snowflake connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/snowflake/logo.svg b/registry/hasura/snowflake/logo.svg
new file mode 100644
index 00000000..e88dcad6
--- /dev/null
+++ b/registry/hasura/snowflake/logo.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/registry/hasura/snowflake/metadata.json b/registry/hasura/snowflake/metadata.json
new file mode 100644
index 00000000..cfdbc20d
--- /dev/null
+++ b/registry/hasura/snowflake/metadata.json
@@ -0,0 +1,59 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to a Snowflake database and expose it to Hasura v3 Project",
+ "title": "Snowflake Connector",
+ "logo": "logo.svg",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v1.0.1"
+ },
+ "author": {
+ "support_email": "support@hasura.io",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": true,
+ "is_hosted_by_hasura": true,
+ "packages": [
+ {
+ "version": "0.1.0",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/snowflake%2Fv0.1.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "564757bc44bebe56560fe21a1306507d160caf084d69556bded4a7ed392e1b41"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+ },
+ {
+ "version": "1.0.1",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/snowflake%2Fv1.0.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "01791312a91e41e59dd638f7efed7472a37c3d1fe174cc71a844a5cde65e23a5"
+ },
+ "source": {
+ "hash": "fbeb926e1d5550bec78a042a36d5ac2a8fba4c9f"
+ }
+ }
+ ],
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-jvm-mono",
+ "version": [
+ {
+ "tag": "snowflake/v0.1.0",
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e",
+ "is_verified": true
+ },
+ {
+ "tag": "snowflake/v1.0.1",
+ "hash": "fbeb926e1d5550bec78a042a36d5ac2a8fba4c9f",
+ "is_verified": true
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/snowflake/releases/v0.1.0/connector-packaging.json b/registry/hasura/snowflake/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..07a586cf
--- /dev/null
+++ b/registry/hasura/snowflake/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/snowflake%2Fv0.1.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "662391f5d3821bf41662d25266bfa9ff6e9d5a162a31b74959487d12deb89d3e"
+ },
+ "source": {
+ "hash": "145792746281b606bcef2dfe20d1f0ad69efe01e"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/snowflake/releases/v1.0.1/connector-packaging.json b/registry/hasura/snowflake/releases/v1.0.1/connector-packaging.json
new file mode 100644
index 00000000..b6e1dcd6
--- /dev/null
+++ b/registry/hasura/snowflake/releases/v1.0.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v1.0.1",
+ "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/snowflake%2Fv1.0.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "01791312a91e41e59dd638f7efed7472a37c3d1fe174cc71a844a5cde65e23a5"
+ },
+ "source": {
+ "hash": "fbeb926e1d5550bec78a042a36d5ac2a8fba4c9f"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/sqlserver/README.md b/registry/hasura/sqlserver/README.md
new file mode 100644
index 00000000..f1f1c3cb
--- /dev/null
+++ b/registry/hasura/sqlserver/README.md
@@ -0,0 +1,93 @@
+# SQL Server Connector
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-sqlserver-blue.svg?style=flat)](https://hasura.io/connectors/sqlserver)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
+
+With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your data models in
+Microsoft SQL Server. This connector supports SQL Server's functionalities listed in the table below, allowing for
+efficient and scalable data operations. Additionally, users benefit from all the powerful features of Hasura’s Data
+Delivery Network (DDN) platform, including query pushdown capabilities that delegate query operations to the database,
+thereby enhancing query optimization and performance.
+
+This connector is built using the [Rust Data Connector SDK](https://github.com/hasura/ndc-hub#rusk-sdk) and implements
+the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [See the listing in the Hasura Hub](https://hasura.io/connectors/sqlserver)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0/)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the SQL Server connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ------------------------------------ |
+| Native Queries + Logical Models | ✅ | |
+| Native Mutations | ✅ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ✅ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ✅ | |
+| Views | ✅ | |
+| Remote Relationships | ✅ | |
+| Stored Procedures | ✅ | |
+| Custom Fields | ❌ | |
+| Mutations | ❌ | Only native mutations are suppported |
+| Distinct | ✅ | |
+| Enums | ❌ | |
+| Naming Conventions | ❌ | |
+| Default Values | ❌ | |
+| User-defined Functions | ❌ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the SQLServer connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Name | Description | Required | Default |
+| -------------- | ------------------------------------------------ | -------- | ------- |
+| CONNECTION_URI | The connection string of the SQL Server database | Yes | N/A |
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## Documentation
+
+View the full documentation for the ndc-sqlserver connector [here](./docs/readme.md).
+
+## Contributing
+
+We're happy to receive any contributions from the community. Please refer to our
+[development guide](./docs/development.md).
+
+## License
+
+The Hasura SQL Server connector is available under the
+[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/sqlserver/logo.png b/registry/hasura/sqlserver/logo.png
similarity index 100%
rename from registry/sqlserver/logo.png
rename to registry/hasura/sqlserver/logo.png
diff --git a/registry/sqlserver/metadata.json b/registry/hasura/sqlserver/metadata.json
similarity index 73%
rename from registry/sqlserver/metadata.json
rename to registry/hasura/sqlserver/metadata.json
index 49688d32..1bba9bf7 100644
--- a/registry/sqlserver/metadata.json
+++ b/registry/hasura/sqlserver/metadata.json
@@ -5,7 +5,7 @@
"title": "SQL Server Connector",
"logo": "logo.png",
"tags": ["database"],
- "latest_version": "v0.1.1"
+ "latest_version": "v0.2.2"
},
"author": {
"support_email": "support@hasura.io",
@@ -13,8 +13,19 @@
"name": "Hasura"
},
"is_verified": true,
- "is_hosted_by_hasura": false,
+ "is_hosted_by_hasura": true,
"packages": [
+ {
+ "version": "0.1.2",
+ "uri": "https://github.com/hasura/ndc-sqlserver/releases/download/v0.1.2/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "102c642b2e0ddea1eaa471c5189ecd3423a20f91ad83995e09f9d4721dd85732"
+ },
+ "source": {
+ "hash": "bc0fd3d126f6c142587e014aa900fc6bc90cd59d"
+ }
+ },
{
"version": "0.1.1",
"uri": "https://github.com/hasura/ndc-sqlserver/releases/download/v0.1.1/package.tar.gz",
@@ -42,6 +53,11 @@
"is_open_source": true,
"repository": "https://github.com/hasura/ndc-sqlserver/",
"version": [
+ {
+ "tag": "v0.1.2",
+ "hash": "bc0fd3d126f6c142587e014aa900fc6bc90cd59d",
+ "is_verified": true
+ },
{
"tag": "v0.1.1",
"hash": "638a2b608f7a9c4625de7df35c61c909d2ce16b1",
@@ -54,4 +70,4 @@
}
]
}
-}
\ No newline at end of file
+}
diff --git a/registry/hasura/sqlserver/releases/v0.1.0/connector-packaging.json b/registry/hasura/sqlserver/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..531f6325
--- /dev/null
+++ b/registry/hasura/sqlserver/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-sqlserver/releases/download/v0.1.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "5f47a1df3055b694ffaf13058e201ac0fa83db53ce2044cd15eeaaa841565cb4"
+ },
+ "source": {
+ "hash": "e26d6bd1a22540dcf5c5b29460260c2d23ff2657"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/sqlserver/releases/v0.1.1/connector-packaging.json b/registry/hasura/sqlserver/releases/v0.1.1/connector-packaging.json
new file mode 100644
index 00000000..3aa7053d
--- /dev/null
+++ b/registry/hasura/sqlserver/releases/v0.1.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.1",
+ "uri": "https://github.com/hasura/ndc-sqlserver/releases/download/v0.1.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "340f11a2dbc180af838327c09949ac0dc14c94eb87b0d6b5a28c765ec928b1a9"
+ },
+ "source": {
+ "hash": "638a2b608f7a9c4625de7df35c61c909d2ce16b1"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/sqlserver/releases/v0.1.2/connector-packaging.json b/registry/hasura/sqlserver/releases/v0.1.2/connector-packaging.json
new file mode 100644
index 00000000..2ac187ba
--- /dev/null
+++ b/registry/hasura/sqlserver/releases/v0.1.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.2",
+ "uri": "https://github.com/hasura/ndc-sqlserver/releases/download/v0.1.2/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "102c642b2e0ddea1eaa471c5189ecd3423a20f91ad83995e09f9d4721dd85732"
+ },
+ "source": {
+ "hash": "bc0fd3d126f6c142587e014aa900fc6bc90cd59d"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/sqlserver/releases/v0.2.0/connector-packaging.json b/registry/hasura/sqlserver/releases/v0.2.0/connector-packaging.json
new file mode 100644
index 00000000..98d43812
--- /dev/null
+++ b/registry/hasura/sqlserver/releases/v0.2.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.0",
+ "uri": "https://github.com/hasura/ndc-sqlserver/releases/download/v0.2.0/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "5fe8c9461acc6eeb8290d3e41e4f4d77f2b3ecc30898194746e469b1c45e2365"
+ },
+ "source": {
+ "hash": "368b38f"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/sqlserver/releases/v0.2.1/connector-packaging.json b/registry/hasura/sqlserver/releases/v0.2.1/connector-packaging.json
new file mode 100644
index 00000000..f11cf563
--- /dev/null
+++ b/registry/hasura/sqlserver/releases/v0.2.1/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.1",
+ "uri": "https://github.com/hasura/ndc-sqlserver/releases/download/v0.2.1/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "ab32dcdbf66df75a7ca6a319d433b6057afe89bec203378abad857a13608f285"
+ },
+ "source": {
+ "hash": "35dd850de629234553b3338f4c1ab976b20d77b6"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/sqlserver/releases/v0.2.2/connector-packaging.json b/registry/hasura/sqlserver/releases/v0.2.2/connector-packaging.json
new file mode 100644
index 00000000..f05762ee
--- /dev/null
+++ b/registry/hasura/sqlserver/releases/v0.2.2/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.2.2",
+ "uri": "https://github.com/hasura/ndc-sqlserver/releases/download/v0.2.2/package.tar.gz",
+ "checksum": {
+ "type": "sha256",
+ "value": "2dbe5251872bf39d3a08261f7042307bae2ea8c831eec1982177b765c1e7013d"
+ },
+ "source": {
+ "hash": "c33ff7efdcdef2c337aa40e2e776a4c2fdaca68b"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/turso/README.md b/registry/hasura/turso/README.md
new file mode 100644
index 00000000..77ac483a
--- /dev/null
+++ b/registry/hasura/turso/README.md
@@ -0,0 +1,95 @@
+# Hasura Turso Connector
+
+
+
+[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/connectors/turso)
+[![ndc-hub](https://img.shields.io/badge/ndc--hub-turso-blue.svg?style=flat)](https://hasura.io/connectors/turso)
+[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](https://github.com/hasura/ndc-turso/blob/main/LICENSE.txt)
+[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](https://github.com/hasura/ndc-turso/blob/main/README.md)
+
+The Hasura Turso Connector allows for connecting to a LibSQL/SQLite database or a Turso hosted LibSQL database to give
+you an instant GraphQL API on top of your Turso data.
+
+This connector is built using the [Typescript Data Connector SDK](https://github.com/hasura/ndc-sdk-typescript) and
+implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
+
+- [See the listing in the Hasura Hub](https://hasura.io/connectors/turso)
+- [Hasura V3 Documentation](https://hasura.io/docs/3.0/index/)
+
+## Features
+
+Below, you'll find a matrix of all supported features for the Turso connector:
+
+| Feature | Supported | Notes |
+| ------------------------------- | --------- | ----- |
+| Native Queries + Logical Models | ❌ | |
+| Simple Object Query | ✅ | |
+| Filter / Search | ✅ | |
+| Simple Aggregation | ❌ | |
+| Sort | ✅ | |
+| Paginate | ✅ | |
+| Table Relationships | ✅ | |
+| Views | ❌ | |
+| Distinct | ❌ | |
+| Remote Relationships | ✅ | |
+| Custom Fields | ❌ | |
+| Mutations | ✅ | |
+
+## Prerequisites
+
+1. Create a [Hasura Cloud account](https://console.hasura.io)
+2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and
+ [Docker](https://docs.docker.com/engine/install/) installed
+3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph)
+4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph)
+
+The steps below explain how to initialize and configure a connector on your local machine (typically for development
+purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured —
+[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector).
+
+## Using the Turso connector
+
+With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize
+the connector:
+
+```sh
+ddn connector init -i
+```
+
+When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function:
+
+| Name | Description |
+| ---------------- | --------------------------------------------------------------------------------- |
+| TURSO_URL | The connection string for the Turso database, or the file path to the SQLite file |
+| TURSO_AUTH_TOKEN | The turso auth token |
+
+If you are attaching to a local SQLite file, first make sure that the file is located inside the connector directory.
+For example, if you had a `data.sqlite` file you could place it at `/app/connector/turso/data.sqlite`. Files in the
+connector directory get mounted to `/etc/connector/`.
+
+In this instance, you would set the `TURSO_URL=file:/etc/connector/data.sqlite` and leave the `TURSO_AUTH_TOKEN` as
+blank/null.
+
+**Your experience mounting files may vary, and while useful to explore a file locally, it's not recommended to attempt
+to deploy a connector using a locally mounted file.**
+
+After the CLI initializes the connector, you'll need to:
+
+- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source.
+- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add),
+ [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and
+ [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add).
+- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local).
+- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples).
+
+## Documentation
+
+View the full documentation for the Turso connector [here](https://github.com/hasura/ndc-turso/blob/main/docs/index.md).
+
+## Contributing
+
+Check out our [contributing guide](https://github.com/hasura/ndc-turso/blob/main/docs/contributing.md) for more details.
+
+## License
+
+The Turso connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/hasura/turso/logo.svg b/registry/hasura/turso/logo.svg
new file mode 100644
index 00000000..273dd7ef
--- /dev/null
+++ b/registry/hasura/turso/logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/registry/hasura/turso/metadata.json b/registry/hasura/turso/metadata.json
new file mode 100644
index 00000000..e85076eb
--- /dev/null
+++ b/registry/hasura/turso/metadata.json
@@ -0,0 +1,35 @@
+{
+ "overview": {
+ "namespace": "hasura",
+ "description": "Connect to a SQLite database and expose them to Hasura v3 Project",
+ "title": "(Turso) SQLite Native Data Connector",
+ "logo": "logo.svg",
+ "tags": [
+ "database"
+ ],
+ "latest_version": "v0.1.0"
+ },
+ "author": {
+ "support_email": "Community Supported",
+ "homepage": "https://hasura.io",
+ "name": "Hasura"
+ },
+ "is_verified": false,
+ "is_hosted_by_hasura": true,
+ "source_code": {
+ "is_open_source": true,
+ "repository": "https://github.com/hasura/ndc-turso",
+ "version": [
+ {
+ "tag": "v0.0.15",
+ "hash": "6bae967daf7b9aa718d62103e077a739c41d5a6d",
+ "is_verified": false
+ },
+ {
+ "tag": "v0.1.0",
+ "hash": "ef4b124ea384a13f3d051e30ce33623fcc6847c5",
+ "is_verified": false
+ }
+ ]
+ }
+}
diff --git a/registry/hasura/turso/releases/v0.0.10/connector-packaging.json b/registry/hasura/turso/releases/v0.0.10/connector-packaging.json
new file mode 100644
index 00000000..0c79ae81
--- /dev/null
+++ b/registry/hasura/turso/releases/v0.0.10/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.10",
+ "uri": "https://github.com/hasura/ndc-turso/releases/download/v0.0.10/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "fcf43584074d917905f5c9ed56612a02536cfe9378e09498e55d97bce0ed1545"
+ },
+ "source": {
+ "hash": "ca77c247f448a15b6821df32d716ec2f7f58fa21"
+ }
+}
diff --git a/registry/hasura/turso/releases/v0.0.14/connector-packaging.json b/registry/hasura/turso/releases/v0.0.14/connector-packaging.json
new file mode 100644
index 00000000..d0b3cefa
--- /dev/null
+++ b/registry/hasura/turso/releases/v0.0.14/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.14",
+ "uri": "https://github.com/hasura/ndc-turso/releases/download/v0.0.14/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "8ac58c78f836c89ea97e2bc3dab636c23dbd6976f9183c00cd2d3cd5b99a6efe"
+ },
+ "source": {
+ "hash": "6087a7aa26fea73421bdbc74fb7820e8ca9c3bf7"
+ }
+}
diff --git a/registry/hasura/turso/releases/v0.0.15/connector-packaging.json b/registry/hasura/turso/releases/v0.0.15/connector-packaging.json
new file mode 100644
index 00000000..70c87dc4
--- /dev/null
+++ b/registry/hasura/turso/releases/v0.0.15/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.0.15",
+ "uri": "https://github.com/hasura/ndc-turso/releases/download/v0.0.15/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "a2c8426c443bf8c94b0f706d8438bd06eeeef30c0d2b40389c0e37be4be920a6"
+ },
+ "source": {
+ "hash": "6bae967daf7b9aa718d62103e077a739c41d5a6d"
+ }
+}
\ No newline at end of file
diff --git a/registry/hasura/turso/releases/v0.1.0/connector-packaging.json b/registry/hasura/turso/releases/v0.1.0/connector-packaging.json
new file mode 100644
index 00000000..3ef5ca68
--- /dev/null
+++ b/registry/hasura/turso/releases/v0.1.0/connector-packaging.json
@@ -0,0 +1,11 @@
+{
+ "version": "v0.1.0",
+ "uri": "https://github.com/hasura/ndc-turso/releases/download/v0.1.0/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "b884688c3e328b181af19a23c01cfb5615267469af3c2517dd46b2d21b0e579d"
+ },
+ "source": {
+ "hash": "ef4b124ea384a13f3d051e30ce33623fcc6847c5"
+ }
+}
\ No newline at end of file
diff --git a/registry/mongodb/README.md b/registry/mongodb/README.md
deleted file mode 100644
index de06d1b5..00000000
--- a/registry/mongodb/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## Overview
-
-`ndc-mongodb` provides a Hasura Data Connector to the MongoDB database,
-which can expose and run GraphQL queries via the Hasura v3 Project.
-
-- [MongoDB Connector information in the Hasura Connectors directory](https://hasura.io/connectors/mongodb)
-- [GitHub repository](https://github.com/hasura/ndc-mongodb)
-
-The connector implements the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html),
-but does not currently support mutations, column relationship arguments in queries, functions or procedures.
-
-Visit the
-[Hasura v3 Documentation](https://hasura.io/docs/3.0/native-data-connectors/mongodb)
-for more information.
-
-## Usage
-
-Follow the [Quick Start Guide](https://hasura.io/docs/3.0/quickstart/)
-to use the MongoDB data connector from the [Hasura v3 Console](https://console.hasura.io).
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
-if you encounter any problems!
diff --git a/registry/mongodb/metadata.json b/registry/mongodb/metadata.json
deleted file mode 100644
index 9c6dcfc4..00000000
--- a/registry/mongodb/metadata.json
+++ /dev/null
@@ -1,121 +0,0 @@
-{
- "overview": {
- "namespace": "hasura",
- "description": "Connect to a MongoDB database and expose it to Hasura v3 Project",
- "title": "MongoDB Connector",
- "logo": "logo.png",
- "tags": ["database"],
- "latest_version": "v0.0.6"
- },
- "author": {
- "support_email": "support@hasura.io",
- "homepage": "https://hasura.io",
- "name": "Hasura"
- },
- "is_verified": true,
- "is_hosted_by_hasura": false,
- "packages": [
- {
- "version": "0.0.6",
- "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.6/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "24370c44a8ff92dce488569717956069f2a50de7a8f54547b140d85a17b52875"
- },
- "source": {
- "hash": "6e842c308eeee38d3bc393e6b99157961ca3ed03"
- }
- },
- {
- "version": "0.0.5",
- "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.5/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "2064a98d223240b912720f0528c6b9a7107a42e4452407c2b75e77dcfdbd4227"
- },
- "source": {
- "hash": "055154b5d84f05ff0049aa75a29b85caf89822f6"
- }
- },
- {
- "version": "0.0.4",
- "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.4/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "7b826a79686b48e58819751091fac62071df75ca9fd617b80709fe098a054f26"
- },
- "source": {
- "hash": "38a4a56134a909001b645c659062ae393c2cebe0"
- }
- },
- {
- "version": "0.0.3",
- "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.3/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "0019dfc4b32d63c1392aa264aed2253c1e0c2fb09216f8e2cc269bbfb8bb49b5"
- },
- "source": {
- "hash": "b50094a368f8fbab7c37e4b83ef5dc1249a4a5d5"
- }
- },
- {
- "version": "0.0.2",
- "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.2/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "f014459e9dbcce8bafe1c33c74b1fa1720d544bc283cc819c81d719028219846"
- },
- "source": {
- "hash": "90c336c4d1d949d62dd25b04742e650fb6d458e0"
- }
- },
- {
- "version": "0.0.1",
- "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.1/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "2cd3584557be7e2870f3488a30cac6219924b3f7accd9f5f473285323843a0f4"
- },
- "source": {
- "hash": "c32adbde478147518f65ff465c40a0703239288a"
- }
- }
- ],
- "source_code": {
- "is_open_source": true,
- "repository": "https://github.com/hasura/ndc-mongodb/",
- "version": [
- {
- "tag": "v0.0.6",
- "hash": "6e842c308eeee38d3bc393e6b99157961ca3ed03",
- "is_verified": true
- },
- {
- "tag": "v0.0.5",
- "hash": "055154b5d84f05ff0049aa75a29b85caf89822f6",
- "is_verified": true
- },
- {
- "tag": "v0.0.4",
- "hash": "38a4a56134a909001b645c659062ae393c2cebe0",
- "is_verified": true
- },
- {
- "tag": "v0.0.3",
- "hash": "b50094a368f8fbab7c37e4b83ef5dc1249a4a5d5",
- "is_verified": true
- },
- {
- "tag": "v0.0.2",
- "hash": "90c336c4d1d949d62dd25b04742e650fb6d458e0",
- "is_verified": true
- },
- {
- "tag": "v0.0.1",
- "hash": "c32adbde478147518f65ff465c40a0703239288a",
- "is_verified": true
- }
- ]
- }
-}
diff --git a/registry/neon/README.md b/registry/neon/README.md
deleted file mode 100644
index 9513499f..00000000
--- a/registry/neon/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Overview
-
-`ndc-postgres` provides a Hasura Data Connector to the PostgreSQL database,
-which can expose and run GraphQL queries via the Hasura v3 Project.
-
-- [PostgreSQL Connector information in the Hasura Connectors directory](https://hasura.io/connectors/postgres)
-- [GitHub repository](https://github.com/hasura/ndc-postgres)
-
-The connector implements the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html),
-but does not currently support column relationship arguments in queries, or functions.
-
-Visit the
-[Hasura v3 Documentation](https://hasura.io/docs/3.0/native-data-connectors/postgresql)
-for more information.
-
-The connector supports the [Neon](https://neon.tech/) PostgreSQL database offering.
-
-## Deployment
-
-The connector is hosted by Hasura and can be used from the [Hasura v3 Console](https://console.hasura.io).
-
-## Usage
-
-Follow the [Quick Start Guide](https://hasura.io/docs/3.0/quickstart/)
-To use the PostgreSQL data connector from the [Hasura v3 Console](https://console.hasura.io).
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
-if you encounter any problems!
diff --git a/registry/nodejs-lambda/README.md b/registry/nodejs-lambda/README.md
deleted file mode 100644
index c41f7477..00000000
--- a/registry/nodejs-lambda/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-## Overview
-
-The NodeJS Lambda connector allows you to expose TypeScript functions as Commands in your Hasura DDN Supergraph.
-
-Here's an example function that defines and uses two object types. It is exported as a `@readonly` function so that it can be exposed from the Supergraph's GraphQL query schema.
-
-```typescript
-type FullName = {
- title: string
- firstName: string
- surname: string
-}
-
-type Greeting = {
- polite: string
- casual: string
-}
-
-/** @readonly */
-export function greet(name: FullName): Greeting {
- return {
- polite: `Hello ${name.title} ${name.surname}`,
- casual: `G'day ${name.firstName}`
- }
-}
-```
-
-The NodeJS Lambda connector introspects the TypeScript types you use on your exported functions to determine the schema to use in your Supergraph. You are able to import any NodeJS npm package and use it.
-
-The NodeJS Lambda connector enables you to:
-
-* Add business logic to your Supergraph by writing normal NodeJS TypeScript code
-* Expose data from any external API by writing TypeScript code that invokes the API and returns the data
-* Implement complex database logic manually by connecting to your database via a native driver library imported from npm
-
-To learn more about this connector and how to use it, please see the [Hasura DDN Documentation](https://hasura.io/docs/3.0/connectors/typescript).
-
-## More Information
-* [Hasura DDN Documentation](https://hasura.io/docs/3.0/connectors/typescript)
-* [ndc-nodejs-lambda GitHub Repository](https://github.com/hasura/ndc-nodejs-lambda)
\ No newline at end of file
diff --git a/registry/nodejs-lambda/metadata.json b/registry/nodejs-lambda/metadata.json
deleted file mode 100644
index 9b5eda37..00000000
--- a/registry/nodejs-lambda/metadata.json
+++ /dev/null
@@ -1,121 +0,0 @@
-{
- "overview": {
- "namespace": "hasura",
- "description": "The NodeJS Lambda connector allows you to expose TypeScript functions as NDC functions/procedures for use in your Hasura DDN subgraphs.",
- "title": "NodeJS Lambda Connector",
- "logo": "logo.png",
- "tags": [],
- "latest_version": "v1.4.1"
- },
- "author": {
- "support_email": "support@hasura.io",
- "homepage": "https://hasura.io",
- "name": "Hasura"
- },
- "is_verified": true,
- "is_hosted_by_hasura": false,
- "packages": [
- {
- "version": "1.4.1",
- "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.4.1/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "18c7be3cbf6fd507233577729df248852ead22a7f4b29e0b8538cc74925c83c0"
- },
- "source": {
- "hash": "9b5f795aca98854205ba5646162d1df7f060d642"
- }
- },
- {
- "version": "1.4.0",
- "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.4.0/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "f0ea6693f5a37159882695f5cb330359e7124bf9e08ac81363ed065790200077"
- },
- "source": {
- "hash": "53ae3870e4f332310a7b6e359188371aa16714cf"
- }
- },
- {
- "version": "1.3.0",
- "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.3.0/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "29c521170a74b3cf67bff824c293af15d683651b7727d5884423fcfd2ac44777"
- },
- "source": {
- "hash": "faf8cc78db442e53ca0cf6cdf79c9feb0cfc8052"
- }
- },
- {
- "version": "1.2.0",
- "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.2.0/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "fd8bd48a32226894ad617d7b60c60b2966ab942dccd6e92823ef0d87d847350e"
- },
- "source": {
- "hash": "a13236051b836e4506463ff8c7e152f69c787680"
- }
- },
- {
- "version": "1.1.0",
- "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.1.0/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "22a80de2739d7aaaea55dbc8c9d668dcfd0919eedc4f611b171de65db7548d03"
- },
- "source": {
- "hash": "32e33529d5cfc5c1dbc4245e384f22099654d02d"
- }
- },
- {
- "version": "1.0.0",
- "uri": "https://github.com/hasura/ndc-nodejs-lambda/releases/download/v1.0.0/connector-definition.tgz",
- "checksum": {
- "type": "sha256",
- "value": "8b24669349ab79b0222268d11b4a3396c5caced4764192fb5b49ccde2bfc6e34"
- },
- "source": {
- "hash": "c7ef1aa899e1f83cc2935c2f91f4b9010411d716"
- }
- }
- ],
- "source_code": {
- "is_open_source": true,
- "repository": "https://github.com/hasura/ndc-nodejs-lambda/",
- "version": [
- {
- "tag": "v1.4.1",
- "hash": "9b5f795aca98854205ba5646162d1df7f060d642",
- "is_verified": true
- },
- {
- "tag": "v1.4.0",
- "hash": "53ae3870e4f332310a7b6e359188371aa16714cf",
- "is_verified": true
- },
- {
- "tag": "v1.3.0",
- "hash": "faf8cc78db442e53ca0cf6cdf79c9feb0cfc8052",
- "is_verified": true
- },
- {
- "tag": "v1.2.0",
- "hash": "a13236051b836e4506463ff8c7e152f69c787680",
- "is_verified": true
- },
- {
- "tag": "v1.1.0",
- "hash": "32e33529d5cfc5c1dbc4245e384f22099654d02d",
- "is_verified": true
- },
- {
- "tag": "v1.0.0",
- "hash": "c7ef1aa899e1f83cc2935c2f91f4b9010411d716",
- "is_verified": true
- }
- ]
- }
-}
diff --git a/registry/postgres-alloydb/README.md b/registry/postgres-alloydb/README.md
deleted file mode 100644
index f0504f23..00000000
--- a/registry/postgres-alloydb/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-## Overview
-
-The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
-
-As much as possible we attempt to provide explicit support for database projects that identify as being derived from PostgreSQL such as [Google AlloyDB PostgreSQL](https://cloud.google.com/alloydb).
-
-Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
-
-The `ndc-postgres` data connector is open source and can be found in the [ndc-postgres GitHub repository](https://github.com/hasura/ndc-postgres).
-
-Visit the
-[Hasura DDN PostgreSQL Documentation](https://hasura.io/docs/3.0/connectors/postgresql/)
-for more information about specific features that are available for the PostgreSQL Connector.
-
-## Deployment
-
-The connector is hosted by Hasura and can be used from the [Hasura v3 Console](https://console.hasura.io).
-
-## Usage
-
-The Hasura PostgreSQL connector can be deployed using the [Hasura CLI](https://hasura.io/docs/3.0/cli/overview) by following either the [Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or [deploying the connector](https://hasura.io/docs/3.0/connectors/deployment).
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
-if you encounter any problems!
diff --git a/registry/postgres-azure/README.md b/registry/postgres-azure/README.md
deleted file mode 100644
index 523c3aa3..00000000
--- a/registry/postgres-azure/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-## Overview
-
-The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
-
-As much as possible we attempt to provide explicit support for database projects that identify as being derived from PostgreSQL such as [Azure PostgreSQL](https://azure.microsoft.com/en-us/products/postgresql/).
-
-Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
-
-The `ndc-postgres` data connector is open source and can be found in the [ndc-postgres GitHub repository](https://github.com/hasura/ndc-postgres).
-
-Visit the
-[Hasura DDN PostgreSQL Documentation](https://hasura.io/docs/3.0/connectors/postgresql/)
-for more information about specific features that are available for the PostgreSQL Connector.
-
-## Deployment
-
-The connector is hosted by Hasura and can be used from the [Hasura v3 Console](https://console.hasura.io).
-
-## Usage
-
-The Hasura PostgreSQL connector can be deployed using the [Hasura CLI](https://hasura.io/docs/3.0/cli/overview) by following either the [Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or [deploying the connector](https://hasura.io/docs/3.0/connectors/deployment).
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
-if you encounter any problems!
diff --git a/registry/postgres-cosmos/README.md b/registry/postgres-cosmos/README.md
deleted file mode 100644
index 38a94876..00000000
--- a/registry/postgres-cosmos/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-## Overview
-
-The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
-
-As much as possible we attempt to provide explicit support for database projects that identify as being derived from PostgreSQL such as [Azure Cosmos DB for PostgreSQL](https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/introduction).
-
-Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
-
-The `ndc-postgres` data connector is open source and can be found in the [ndc-postgres GitHub repository](https://github.com/hasura/ndc-postgres).
-
-Visit the
-[Hasura DDN PostgreSQL Documentation](https://hasura.io/docs/3.0/connectors/postgresql/)
-for more information about specific features that are available for the PostgreSQL Connector.
-
-## Deployment
-
-The connector is hosted by Hasura and can be used from the [Hasura v3 Console](https://console.hasura.io).
-
-## Usage
-
-The Hasura PostgreSQL connector can be deployed using the [Hasura CLI](https://hasura.io/docs/3.0/cli/overview) by following either the [Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or [deploying the connector](https://hasura.io/docs/3.0/connectors/deployment).
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
-if you encounter any problems!
diff --git a/registry/postgres-gcp/README.md b/registry/postgres-gcp/README.md
deleted file mode 100644
index 207c2eb2..00000000
--- a/registry/postgres-gcp/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-## Overview
-
-The Hasura PostgreSQL Connector allows for connecting Hasura to a PostgreSQL database giving you an instant GraphQL API on top of your PostgreSQL data.
-
-As much as possible we attempt to provide explicit support for database projects that identify as being derived from PostgreSQL such as [Google Cloud SQL PostgreSQL database](https://cloud.google.com/sql).
-
-Data Connectors are the way to connect the Hasura Data Delivery Network (DDN) to external data sources. A data connector is an HTTP service that exposes a set of APIs that Hasura uses to communicate with the data source. Data connectors are built to conform to the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html) using one of Hasura's available SDKs. The data connector is responsible for interpreting work to be done on behalf of the Hasura Engine, using the native query language of the data source.
-
-The `ndc-postgres` data connector is open source and can be found in the [ndc-postgres GitHub repository](https://github.com/hasura/ndc-postgres).
-
-Visit the
-[Hasura DDN PostgreSQL Documentation](https://hasura.io/docs/3.0/connectors/postgresql/)
-for more information about specific features that are available for the PostgreSQL Connector.
-
-## Deployment
-
-The connector is hosted by Hasura and can be used from the [Hasura v3 Console](https://console.hasura.io).
-
-## Usage
-
-The Hasura PostgreSQL connector can be deployed using the [Hasura CLI](https://hasura.io/docs/3.0/cli/overview) by following either the [Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or [deploying the connector](https://hasura.io/docs/3.0/connectors/deployment).
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
-if you encounter any problems!
diff --git a/registry/qdrant/README.md b/registry/qdrant/README.md
deleted file mode 100644
index 4959b280..00000000
--- a/registry/qdrant/README.md
+++ /dev/null
@@ -1,150 +0,0 @@
-## Qdrant Connector Overview
-
-The Qdrant Data Connector allows for connecting to a Qdrant instance giving you an instant GraphQL API that supports querying on top of your data. This uses the [Typescript Data Connector SDK](https://github.com/hasura/ndc-sdk-typescript) and implements the [Data Connector Spec](https://github.com/hasura/ndc-spec).
-
-In order to use this connector you will need a Qdrant database setup. This connector currently only supports querying.
-
-## Before you get started
-
-It is recommended that you:
-
-* Setup a [Qdrant Database instance](https://qdrant.tech/)
-* Install the [Hasura3 CLI](https://github.com/hasura/v3-cli#hasura-v3-cli)
-* Log in via the CLI
-* Install the [connector plugin](https://hasura.io/docs/latest/hasura-cli/connector-plugin/)
-* Install [VSCode](https://code.visualstudio.com)
-* Install the [Hasura VSCode Extension](https://marketplace.visualstudio.com/items?itemName=HasuraHQ.hasura)
-
-## Deployment For Hasura Users
-
-To deploy a connector and use it in a Hasura V3 project, follow these steps:
-
-1. Create a Hasura V3 project (or use an existing project)
-
-2. Generate a configuration file for your Qdrant Database, there are 2 ways to get the configuration file.
-
- First you'll need to clone [this repo](https://github.com/hasura/ndc-qdrant), and run ```npm install```
- i. The easiest way to generate a configuration file is to run the generate-config script using ts-node.
-
- When running this script specify:
-
- --url The URL where Qdrant is hosted
-
- --key The API key for connecting to the Qdrant Client.
-
- --output The name of the file to store the configuration in
-
- Example Usage:
-
- ```ts-node generate-config --url https://qdrant-url --key QdrantApiKey --output config.json```
-
- ii. You can also run the connector in configuration mode and generate the config file using CURL.
-
- ```ts-node ./src/index.ts configuration serve```
-
- You can then send a CURL request specifying the qdrant_url and qdrant_api_key to get the configuration file.
-
- Example:
-
- ```curl -X POST -H "Content-Type: application/json" -d '{"qdrant_url": "https://link-to-qdrant.cloud.qdrant.io", "qdrant_api_key": "QdrantApiKey"}' http://localhost:9100 > config.json```
-
-3. Once you have a configuration file, you can deploy the connector onto Hasura Cloud
-
-Ensure you are logged in to Hasura CLI
-
-```hasura3 cloud login --pat 'YOUR-HASURA-TOKEN'```
-
-From there, you can deploy the connector:
-
-```hasura3 connector create qdrant:v1 --github-repo-url https://github.com/hasura/ndc-qdrant/tree/main --config-file ./config.json```
-
-## Usage
-
-Once your connector is deployed, you can get the URL of the connector using:
-```hasura3 connector list```
-
-```
-my-cool-connector:v1 https://connector-9XXX7-hyc5v23h6a-ue.a.run.app active
-```
-
-In order to use the connector once deployed you will first want to reference the connector in your project metadata:
-
-```yaml
-kind: "AuthConfig"
-allowRoleEmulationFor: "admin"
-webhook:
- mode: "POST"
- webhookUrl: "https://auth.pro.hasura.io/webhook/ddn?role=admin"
----
-kind: DataConnector
-version: v1
-definition:
- name: my_connector
- url:
- singleUrl: 'https://connector-9XXX7-hyc5v23h6a-ue.a.run.app'
-```
-
-If you have the [Hasura VSCode Extension](https://marketplace.visualstudio.com/items?itemName=HasuraHQ.hasura) installed
-you can run the following code actions:
-
-* `Hasura: Refresh data source`
-* `Hasura: Track all collections / functions ...`
-
-This will integrate your connector into your Hasura project which can then be deployed or updated using the Hasura3 CLI:
-
-```
-hasura3 cloud build create --project-id my-project-id --metadata-file metadata.hml
-```
-
-## Service Authentication
-
-If you don't wish to have your connector publically accessible then you must set a service token by specifying the `SERVICE_TOKEN_SECRET` environment variable when creating your connector:
-
-* `--env SERVICE_TOKEN_SECRET=SUPER_SECRET_TOKEN_XXX123`
-
-Your Hasura project metadata must then set a matching bearer token:
-
-```yaml
-kind: DataConnector
-version: v1
-definition:
- name: my_connector
- url:
- singleUrl: 'https://connector-9XXX7-hyc5v23h6a-ue.a.run.app'
- headers:
- Authorization:
- value: "Bearer SUPER_SECRET_TOKEN_XXX123"
-```
-
-While you can specify the token inline as above, it is recommended to use the Hasura secrets functionality for this purpose:
-
-```yaml
-kind: DataConnector
-version: v1
-definition:
- name: my_connector
- url:
- singleUrl: 'https://connector-9XXX7-hyc5v23h6a-ue.a.run.app'
- headers:
- Authorization:
- valueFromSecret: BEARER_TOKEN_SECRET
-```
-
-NOTE: This secret should contain the `Bearer ` prefix.
-
-
-## Default Collection Parameters:
-
-You'll find that each collection on your graph is parameterized, and that you have the ability to pass in the following parameters as collection arguments:
-
-vector
-positive
-negative
-
-These will allow you to perform vector searches, or to get recommendations.
-
-You can pass in a search vector to the vector parameter, which is a flat list of floats. This will typically be the output from some embedding model, and it will return results ordered by closest match. You'll likely want to ensure that you are passing a limit on all your queries.
-
-You can also pass in an array of ID's to the positive and negative parameters to provide example data-points. This is an easy way to get recommendations without having to manage or deal with passing around entire vectors. If you know the ID of some positive and negative data-points, you can simply pass the ID's. You must provide at least 1 positive example when using this. You can provide a list of positive examples, a list of positive and a list of negative, but you cannot provide only a list of negative examples.
-
-You can read more about these parameters [here](https://qdrant.tech/documentation/concepts/search/)
\ No newline at end of file
diff --git a/registry/qdrant/metadata.json b/registry/qdrant/metadata.json
deleted file mode 100644
index 74e7cefb..00000000
--- a/registry/qdrant/metadata.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "overview":{
- "namespace":"hasura",
- "description":"The Qdrant Data Connector allows for connecting to a Qdrant instance giving you an instant GraphQL API on top of your Qdrant Vector Data.",
- "title":"Qdrant Data Connector",
- "logo":"logo.png",
- "tags":["database"],
- "latest_version":"v0.1"
- },
- "author":{
- "support_email":"support@hasura.io",
- "homepage":"https://hasura.io",
- "name":"Hasura"
- },
- "is_verified":true,
- "is_hosted_by_hasura":false,
- "source_code":{
- "is_open_source":true,
- "repository":"https://github.com/hasura/ndc-qdrant",
- "version":[
- {
- "tag":"v0.1",
- "hash":"eec3339a83a9cdea6ff9f4a76f2ed38849a1bff4",
- "is_verified": true
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/registry/sendgrid/README.md b/registry/sendgrid/README.md
deleted file mode 100644
index 97d22e0e..00000000
--- a/registry/sendgrid/README.md
+++ /dev/null
@@ -1,66 +0,0 @@
-## Overview
-
-This connector uses the SendGrid v3 API to:
-
-* List email templates
-* Send emails
-
-https://github.com/hasura/ndc-sendgrid/tree/main#sendgrid-connector
-
-* [Create a SendGrid API account](https://signup.sendgrid.com/)
-* [Create an API key](https://app.sendgrid.com/settings/api_keys)
-* Create a share service token
-
-You will need the Hasura
-[V3 CLI](https://github.com/hasura/v3-cli)
-and
-[Connector Plugin](https://hasura.io/docs/latest/hasura-cli/connector-plugin/)
-installed to use this connector.
-
-
-## Deployment
-
-You will need to have a configuration file available with your sendgrid credentials in the following format:
-
-```
-> cat sendgrid.connector.configuration.json
-{"version": 1, "sendgrid_api_key": "YOUR-API-KEY-HERE" }
-```
-
-Deploy and name the connector with the following command referencing your config:
-
-> hasura3 connector create sendgrid:v1 --github-repo-url https://github.com/hasura/ndc-sendgrid/tree/main --volume ./sendgrid.connector.configuration.json:/config.json --env SERVICE_TOKEN_SECRET=MY-SERVICE-TOKEN
-
-Monitor the deployment status by name:
-
-> hasura connector status sendgrid:v1
-
-List your connector with its deployed URL:
-
-> hasura connector list
-
-```
-sendgrid:v1 https://connector-9XXX7-hyc5v23h6a-ue.a.run.app active
-```
-
-
-## Usage
-
-Include the connector URL in your Hasura V3 project metadata:
-
-```json
-[
- {
- "kind": "dataSource",
- "name": "sendgrid",
- "dataConnectorUrl": "https://connector-9XXX7-hyc5v23h6a-ue.a.run.app",
- "schema": {}
- }
- ...
-]
-```
-
-## Troubleshooting
-
-Please [https://github.com/hasura/ndc-sendgrid/issues/new](submit a Github issue)
-if you encounter any problems!
diff --git a/registry/sendgrid/metadata.json b/registry/sendgrid/metadata.json
deleted file mode 100644
index c9d089c6..00000000
--- a/registry/sendgrid/metadata.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "overview":{
- "namespace":"hasura",
- "description":"Connect to SendGrid v3 API and expose it to Hasura Cloud v3 project",
- "title":"SendGrid Native Data Connector",
- "logo":"logo.png",
- "tags":["email"],
- "latest_version":"v0.3"
- },
- "author":{
- "support_email":"support@hasura.io",
- "homepage":"https://hasura.io",
- "name":"Hasura"
- },
- "is_verified":true,
- "is_hosted_by_hasura":false,
- "source_code":{
- "is_open_source":true,
- "repository":"https://github.com/hasura/ndc-sendgrid/",
- "version":[
- {
- "tag": "v0.3",
- "hash": "4d129449d3faa295fb145bc99b1f69db73314cce",
- "is_verified": true
- },
- {
- "tag": "v0.2.1",
- "hash": "e06860bb3ceedf7ec76e5b8559238bca527422b4",
- "is_verified": true
- },
- {
- "tag": "v0.2",
- "hash": "c0b3f13893e24a41df084985908af7ced0265498",
- "is_verified": true
- },
- {
- "tag":"v0.1",
- "hash":"8dc16c427e4e0136ebf0cfba1de3831c7939befb",
- "is_verified": true
- }
- ]
- }
-}
diff --git a/registry/sqlserver/README.md b/registry/sqlserver/README.md
deleted file mode 100644
index a9511081..00000000
--- a/registry/sqlserver/README.md
+++ /dev/null
@@ -1,120 +0,0 @@
-# SQL Server Connector
-
-[![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/docs/3.0/getting-started/overview/)
-[![ndc-hub](https://img.shields.io/badge/ndc--hub-sqlserver-blue.svg?style=flat)](https://hasura.io/connectors/sqlserver)
-[![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](LICENSE.txt)
-[![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](./readme.md)
-
-With this connector, Hasura allows you to instantly create a real-time GraphQL API on top of your data models in
-Microsoft SQL Server. This connector supports SQL Server's functionalities listed in the table below, allowing for
-efficient and scalable data operations. Additionally, users benefit from all the powerful features of Hasura’s Data
-Delivery Network (DDN) platform, including query pushdown capabilities that delegate query operations to the database,
-thereby enhancing query optimization and performance.
-
-This connector is built using the [Rust Data Connector SDK](https://github.com/hasura/ndc-hub#rusk-sdk) and implements
-the [Data Connector Spec](https://github.com/hasura/ndc-spec).
-
-- [Connector information in the Hasura Hub](https://hasura.io/connectors/sqlserver)
-- [Hasura V3 Documentation](https://hasura.io/docs/3.0)
-
-## Features
-
-Below, you'll find a matrix of all supported features for the SQL Server connector:
-
-| Feature | Supported | Notes |
-| ------------------------------- | --------- | ----- |
-| Native Queries + Logical Models | ✅ | |
-| Simple Object Query | ✅ | |
-| Filter / Search | ✅ | |
-| Simple Aggregation | ✅ | |
-| Sort | ✅ | |
-| Paginate | ✅ | |
-| Table Relationships | ✅ | |
-| Views | ✅ | |
-| Remote Relationships | ✅ | |
-| Custom Fields | ❌ | |
-| Mutations | ❌ | |
-| Distinct | ✅ | |
-| Enums | ❌ | |
-| Naming Conventions | ❌ | |
-| Default Values | ❌ | |
-| User-defined Functions | ❌ | |
-
-## Before you get Started
-
-1. Create a [Hasura Cloud account](https://console.hasura.io)
-2. Install the [CLI](https://hasura.io/docs/3.0/cli/installation/)
-3. Install the [Hasura VS Code extension](https://marketplace.visualstudio.com/items?itemName=HasuraHQ.hasura)
-4. [Create a project](https://hasura.io/docs/3.0/getting-started/create-a-project)
-
-## Using the connector
-
-To use the SQL Server connector, follow these steps in a Hasura project:
-
-1. Add the connector:
-
- ```bash
- ddn add connector-manifest sqlserver_connector --subgraph app --hub-connector hasura/sqlserver --type cloud
- ```
-
- In the snippet above, we've used the subgraph `app` as it's available by default; however, you can change this value
- to match any [subgraph](https://hasura.io/docs/3.0/project-configuration/subgraphs) which you've created in your
- project.
-
-2. Add your connection URI:
-
- Open your project in your text editor and open the `/app/sqlserver_connector/connector/sqlserver_connector.build.hml`
- file of your project. Then, add the `CONNECTION_URI` environment variable with the connection string:
-
- ```yaml
- # other configuration above
- CONNECTION_URI:
- value: ""
- ```
-
-3. Update the connector manifest and the connector link
-
- These two steps will (1) allow Hasura to introspect your data source and complete the configuration and (2) deploy
- the connector to Hasura DDN:
-
- ```bash
- ddn update connector-manifest sqlserver_connector
- ```
-
- ```bash
- ddn update data-connector-link sqlserver_connector --add-all-resources
- ```
-
- `--add-all-resources` flag adds all the models and commands present in the database to the connector metadata.
-
-4. Create a build
-
- ```bash
- ddn build supergraph-manifest
- ```
-
- This will return information about the build:
-
- | | |
- | ------------- | ------------------------------------------------------------------------------------------------- |
- | Build Version | bd96bb221a |
- | API URL | https://-bd96bb221a.ddn.hasura.app/graphql |
- | Console URL | https://console.hasura.io/project//environment/default/build/bd96bb221a/graphql |
- | Project Name | |
- | Description | |
-
- Follow the project configuration build [guide](https://hasura.io/docs/3.0/project-configuration/builds/) to apply
- other actions on the build.
-
-5. Test the API
-
- The console URL in the build information cna be used to open the GraphiQL console to test out the API
-
-## Contributing
-
-We're happy to receive any contributions from the community. Please refer to our [development guide](https://github.com/hasura/ndc-sqlserver/blob/main/docs/development.md).
-
-## License
-
-The Hasura SQL Server connector is available under the [Apache License
-2.0](https://www.apache.org/licenses/LICENSE-2.0).
diff --git a/registry/typescript-deno/README.md b/registry/typescript-deno/README.md
deleted file mode 100644
index f4e2311b..00000000
--- a/registry/typescript-deno/README.md
+++ /dev/null
@@ -1,157 +0,0 @@
-## Overview
-
-The Typescript (Deno) Connector allows a running connector to be inferred from a Typescript file (optionally with dependencies) and interpreted by [Deno](https://deno.com).
-
-[github.com/hasura/ndc-typescript-deno](https://github.com/hasura/ndc-typescript-deno/tree/main#ndc-typescript-deno)
-
-The connector runs in the following manner:
-
-* Dependencies are fetched
-* Inference is performed
-* The functions are served via the [connector protocol](https://github.com/hasura/ndc-spec/tree/main#ndc-specification)
-
-It assumes that dependencies are specified in accordance with [Deno](https://deno.com) conventions.
-
-## Typescript Functions Format
-
-Your functions should be organised into a directory with `index.ts` file acting as the entrypoint.
-
-```
-// ./functions/index.ts
-
-import { Hash, encode } from "https://deno.land/x/checksum@1.2.0/mod.ts";
-
-/**
- * Returns an MD5 hash of the given password
- *
- * @param pw - Password string
- * @returns The MD5 hash of the password string
- * @pure This function should only query data without making modifications
- */
-export function make_password_hash(pw: string): string {
- return new Hash("md5").digest(encode(pw)).hex();
-}
-```
-
-* JSDoc comments and tags are exposed in the schema
-* Async, and normal functions are both supported
-* Only exported functions are exposed
-* Functions tagged with `@pure` annotations are exposed as functions
-* Those without `@pure` annotations are exposed as procedures
-* Optional parameters are supported
-* Exceptions can be thrown and will be reported to the user
-
-## Function Development
-
-For the best user-experience you should develop your functions in the following manner:
-
-* Have [Deno](https://deno.com) installed
-* Have [VSCode](https://code.visualstudio.com) installed
-* Have the [Deno VSCode extension](https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno) installed
-* Have the Hasura V3 CLI Installed
-* Have the Hasura VSCode extension
-
-An example session:
-
-```
-> tree
-.
-├── config.json
-├── functions
- ├── index.ts
-
-> cat config.json
-{
- "functions": "./functions/index.ts"
-}
-
-> cat functions/index.ts
-
-export function hello(): string {
- return "hello world";
-}
-
-function foo() {
-}
-
-> deno run -A --watch --check https://deno.land/x/hasura_typescript_connector@0.20/mod.ts serve --configuration ./config.json
-Watcher Process started.
-Check file:///Users/me/projects/example/functions/index.ts
-Inferring schema with map location ./vendor
-Vendoring dependencies: /Users/me/bin/binaries/deno vendor --output /Users/me/projects/example/vendor --force /Users/me/projects/example/functions/index.ts
-Skipping non-exported function: foo
-{"level":30,"time":1697018006809,"pid":89762,"hostname":"spaceship.local","msg":"Server listening at http://0.0.0.0:8100"}
-```
-
-Alternatively, if you have the `hasura3` CLI installed you can use the `hasura3 watch` command to watch and serve your functions and tunnel them automatically into a hasura project and console.
-
-If you are happy with your definitions you can deploy your connector via the `hasura3 connector` commands.
-
-
-## Deployment
-
-You will need:
-
-* [V3 CLI](https://github.com/hasura/v3-cli) (with a logged in session)
-* [Connector Plugin](https://hasura.io/docs/latest/hasura-cli/connector-plugin/)
-* A connector configuration file
-* Secret service token (optional)
-
-Your functions directory should be added as a volume to `/functions`
-
-```
---volume ./my-functions:/functions
-```
-
-Create the connector:
-
-```
-hasura3 connector create my-cool-connector:v1 \
- --github-repo-url https://github.com/hasura/ndc-typescript-deno/tree/v0.20 \
- --config-file config.json \
- --volume ./functions:/functions \
- --env SERVICE_TOKEN_SECRET=MY-SERVICE-TOKEN
-```
-
-Monitor the deployment status by name:
-
-```
-hasura connector status my-cool-connector:v1
-```
-
-List your connector with its deployed URL:
-
-```
-hasura connector list
-my-cool-connector:v1 https://connector-9XXX7-hyc5v23h6a-ue.a.run.app active
-```
-
-See [the Typescript Deno SendGrid repository](https://github.com/hasura/ndc-sendgrid-deno)
-for an example of what a project structure that uses a connector could look like.
-
-## Usage
-
-Include the connector URL in your Hasura V3 project metadata (hml format).
-Hasura cloud projects must also set a matching bearer token:
-
-```yaml
-kind: DataConnector
-version: v2
-definition:
- name: petdatabase
- url:
- singleUrl: 'https://connector-9XXX7-hyc5v23h6a-ue.a.run.app'
-
- # And optionally if you have configured a service secret:
- headers:
- Authorization:
- valueFromSecret: BEARER_TOKEN_SECRET
-```
-
-(NOTE: This will require that the secret includes the `Bearer ` prefix.)
-
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/ndc-typescript-deno/issues/new)
-if you encounter any problems!
diff --git a/registry/typescript-deno/logo.png b/registry/typescript-deno/logo.png
deleted file mode 100644
index 96f4c859..00000000
Binary files a/registry/typescript-deno/logo.png and /dev/null differ
diff --git a/registry/typescript-deno/metadata.json b/registry/typescript-deno/metadata.json
deleted file mode 100644
index 697604fa..00000000
--- a/registry/typescript-deno/metadata.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "overview":{
- "namespace":"hasura",
- "description":"Connect to user-supplied TypeScript functions and expose them to Hasura Cloud v3 project",
- "title":"TypeScript (Deno) Connector",
- "logo":"logo.png",
- "tags":[],
- "latest_version":"v0.24"
- },
- "author":{
- "support_email":"support@hasura.io",
- "homepage":"https://hasura.io",
- "name":"Hasura"
- },
- "is_verified":true,
- "is_hosted_by_hasura":false,
- "source_code":{
- "is_open_source":true,
- "repository":"https://github.com/hasura/ndc-typescript-deno/",
- "version":[
- {
- "tag": "v0.24",
- "hash":"1ecaa5afac33442d933d639f0e23f01f8dc69311",
- "is_verified":true
- },
- {
- "tag": "v0.20",
- "hash":"b0ac1b86058400cdca18f4889e66452ce49fc692",
- "is_verified":true
- },
- {
- "tag": "v0.8",
- "hash":"0913b41f4cef74fa18e7fa16ec456d32c6fc3a74",
- "is_verified":true
- },
- {
- "tag": "v0.3",
- "hash":"23022c931bc5132932d9b187a80a737d7aac0e79",
- "is_verified":true
- },
- {
- "tag": "v0.2",
- "hash":"37ef6c54fab8cae364fcfc320b0531b95bca6be8",
- "is_verified":true
- },
- {
- "tag":"v0.1",
- "hash":"bfcb18a5b5138d789bd8d76b05c02d55ec32d1ec",
- "is_verified":true
- }
- ]
- }
-}
diff --git a/registry/yugabyte/README.md b/registry/yugabyte/README.md
deleted file mode 100644
index 07d4c795..00000000
--- a/registry/yugabyte/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Overview
-
-`ndc-postgres` provides a Hasura Data Connector to the PostgreSQL database,
-which can expose and run GraphQL queries via the Hasura v3 Project.
-
-- [PostgreSQL Connector information in the Hasura Connectors directory](https://hasura.io/connectors/postgres)
-- [GitHub repository](https://github.com/hasura/ndc-postgres)
-
-The connector implements the [NDC Specification](https://hasura.github.io/ndc-spec/overview.html),
-but does not currently support column relationship arguments in queries, or functions.
-
-Visit the
-[Hasura v3 Documentation](https://hasura.io/docs/3.0/native-data-connectors/postgresql)
-for more information.
-
-The connector supports the [YugabyteDB](https://www.yugabyte.com) PostgreSQL database offering.
-
-## Deployment
-
-The connector is hosted by Hasura and can be used from the [Hasura v3 Console](https://console.hasura.io).
-
-## Usage
-
-Follow the [Quick Start Guide](https://hasura.io/docs/3.0/quickstart/)
-To use the PostgreSQL data connector from the [Hasura v3 Console](https://console.hasura.io).
-
-## Troubleshooting
-
-Please [submit a Github issue](https://github.com/hasura/graphql-engine/issues/new)
-if you encounter any problems!
diff --git a/rfcs/0002-distribution-gh.md b/rfcs/0002-distribution-gh.md
index e1b39817..2933022a 100644
--- a/rfcs/0002-distribution-gh.md
+++ b/rfcs/0002-distribution-gh.md
@@ -1,8 +1,13 @@
# Connector Package Distribution RFC - Milestone 1
+> [!NOTE]
+> This RFC has since been extended by the [Connector publishing automation](./0006-connectors-publishing-automation.md)
+
This is a Work-In-Progress document. Please provide any feedback you wish to contribute via Github comments and suggestions.
+
+
## Purpose
Connector API, definition and packaging are specified respectively by:
@@ -271,4 +276,3 @@ Any publicly accessible APIs with publication capabilities have the potential to
* Recycling of content
* Unintentional mistakes
* Spam / Reflection
-
diff --git a/rfcs/0006-connector-publishing-automation.md b/rfcs/0006-connector-publishing-automation.md
new file mode 100644
index 00000000..d1a21a11
--- /dev/null
+++ b/rfcs/0006-connector-publishing-automation.md
@@ -0,0 +1,106 @@
+# Connector registry Github packaging
+
+> [!NOTE]
+> This RFC is an update on the [Connector Package Distribution RFC](0002-distribution-gh.md).
+
+## Introduction
+
+This RFC proposes how a new connector version should be added to the `registry` folder to automatically be published. Publishing in this context means that the connector version will be available for public use in Hasura's DDN.
+
+## File structure of the connectors `registry`
+
+The packages field in the `metadata.json` file will be removed and replaced by a releases folder within the connector directory.
+
+The releases folder will house a separate folder for each version of the connector, with each version folder containing a `connector-packaging.json` file.
+
+This `connector-packaging.json` file will include all the necessary information to access the package definition.
+
+The following directory structure for connector versions is proposed:
+
+```
+registry//
+├── logo.png
+├── metadata.json
+├── README.md
+└── releases
+ ├── v0.0.1
+ │ └── connector-packaging.json
+ ├── v0.0.2
+ │ └── connector-packaging.json
+ ├── v0.0.3
+ │ └── connector-packaging.json
+ ├── v0.0.4
+ │ └── connector-packaging.json
+ ├── v0.0.5
+ │ └── connector-packaging.json
+ ├── v0.0.6
+ │ └── connector-packaging.json
+ ├── v0.1.0
+ │ └── connector-packaging.json
+ └── v1.0.0
+ └── connector-packaging.json
+```
+
+The `registry` folder will contain a folder for each connector. Each connector folder will contain the following files:
+
+- `logo.png`: The logo of the connector. The logo should be in PNG format.
+
+- `metadata.json`: The metadata of the connector. Metadata format is described in the [Github Distribution RFC](./0002-distribution-gh.md).
+- `README.md`: The README file of the connector. The README file should contain information about the connector, how to use it, and any other relevant information. The contents of the README file would be displayed in the landing page of the connector in the Hasura.
+- `releases`: The releases folder will contain a folder for each version of the connector. Each version folder will contain a `connector-packaging.json` file. More details about the `connector-packaging.json` file are provided below.
+
+NOTE: The `releases` folder should only be added for Hub connectors.
+For example, `postgres-azure` connector should not have a `releases` folder as it is not a Hub connector.
+
+### `connector-packaging.json`
+
+Every connector version should have a package definition. The `connector-packaging.json`
+file should contain the relevant information to access the package definition.
+
+```json
+{
+ "version": "0.0.1",
+ "uri": "https://github.com/hasura/ndc-mongodb/releases/download/v0.0.1/connector-definition.tgz",
+ "checksum": {
+ "type": "sha256",
+ "value": "2cd3584557be7e2870f3488a30cac6219924b3f7accd9f5f473285323843a0f4"
+ },
+ "source": {
+ "hash": "c32adbde478147518f65ff465c40a0703239288a"
+ }
+}
+```
+
+The following fields are required:
+
+- `version`: The version of the connector.
+- `uri`: The URI to download the connector package. The package should be a tarball containing the connector package definition and the URL should be accessible without any authentication.
+- `checksum`: The checksum of the connector package. The checksum should be calculated using the `sha256` algorithm.
+- `source`: The source of the connector package. The `hash` field should contain the commit hash of the source code that was used to build the connector package.
+
+
+## Publishing a new connector version
+
+To publish a new connector version, follow these steps:
+
+1. Create a new folder with the version number in the `releases` folder of the connector.
+2. Create a `connector-packaging.json` file in the new folder with the relevant information.
+3. Open a PR against the `main` branch of the repository.
+4. You should see the `registry-update` workflow run on the PR. This workflow will validate the connector-packaging.json file and publish the new version to the registry if the validation is successful.
+5. Once the workflow is successful, the new version of the connector will be available in the **Staging** Hasura DDN. Every new commit will overwrite the previous version of that connector in the staging DDN. So, feel free to push new commits to the PR to update the connector version in the staging DDN.
+6. Once the PR is merged, the new version of the connector will be available in the **Production** Hasura DDN.
+
+> [!NOTE]
+> The `registry-update` workflow will only run on the PRs against the `main` branch of the repository.
+
+> [!NOTE]
+> Multiple connector versions can be published in the same PR. The `registry-update` workflow will publish all the versions in the PR to the registry.
+
+
+## Updates to logo and README
+
+If you want to update the logo or README of the connector, you can do so by opening a PR against the `main` branch of the repository.
+
+The `registry-update` workflow will run on the PR and update the logo and README in the staging DDN.
+
+Once the PR is merged, the logo and README will be updated in the production DDN.
diff --git a/rfcs/0007-packaging-documentation-page.md b/rfcs/0007-packaging-documentation-page.md
new file mode 100644
index 00000000..c748e739
--- /dev/null
+++ b/rfcs/0007-packaging-documentation-page.md
@@ -0,0 +1,101 @@
+# RFC: add documentation page to packaging spec
+
+> [!NOTE]
+> This RFC builds upon the concepts defined in [Native Connector Packaging](./0004-native-packaging.md)
+
+Connectors that run in the native environment such as typescript have a different getting started workflow for local development compared to connectors that run in docker such as postgres.
+
+Users expect the same steps that they tried with one connector to work with another.
+
+The CLI wishes to link users to the docs page for a specific connector on running `ddn connector init` so that users have clear directions to next steps.
+
+## Solution
+
+Extend the packaging spec definition to include `documentationPage` which points to a connector-specific getting started page. The primary use for this is for the CLI to link to getting started instructions after the user adds the connector to their project.
+
+This should NOT point to the homepage or repository page for the connector, unless that page also contains getting started instructions. This should NOT point to any other reference pages aside from getting started instructions.
+
+The page may be hosted on the Hasura docs, on Hasura hub, or on the repository. Hasura connector authors are encouraged to point to Hasura docs as this serves as the primary channel through which users are otherwise onboarded to ddn.
+
+It is highly recommended that you create a redirection URL to the actual page you want to use (for example, creating https://hasura.info/nodejs-getting-started that redirects to https://hasura.io/docs/3.0/getting-started/build/add-business-logic/?db=TypeScript). This will enable you to update the target of the redirection URL in the future if the documentation ever moves.
+
+**connector-metadata.yaml**
+
+```yaml
+documentationPage: "https://hasura.info/nodejs-getting-started"
+```
+
+
+## `connector-metadata.yaml` types
+
+```typescript
+type ConnectorMetadataDefinition = {
+ packagingDefinition: PackagingDefinition
+ nativeToolchainDefinition?: NativeToolchainDefinition
+ supportedEnvironmentVariables: EnvironmentVariableDefinition[]
+ commands: Commands
+ cliPlugin?: CliPluginDefinition
+ dockerComposeWatch: DockerComposeWatch
+ documentationPage: string // NEW
+}
+
+type PackagingDefinition = PrebuiltDockerImagePackaging | ManagedDockerBuildPackaging
+
+type PrebuiltDockerImagePackaging = {
+ type: "PrebuiltDockerImage"
+ dockerImage: string
+}
+
+type ManagedDockerBuildPackaging = {
+ type: "ManagedDockerBuild"
+}
+
+type NativeToolchainDefinition = {
+ commands: NativeToolchainCommands
+}
+
+type NativeToolchainCommands = {
+ start: string | DockerizedCommand | ShellScriptCommand // Compulsory
+ update?: string | DockerizedCommand | ShellScriptCommand
+ watch: string | DockerizedCommand | ShellScriptCommand // Compulsory
+}
+
+type EnvironmentVariableDefinition = {
+ name: string
+ description: string
+ defaultValue?: string
+}
+
+type Commands = {
+ update?: string | DockerizedCommand | ShellScriptCommand
+ watch?: string | DockerizedCommand | ShellScriptCommand
+}
+
+// From https://github.com/hasura/ndc-hub/pull/129 (outside of this RFC)
+type DockerizedCommand = {
+ type: "Dockerized"
+ dockerImage: string
+ commandArgs: string[]
+}
+
+type ShellScriptCommand = {
+ type: "ShellScript"
+ bash: string
+ powershell: string
+}
+
+type CliPluginDefinition = {
+ name: string
+ version: string
+}
+
+// From: https://github.com/compose-spec/compose-spec/blob/1938efd103f8e0817ca90e5f15177ec0317bbaf8/schema/compose-spec.json#L455
+type DockerComposeWatch = DockerComposeWatchItem[]
+
+type DockerComposeWatchItem = {
+ path: string
+ action: "rebuild" | "sync" | "sync+restart"
+ target?: string
+ ignore?: string[]
+}
+```
\ No newline at end of file
diff --git a/rfcs/0008-print-schema-and-capabilities.md b/rfcs/0008-print-schema-and-capabilities.md
new file mode 100644
index 00000000..11eecc9b
--- /dev/null
+++ b/rfcs/0008-print-schema-and-capabilities.md
@@ -0,0 +1,122 @@
+# RFC: `printSchemaAndCapabilities` command for all connectors
+
+Currently, the only way to get complete connector schema for CLI is to call `/schema` and `/capabilities` endpoints on a running NDC connector instance. In case of local connector build, CLI builds and runs the respective NDC connector in a docker container and calls the `/schema` and `/capabilities` endpoints on it. This is required by the CLI to build the DataConnectorLink which can then be used by the engine to query the underlying data source. The new local CLI workflow is aimed at reducing the number of steps to get a working API. In this workflow users should be able to update the DataConnectorLink without any dependency.
+
+This RFC proposes to add a new command `printSchemaAndCapabilities` to the connector plugin which prints out entire NDC schema and Connector capabilities of the underlying data source to STDOUT. CLI can then call the plugin with relevant command to get the schema and construct DataConnectorLink from the output. All connector plugins are expected to have this command going forward. DDN CLI will use this to generate NDC schema if this command is present. In case, the command is not implemented on plugin (in older versions of connectors), CLI will rely on running the connector in docker to get the schema.
+
+## Changes to the packaging spec
+There is a new command `printSchemaAndCapabilities` in the `commands` section:
+
+```diff
+packagingDefinition:
+ type: ManagedDockerBuild/PrebuiltDockerImage
+supportedEnvironmentVariables: [...]
+commands:
+ update: hasura-ndc-plugin update
++ printSchemaAndCapabilities: hasura-ndc-plugin print-schema-and-capabilities
+...
+```
+
+This will output a JSON to STDOUT which will contain `schema` and `capabilities` as objects
+```shell
+{
+ "schema": {
+ "scalar_types": {},
+ "object_types": {},
+ "collections": [],
+ "functions": [],
+ "procedures": []
+ },
+ "capabilities": {
+ "version": "",
+ "capabilities": {
+ "query": {},
+ "mutation": {},
+ "relationships": {}
+ }
+ }
+}
+```
+
+The runtime behavior is the same as the other commands like `update`. CLI will set all the env vars required by the connector plugin (like `HASURA_DDN_CONNECTOR_CONTEXT_PATH`, `CONNECTION_URI`(for postgres connector), etc.) and call this command.
+
+The equivalent plugin invocation can be done from DDN CLI as below:
+```shell
+ddn connector plugin --connector ./connector.yaml -- print-schema-and-capabilities
+
+// Prints JSON containing schema and capabilities to STDOUT
+```
+
+## `connector-metadata.yaml` types
+
+```diff
+type ConnectorMetadataDefinition = {
+ packagingDefinition: PackagingDefinition
+ nativeToolchainDefinition?: NativeToolchainDefinition
+ supportedEnvironmentVariables: EnvironmentVariableDefinition[]
+ commands: Commands
+ cliPlugin?: CliPluginDefinition
+ dockerComposeWatch: DockerComposeWatch
+}
+
+type PackagingDefinition = PrebuiltDockerImagePackaging | ManagedDockerBuildPackaging
+
+type PrebuiltDockerImagePackaging = {
+ type: "PrebuiltDockerImage"
+ dockerImage: string
+}
+
+type ManagedDockerBuildPackaging = {
+ type: "ManagedDockerBuild"
+}
+
+type NativeToolchainDefinition = {
+ commands: NativeToolchainCommands
+}
+
+
+type NativeToolchainCommands = {
+ start: string | DockerizedCommand | ShellScriptCommand
+ update?: string | DockerizedCommand | ShellScriptCommand
+ watch: string | DockerizedCommand | ShellScriptCommand
+}
+
+type EnvironmentVariableDefinition = {
+ name: string
+ description: string
+ defaultValue?: string
+}
+
+type Commands = {
+ update?: string | DockerizedCommand | ShellScriptCommand
+ watch?: string | DockerizedCommand | ShellScriptCommand
++ printSchemaAndCapabilities?: string | DockerizedCommand | ShellScriptCommand
+}
+
+
+type DockerizedCommand = {
+ type: "Dockerized"
+ dockerImage: string
+ commandArgs: string[]
+}
+
+type ShellScriptCommand = {
+ type: "ShellScript"
+ bash: string
+ powershell: string
+}
+
+type CliPluginDefinition = {
+ name: string
+ version: string
+}
+
+type DockerComposeWatch = DockerComposeWatchItem[]
+
+type DockerComposeWatchItem = {
+ path: string
+ action: "rebuild" | "sync" | "sync+restart"
+ target?: string
+ ignore?: string[]
+}
+```
diff --git a/rfcs/0009-mandatory-env-vars.md b/rfcs/0009-mandatory-env-vars.md
new file mode 100644
index 00000000..56300118
--- /dev/null
+++ b/rfcs/0009-mandatory-env-vars.md
@@ -0,0 +1,112 @@
+# RFC: Support Mandatory Environment Variables in Packaging Spec
+
+> **Note:**
+> This RFC builds upon the concepts defined in [add documentation page to packaging spec](./0007-packaging-documentation-page.md).
+
+Some environment variables are mandatory for certain connectors. These connectors may make a distinction between the environment variable not being set and being set as an empty string.
+
+Currently, when a user provides an empty string for an environment variable during `ddn connector init -i`, the CLI does not include these variables in the environment variable mapping or the `.env` file. Users must manually add these environment variables to both the `.env` file and the mapping to ensure proper functionality.
+
+The CLI does not currently have a way to distinguish between optional environment variables (where an empty value should be ignored) and required environment variables (where an empty value must be written as an empty string).
+
+This RFC aims to improve the user experience by eliminating the need for this manual step.
+
+## Proposed Solution
+
+We propose adding a new optional field, `required`, to specify that an environment variable is mandatory. If this field is set, the CLI will include the environment variable in the mapping and `.env` file even if the user provides an empty string.
+
+The table below describes whether or not the tooling writes the environment variable to the .env files based on the `defaultValue` and `required` fields:
+
+| defaultValue/required | true | false\|undefined |
+|---------------------------|-------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
+| Non-empty string | YES | YES (discouraged: tooling always writes default values even for non-required env vars) |
+| Empty string | YES | NO (discouraged: inconsistent behavior) (backward-compatible behavior) |
+| Undefined | YES (discouraged: should provide a default value for required flags) (write user-provided string or empty string by default) | NO |
+
+#### Recommendations for Connector Authors
+
+- **If the environment variable should be written to `.env` files:**
+ - Mark the environment variable as required.
+ - Provide a default value, even if it is an empty string.
+
+- **If the environment variable should not be written to `.env` files:**
+ - Do not mark the environment variable as required.
+ - Do not provide a default value.
+
+**Note:** Discouraged combinations are still valid and has a well defined behaviour but not recommended due to potential inconsistencies or behavior that may not align with best practices.
+
+
+## `connector-metadata.yaml` types
+
+```typescript
+type ConnectorMetadataDefinition = {
+ packagingDefinition: PackagingDefinition
+ nativeToolchainDefinition?: NativeToolchainDefinition
+ supportedEnvironmentVariables: EnvironmentVariableDefinition[]
+ commands: Commands
+ cliPlugin?: CliPluginDefinition
+ dockerComposeWatch: DockerComposeWatch
+ documentationPage: string
+}
+
+type PackagingDefinition = PrebuiltDockerImagePackaging | ManagedDockerBuildPackaging
+
+type PrebuiltDockerImagePackaging = {
+ type: "PrebuiltDockerImage"
+ dockerImage: string
+}
+
+type ManagedDockerBuildPackaging = {
+ type: "ManagedDockerBuild"
+}
+
+type NativeToolchainDefinition = {
+ commands: NativeToolchainCommands
+}
+
+type NativeToolchainCommands = {
+ start: string | DockerizedCommand | ShellScriptCommand // Compulsory
+ update?: string | DockerizedCommand | ShellScriptCommand
+ watch: string | DockerizedCommand | ShellScriptCommand // Compulsory
+}
+
+type EnvironmentVariableDefinition = {
+ name: string
+ description: string
+ defaultValue?: string
+ required?: boolean // NEW
+}
+
+type Commands = {
+ update?: string | DockerizedCommand | ShellScriptCommand
+ watch?: string | DockerizedCommand | ShellScriptCommand
+}
+
+// From https://github.com/hasura/ndc-hub/pull/129 (outside of this RFC)
+type DockerizedCommand = {
+ type: "Dockerized"
+ dockerImage: string
+ commandArgs: string[]
+}
+
+type ShellScriptCommand = {
+ type: "ShellScript"
+ bash: string
+ powershell: string
+}
+
+type CliPluginDefinition = {
+ name: string
+ version: string
+}
+
+// From: https://github.com/compose-spec/compose-spec/blob/1938efd103f8e0817ca90e5f15177ec0317bbaf8/schema/compose-spec.json#L455
+type DockerComposeWatch = DockerComposeWatchItem[]
+
+type DockerComposeWatchItem = {
+ path: string
+ action: "rebuild" | "sync" | "sync+restart"
+ target?: string
+ ignore?: string[]
+}
+```
diff --git a/rfcs/0010-connector-upgrades-dx.md b/rfcs/0010-connector-upgrades-dx.md
new file mode 100644
index 00000000..ae13376f
--- /dev/null
+++ b/rfcs/0010-connector-upgrades-dx.md
@@ -0,0 +1,104 @@
+# RFC: connector upgrades DX
+
+How does a user upgrade across connector versions? For example: from postgres v0.7.0 to v1.1.1 ?
+
+## Solution
+
+DDN CLI will upgrade parts of the users project that it owns (such as the connector.yaml definition and docker compose.yaml). A new plugin command `upgradeConfiguration` is introduced for the connector to upgrade connector configuration.
+
+`ddn connector upgrade --connector [--version ]` will
+- upgrade the connector to the specified version or to the latest version
+- upgrade the connector.yaml and compose.yaml files in place
+- atomically replace the .hasura-connector folder
+- call the plugin command `upgradeConfiguration` on the *target version* of the connector
+
+The target version must be greater than the current version.
+
+The plugin command is expected to perform any connector specific upgrades to the connector configuration.
+
+If the plugin command is not defined, the CLI will WARN that the connector does not natively support configuration upgrades and that manual upgrades may be necessary.
+
+Connector authors should always include a upgradeConfiguration command, even if it a noop.
+
+## `upgradeConfiguration` command
+
+Should upgrade the context directory in place. The user is expected to use a version control system to handle changes.
+
+Note: connectors should capture the configuration version as a part of the configuration.
+
+Do not rely on or modify the following files: connector.yaml, compose.yaml. Connectors must read and modify only files that the connector itself owns.
+
+## `connector-metadata.yaml` types
+
+```diff
+type ConnectorMetadataDefinition = {
+ packagingDefinition: PackagingDefinition
+ nativeToolchainDefinition?: NativeToolchainDefinition
+ supportedEnvironmentVariables: EnvironmentVariableDefinition[]
+ commands: Commands
+ cliPlugin?: CliPluginDefinition
+ dockerComposeWatch: DockerComposeWatch
+}
+
+type PackagingDefinition = PrebuiltDockerImagePackaging | ManagedDockerBuildPackaging
+
+type PrebuiltDockerImagePackaging = {
+ type: "PrebuiltDockerImage"
+ dockerImage: string
+}
+
+type ManagedDockerBuildPackaging = {
+ type: "ManagedDockerBuild"
+}
+
+type NativeToolchainDefinition = {
+ commands: NativeToolchainCommands
+}
+
+
+type NativeToolchainCommands = {
+ start: string | DockerizedCommand | ShellScriptCommand
+ update?: string | DockerizedCommand | ShellScriptCommand
+ watch: string | DockerizedCommand | ShellScriptCommand
+}
+
+type EnvironmentVariableDefinition = {
+ name: string
+ description: string
+ defaultValue?: string
+}
+
+type Commands = {
+ update?: string | DockerizedCommand | ShellScriptCommand
+ watch?: string | DockerizedCommand | ShellScriptCommand
+ printSchemaAndCapabilities?: string | DockerizedCommand | ShellScriptCommand
++ upgradeConfiguration?: string | DockerizedCommand | ShellScriptCommand
+}
+
+
+type DockerizedCommand = {
+ type: "Dockerized"
+ dockerImage: string
+ commandArgs: string[]
+}
+
+type ShellScriptCommand = {
+ type: "ShellScript"
+ bash: string
+ powershell: string
+}
+
+type CliPluginDefinition = {
+ name: string
+ version: string
+}
+
+type DockerComposeWatch = DockerComposeWatchItem[]
+
+type DockerComposeWatchItem = {
+ path: string
+ action: "rebuild" | "sync" | "sync+restart"
+ target?: string
+ ignore?: string[]
+}
+```
diff --git a/scripts/update-ndc-postgres.sh b/scripts/update-ndc-postgres.sh
index 2042d55b..df8a3ea0 100755
--- a/scripts/update-ndc-postgres.sh
+++ b/scripts/update-ndc-postgres.sh
@@ -33,18 +33,18 @@ jq \
--arg tag "${TAG}" \
--arg hash "${HASH}" \
'.source_code.version += [{"tag": $tag, "hash": $hash, "is_verified": true}]' \
- registry/"${variant}"/metadata.json \
- > registry/"${variant}"/metadata.json2
+ registry/hasura/"${variant}"/metadata.json \
+ > registry/hasura/"${variant}"/metadata.json2
-mv registry/"${variant}"/metadata.json2 registry/"${variant}"/metadata.json
+mv registry/hasura/"${variant}"/metadata.json2 registry/hasura/"${variant}"/metadata.json
# set latest version
jq \
--arg tag "${TAG}" \
'.overview.latest_version |= $tag' \
- registry/"${variant}"/metadata.json \
- > registry/"${variant}"/metadata.json2
+ registry/hasura/"${variant}"/metadata.json \
+ > registry/hasura/"${variant}"/metadata.json2
-mv registry/"${variant}"/metadata.json2 registry/"${variant}"/metadata.json
+mv registry/hasura/"${variant}"/metadata.json2 registry/hasura/"${variant}"/metadata.json
done