GraphQL APIs

JFrog Security User Guide

ft:sourceType
Ftml

This section includes examples of GraphQL APIs for JFrog Catalog.

Note

  • This API is in beta phase and subject to changes.

  • The request that needs to be done for this API is a POST HTTP request to path

    /catalog/api/v1/custom/graphql with standard GraphQL over POST format for the body of the request.

Labels

Get a label with its assigned packages and package versions

{
  customCatalogLabel {
    getLabel(name: "my_label") {
      name
      description


      publicPackagesConnection(first:5) {
        edges {
          node {
            name
            type
          }
        }
      }

      publicPackageVersionsConnection(first:5) {
        edges {
          node {
            publicPackage {
              name
              type
            }
            version
          }
        }
      }
    }
  }
}

Get multiple labels with their assigned packages and package versions

{
  customCatalogLabel {
    searchLabels(first:10 where:{nameContainsFold:"my"} orderBy:{field:NAME, direction:ASC}) {
      edges {
        node{
          name
          description


          publicPackagesConnection(first:4) {
            edges {
              node {
                name
                type
              }
            }
          }


          publicPackageVersionsConnection(first:4) {
            edges {
              node {
                publicPackage {
                  name
                  type
                }
                version
              }
            }
          }
        }
      }
    }
  }
}

Get a package with its labels

{
  publicPackage {
    getPackage(name: "my_package" type: "npm") {
      name
      type


      customCatalogLabelsConnection(first:4) {
        edges {
          node {
            name
          }
        }
      }
    }
  }
}

Get a package version with its labels and its package with its labels

{
  publicPackageVersion {
    getVersion(name: "my_package" type: "npm" version: "1.0.0") {
      publicPackage {
        name
        type

        customCatalogLabelsConnection(first:4) {
          edges {
            node {
              name
            }
          }
        }
      }
      version


      customCatalogLabelsConnection(first:4) {
        edges {
          node {
            name
          }
        }
      }
    }
  }
}

Create a label

mutation {
   customCatalogLabel {
       createCustomCatalogLabel(label: {name: "my_label", description: "some description"}) {
           name
           description
       }
   }
}

Create multiple labels

mutation {
   customCatalogLabel{
       createCustomCatalogLabels(labels: [{name: "my_label1", description: "description1"}, {name: "my_label2", description: "description2"}]) {
           name
           description
       }
   }
}

Assign a label to a package

mutation {
    customCatalogLabel {
      assignCustomCatalogLabelsToPublicPackage(
        publicPackageLabels: {
          publicPackage: {name:"my_package", type:"npm"}
          labelNames:["my_label"]
        }
      )
   }
}

Assign a label to a package version

mutation {
  customCatalogLabel {
    assignCustomCatalogLabelsToPublicPackageVersion(
      publicPackageVersionLabels: {
        publicPackageVersion: {publicPackage: {name: "my_package", type: "npm"}, version: "1.0.0"}
        labelNames: ["my_label1"]
      }
    )
  }
}

Assign a label to multiple package versions

mutation {
  customCatalogLabel {
    assignCustomCatalogLabelToPublicPackageVersions(
      publicPackageVersionsLabel: {
        publicPackageVersions: [
          {publicPackage: {name: "my_package", type: "npm"}, version: "1.0.0"},
          {publicPackage: {name: "my_package", type: "npm"}, version: "1.0.0"}
        ],
        labelName: "my_label1"
      }
    )
  }
}

Remove labels from a package

mutation {
  customCatalogLabel {
    removeCustomCatalogLabelsFromPublicPackage(
      publicPackageLabels:{
        labelNames:["my_label", "my_label2"]
        publicPackage:{name:"my_package", type:"npm"}})
   }
}

Remove labels from a package version

mutation {
  customCatalogLabel {
    removeCustomCatalogLabelsFromPublicPackageVersion(
      publicPackageVersionLabels: {
        labelNames:["my_label1", "my_label2"]
        publicPackageVersion: {
          publicPackage: {name:"my_package", type:"npm"}
          version:"package_version"
        }
      }
    )
  }
}

Remove a label from multiple package versions

mutation {
  customCatalogLabel {
    removeCustomCatalogLabelFromPublicPackageVersions(
      publicPackageVersionsLabel: {
        labelName:"my_label1" 
        publicPackageVersions:[
          {publicPackage:{name:"my_package", type:"npm"} version: "1.0.0"} 
          {publicPackage:{name:"my_package", type:"npm"} version: "1.0.1"}
        ]
      }
    ) 
  }
}

Update a label

mutation {
  customCatalogLabel {
    updateCustomCatalogLabel(
    label: {name: "my_label", updatedName: "my_label_new", updatedDescription: "updated description"}
    ) {
    name
    description
    }
  }
}

Delete a label

mutation {
  customCatalogLabel {
    deleteCustomCatalogLabel(label:{name:"my_label"})
   }
}

Delete multiple labels

mutation {
  customCatalogLabel {
    deleteCustomCatalogLabels(labels:[{name:"x1"}, {name:"x2"}])
  }
}

GraphQL API Error Messages

Error MessageDescription
Creating more than 500 labels is not supported

Returned from

CreateCustomCatalogLabels if given too many labels to create

Assigning more than 1 label is not supported

Returned from

AssignCustomCatalogLabelsToPublicPackage and AssignCustomCatalogLabelsToPublicPackageVersion if given too many labels to assign

Some of the labels already exist

Returned from

CreateCustomCatalogLabels and CreateCustomCatalogLabel if given labels that already exist.

Deleting more than 500 labels is not supported

Returned from

DeleteCustomCatalogLabelsif given too many labels to delete

Removing more than 500 labels assignments in a single operation is not supported

Returned from

RemoveCustomCatalogLabelsFromPublicPackage and RemoveCustomCatalogLabelsFromPublicPackageVersion if given too many labels to remove their assignment and from RemoveCustomCatalogLabelFromPublicPackageVersions if given too many versions to remove their assignment

Assigning a label to more than 500 package versions in a single operation is not supported

Returned from

AssignCustomCatalogLabelToPublicPackageVersions if given too many versions for label assignment

A label name cannot be empty

Returned from

CreateCustomCatalogLabel,and CreateCustomCatalogLabels if given empty name for new label, and UpdateCustomCatalogLabel if given label to rename and the new name is empty.

Labels must be specified for the assignment

Returned from

AssignCustomCatalogLabelsToPublicPackage and AssignCustomCatalogLabelsToPublicPackageVersion if list of labels to assign is empty

A requested package version already has a label assigned. More than one label per package version is not supported yet

Returned from

AssignCustomCatalogLabelsToPublicPackageVersion if the version already has a label, from AssignCustomCatalogLabelToPublicPackageVersions if one of the given versions already has a label

A requested package already has a label assigned. More than one label per package is not supported yet

Returned from

AssignCustomCatalogLabelsToPublicPackageVersion if the package is already assigned a label, from AssignCustomCatalogLabelsToPublicPackageVersion if the version’s package has a label, and RemoveCustomCatalogLabelFromPublicPackageVersions if any of the versions’ packages already has a label

Label name is too long {label_name}, must have fewer than 1000 characters

Returned from

CreateCustomCatalogLabels and UpdateCustomCatalogLabel if given a label that’s too long

Label description is too long {label_description}, must have fewer than 10000 characters
  • {label_description} will be the requested label description
  • Returned from

    CreateCustomCatalogLabelsand UpdateCustomCatalogLabel if given a description that’s too long

Label {label_name} does not exist
  • {label_name} will be the requested label name
  • Returned from

    UpdateCustomCatalogLabel, if given a label to update that, doesn’t exist

Label with name {label_name} already exists
  • {label_name} will be the requested label name
  • Returned from

    UpdateCustomCatalogLabel if given a label to rename and the new name already exists as another label

The following labels were not found:[ {label_names}]. All labels must exist when assigned
  • {label_names} will be replaced with comma separated list of label names
  • Returned from

    AssignCustomCatalogLabelsToPublicPackage, AssignCustomCatalogLabelsToPublicPackageVersion, and AssignCustomCatalogLabelToPublicPackageVersions if labels given for assignments are missing

\