Optic documents and tests your API as you build it

Overview

Optic

Optic uses real traffic to document and test your APIs

Build Status issues rust closedprs currentversion License stars

  • Language agnostic, works with any Rest API
  • Optic observes development traffic and learns your API's behavior
  • Optic detects API changes by diffing traffic against the current specification
  • Optic adds an accurate API changelog to every Pull Request

Try Optic โ€ข Document APIs โ€ข Detect Changes โ€ข Optic GitBot โ€ข Contributing License

Click here for a Live Demo

Try Optic

Similar to git init

Install Optic with npm or yarn"

yarn global add @useoptic/cli
npm install @useoptic/cli -g

Then run init command:

## Navigate to your API project directory
api init

Set up aliases for the commands your team runs when building the API in optic.yml

ie npm start -> api start

ie newman run mycollection.json -> api run postman-tests

name: My API
tasks:
  start:
    command: npm start
    inboundUrl: http://localhost:4000
  postman-tests:
    command: newman run mycollection.json
    usesTask: http://localhost:4000

How does Optic monitor local traffic? Whenever you start your API or run tests using Optic's CLI, it will observe your traffic and surface API diffs. All of this processing is done locally, in the background, by a Rust binary built from the open source code in this repository.

Document your API using real traffic

Similar to git add

Once you add Optic to your API, hit it with some traffic, and document your first endpoints.

You just have to provide Optic with your API paths, and it will document every status code, response body, and request body automatically based on its observations.

You don't have to worry about hitting every possible request/response your first go -- Optic isn't "one-shot", it builds your spec up incrementally as it makes more observations about your API's behavior. For example, if Optic sees a 200 for an endpoint, and later sees a 400 for the same endpoint, it will help you add the new response.

api start
[optic] Starting My API API on Port: 3005, with npm run server-start

The api documentation

Detect API Changes

Similar to git status

While you develop your API and run tests locally, Optic diffs the traffic to find new endpoints, or changes to existing endpoints. These API diffs are listed when you run api status:

Optic

Use the Optic UI to Review Diffs + Update your Specification

Similar to staging changes

When Optic detects an API diff, it helps you:

  • Document new endpoints without writing a bunch of OpenAPI
  • Update your API specification with a few clicks
  • Detect any unplanned changes, breaks and regressions, then fix them

bigdiff

An API Changelog in Every PR

Similar to GitHub's compare page, but for API changes

The Optic GitBot adds an API Changelog during Code Review, so your team understands how the API will change when each PR is merged.

๐Ÿšฆ Prevent Breaking Changes

Discover breaking changes before they're merged. Request compatible changes in code review, or coordinate the breaking changes with consumers.

๐Ÿ”Ž API First

Adding explicit API changelogs in PRs facilitates discussion and leads to better API design. It's also a great way to make sure unintended API changes don't get deployed.

โœ… Updated Docs

No more doc drift. When you approve an API change Optic also updates the specification.

Install & Set up the GitBot

changelog


Documentation https://useoptic.com/docs

Resources

Want to help us design the next features? Book Maintainer Office Hours

License

MIT

Contributors โœจ

Thanks goes to these wonderful people (emoji key):

All Contributors


Aidan Cunniffe

๐Ÿ“– ๐Ÿ’ป

devdoshi

๐Ÿ“– ๐Ÿ’ป

Evan Mallory

๐Ÿ“–

Jaap van Hardeveld

๐Ÿ’ป ๐Ÿ“–

Ronak Shah

๐Ÿ’ป ๐Ÿ“–

taraedits

๐Ÿ“–

Lou Manglass

๐Ÿ’ป ๐Ÿ“–

Nate Meyer

๐Ÿ’ป

Tim Gates

๐Ÿ“–

Matthew Hudson

๐Ÿ“–

LaV

๐Ÿ“–

Gaurav Nelson

๐Ÿ“–

Ross Nordstrom

๐ŸŽจ ๐Ÿ’ป ๐Ÿ›

Kin Lane

๐Ÿค” ๐Ÿ–‹

Viljami Kuosmanen

๐Ÿค” ๐Ÿ–‹

Richard Crowley

๐Ÿ”ฌ ๐Ÿค”

dnmtr

๐Ÿ‘€

Tim Perry

๐Ÿ’ป

jordaniza

๐Ÿ“–

Sandy Vanderbleek

๐Ÿ“–

Dave Rolsky

๐Ÿ“–

Baptiste Darthenay

๐Ÿ“–

This project follows the all-contributors specification. Contributions of any kind welcome!

Comments
  • [Bug] Invalid object name 'C' when running optic diff

    [Bug] Invalid object name 'C' when running optic diff

    Hi,

    I'm running into an odd issue with the diff command, I'm hoping someone here can provide some guidance.

    I'm following the guide Try the optic diff command, the command is successful if I compare two files in the same branch as demoed in Two files use case but when I run the diff command showned below across two different git branches I get an error stating that the object name 'C' is invalid.

    The following command.

    optic diff todo-api.yaml --base main
    

    Results in the following error.

    {
      stack: 'ResolverError: Command failed: git show C:Users\\circleupx\\source\\openapi-demo\\todo-api.yaml\n' +
        "fatal: invalid object name 'C'.\n" +
        ' Error opening file "Users\\circleupx\\source\\openapi-demo\\todo-api.yaml"\n' +
        '    at C:\\Users\\circleupx\\AppData\\Roaming\\npm\\node_modules\\@useoptic\\optic\\node_modules\\@useoptic\\openapi-io\\build\\parser\\resolvers\\git-branch-file-resolver.js:24:32\n' +
        '    at ChildProcess.exithandler (node:child_process:406:5)\n' +
        '    at ChildProcess.emit (node:events:520:28)\n' +
        '    at ChildProcess.emit (node:domain:475:12)\n' +
        '    at maybeClose (node:internal/child_process:1092:16)\n' +
        '    at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5)',
      code: 'ERESOLVER',
      message: 'Command failed: git show C:Users\\circleupx\\source\\openapi-demo\\todo-api.yaml\n' +
        "fatal: invalid object name 'C'.\n" +
        ' Error opening file "Users\\circleupx\\source\\openapi-demo\\todo-api.yaml"',
      source: 'Users\\circleupx\\source\\openapi-demo\\todo-api.yaml',
      path: null,
      toJSON: [Function: toJSON],
      name: 'ResolverError',
      footprint: 'null+Users\\circleupx\\source\\openapi-demo\\todo-api.yaml+ERESOLVER+Command failed: git show C:Users\\circleupx\\source\\openapi-demo\\todo-api.yaml\n' +
        "fatal: invalid object name 'C'.\n" +
        ' Error opening file "Users\\circleupx\\source\\openapi-demo\\todo-api.yaml"',
      toString: [Function: toString]
    }
    

    Doing some troubleshooting led me to the git-branch-file-resolver.js where I can see that the code is attempting to execute the command git show.

    Based on my knowledge of the command git show, if you want to run git show on the same file across two different branches then you need to include the branch name in the git show command.

    For example, currently, the optic CLI is attempting to execute the following command when I execute optic diff todo-api.yaml --base main

     git show C:Users\\circleupx\\source\\openapi-demo\\todo-api.yaml'
    

    The command above should really be as follows.

     git show main:C\\Users\\circleupx\\source\\openapi-demo\\todo-api.yaml'
    

    If update the git-branch-file-resolver.js file locally then I no longer the error "the object name 'C' is invalid".

    I'm running Optic version 0.35.4.

    Thank you.

    opened by circleupx 16
  • Move learning of initial request and response bodies to Rust

    Move learning of initial request and response bodies to Rust

    Why

    While most of the diffing already happens in Rust, the part that's involved with learning new bodies for undocumented endpoints is still in Scala, with the performance penalty that comes with it. Just was with the diffs, for reasonably sized projects this can take many minutes, while porting it to Rust took that back down to seconds.

    What

    Implements a new initial-bodies worker that calls to Rust instead of Scala.

    A new learn command is added to the Rust CLI. This can be used from the Node.js side through learnUndocumentedBodies, which accepts the spec and interactions that are to be learned, returning a readable stream of endpoint bodies.

    A new worker task uses this to implement the learning of an interaction per endpoint and method, just like the Scala version.

    Like the Scala version, this implementation causes a re-diffing of the interaction. However, it's structured for that to change and go with a more efficient pipeline, where bodies are learned immediately after diff results come available from their first production. While changes on that scale are beyond the scope of this work, the path to it is open.

    Processing the interactions (diffing + learning their shapes) happens in a similar concurrency model as the diffing, with multiple threads diffing interactions concurrently, sending results to a thread dedicated to results aggregation. If need be, results aggregation can be split up between multiple threads in the future, probably by partitioning by endpoint. For now, that's considered beyond the scope of this PR.

    Validation

    • [x] CI passes
    • [x] Hidden behind a feature flag by default
    • [x] No ScalaJS used on server + domain side.
    • [x] Works as drop-in replacement for the UI client.
    feature 
    opened by JaapRood 15
  • Is it possible to generate a static html doc website ?

    Is it possible to generate a static html doc website ?

    I'd like to serve the doc along with my API under the endpoint /doc but now for serving I need to run the api spec which is a node server that I have to host somehow.

    Is it possible to generate html instead ?

    Regards

    resolved resolvedin_8.3 
    opened by abdelba 13
  • [optic 2.0.5] Fail to install.

    [optic 2.0.5] Fail to install.

    Steps to reproduce:

    1. run npm install optic-cli -g
    2. run optic Got the error:
    ? Finish Install: Configure local Optic server. Yes
    Installing local Optic server...
    downloading and preparing JRE + Optic Server [====================================] 100% 0.0s
    Optic server could not be installed.Smoketest failed.
    
    bug 
    opened by anhnhoktvn 13
  • feature: Implement s3 ingest capture saver

    feature: Implement s3 ingest capture saver

    Why

    Slurp saves IHttpInteractions in batches to an S3 bucket. We want to load that data into your local Optic instance. This PR implements the S3 ingest capture saver that does that

    So far so good!

    Opens the UI and contains the right knowledge from the captures! Screen Shot 2021-03-24 at 4 03 41 PM

    And we have a progress bar

    https://user-images.githubusercontent.com/4368270/112524972-ca9ee380-8d76-11eb-99ec-81bec6e5d571.mov

    TODO:

    • [x] Better progress bar
    • [x] Integrate with the existing CLI
    • [x] Launch daemon and open browser upon completion
    • [ ] Add option to limit total size of files ingested. E.g to 1gb or something.
    feature 
    opened by jshearer 12
  • Express Optic

    Express Optic

    So, i'm working on an API that will scale a lot over time, and when i was looking for a good OAs3 autodocumenting solution on SO, i stumbled with Optic.

    I followed the install and setup guides and ended up with the next setup:

    1. optic.yaml which initially had the suggested port: 4000, however i later changed it to port: 3300 since it was the one that Optic was trying to use, also take note on the command (more on that in 3.): Screenshot from 2020-06-28 21-55-39

    2. bin/www entry point, which differs from the examples in the guides, thus i tried different combinations with app and server objects: Screenshot from 2020-06-28 21-55-27

    3. And since this project is handled by PM2, note the npm run pm2 definition, it uses the PM2 Ecosystem Configuration File (see 4.): Screenshot from 2020-06-28 21-55-50

    4. Said file is just an autodocumented and easier to handle way to launch PM2 Processes, as far i understood Optic should end up intercepting/wrapping the app, which in time gets wrapped by PM2, however there might be a conflict around that matter: Screenshot from 2020-06-28 21-55-58

    These are the errors that i could not work around, no matter how i handle bin/www and optic.yaml: Screenshot from 2020-06-28 21-57-45 Screenshot from 2020-06-28 21-57-25

    I also tried just launching the api check start by using node app.js and node bin/www commands to completely avoid PM2, but the behavior remains.

    I'm quite sure the problem is around 2....

    resolved resolvedin_8.2 
    opened by Pra3t0r5 12
  • Error: Optic needs more information about your API to continue.

    Error: Optic needs more information about your API to continue.

    I'm using node - express - typescript

    After:

    • installing optic
    • typing api init in powershell in root directory of my API
    • setting up all the options available on the page
    • typing api start in powershell

    I'm getting an error:

    [optic] Optic needs more information about your API to continue.
    This directory already has an optic.yml file.
    
    research required 
    opened by ArinCantCode 12
  • Move learning of diff trail affordances to Rust

    Move learning of diff trail affordances to Rust

    Why

    While most of the diffing already happens in Rust, the part that's involved with learning new affordances for shapes that caused diffs is still in Scala. These affordances power the UI where a user can choose to update their spec due to differences in fields. Since we're trying to get rid of Scala, it's important that we port this over

    What

    We're introducing a new worker that calls a new Learn command in the Rust diff engine CLI.

    The learn CLI command now has a second subject implemented, shapes-diffs-affordances. This subject also requires --tagged-diff-results to point to the diff results that should be learned trails for. It then accepts interactions over stdin and learns from those one by one, for all results to be aggregated and returned over stdout.

    The UI sends the diffId along with it's request for learning trail values, which allows the new Node.js worker to look up diff-results from disk. This replaces serialising and sending the diffs from the client to the server, which was an unnecessary overhead that's no longer required due to the shift of logic from UI -> backend.

    A minimal amount of "re-diffing" is performed for each incoming interaction, basically to determine which interactions match a documented request or response body. From there, the qualifying interaction bodies are fully traversed and mapped, to then be matched against the trails relevant to the diffs. In the future, a more focused traverser could be implemented that only traverses the trail relevant to diffs, but so far, that kind of optimisation does not seem necessary.

    Processing the interactions happens in a similar concurrency model as the diffing, with multiple threads diffing interactions concurrently, sending results to a thread dedicated to results aggregation. If need be, results aggregation can be split up between multiple threads in the future, probably by partitioning by endpoint. For now, that's considered beyond the scope of this PR.

    Validation

    • [x] CI passes
    • [x] Hidden by a feature flag by default (OPTIC_RUST_SHAPE_DIFF_AFFORDANCES_LEARNER).
    • [x] No ScalaJS involved on server + domain side.
    • [x] Works as a drop-in replacement for the UI client. (small caveat: UI client adjusted to POST diffId to endpoint).
    feature 
    opened by JaapRood 11
  • provide a way to pass ca certs instead of using self signed certs for https requests

    provide a way to pass ca certs instead of using self signed certs for https requests

    right now we are trying to intercept traffic of an environment that is rejecting because of self-signed certificate and disabling that check is not an option in that server, so please let me know if there is a way I can provide certs to be used instead of self-signed certificates being created in your code.

    feature request workaround available 
    opened by sidtagirisa 10
  • optic is getting killed while running diff on a large capture

    optic is getting killed while running diff on a large capture

    I am trying to generate a diff on a large capture and I tried a lot of times to run it but was unsuccessful in doing so because optic is getting killed.

    I checked and monitored the ram, it is not a memory issue. I ran api debug:capture, it generated a 101 MB debug file.

    I am uploading that here. Please let me know what I can do further to help you debug this issue.

    wontfix 
    opened by sidtagirisa 9
  • Command api generate:oas not working

    Command api generate:oas not working

    I am trying to export as OpenAPI

    Error: Cannot use GraphQLSchema "[object GraphQLSchema]" from another module or realm.
    
    Ensure that there is only one instance of "graphql" in the node_modules
    directory. If different versions of "graphql" are the dependencies of other
    relied on modules, use "resolutions" to ensure only one version is installed.
    
    https://yarnpkg.com/en/docs/selective-version-resolutions
    
    Duplicate "graphql" modules cannot be used at the same time since different
    versions may have different capabilities and behavior. The data from one
    version used in the function from another could produce confusing and
    spurious results.
        at instanceOf (/usr/local/lib/node_modules/@useoptic/cli/node_modules/@useoptic/spectacle/node_modules/graphql/jsutils/instanceOf.js:28:13)
        at isSchema (/usr/local/lib/node_modules/@useoptic/cli/node_modules/@useoptic/spectacle/node_modules/graphql/type/schema.js:36:34)
        at assertSchema (/usr/local/lib/node_modules/@useoptic/cli/node_modules/@useoptic/spectacle/node_modules/graphql/type/schema.js:40:8)
        at validateSchema (/usr/local/lib/node_modules/@useoptic/cli/node_modules/@useoptic/spectacle/node_modules/graphql/type/validate.js:44:28)
        at graphqlImpl (/usr/local/lib/node_modules/@useoptic/cli/node_modules/@useoptic/spectacle/node_modules/graphql/graphql.js:79:62)
        at /usr/local/lib/node_modules/@useoptic/cli/node_modules/@useoptic/spectacle/node_modules/graphql/graphql.js:28:31
        at new Promise (<anonymous>)
        at Object.graphql (/usr/local/lib/node_modules/@useoptic/cli/node_modules/@useoptic/spectacle/node_modules/graphql/graphql.js:26:10)
        at Object.queryWrapper (/usr/local/lib/node_modules/@useoptic/cli/node_modules/@useoptic/spectacle/build/spectacle.js:488:26)
        at Object.generateOpenApi (/usr/local/lib/node_modules/@useoptic/cli/node_modules/@useoptic/spectacle/build/openapi/index.js:7:38)
    
    workaround available 
    opened by sivantha96 9
  • Spectral plus ruleset

    Spectral plus ruleset

    ๐Ÿ— Description

    Run your spectral configs within Optic. Some rulesets can run added, some always.

    ๐Ÿ“š References

    Config:

    spectral: 
       added:
         - ./latest-pagination.yml 
       always:
         - ./metadata.yml
         - ./operations.yml
    

    ๐Ÿ‘น QA

    How can other humans verify that this PR is correct?

    opened by acunniffe 0
  • Implement `optic api add`

    Implement `optic api add`

    ๐Ÿ— Description

    What does this PR do? Anything folks should know?

    This PR implements optic api add. This can be called in two ways:

    • optic api add - adds all detected openapi files in a repo
    • optic api add <file_name> --history-depth n - adds a single api file with history up to a depth of n (0 is all history)

    If token is in multiple orgs, we prompt for which org to add to. If a user does not select a ruleset, we prompt to see if they would like to create a standard or use an existing standard.

    Screen Shot 2023-01-06 at 2 04 04 PM

    Also changed ruleset -> standard

    TODO:

    • [x] add notes for ruleset
    • [x] write x-optic-url + x-optic-ruleset
    • [x] add tests

    TODO in follow up PR

    • [ ] connect up APIs (fetch org from APIs, upload api, upload spec)

    ๐Ÿ“š References

    Links to relevant docs (Notion, Twist, GH issues, etc.), if applicable.

    ๐Ÿ‘น QA

    How can other humans verify that this PR is correct?

    opened by niclim 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Ignored or Blocked

    These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

    Detected dependencies

    dockerfile
    Dockerfile
    github-actions
    .github/workflows/release-container-image.yml
    • actions/checkout v3.3.0@ac593985615ec2ede58e132d2e21d2b1cbd6127c
    • docker/login-action v2.1.0@f4ef78c080cd8ba55a85445d5b36e214a81df20a
    • aws-actions/configure-aws-credentials v1.7.0@67fbcbb121271f7775d2e7715933280b06314838
    • aws-actions/amazon-ecr-login v1.5.3@261a7de32bda11ba01f4d75c4ed6caf3739e54be
    • Ilshidur/action-slack v2.1.0@689ad44a9c9092315abd286d0e3a9a74d31ab78a
    • Ilshidur/action-slack v2.1.0@689ad44a9c9092315abd286d0e3a9a74d31ab78a
    .github/workflows/release.yml
    • actions/checkout v3
    • actions/checkout v3
    • actions/checkout v3
    • actions/checkout v3
    • actions/setup-node v3
    • Ilshidur/action-slack v2.1.0@689ad44a9c9092315abd286d0e3a9a74d31ab78a
    • Ilshidur/action-slack v2.1.0@689ad44a9c9092315abd286d0e3a9a74d31ab78a
    .github/workflows/test.yaml
    • actions/checkout v3
    • actions/setup-node v3
    npm
    package.json
    • @types/prettier ^2
    • husky ^8.0.0
    • lint-staged ^13.1.0
    • prettier ^2.8.1
    projects/json-pointer-helpers/package.json
    • jsonpointer ^5.0.1
    • @babel/core ^7.17.0
    • @babel/plugin-transform-runtime ^7.17.0
    • @babel/preset-env ^7.17.0
    • @babel/preset-react ^7.17.0
    • @babel/preset-typescript ^7.17.0
    • @types/babel__core ^7
    • @types/babel__preset-env ^7
    • @types/node ^18.0.0
    • babel-jest ^29.3.1
    • jest ^29.3.1
    • prettier ^2.4.1
    • ts-jest ^29.0.3
    • ts-node ^10.3.1
    • typescript ^4.4.4
    • yarn 3.3.1
    projects/openapi-cli/package.json
    • @httptoolkit/httpolyglot ^2.0.1
    • @jsdevtools/ono ^7.1.3
    • @sentry/node ^7.10.0
    • @types/node-forge ^1.0.4
    • ajv-formats ~2.1.0
    • analytics-node ^6.2.0
    • async-exit-hook ^2.0.1
    • axax ^0.2.2
    • chalk 4.1.2
    • commander ^9.4.1
    • conf ^10.2.0
    • fast-deep-equal ^3.1.3
    • fs-extra ^11.1.0
    • har-schema ^2.0.0
    • is-url ^1.2.4
    • json-schema-traverse ^1.0.0
    • lodash.sortby ^4.7.0
    • log ^6.3.1
    • log-node ^8.0.3
    • minimatch 5.1.2
    • mockttp ^3.3.1
    • node-abort-controller ^3.0.1
    • node-forge ^1.2.1
    • node-machine-id ^1.1.12
    • object-hash ^3.0.0
    • ora ^6.1.2
    • pluralize 8.0.0
    • portfinder ^1.0.28
    • semver ^7.3.7
    • slice-ansi ^4.0.0
    • stream-chain ^2.2.5
    • stream-json ^1.7.4
    • strip-ansi ^6.0.1
    • ts-invariant ^0.9.4
    • ts-results ^3.3.0
    • update-notifier ^6.0.2
    • whatwg-mimetype ^3.0.0
    • @babel/cli ^7.17.0
    • @babel/core ^7.17.0
    • @babel/plugin-transform-runtime ^7.17.0
    • @babel/preset-env ^7.17.0
    • @babel/preset-react ^7.17.0
    • @babel/preset-typescript ^7.17.0
    • @types/analytics-node ^3.1.7
    • @types/babel__core ^7
    • @types/babel__preset-env ^7
    • @types/bent ^7
    • @types/fs-extra ^9.0.13
    • @types/is-url ^1.2.30
    • @types/json-stable-stringify ^1.0.33
    • @types/lodash.sortby ^4.7.7
    • @types/log ^6.3.0
    • @types/node ^18.0.0
    • @types/semver ^7.3.10
    • @types/slice-ansi ^4
    • @types/stream-chain ^2
    • @types/stream-json ^1
    • @types/tunnel ^0
    • @types/update-notifier ^6
    • @types/whatwg-mimetype ^3.0.0
    • babel-jest ^29.3.1
    • babel-plugin-inline-dotenv ^1.7.0
    • bent ^7.3.12
    • jest ^29.3.1
    • node-fetch ^2.6.7
    • prettier ^2.4.1
    • ts-jest ^29.0.3
    • ts-node ^10.8.1
    • tunnel ^0.0.6
    • typescript ^4.7.3
    • url-join ^4.0.1
    • yarn 3.3.1
    projects/openapi-io/package.json
    • @apidevtools/json-schema-ref-parser ^9.0.9
    • @jsdevtools/ono ^7.1.3
    • ajv ^8.6.0
    • ajv-errors ~3.0.0
    • ajv-formats ~2.1.0
    • bottleneck ^2.19.5
    • chalk ^4.1.2
    • copyfiles ^2.4.1
    • crypto-js ^4.1.1
    • fast-deep-equal ^3.1.3
    • fast-json-patch ^3.1.1
    • fs-extra ^11.0.0
    • is-url ^1.2.4
    • json-stable-stringify ^1.0.1
    • lodash.clonedeep ^4.5.0
    • lodash.sortby ^4.7.0
    • node-fetch ^2.6.7
    • openapi-types ^12.0.2
    • semver ^7.3.7
    • ts-invariant ^0.9.3
    • upath ^2.0.1
    • yaml ^2.2.0
    • yaml-ast-parser ^0.0.43
    • @babel/core ^7.17.0
    • @babel/plugin-transform-runtime ^7.17.0
    • @babel/preset-env ^7.17.0
    • @babel/preset-react ^7.17.0
    • @babel/preset-typescript ^7.17.0
    • @types/babel__core ^7
    • @types/babel__preset-env ^7
    • @types/copyfiles ^2
    • @types/crypto-js ^4.0.2
    • @types/fast-json-patch ^1.1.5
    • @types/fs-extra ^9.0.13
    • @types/is-url ^1.2.30
    • @types/lodash.clonedeep ^4
    • @types/lodash.sortby ^4.7.6
    • @types/micro ^7.3.6
    • @types/micro-cors ^0
    • @types/node ^18.0.0
    • @types/node-fetch 2.6.2
    • @types/semver ^7.3.10
    • babel-jest ^29.3.1
    • chai ^4.3.4
    • copyfiles ^2.4.1
    • jest ^29.3.1
    • micro ^9.3.4
    • micro-cors ^0.1.1
    • prettier ^2.4.1
    • ts-jest ^29.0.3
    • ts-node ^10.3.1
    • typescript ^4.4.4
    • yarn 3.3.1
    projects/openapi-utilities/package.json
    • @octokit/rest ^19.0.0
    • @sentry/node ^7.10.0
    • ajv ^8.6.0
    • ajv-errors ~3.0.0
    • ajv-formats ~2.1.0
    • analytics-node ^6.2.0
    • chalk ^4.1.2
    • fast-deep-equal ^3.1.3
    • is-url ^1.2.4
    • js-yaml ^4.1.0
    • json-stable-stringify ^1.0.1
    • lodash.groupby ^4.6.0
    • lodash.isequal ^4.5.0
    • lodash.omit ^4.5.0
    • lodash.sortby ^4.7.0
    • openapi-types ^12.0.2
    • ts-invariant ^0.9.3
    • yaml-ast-parser ^0.0.43
    • @babel/core ^7.17.0
    • @babel/plugin-transform-runtime ^7.17.0
    • @babel/preset-env ^7.17.0
    • @babel/preset-react ^7.17.0
    • @babel/preset-typescript ^7.17.0
    • @types/analytics-node ^3.1.7
    • @types/babel__core ^7
    • @types/babel__preset-env ^7
    • @types/is-url ^1.2.30
    • @types/js-yaml ^4.0.5
    • @types/json-stable-stringify ^1.0.33
    • @types/lodash.groupby ^4.6.6
    • @types/lodash.isequal ^4.5.6
    • @types/lodash.omit ^4.5.7
    • @types/lodash.sortby ^4.7.6
    • @types/node ^18.0.0
    • @types/semver ^7.3.10
    • babel-jest ^29.3.1
    • fs-extra ^11.0.0
    • jest ^29.3.1
    • prettier ^2.4.1
    • ts-jest ^29.0.3
    • ts-node ^10.3.1
    • typescript ^4.4.4
    • yarn 3.3.1
    projects/optic-ci/package.json
    • @babel/runtime ^7.20.6
    • @octokit/rest ^19.0.0
    • @sentry/node ^7.10.0
    • @stoplight/spectral-core ^1.8.1
    • ajv ^8.6.0
    • bottleneck ^2.19.5
    • chalk ^4.1.2
    • commander ^9.4.1
    • is-url ^1.2.4
    • js-yaml ^4.1.0
    • json-stable-stringify ^1.0.1
    • loglevel ^1.8.0
    • node-fetch ^2.6.7
    • open ^8.4.0
    • picomatch ^2.3.1
    • url-join ^4.0.1
    • uuid ^9.0.0
    • @babel/cli ^7.17.0
    • @babel/core ^7.17.0
    • @babel/plugin-transform-runtime ^7.17.0
    • @babel/preset-env ^7.17.0
    • @babel/preset-react ^7.17.0
    • @babel/preset-typescript ^7.17.0
    • @types/babel__core ^7
    • @types/babel__preset-env ^7
    • @types/is-url ^1.2.30
    • @types/js-yaml ^4.0.5
    • @types/json-stable-stringify ^1.0.33
    • @types/node ^18.0.0
    • @types/picomatch ^2.3.0
    • @types/url-join ^4.0.1
    • @types/uuid ^9.0.0
    • babel-jest ^29.3.1
    • babel-plugin-transform-inline-environment-variables ^0.4.3
    • dotenv ^16.0.3
    • jest ^29.3.1
    • prettier ^2.4.1
    • ts-jest ^29.0.3
    • ts-node ^10.8.0
    • typescript ^4.7.2
    • yarn 3.3.1
    projects/optic/package.json
    • @babel/runtime ^7.20.6
    • @octokit/rest ^19.0.0
    • @sentry/node ^7.10.0
    • @stoplight/spectral-core ^1.8.1
    • ajv ^8.6.0
    • bottleneck ^2.19.5
    • chalk ^4.1.2
    • commander ^9.4.1
    • dotenv ^16.0.3
    • is-url ^1.2.4
    • js-yaml ^4.1.0
    • json-stable-stringify ^1.0.1
    • loglevel ^1.8.0
    • node-fetch ^2.6.7
    • node-machine-id ^1.1.12
    • open ^8.4.0
    • picomatch ^2.3.1
    • tar ^6.1.11
    • url-join ^4.0.1
    • uuid ^9.0.0
    • @babel/cli ^7.17.0
    • @babel/core ^7.17.0
    • @babel/plugin-transform-runtime ^7.17.0
    • @babel/preset-env ^7.17.0
    • @babel/preset-react ^7.17.0
    • @babel/preset-typescript ^7.17.0
    • @types/babel__core ^7
    • @types/babel__preset-env ^7
    • @types/is-url ^1.2.30
    • @types/js-yaml ^4.0.5
    • @types/json-stable-stringify ^1.0.33
    • @types/node ^18.0.0
    • @types/picomatch ^2.3.0
    • @types/tar ^6
    • @types/url-join ^4.0.1
    • @types/uuid ^9.0.0
    • babel-jest ^29.3.1
    • babel-plugin-transform-inline-environment-variables ^0.4.3
    • jest ^29.3.1
    • prettier ^2.4.1
    • ts-jest ^29.0.3
    • ts-node ^10.8.0
    • typescript ^4.7.2
    • yarn 3.3.1
    projects/rulesets-base/package.json
    • @stoplight/spectral-core ^1.8.1
    • @stoplight/spectral-rulesets ^1.14.1
    • lodash.pick ^4.4.0
    • node-fetch ^2.6.7
    • @babel/core ^7.17.0
    • @babel/plugin-transform-runtime ^7.17.0
    • @babel/preset-env ^7.17.0
    • @babel/preset-react ^7.17.0
    • @babel/preset-typescript ^7.17.0
    • @types/babel__core ^7
    • @types/babel__preset-env ^7
    • @types/json-stable-stringify ^1.0.33
    • @types/lodash.pick ^4
    • @types/node ^18.0.0
    • babel-jest ^29.3.1
    • jest ^29.3.1
    • ts-jest ^29.0.3
    • ts-node ^10.4.0
    • typescript ^4.4.4
    • yarn 3.3.1
    projects/standard-rulesets/package.json
    • @stoplight/spectral-core ^1.8.1
    • @stoplight/spectral-rulesets ^1.14.1
    • ajv ^8.6.0
    • ajv-formats ~2.1.0
    • whatwg-mimetype ^3.0.0
    • @babel/core ^7.17.0
    • @babel/plugin-transform-runtime ^7.17.0
    • @babel/preset-env ^7.17.0
    • @babel/preset-react ^7.17.0
    • @babel/preset-typescript ^7.17.0
    • @types/babel__core ^7
    • @types/babel__preset-env ^7
    • @types/json-stable-stringify ^1.0.33
    • @types/lodash.pick ^4
    • @types/node ^18.0.0
    • babel-jest ^29.3.1
    • jest ^29.3.1
    • prettier ^2.4.1
    • ts-jest ^29.0.3
    • ts-node ^10.4.0
    • typescript ^4.4.4
    • yarn 3.3.1

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
  • Support for submodules in diff --base

    Support for submodules in diff --base

    I have project with git submodule, that contains common definitions. When I run

    
    optic diff src/openapi.yml --base c27e8b3
    

    I get an error

    
    {
      stack: 'ResolverError: Command failed: git show c27e8b3:src/shared/common.yml\n' +
        "fatal: path 'src/shared/common.yml' exists on disk, but not in 'c27e8b3'\n" +
        ' Error opening file "src/shared/common.yml"\n' +
        '    at /home/me/code/api/node_modules/@useoptic/openapi-io/build/parser/resolvers/git-branch-file-resolver.js:24:32\n' +
        '    at ChildProcess.exithandler (node:child_process:420:5)\n' +
        '    at ChildProcess.emit (node:events:513:28)\n' +
        '    at ChildProcess.emit (node:domain:489:12)\n' +
        '    at maybeClose (node:internal/child_process:1091:16)\n' +
        '    at Socket.<anonymous> (node:internal/child_process:449:11)\n' +
        '    at Socket.emit (node:events:513:28)\n' +
        '    at Socket.emit (node:domain:489:12)\n' +
        '    at Pipe.<anonymous> (node:net:313:12)',
      code: 'ERESOLVER',
      message: 'Command failed: git show c27e8b3:src/shared/common.yml\n' +
        "fatal: path 'src/shared/common.yml' exists on disk, but not in 'c27e8b3'\n" +
        ' Error opening file "src/shared/common.yml"',
      source: 'src/shared/common.yml',
      path: null,
      toJSON: [Function: toJSON],
      name: 'ResolverError',
      footprint: 'null+src/shared/common.yml+ERESOLVER+Command failed: git show c27e8b3:src/shared/common.yml\n' +
        "fatal: path 'src/shared/common.yml' exists on disk, but not in 'c27e8b3'\n" +
        ' Error opening file "src/shared/common.yml"',
      toString: [Function: toString]
    }
    

    where src/shared/ is mentioned submodule, and analysed openapi.yml references src/shared/common.yml.

    opened by fenuks 3
  • wip: oas2 traverser & tests

    wip: oas2 traverser & tests

    Description - A few users have been asking about when OAS 2 support is coming. We were not sure how hard supporting multiple versions would be, but as we discovered when we released 3.1 support last month, the facts model effectively normalizes out the structure of the OpenAPI specifications.

    The OAS 2 traverser will traverse the unique structure of these documents and map all of their types onto our standard facts. That mean OOTB our built-in rules will work. If a company has written custom rules that look at the raw values of different OpenAPI entities, those may break when encountering an unexpected spec version. That should be pretty rare. If you want to support both major versions, you need to update the custom rules anyway and that is not the worst way to find out you need to.

    • replaces content contentType with produces and consumes
    • replaces requestBody with the request parameter that has in: body
    • removes nullable, oneOf, anyOf, allOf -- not supported in oas 2
    • includes on some known limitations
      • omits formData and examples (these can come later if needed)
    • adds OpenAPI v2 validation and semver parsing
    • tests the facts produced by 3 OAS 2 specifications from Azure, & Petstore. Manually reviewed and snapshotted
      • looked for multiples of bodies for each produces and consumes
      • path parameters get generated properly
      • schema facts are correct

    questions?

    • All over our code we use ParseOpenAPIResult, and jsonLike is oas3 typed. That type here has never been correct. We say it is oas3, but there's no validation at this stage. The sourcemap parser will only fail if a $ref can't be resolved. It could be any data that is YAML and JSON. We have the validator, I propose that is where the typing gets applied. Ie validator would return `errors?: string[] , 3_0?: OpenAPI_V3, 3_1?: OpenAPI_V3_1, 2_0?: OpenAPI_V2_0
    • Does the changelog or anything in Optic Cloud strongly expect the specs to be OpenAPI 3? What does the path to supporting OAS 2 look like in the changlog / cloud?
    • What else could we write tests for?

    current state?

    • the validator is still set to fail on oas2, so we could merge these changes without the support being enabled
    • traverser is working great. I can keep adding more tests.
    • we can't turn it on until we address the ParseOpenAPIResult issue and do some retyping.
    • we can't turn it on until we validate Changelog works OR decide not to support that to start
      • what if we choose not to upload oas2 to cloud / changelogs? That lets us give this to customers and validate interest in full story before going further, and takes pressure off the cloud team who have a lot of other things going on right now
    opened by acunniffe 1
  • Emit facts for an Operation's Security

    Emit facts for an Operation's Security

    Security schemas are used to define the authentication for the operations in OpenAPI. They are shorthand for headers like Authentication or query parameters that include a token.

    https://spec.openapis.org/oas/v3.1.0#security-scheme-object

    There's a discussion going on here to define which security schema changes we consider breaking https://github.com/opticdev/optic/discussions/1305

    openapi-feature 
    opened by acunniffe 0
Releases(v0.35.13)
  • v0.35.13(Jan 5, 2023)

    What's Changed

    • Configure Renovate by @renovate in https://github.com/opticdev/optic/pull/1447
    • chore(deps): update aws-actions/amazon-ecr-login action to v1.5.3 by @renovate in https://github.com/opticdev/optic/pull/1450
    • feat: disable dependabot by @notnmeyer in https://github.com/opticdev/optic/pull/1448
    • chore: update codeowners by @notnmeyer in https://github.com/opticdev/optic/pull/1452
    • chore(deps): update actions/checkout action to v3.2.0 by @renovate in https://github.com/opticdev/optic/pull/1455
    • fix(deps): update dependency minimatch to v5.1.2 by @renovate in https://github.com/opticdev/optic/pull/1454
    • chore(deps): update yarn to v3.3.1 by @renovate in https://github.com/opticdev/optic/pull/1457
    • Upgrade jest by @niclim in https://github.com/opticdev/optic/pull/1445
    • add in lint-staged + husky by @niclim in https://github.com/opticdev/optic/pull/1446
    • Create new generic diff function by @niclim in https://github.com/opticdev/optic/pull/1439
    • chore(deps): update actions/checkout action to v3.3.0 by @renovate in https://github.com/opticdev/optic/pull/1464
    • chore(deps): update dependency @types/node-fetch to v2.6.2 by @renovate in https://github.com/opticdev/optic/pull/1456
    • chore(deps): update dependency @types/uuid to v9 by @renovate in https://github.com/opticdev/optic/pull/1460
    • chore(deps): update dependency @types/whatwg-mimetype to v3 by @renovate in https://github.com/opticdev/optic/pull/1461
    • chore(deps): update dependency fs-extra to v11 by @renovate in https://github.com/opticdev/optic/pull/1462
    • fix(deps): update dependency @octokit/rest to v19 by @renovate in https://github.com/opticdev/optic/pull/1466
    • chore(deps): update dependency @types/node to v18 by @renovate in https://github.com/opticdev/optic/pull/1459
    • Fix for when static content is served on the same basepath as the API by @acunniffe in https://github.com/opticdev/optic/pull/1470

    New Contributors

    • @renovate made their first contribution in https://github.com/opticdev/optic/pull/1447

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.12...v0.35.13

    Source code(tar.gz)
    Source code(zip)
  • v0.35.12(Jan 4, 2023)

    What's Changed

    • optic verify command by @acunniffe in https://github.com/opticdev/optic/pull/1443

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.11...v0.35.12

    Source code(tar.gz)
    Source code(zip)
  • v0.35.11(Jan 3, 2023)

    What's Changed

    • Normalize trailing slashes in base URLs by @acunniffe in https://github.com/opticdev/optic/pull/1437
    • Update to not swallow uncaught exception in rule runner by @niclim in https://github.com/opticdev/optic/pull/1438

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.10...v0.35.11

    Source code(tar.gz)
    Source code(zip)
  • v0.35.11-0(Jan 2, 2023)

    What's Changed

    • Normalize trailing slashes in base URLs by @acunniffe in https://github.com/opticdev/optic/pull/1437

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.10...v0.35.11-0

    Source code(tar.gz)
    Source code(zip)
  • v0.35.10(Dec 19, 2022)

    What's Changed

    • Implement spectral built in ruleset by @niclim in https://github.com/opticdev/optic/pull/1436

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.9...v0.35.10

    Source code(tar.gz)
    Source code(zip)
  • v0.35.9(Dec 14, 2022)

    What's Changed

    • Allow cli config to extend a cloud ruleset by @niclim in https://github.com/opticdev/optic/pull/1421
    • Improve openapi validator error messages by @niclim in https://github.com/opticdev/optic/pull/1435

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.8...v0.35.9

    Source code(tar.gz)
    Source code(zip)
  • v0.35.8(Dec 9, 2022)

    What's Changed

    • chore(deps): bump dotenv from 16.0.2 to 16.0.3 by @dependabot in https://github.com/opticdev/optic/pull/1426
    • chore(deps): bump fast-json-patch from 3.1.0 to 3.1.1 by @dependabot in https://github.com/opticdev/optic/pull/1427
    • chore(deps): bump @babel/runtime from 7.17.2 to 7.20.6 by @dependabot in https://github.com/opticdev/optic/pull/1429
    • Create a SpectralRule by @niclim in https://github.com/opticdev/optic/pull/1409
    • Run external rules in rule runner by @niclim in https://github.com/opticdev/optic/pull/1411
    • JSON output flag for diff command by @acunniffe in https://github.com/opticdev/optic/pull/1432
    • fix specification group changes for rules by @niclim in https://github.com/opticdev/optic/pull/1433
    • bump version to 0.35.8 by @niclim in https://github.com/opticdev/optic/pull/1434

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.7...v0.35.8

    Source code(tar.gz)
    Source code(zip)
  • v0.35.8-5(Dec 9, 2022)

  • v0.35.8-4(Dec 8, 2022)

  • v0.35.8-3(Dec 8, 2022)

  • v0.35.8-1(Dec 8, 2022)

  • v0.35.8-0(Dec 8, 2022)

  • v0.35.7(Dec 8, 2022)

  • v0.35.7-4(Dec 7, 2022)

  • v0.35.7-3(Dec 7, 2022)

  • v0.35.7-1(Dec 7, 2022)

  • v0.35.7-0(Dec 7, 2022)

    What's Changed

    • Fix/upath as dep by @acunniffe in https://github.com/opticdev/optic/pull/1425

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.5...v0.35.7-0

    Source code(tar.gz)
    Source code(zip)
  • v0.35.6(Dec 1, 2022)

  • v0.35.5(Nov 29, 2022)

  • v0.35.6-1(Nov 28, 2022)

  • v0.35.6-0(Nov 28, 2022)

  • v0.35.5-2(Nov 22, 2022)

  • v0.35.5-1(Nov 21, 2022)

    What's Changed

    • Introduced more strict OpenAPI Validation by @acunniffe in https://github.com/opticdev/optic/pull/1410
    • Align AJV versions by @acunniffe in https://github.com/opticdev/optic/pull/1413
    • Export version for use in rules-runner by @nalanj in https://github.com/opticdev/optic/pull/1415
    • advanced OpenAPI validation should run on "after" specs only by @acunniffe in https://github.com/opticdev/optic/pull/1416
    • Match spectral AJV versions by @acunniffe in https://github.com/opticdev/optic/pull/1417

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.1...v0.35.5-1

    Source code(tar.gz)
    Source code(zip)
  • v0.35.5-0(Nov 21, 2022)

    What's Changed

    • Introduced more strict OpenAPI Validation by @acunniffe in https://github.com/opticdev/optic/pull/1410
    • Align AJV versions by @acunniffe in https://github.com/opticdev/optic/pull/1413
    • Export version for use in rules-runner by @nalanj in https://github.com/opticdev/optic/pull/1415

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.1...v0.35.5-0

    Source code(tar.gz)
    Source code(zip)
  • v0.35.4(Nov 22, 2022)

    What's Changed

    • Introduced more strict OpenAPI Validation by @acunniffe in https://github.com/opticdev/optic/pull/1410
    • Align AJV versions by @acunniffe in https://github.com/opticdev/optic/pull/1413
    • Export version for use in rules-runner by @nalanj in https://github.com/opticdev/optic/pull/1415
    • advanced OpenAPI validation should run on "after" specs only by @acunniffe in https://github.com/opticdev/optic/pull/1416
    • Match spectral AJV versions by @acunniffe in https://github.com/opticdev/optic/pull/1417

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.1...v0.35.4

    Source code(tar.gz)
    Source code(zip)
  • v0.35.3(Nov 20, 2022)

    What's Changed

    • Introduced more strict OpenAPI Validation by @acunniffe in https://github.com/opticdev/optic/pull/1410

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.1...v0.35.3

    Source code(tar.gz)
    Source code(zip)
  • v0.35.2-0(Nov 17, 2022)

  • v0.35.1(Nov 16, 2022)

    What's Changed

    • Remove optic init by @niclim in https://github.com/opticdev/optic/pull/1408

    Full Changelog: https://github.com/opticdev/optic/compare/v0.35.0...v0.35.1

    Source code(tar.gz)
    Source code(zip)
  • v0.35.0(Nov 15, 2022)

    What's Changed

    • Update Reference.md by @tscott32 in https://github.com/opticdev/optic/pull/1404
    • example requirements only run on specific content types by @acunniffe in https://github.com/opticdev/optic/pull/1405
    • Unhide ruleset commands by @niclim in https://github.com/opticdev/optic/pull/1407

    New Contributors

    • @tscott32 made their first contribution in https://github.com/opticdev/optic/pull/1404

    Full Changelog: https://github.com/opticdev/optic/compare/v0.34.6...v0.35.0

    Source code(tar.gz)
    Source code(zip)
  • v0.34.7(Nov 14, 2022)

    What's Changed

    • Update Reference.md by @tscott32 in https://github.com/opticdev/optic/pull/1404

    New Contributors

    • @tscott32 made their first contribution in https://github.com/opticdev/optic/pull/1404

    Full Changelog: https://github.com/opticdev/optic/compare/v0.34.6...v0.34.7

    Source code(tar.gz)
    Source code(zip)
Owner
Optic
APIs that Document and Test Themselves
Optic
Ts-api - This is a Typescript library facilitating usage of Localazy's API.

@localazy/ts-api This is a Typescript library facilitating usage of Localazy's API. To better understand this library, it is recommended to study the

Localazy 2 Jun 17, 2022
Modern Fetch API wrapper for simplicity.

FarFetch Class Modern Fetch API wrapper for simplicity. Install npm i @websitebeaver/far-fetch Then include it in the files you want to use it in lik

Website Beaver 53 Oct 28, 2022
REST API for muvi

muvi API REST API for muvi - a Chrome extension to download movies directly from a Google search. Run it locally npm i npm test How to contribute Help

null 6 Sep 19, 2021
Cuma mau bantu mereka yang kepengen bikin api sendiri

Source Codes - Zhirrr's API Api Features Check it yourself Here Cara Ganti ApiKey Gimana? Cara Mengganti Nya Cukup Gampang, Kalian Hanya Perlu Untuk M

zeeone 46 Jan 13, 2022
An API by Sujal Goel.

API ?? An API by Sujal Goel. Features ?? ?? Discord OAuth2 โœจ Simple and easy to use ?? Token based authentication for endpoints and much more! Contrib

Sujal Goel 4 Nov 7, 2021
API KBANK ( KBIZ )

Kbiz API Unofficial Kbiz's API. Examples เธเนˆเธญเธ™เนƒเธŠเน‰เธ‡เธฒเธ™ เธˆเธณเน€เธ›เน‡เธ™เธ•เน‰เธญเธ‡เธฅเธ‡ axios เธเนˆเธญเธ™ var kbizapi = require("./kbiz.class"); (async()=>{ var config = {

Think so. 9 Sep 7, 2022
A simple project to helping developer's to access open api's

OAS: OPEN APPLE STORE, has made this with the help of Apple Store item, this project which provide an additional choice to developer to interact with API.

Abhay Prajapati 8 Nov 19, 2022
Promise based HTTP client for the browser and node.js

axios Promise based HTTP client for the browser and node.js New axios docs website: click here Table of Contents Features Browser Support Installing E

axios 98k Jan 3, 2023
Job scheduler and rate limiter, supports Clustering

bottleneck Bottleneck is a lightweight and zero-dependency Task Scheduler and Rate Limiter for Node.js and the browser. Bottleneck is an easy solution

Simon Grondin 1.4k Jan 3, 2023
JavaScript OAuth 1.0a signature generator (RFC 5849) for node and the browser

OAuth 1.0a signature generator for node and the browser Compliant with RFC 5843 + Errata ID 2550 and community spec Installation Install with npm: npm

Marco Bettiolo 230 Dec 16, 2022
โš›๏ธ Hooks for fetching, caching and updating asynchronous data in React

Hooks for fetching, caching and updating asynchronous data in React Enjoy this library? Try the entire TanStack! React Table, React Form, React Charts

Tanner Linsley 32k Dec 31, 2022
A system for sharing tests between students. In RepoProvas anyone can look up old tests for their subjects and teachers or send old tests to help other students!

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Rui Neto 6 May 10, 2022
Command line utility to split OpenAPI documents into smaller, self contained, service oriented documents and prepare StackQL provider interfaces

openapi-doc-util Command line utility to split OpenAPI documents into smaller, self contained, service oriented documents and prepare StackQL provider

StackQL Studios 9 Sep 29, 2022
SAP Community Code Challenge: This repository contains an empty OpenUI5 application and end-to-end tests written with wdi5. Take part in the challenge and develop an app that passes the tests.

SAP Community Code Challenge - UI5 The change log describes notable changes in this package. Description This repository is the starting point for the

SAP Samples 8 Oct 24, 2022
Demo Selenium JavaScript E2E tests (end-to-end web browser automation tests)

Demo Selenium JavaScript E2E tests (end-to-end web browser automation tests)

Joel Parker Henderson 1 Oct 9, 2021
JSON Struct is a vocabulary that allows you to annotate and validate JSON documents.

JSON-Struct JSON Struct is a vocabulary that allows you to annotate and validate JSON documents. Examples Basic This is a simple example of vocabulary

Saman 3 May 8, 2022
Clojure inside your Obsidian documents!

Obsidian Wielder Clojure inside your Obsidian documents! This Obsidian plugin allows you to use the full power of Clojure directly inside of your docu

Victor Bjelkholm 53 Dec 18, 2022
Trims unnecessary whitespace from your Obsidian documents.

Trim Whitespace Trim Whitespace trims unnecessary blank characters from your Obsidian documents. This is a common feature in code editing software, an

Zack Lovatt 18 Dec 13, 2022