Improve the security of your API by detecting common vulnerabilities as defined by OWASP and enforced with Spectral.

Overview

Spectral OWASP API Security

NPM Downloads Stoplight Forest

Scan an OpenAPI document to detect security issues. As OpenAPI is only describing the surface level of the API it cannot see what is happening in your code, but it can spot obvious issues and outdated standards being used.

Installation

npm install --save -D @stoplight/spectral-owasp-ruleset
npm install --save -D @stoplight/spectral-cli

Usage

Create a local ruleset that extends the ruleset. In its most basic form this just tells Spectral what ruleset you want to use, but it will allow you to customise things, add your own rules, turn bits off if its causing trouble.

cd ~/src/<your-api>

echo 'extends: ["@stoplight/spectral-owasp-ruleset"]' > .spectral.yaml

If you're using VS Code or Stoplight Studio then the NPM modules will not be available. Instead you can use the CDN hosted version:

echo 'extends: ["https://unpkg.com/@stoplight/spectral-owasp-ruleset"]' > .spectral.yaml

Next, use Spectral CLI to lint against your OpenAPI description. Don't have any OpenAPI? Record some HTTP traffic to make OpenAPI and then you can switch to API Design-First going forwards.

spectral lint api/openapi.yaml

You should see some output like this:

/Users/phil/src/protect-earth-api/api/openapi.yaml
  44:17      warning  owasp:api3:2019-define-error-responses-400:400 response should be defined.. Missing responses[400]  paths./upload.post.responses
  44:17      warning  owasp:api3:2019-define-error-responses-429:429 response should be defined.. Missing responses[429]  paths./upload.post.responses
  44:17      warning  owasp:api3:2019-define-error-responses-500:500 response should be defined.. Missing responses[500]  paths./upload.post.responses
  45:15        error  owasp:api3:2019-rate-limit                  All 2XX and 4XX responses should define rate limiting headers.  paths./upload.post.responses[201]
  47:15        error  owasp:api3:2019-rate-limit                  All 2XX and 4XX responses should define rate limiting headers.  paths./upload.post.responses[401]
  53:15        error  owasp:api3:2019-rate-limit                  All 2XX and 4XX responses should define rate limiting headers.  paths./upload.post.responses[403]
  59:15        error  owasp:api3:2019-rate-limit                  All 2XX and 4XX responses should define rate limiting headers.  paths./upload.post.responses[409]
  65:15        error  owasp:api3:2019-rate-limit                  All 2XX and 4XX responses should define rate limiting headers.  paths./upload.post.responses[422]
 193:16  information  owasp:api2:2019-protection-global-safe      This operation is not protected by any security scheme.  paths./sites.get.security
 210:16  information  owasp:api2:2019-protection-global-safe      This operation is not protected by any security scheme.  paths./species.get.security

Now you have some things to work on for your API. Thankfully these are only at the warning and information severity, and that is not going to fail continuous integration (unless you want them to).

There are a bunch of other rulesets you can use, or use for inspiration for your own rulesets and API Style Guides.

šŸŽ‰ Thanks

  • Andrzej - Great rules contributed to the Adidas style guide.
  • Roberto Polli - Created lots of excellent Spectral rules for API OAS Checker which aligned with the OWASP API rules.

šŸ“œ License

This repository is licensed under the MIT license.

šŸŒ² Sponsor

If you would like to thank us for creating Spectral, we ask that you buy the world a tree.

Comments
  • Rules enhancements / api4:2019-rate-limit

    Rules enhancements / api4:2019-rate-limit

    After a few comments in https://github.com/apisyouwonthate/style-guide/issues/40, I'll raise a few questions/objections to the current OWASP ruleset. It's not so much a criticism but sharing some perspective we may or may not agree on.


    Context

    The rule api4:2019-rate-limit states:

    All 2XX and 4XX responses should define rate limiting headers.

    There is a crucial distinction here between different goals a service might have to implement rate-limiting. And in many cases it is absolutely not appropriate to return rate-limit related headers. Here's a few categories I have in mind:

    Preventing a malicious actor, on their account or a compromised one, from doing extensive damage to the website before the administrators are able to react

    It isn't clear whether one would actually want such an actor to be able to perfectly know the limits imposed on them. The general guidance would usually rather be to have them set in a way that "you won't hit it unless you're doing something extremely wrong".

    Yeah it sucks for false-positives, but it's the administrator's job to refine such that those don't happen.

    And depending on the case and sensitivity of the operations, maybe it's fine to add headers. But it's more of a guidance in such cases than an error-level failure.

    Stop DoS (and related) attacks

    This one is a more specific version of the previous one, where the means an administrator has to respond to attacks is severely limited:

    • You might not have the compute power to generate responses fast enough to avoid an outage
    • You might not have the bandwidth to generate responses without causing an outage

    In practice, for a service under severe threat of DoS attacks, you need to constantly adjust and add some forms of matching way before the request even reaches your API so that you entirely IP ban the end user as soon as possible, entirely dropping their connections without any further form of processing.

    And obviously, you absolutely cannot have any of this be public knowledge.

    In the end, even if you wanted to be clear about the limits at which you consider traffic to be a DoS attack, unless you're the likes of Google, Cloudflare, and other megacorps with unlimited budget, you most likely couldn't even compute accurate responses in real-time due to the time and performance constraints.

    Business logic reasons to limit the rate of use of certain endpoints

    That is a fine use-case of these headers.

    Current Behavior

    As per Context section

    Expected Behavior

    • Make the rule a warning at most for endpoints in general
    • Make it instead mandate an HTTP 429 response (at error-level rather than the current warning one) description perhaps instead if you believe it to be necessary
    opened by Tristan971 6
  • CDN hosted version not working

    CDN hosted version not working

    Current Behavior

    If my .spectral.yml looks like

    extends: ["https://unpkg.com/@stoplight/spectral-owasp-ruleset"]
    

    as you write in your documentation I get following error.

    $ spectral lint .spectral.yml https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v3.0/petstore.yaml --verbose
    Error running Spectral!
    Error #1: Invalid ruleset provided
              at assertRuleset         ā€¦idation/index.js:14  throw new Error('Inā€¦
              at read                  ā€¦or/dist/index.js:20  (0, validation_1.asā€¦
              at processTicksAndRejeā€¦  ā€¦cess/task_queues:96
              at async processExtend   ā€¦rmers/extends.js:22  return await (0, __ā€¦
              at                       ā€¦rmers/extends.js:40
    
    

    The same happens if I use your Docker image.

    If I install @stoplight/spectral-owasp-ruleset package and my .spectral.yml looks like

    extends: ["@stoplight/spectral-owasp-ruleset"]
    

    it works as expected.

    Environment

    • Version used: 6.5.1
    • Environment name and version (e.g. Chrome 39, node.js 5.4): Node.js v16.13.2
    • Operating System and version (desktop or mobile): Windows 10
    opened by vanam 6
  • Rules enhancements / api3:2019-define-error-validation

    Rules enhancements / api3:2019-define-error-validation

    After a few comments in https://github.com/apisyouwonthate/style-guide/issues/40, I'll raise a few questions/objections to the current OWASP ruleset. It's not so much a criticism but sharing some perspective we may or may not agree on.


    Context

    The rule api3:2019-define-error-validation requires that:

    Carefully define schemas for all the API responses, including either 400 or 422 responses which describe errors caused by invalid requests.

    The HTTP 422 status code is nowhere near ubiquitous enough to be warranted as a mandatory description. Many APIs might decide to not use it, and prefer HTTP 409 Conflict for example in many cases where others use HTTP 422. And/or more granularly split further using other status codes.

    Also, I fail to see how this rule relates to security in general? šŸ˜•

    Current Behavior

    As per Context section

    Expected Behavior

    • The lack of an HTTP 422 description shouldn't be part of the rule altogether
    opened by Tristan971 3
  • Publish .yaml version

    Publish .yaml version

    User Story Description

    As a USER,

    I want to reference a YAML ruleset,

    so I can test a specification without installing a package or executing a js file.

    Acceptance Criteria

    • [ ] a YAML version of the ruleset is published

    Sprint Ready Checklist

    • [ ] Acceptance criteria defined
    • [ ] Team understands acceptance criteria
    • [ ] Team has defined solution / steps to satisfy acceptance criteria
    • [ ] Acceptance criteria is verifiable / testable
    • [ ] External / 3rd Party dependencies identified
    opened by ioggstream 3
  • Schema/Property can be named type. That causes an error

    Schema/Property can be named type. That causes an error

    {
        name: "valid case: oas3.1",
        document: {
          openapi: "3.1.0",
          info: { version: "1.0" },
          components: {
            schemas: {
              type: {
                type: "string",
                maxLength: 99,
              },
            },
          },
        },
        errors: [],
      },
    

    This case fails with an error. It shouldn't

    bug 
    opened by mnaumanali94 2
  • New Rule: Strings and Numbers should have correct validations

    New Rule: Strings and Numbers should have correct validations

    User Story Description

    As an API designer I want to be sure that I'm securing my API by precisely defining the types, and patterns you will accept in requests at design time.

    Acceptance Criteria

    • [x] Define min/max length for integer
    • [x] Define format for integer
    • [x] Define max length for string
    • [x] Define pattern for string
    • [x] Severity: Error

    More information: https://apisecurity.io/encyclopedia/content/owasp/api7-security-misconfiguration

    released 
    opened by mnaumanali94 2
  • The automated release is failing šŸšØ

    The automated release is failing šŸšØ

    :rotating_light: The automated release from the main branch failed. :rotating_light:

    I recommend you give this issue a high priority, so other packages depending on you can benefit from your bug fixes and new features again.

    You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. Iā€™m sure you can fix this šŸ’Ŗ.

    Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.

    Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the main branch. You can also manually restart the failed CI job that runs semantic-release.

    If you are not sure how to resolve this, here are some links that can help you:

    If those donā€™t help, or if this issue is reporting something you think isnā€™t right, you can always ask the humans behind semantic-release.


    No npm token specified.

    An npm token must be created and set in the NPM_TOKEN environment variable on your CI environment.

    Please make sure to create an npm token and to set it in the NPM_TOKEN environment variable on your CI environment. The token must allow to publish to the registry https://registry.npmjs.org/.


    Good luck with your project āœØ

    Your semantic-release bot :package::rocket:

    semantic-release 
    opened by github-actions[bot] 2
  • Renaming 'owasp:api3:2019-rate-limit', 'owasp:api3:2019-rate-limit-retry-after' and 'owasp:api3:2019-rate-limit-responses-429'

    Renaming 'owasp:api3:2019-rate-limit', 'owasp:api3:2019-rate-limit-retry-after' and 'owasp:api3:2019-rate-limit-responses-429'

    Renaming 'owasp:api3:2019-rate-limit', 'owasp:api3:2019-rate-limit-retry-after' and 'owasp:api3:2019-rate-limit-responses-429' to begin with 'owasp:api4...' to match the API4:2019 OWASP code.

    Motivation and Context

    Looks like there was a typo in the naming of 3 of the rules. Perhaps should have been owasp:api4.. instead of owasp:api3... ?

    #InsertIssueNumberHere

    Description

    Renamed rule and tests

    How Has This Been Tested?

    Ran unit tests

    Screenshot(s)/recordings(s)

    Types of changes

    • [ x] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist

    released 
    opened by ikenna 1
  • 401 response required on all operations

    401 response required on all operations

    User Story

    As an API Designer I want to be informed if my definition is missing a 401 response So that my consumers know they will receive a 401 if they fail to authenticate

    Acceptance Criteria

    For all operations on all paths An HTTP 401 response is defined

    Sprint Ready Checklist

    • [ ] Acceptance criteria defined
    • [ ] Team understands acceptance criteria
    • [ ] Team has defined solution / steps to satisfy acceptance criteria
    • [ ] Acceptance criteria is verifiable / testable
    • [ ] External / 3rd Party dependencies identified
    opened by savage-alex 1
  • New Rule: Define proper rate limiting

    New Rule: Define proper rate limiting

    User Story Description

    As an API designer I should explain how my API handles "too many" requests, to improve security and clarity for the API consumers looking at the docs.

    Acceptance Criteria

    • [x] MUST have a Response with HTTP Status Code 429.
    • [x] SHOULD have a Retry-After on the 429 Response.
    • [x] MUST have rate limit headers defined, either:
    opened by philsturgeon 1
  • how can I add functions to my typescript ruleset

    how can I add functions to my typescript ruleset

    Trying to add check security, which will make sure there is either global security applied or operation level security, for every operation. Sadly I cannot work out how to get it going with this slick TypeScript format, as the docs don't cover that and my guesswork is leading me to:

    spectral lint ../protect-earth-api/api/openapi.yaml --ruleset=src/ruleset.ts --verbose
    Error running Spectral!
    Error #1: Could not resolve './functions/checkSecurity' from src/ruleset.ts
              at error            ā€¦hared/rollup.js:198  base = Object.assigā€¦
              at handleResolveId  ā€¦red/rollup.js:22508  return error(errUnrā€¦
              at                  ā€¦red/rollup.js:22471  this.handleResolveIā€¦
    

    Any tips welcome.

    released 
    opened by philsturgeon 1
  • what to do about additionalProperties

    what to do about additionalProperties

    the functionality in the repo was contradicting itself, saying it had to be false but also another rule allowed it to be an object. OAS3.0 is additionalPorperties: false by default, and OAS3.1 is additionalProperties: true by default. It seems like we should address that, by making OAS3.1 users use additionalProperties, and saying it either needs to be false or an object with maxProperties set?

    Motivation and Context

    #InsertIssueNumberHere

    Description

    How Has This Been Tested?

    Screenshot(s)/recordings(s)

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist

    opened by philsturgeon 0
  • New Rule: Check for /admin/ in the path and see if its the same securityScheme as non admin paths.

    New Rule: Check for /admin/ in the path and see if its the same securityScheme as non admin paths.

    In API5:2019 ā€” Broken function level authorization of OWASP API Security they talk about a bunch of things which are pretty tricky to detect in OpenAPI, but not entriely impossible.

    Context

    Is the API Vulnerable?

    The best way to find broken function level authorization issues is to perform deep analysis of the authorization mechanism, while keeping in mind the user hierarchy, different roles or groups in the application, and asking the following questions:

    • Can a regular user access administrative endpoints?
    • Can a user perform sensitive actions (e.g., creation, modification, or erasure) that they should not have access to by simply changing the HTTP method (e.g., from GET to DELETE)?
    • Can a user from group X access a function that should be exposed only to users from group Y, by simply guessing the endpoint URL and parameters (e.g., /api/v1/users/export_all)?

    Donā€™t assume that an API endpoint is regular or administrative only based on the URL path.

    While developers might choose to expose most of the administrative endpoints under a specific relative path, like api/admins, itā€™s very common to find these administrative endpoints under other relative paths together with regular endpoints, like api/users.

    We can't guarentee an operation isnt admin related (as it says dont assume on path alone) but we can catch common case where the path does have /admin/ and warn about that.

    Current Behavior

    Currently no efforts are made for anything in API5:2019.

    Expected Behavior

    Any path containing /admin/ should error if the securityScheme is the same for non /admin/ paths.

    Possible Solution(s)

    Probably needs a custom function to check what securitySchemes exist. They either need to be a different securityScheme.Foo or securityScheme.Bar.

    It's possible that both could be securityScheme.Foo if type: oauth2 and they have different scopes.

      "securitySchemes": {
        "api_key": {
          "type": "apiKey",
          "name": "api_key",
          "in": "header"
        },
        "petstore_auth": {
          "type": "oauth2",
          "flows": {
            "implicit": {
              "authorizationUrl": "https://example.org/api/oauth/dialog",
              "scopes": {
                "write:pets": "modify pets in your account",
                "read:pets": "read your pets"
              }
            }
          }
        }
      }
    
    opened by philsturgeon 0
  • Rules enhancements / api4:2019-string-restricted

    Rules enhancements / api4:2019-string-restricted

    After a few comments in https://github.com/apisyouwonthate/style-guide/issues/40, I'll raise a few questions/objections to the current OWASP ruleset. It's not so much a criticism but sharing some perspective we may or may not agree on.


    Context

    The rule api4:2019-string-restricted requires that:

    Schema of type string must specify a format or pattern. To avoid unexpected values being sent or leaked, ensure that strings have either a format or a RegEx pattern. This can be done using format or pattern.

    This is rather questionable in a lot of cases where freeform input might be meant (and thus anything short of a .+ allowed pattern will be incorrect).

    Also, from a pure security standpoint, user-defined strings should instead always be considered as random text with 0 particular technical meaning. Otherwise you get all kinds of vulnerabilities like XSS, SQLi, etc.

    The use of patterns is otherwise okay for pure business rules without particularly high risks if a malicious actor finds a bypass of some sort.

    Current Behavior

    As per Context section

    Expected Behavior

    • At least make it a warning rather than an error
    • Maybe find a way to send users over to some open-source WAF ruleset like https://github.com/coreruleset/coreruleset
    • If you insist on having it, make it a warning, and make it an error to have a pattern that isn't bounded (ie ^pattern$) since that's by far the number one bypass reason of these and much more of a threat due to the false sense of security an administrator might have otherwise
    opened by Tristan971 4
  • Rules enhancements / api1:2019-no-numeric-ids

    Rules enhancements / api1:2019-no-numeric-ids

    After a few comments in https://github.com/apisyouwonthate/style-guide/issues/40, I'll raise a few questions/objections to the current OWASP ruleset. It's not so much a criticism but sharing some perspective we may or may not agree on.


    Context

    The rule api1:2019-no-numeric-ids more or less enforces usage of UUIDs as public resource identifiers, to avoid unsecured APIs to allow malicious users to guess URIs of resources they shouldn't access.

    I would oppose the following to the current rule:

    1. UUIDs' randomness isn't security, as they're not a cryptographically secure source of randomness
    2. Numeric identifiers aren't any more insecure, so long as they are behind proper permission checks

    Current Behavior

    As per Context section

    Expected Behavior

    1. Allow numeric resource identifiers, so long as they're gated behind an authentication schema
    2. Optionally: Allow some way to flag a resource endpoint as explicitly public and meant to be traversable, such that numeric identifiers aren't unnecessarily flagged (imagine something like /announcements/1, /announcements/2, /announcements/3 for a public announcement system)
    opened by Tristan971 4
  • New Rule: Error messages with stack traces (OWASP API7)

    New Rule: Error messages with stack traces (OWASP API7)

    User Story Description

    As an API developer I want to be sure that I'm not leaking backtraces, so if I design an API that says I will it should error, and if I omit this error contract testing will catch it. Either way I then know I am not leaking backtraces.

    Acceptance Criteria

    • [ ] Supports backtrace detection for Java, PHP, Ruby, Python, and NodeJS
    • [ ] Assume its JSON and its probably got some awkwardly encoded \n\n strings.
    • [ ] Severity: Error

    More information: https://apisecurity.io/encyclopedia/content/owasp/api7-security-misconfiguration

    enhancement help wanted good first issue hacktoberfest 
    opened by philsturgeon 0
  • New Rule: Require CORS (OWASP API7)

    New Rule: Require CORS (OWASP API7)

    User Story Description

    As an API Designer I should probably create a shared CORS header and apply it to all my responses because I always forget to add CORS, and it would be nice if Spectral could remind me to spec it, so that Prism Proxy will remind me to actually code it in. Otherwise this will definitely go online without CORS.

    Acceptance Criteria

    • [ ] MUST have Access-Control-Allow-Origin defined regardless of value.
    • [ ] The message points people to good CORS documentation: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin and https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

    More information: https://apisecurity.io/encyclopedia/content/owasp/api7-security-misconfiguration

    enhancement help wanted good first issue hacktoberfest 
    opened by philsturgeon 0
Releases(v1.4.0)
Owner
Stoplight
Stoplight leverages your OpenAPI documents to drive the entire API development process
Stoplight
@nodesecure/ci brings together a set of tools to identify dependencies vulnerabilities and track most common malicious code and patterns

NodeSecure CI Action @nodesecure/ci brings together a set of tools to identify dependencies vulnerabilities and track most common malicious code and p

null 7 Jul 29, 2022
LunaSec - Open Source Security Software built by Security Engineers. Scan your dependencies for Log4Shell, or add Data Tokenization to prevent data leaks. Try our live Tokenizer demo: https://app.lunasec.dev

Our Software We're a team of Security Engineers on a mission to make awesome Open Source Application Security tooling. It all lives in this repo. Here

LunaSec 1.2k Jan 7, 2023
Chrome extension that uses vulnerabilities CVE-2021-33044 and CVE-2021-33045 to log in to Dahua cameras without authentication.

DahuaLoginBypass Chrome extension that uses vulnerability CVE-2021-33044 to log in to Dahua IP cameras and VTH/VTO (video intercom) devices without au

null 71 Nov 26, 2022
A cyber-sec tool to be used responsibly in identifying XSS vulnerabilities

Visit the Breach website here Table of Contents About Breach Getting Started Demo Scan URL Results History Settings Looking Ahead Contributors License

OSLabs Beta 39 Apr 14, 2022
A website for detecting name of bank from card number, supported all Iranian banks

Detect Iranian Bank Web A website for detecting name of bank from card number, supported all Iranian banks. This package contains SVG logo and brand c

Max Base 12 Oct 2, 2022
A ScrollSpy library for detecting enter/exit of elements in the viewport when the user scrolls

jquery-scrollspy A jQuery plugin for detecting enter/exit of elements in the viewport when the user scrolls. New Features Added a couple new features:

John Smart 276 Jul 1, 2022
Copy/paste detecting GitHub Action for programming source code (jscpd)

dry-code Copy/paste detecting GitHub Action for programming source code with jscpd Action inputs Action input Description Default Value Required optio

null 5 Dec 14, 2022
Library to download binary files from GitHub releases detecting the correct platform.

Dbin TypeScript library to download binary files from GitHub releases detecting the correct platform. Example: import dbin from "https://deno.land/x/d

Ɠscar Otero 7 Oct 4, 2022
Calculates maximum composite SLA for a list of sequentially provided cloud services or your custom-defined services.

SlaMax Calculates maximum composite SLA for a list of sequentially provided cloud services or your custom-defined services. Here are a few use-cases y

Mikael Vesavuori 4 Sep 19, 2022
CSS-based animations triggered by JS, defined in your stylesheet

Anim-x CSS-based animations triggered by JS, defined in your stylesheet. $ npm i https://github.com/LTBL-Studio/anim-x.git Quick start An animation is

LTBL 2 Sep 29, 2021
Monitor your code for exposed API keys, tokens, credentials, and high-risk security IaC misconfigurations

Spectral VS Code extension The Spectral VS Code extension is a tool for developers that want to catch security issues (such as credentials, tokens and

null 15 Dec 19, 2022
Renders and SVG schema of SARS-CoV-2 clade as defined by Neststrain

ncov-clade-schema https://ncov-clades-schema.vercel.app/ Visualizes current tree of SARS-CoV-2 clades. Allows to generate an SVG image of this tree. C

Nextstrain 5 Nov 3, 2022
Invadium runs exploit playbooks against vulnerable target applications in an intuitive, reproducible, and well-defined manner.

Invadium Invadium runs exploits against one or more target applications in an intuitive, reproducable, and well-defined manner. It focuses on bridging

Dynatrace Open Source 10 Nov 6, 2022
jQuery plugin to show a tabs bar for navigation. The tabs can be defined once, and shared across multiple HTML pages.

jquery.simpletabs v1.2.3 The jquery.simpletabs plugin shows a tabs bar for navigation. The tabs can be defined once, and shared across multiple HTML p

Peter Thoeny 1 Feb 23, 2022
A VS Code extension to practice and improve your typing speed right inside your code editor. Practice with simple words or code snippets.

Warm Up ?? ??ā€?? A VS Code extension to practice and improve your typing speed right inside your code editor. Practice with simple words or code snipp

Arhun Saday 34 Dec 12, 2022
Sample AWS microservices app with service discovery defined using the CDK. Uses Docker + Fargate & ELB.

AWS Microservices Demo with CDK and Fargate About Simple AWS microservice-based app. Consists of two Spring Boot based services: Name Service GET /nam

Nick Klaene 7 Nov 23, 2022
A Node.js client & server implementation of the WAMP-like RPC-over-websocket system defined in the OCPP-J protcols.

OCPP-RPC A client & server implementation of the WAMP-like RPC-over-websocket system defined in the OCPP-J protcols (e.g. OCPP1.6J and OCPP2.0.1J). Re

Mikuso 14 Dec 30, 2022
A lightweight jQuery custom scrollbar plugin, that triggers event when reached the defined point.

Scrollbox A lightweight jQuery custom scrollbar plugin, that triggers event when reached the defined point. Demo Page Table of contents Browser compat

null 15 Jul 22, 2022
Tampermonkey script which adds the ability to add a user-defined label/tag/flair on a user, shown throughout Hacker News.

Hacker News User Tags Hacker News User Tags is a Tampermonkey userscript which allows the user to associate a custom coloured label/tag on usernames t

Lachlan McDonald 2 Oct 7, 2022