npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mashery-toolbelt

v2.1.2

Published

CLI tool for Mashery API Management provisioning

Downloads

13

Readme

THIS PROJECT IS DEPRECATED AND NOT MAINTAINED ANYMORE

Mashery Toolbelt

CLI tool for Mashery API Management provisioning.

Functionality

  • Provide various commands to run complex scenarios in Mashery
  • App data are stored in HOMEDIR/.mashery-toolbelt/ directory
    • osx: /Users/[HOME]/.mashery-toolbelt/
    • linux: /home/[HOME]/.mashery-toolbelt/
    • windows: C:\Users\[USERNAME]\.mashery-toolbelt\

Installation

With Node.js v7.5.0 or higher installed, run

$ npm install -g mashery-toolbelt

Commands

run mashery-toolbelt or mashery-toolbelt -h to get actual list of commands

#auth

mashery-toolbelt auth
  • runs interactive wizard to enter credentials

  • credentials except password are stored in credentials.json

  • Need to run just for first time. Then it can handle refresh tokens itself

    • Rerun only on serious issues
  • optionally can receive the credentials from environment variables instead of the wizard way:

    export MASHERY_USERNAME=

    export MASHERY_PASSWORD=

    export MASHERY_KEY=

    export MASHERY_SECRET=

    export MASHERY_SCOPE=

#dir

mashery-toolbelt dir
  • print path to mashery-toolbelt directory

#ls

mashery-toolbelt ls [name]
  • list all services
  • optional argument name to filter services by name

#backup

mashery-toolbelt backup <serviceId> [backupName]
  • download snapshot of service current state into [MASHERY_DIR]/backup/[serviceId]/[backupName].json
  • when no backupName is given, then current timestamp is used

#restore

mashery-toolbelt restore <serviceId> <backupName>
  • Restore service to state from given snapshot in [MASHERY_DIR]/backup/[serviceId]/[backupName].json

#promote

Adidas specific feature

mashery-toolbelt promote <serviceId> --name='replaceValue' [--serviceName='replaceValue'] \
                                     --trafficDomain='replaceValue' \
                                     --publicDomain='replaceValue' [--publicPath='replaceValue'] \
                                     --endpointDomain='replaceValue' [--endpointPath='replaceValue'] \
                                     [--update='updateServiceId']
  • Clone given service with changes defined by other arguments
  • Changing values is via options name, serviceName, trafficDomain, publicDomain, publicPath, endpointDomain, endpointPath
    • when serviceName is not provided then name is used to replace service name
    • publicPath and endpointPath are optional
    • each options accept replaceValue which can be one of following types
    • simple - --publicDomain='new.domain.com'
      • Replace all public domains with new one
    • multi - --endpointDomain='old.domain.com:new.domain.com' (colon pattern)
      • Get value on left side of colon and replace all matching endpoint domains with new one
      • Allow multiple patterns --endpointDomain='old.com:new.com' --endpointDomain='older.com:newer.com'
    • pattern - --endpointPath='wip/*/dev/*:*/qa/*'
      • Expand * into simple matcher.
      • wip/*/dev/* will match /wip/root/users/dev/id/{id} and change it to root/users/qa/id/{id}
    • if you want to match colon (:) just escape it --publicDomain='my.domain.com\:3000
  • --update=updateServiceId - id of service you want to update with promot (use with same arguments as before)
  • Before creating new API, app will print changes in schema and you have to confirm it.

Example:

mashery-toolbelt promote h9tygfmjttuf9sb6ah8kjftd \
  --name='DEV*:QA*' --name='*:QA *' \
  --trafficDomain=qa.apiinternal.adidas.com \
  --publicDomain='qa.apiinternal.adidas.com' \
  --endpointDomain='staging.coredam-s3-facade-service.staging.he.k8s.emea.adsint.biz

#swagger-import

mashery-toolbelt swagger-import <fileOrUrl> \
                                [--blueprint='blueprintFile'] \
                                [--organisation='organisationId'] [--multiMethodEndpoint] [--https] \
                                --name='replaceValue' [--serviceName='replaceValue'] \
                                --trafficDomain='replaceValue' \
                                --publicDomain='replaceValue' [--publicPath='replaceValue'] \
                                --endpointDomain='replaceValue' [--endpointPath='replaceValue'] \
                                [--update='updateServiceId']
  • Creates service and endpoints from swagger file (local file or url)
  • --organisation=organisationId (-o organisationId) id of existing organisation under mashery scope (area)
  • --multiMethodEndpoint generates just one endpoint for resource and its multiple HTTP methods.
    • Default is one endpoint per resource and HTTP method.
  • --https protocol of endpoints. Default http
  • --update=updateServiceId - id of service you want to update from swagger (use with same arguments as before)
  • Modifier attributes same as promote command
  • --blueprint=bluePrintFile
    • File with default values for endpoint and endpoint methods.
    • Supported format yaml or json
    • When user input is required (like for credentials). set value to "INPUT!"
    • Definition of valid props and values is in this source file
    • example of blueprint.yaml:
endpoint:
  publicDomains:
    -
      address: "adidas.api.mashery.com"
  systemDomains:
    -
      address: "adidas.api.mashery.com"
  trafficDomain: "adidas.api.mashery.com"
  systemDomainAuthentication:
    type: httpBasic
    username: INPUT!
    password: INPUT!
  methods:
    - name: "My first method"
      sampleJsonResponse: "{...}"
    - name: "My second method"

#errorset-add

mashery-toolbelt errorset-add <serviceId> <errorSetPath>
  • Create given errorSet within service and assign it to each endpoint

Notes

Internaly we represent mashery data in structure called "API" which looks like:

const api = {
  service: {
    id: "service uuid",
    ...restOfServiceProps,
    organisation: {
      id: "organisation uuid",
      ...restOfOrganisationProps
    },
    endpoints: [
      {
        id: "endpoint uuid",
        ...restOfEndpointProps,
        methods: [
          {
            id: "endpoint method uuid",
            ...restOfMethodProps
          }
        ]
      }
    ],
    errorSets: [
      {
        id: "error set uuid",
        ...restOfErrorSetProps
      }
    ]
  }
}

Development

$ git clone https://github.com/adidas-group/mashery-toolbelt.git
$ cd mashery-toolbelt
$ npm install

NPM commands

  • npm run test - runs linter (standard) and jest tests. For CI or generally validate quality and Functionality
  • npm run tdd - runs tests with watching. Must have during development for quick check if something is broken
  • npm run lint - runs linter
  • npm run lint:fix - runs linter and fix what can be fixed
  • Before each commit code is automatically fixed with linter and formatted with prettier.

Intended Use Cases

This project is intended for configuration of the Mashery API management accordingly to the adidas guidelines.

adidas is not responsible for the usage of this software for different purposes that the ones described in the use cases.

License and Software Information

© adidas AG

adidas AG publishes this software and accompanied documentation (if any) subject to the terms of the MIT license with the aim of helping the community with our tools and libraries which we think can be also useful for other people. You will find a copy of the MIT license in the root folder of this package. All rights not explicitly granted to you under the MIT license remain the sole and exclusive property of adidas AG.

NOTICE: The software has been designed solely for the purpose of configuration of the Mashery API management accordingly to the adidas guidelines. The software is NOT designed, tested or verified for productive use whatsoever, nor or for any use related to high risk environments, such as health care, highly or fully autonomous driving, power plants, or other critical infrastructures or services.

If you want to contact adidas regarding the software, you can mail us at [email protected].

For further information open the adidas terms and conditions page.

License

MIT