A command line interface for programmatically creating data silos on app.transcend.io

Related tags

Command Line cli
Overview

Table of Contents

Overview

A command line interface that allows you to define your Data Map in code and sync that configuration back to https://app.transcend.io.

Installation

This package is distributed through npm and github package registries and assumes an installation of npm and node.

If your codebase is typescript or javascript based, you can add this package as a dev dependency:

# install locally with yarn
yarn add -D @transcend-io/cli

# cli commands available within package
yarn tr-pull --auth=xxx
yarn tr-push --auth=xxx
yarn tr-scan --auth=xxx

or

# install locally with npm
npm i -D @transcend-io/cli

# cli commands available within package
tr-pull --auth=xxx
tr-push --auth=xxx
tr-scan --auth=xxx

alternatively, you can install the cli globally on your machine:

# install locally with npm
npm i -g @transcend-io/cli

# cli commands available everywhere on machine
tr-pull --auth=xxx
tr-push --auth=xxx
tr-scan --auth=xxx

Authentication

In order to use this cli, you will first need to generate an API key on the Transcend Admin Dashboard (https://app.transcend.io/infrastructure/api-keys).

The API key needs the following scopes:

  • Manage Data Map
  • Manage Request Identity Verification
  • Connect Data Silos
  • Manage Data Subject Request Settings
  • View API Keys

transcend.yml

Within your git repositories, you can define a file transcend.yml. This file allows you define part of your Data Map in code. Using the cli, you can sync that configuration back to the Transcend Admin Dashboard (https://app.transcend.io/privacy-requests/connected-services).

You can find various examples for your transcend.yml file in the examples/ folder. If you are looking for a starting point to copy and paste, simple.yml is a good place to start. This file is annotated with links and documentations that new members of your team can use if they come across the file.

The API for this YAML file can be found in ./src/codecs.ts under the variable named "TranscendInput". The shape of the yaml file will be type-checked every time a command is run.

The structure of the file looks something like the following:

# Manage at: https://app.transcend.io/infrastructure/api-keys
# See https://docs.transcend.io/docs/authentication
# Define API keys that may be shared across data silos
# in the data map. When creating new data silos through the yaml
# cli, it is possible to specify which API key should be associated
# with the newly created data silo.
api-keys:
  - title: Webhook Key
  - title: Analytics Key

# Manage at: https://app.transcend.io/privacy-requests/identifiers
# See https://docs.transcend.io/docs/identity-enrichment
# Define enricher or pre-flight check webhooks that will be executed
# prior to privacy request workflows. Some examples may include:
#   - identity enrichment: look up additional identifiers for that user.
#                          i.e. map an email address to a user ID
#   - fraud check: auto-cancel requests if the user is flagged for fraudulent behavior
#   - customer check: auto-cancel request for some custom business criteria
enrichers:
  - title: Basic Identity Enrichment
    description: Enrich an email address to the userId and phone number
    url: https://example.acme.com/transcend-enrichment-webhook
    input-identifier: email
    output-identifiers:
      - userId
      - phone
      - myUniqueIdentifier
  - title: Fraud Check
    description: Ensure the email address is not marked as fraudulent
    url: https://example.acme.com/transcend-fraud-check
    input-identifier: email
    output-identifiers:
      - email
    privacy-actions:
      - ERASURE

# Manage at: https://app.transcend.io/privacy-requests/connected-services
# See https://docs.transcend.io/docs/the-data-map#data-silos
# Define the data silos in your data map. A data silo can be a database,
# or a web service that may use a collection of different data stores under the hood.
data-silos:
  # Note: title is the only required top-level field for a data silo
  - title: Redshift Data Warehouse
    description: The mega-warehouse that contains a copy over all SQL backed databases
    integrationName: server
    url: https://example.acme.com/transcend-webhook
    api-key-title: Webhook Key
    data-subjects:
      - customer
      - employee
      - newsletter-subscriber
      - b2b-contact
    identity-keys:
      - email
      - userId
    deletion-dependencies:
      - Identity Service
    owners:
      - [email protected]
    datapoints:
      - title: Webhook Notification
        key: _global
        privacy-actions:
          - ACCESS
          - ERASURE
          - SALE_OPT_OUT
      - title: User Model
        description: The centralized user model user
        key: users
        privacy-actions:
          - ACCESS
        fields:
          - key: firstName
            title: First Name
            description: The first name of the user, inputted during onboarding
          - key: email
            title: Email
            description: The email address of the user

Usage

tr-pull

Generate's a transcend.yml by pulling the configuration from your connected services view (https://app.transcend.io/privacy-requests/connected-services).

This command can be helpful if you are looking to:

  • Copy parts of your Data Map from one Transcend instance into another instance
  • Generate a transcend.yml file as a starting point to maintain parts of your Data Map in code
# Writes out file to ./transcend.yml
tr-pull --auth=<api-key>

An alternative file destination can be specified:

# Writes out file to ./custom/location.yml
tr-pull --auth=<api-key> --file=./custom/location.yml

Or a specific data silo(s) can be pulled in:

tr-pull --auth=<api-key> --dataSiloIds=710fec3c-7bcc-4c9e-baff-bf39f9bec43e

Note: This command will overwrite the existing transcend.yml file that you have locally.

tr-push

Given a transcend.yml file, sync the contents up to your connected services view (https://app.transcend.io/privacy-requests/connected-services).

# Looks for file at ./transcend.yml
tr-push --auth=<api-key>

An alternative file destination can be specified:

# Looks for file at custom location ./custom/location.yml
tr-push --auth=<api-key> --file=./custom/location.yml

Some things to note about this sync process:

  1. Any field that is defined in your .yml file will be synced up to app.transcend.io. If any change was made on the admin dashboard, it will be overwritten.
  2. If you omit a field from the yaml file, this field will not be synced. This gives you the ability to define as much or as little configuration in your transcend.yml file as you would like, and let the remainder of fields be labeled through the Admin Dashboard
  3. If you define new data subjects, identifiers, data silos or datapoints that were not previously defined on the Admin Dashboard, the cli will create these new resources automatically.
  4. Currently, this cli does not handle deleting or renaming of resources. If you need to delete or rename a data silo, identifier, enricher or API key, you should make the change on the Admin Dashboard.
  5. The only resources that this cli will not auto generate are:
  • a) Data silo owners: If you assign an email address to a data silo, you must first make sure that user is invited into your Transcend instance (https://app.transcend.io/admin/users).
  • b) API keys: This cli will not create new API keys. You will need to first create the new API keys on the Admin Dashboard (https://app.transcend.io/infrastructure/api-keys). You can then list out the titles of the API keys that you generated in your transcend.yml file, after which the cli is capable of updating that API key to be able to respond to different data silos in your Data Map

CI Integration

Once you have a workflow for creating your transcend.yml file, you will want to integrate your tr-push command on your CI.

Below is an example of how to set this up using a Github action:

name: Transcend Data Map Syncing
# See https://app.transcend.io/privacy-requests/connected-services

on:
  push:
    branches:
      - 'main'

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '16'

      - name: Install Transcend cli
        run: npm i -D @transcend-io/cli

      # If you have a script that generates your transcend.yml file from
      # an ORM or infrastructure configuration, add that step here
      # Leave this step commented out if you want to manage your transcend.yml manually
      # - name: Generate transcend.yml
      #   run: ./scripts/generate_transcend_yml.py

      - name: Push Transcend config
        run: npx tr-push --auth=${{ secrets.TRANSCEND_API_KEY }}

Dynamic Variables

If you are using this cli to sync your Data Map between multiple Transcend instances, you may find the need to make minor modifications to your configurations between environments. The most notable difference would be the domain where your webhook URLs are hosted on.

The tr-push command takes in a parameter variables. This is a CSV of key:value pairs.

tr-push --auth=<api-key> --variables=domain:acme.com,stage:staging

This command could fill out multiple parameters in a yaml file like ./examples/multi-instance.yml, copied below:

api-keys:
  - title: Webhook Key
enrichers:
  - title: Basic Identity Enrichment
    description: Enrich an email address to the userId and phone number
    # The data silo webhook URL is the same in each environment,
    # except for the base domain in the webhook URL.
    url: https://example.<<parameters.domain>>/transcend-enrichment-webhook
    input-identifier: email
    output-identifiers:
      - userId
      - phone
      - myUniqueIdentifier
  - title: Fraud Check
    description: Ensure the email address is not marked as fraudulent
    url: https://example.<<parameters.domain>>/transcend-fraud-check
    input-identifier: email
    output-identifiers:
      - email
    privacy-actions:
      - ERASURE
data-silos:
  - title: Redshift Data Warehouse
    integrationName: server
    description: The mega-warehouse that contains a copy over all SQL backed databases - <<parameters.stage>>
    url: https://example.<<parameters.domain>>/transcend-webhook
    api-key-title: Webhook Key

tr-scan

Transcend can help scan dependency management files to help detect new data silos where you may be storing user personal data. Currently we support scanning for new data silos in package.json, but soon we will be adding more!

To get started, you'll need to add a data silo with "silo discovery" plugin enabled. You can do this in the Transcend admin-dashboard (or via this CLI tooling).

Then, you'll need to grab that dataSiloId and pass it to the CLI:

# Scan a javascript project (package.json files) to look for new data silos
yarn tr-scan --scanPath=./myJavascriptProject --auth=asd123 --dataSiloId=abcdefg

This call will look for all the package.json files that in the scan path ./myJavascriptProject, parse each of the dependencies into their individual package names, and send it to our Transcend backend for classification. These classifications can then be viewed here.

Comments
  • Require category and purpose name

    Require category and purpose name

    Description

    Requires that the name for the category and purpose be provided when associating them with a subdatapoint. Removes category and purpose label from datapoint.

    Related Issues

    • [none]

    Security Implications

    [none]

    System Availability

    [none]

    opened by LuGary 6
  • More helpers for request import

    More helpers for request import

    Related Issues

    • links https://transcend.height.app/T-13685

    Notes

    • Helper parseAttributesFromString parses a string to attribute key/value pairs
    • Helper fuzzyMatchColumns takes in a list of strings, and a search term, then orders the results so potential matches go to the top of the list.
    opened by michaelfarrell76 2
  • Adds cli to pull in data silos from app.transcend.io to .yaml file

    Adds cli to pull in data silos from app.transcend.io to .yaml file

    Related Issues

    • closes https://transcend.height.app/T-10781
    • closes https://transcend.height.app/T-10778
    • closes https://transcend.height.app/T-10779

    This PR does a few things:

    1. Adds a second script that makes it possible to pull out the existing data map from Transcend and spit it out into a transcend.yaml file. This is useful as a starting point for defining your yaml file, and in the future, gets us closer to a step where configurations can be merged.
    2. This package will now be published with the bin commands yarn tr-pull and yarn tr-push
    3. Added the beginning of a README. Adds a section that lists the scopes requires for the generated API key that runs this cli
    4. Adds the ability to pass dynamic variables into the .yaml configuration: tr-push --auth=<api-key> --variables=domain:acme.com,stage:staging
    Screen Shot 2022-01-25 at 10 16 39 PM
    opened by michaelfarrell76 2
  • Data silo syncing from yaml: objects, data subjects, owners, deletion dependencies, api keys

    Data silo syncing from yaml: objects, data subjects, owners, deletion dependencies, api keys

    Related Issues

    • links https://transcend.height.app/T-10530
    • closes https://transcend.height.app/T-10774
    • close https://transcend.height.app/T-10784

    With this change, data silos can now be synced from yaml to app.transcend.io. Check out the full example

    api-keys:
      - title: Webhook Key
    
    data-silos:
      - title: Analytics Service
        data-subjects:
          - customer
        deletion-dependencies:
          - Identity Service
        api-key-title: Webhook Key
        owners:
          - [email protected]
        objects:
          - title: Demo Request
            key: demos
            description: A demo request by someone that does not have a formal account
            purpose: SALE
            category: ID
            privacy-actions:
              - ACCESS
            fields:
              - key: companyName
                title: Company Name
                description: The first name of the company of the person requesting the demo
              - key: email
                title: Email
                description: The email address to use for coordinating the demo
          - title: Password
            key: passwords
            description: A password for a user
            purpose: ESSENTIAL
            category: ID
            fields:
              - key: hash
                title: Password Hash
                description: Hash of the password
              - key: email
                title: Email
                description: The email address to use for coordinating the demo
    
    Screen Shot 2022-01-23 at 1 59 49 PM
    opened by michaelfarrell76 2
  • GraphQL updates for manual enrichment

    GraphQL updates for manual enrichment

    Related Issues

    • links https://transcend.height.app/T-20761
    • picked from https://github.com/transcend-io/cli/pull/101/files

    Updated GraphQL commands for manual enrichment cli

    opened by michaelfarrell76 1
  • Adds a cli command to restart privacy requests

    Adds a cli command to restart privacy requests

    Related Issues

    • links https://transcend.height.app/T-8986

    This PR moves out our internal battle tested bulk-restart request script to be accessible through the cli.

    https://user-images.githubusercontent.com/10264973/205861047-753836ac-1996-457f-ab65-65b9f0f5d3a2.mov

    Bulk update a set of privacy requests based on a set of request filters.

    Authentication

    In order to use this cli, you will first need to generate an API key on the Transcend Admin Dashboard (https://app.transcend.io/infrastructure/api-keys).

    The API key needs the following scopes:

    • Submit New Data Subject Request
    • View the Request Compilation

    Arguments

    | Argument | Description | Type | Default | Required | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | --------------- | --------------------------------- | -------- | | auth | The Transcend API capable of submitting privacy requests. | string | N/A | true | | acions | The request action to restart. | RequestAction[] | N/A | true | | statuses | The request statuses to restart. | RequestStatus[] | N/A | true | | transcendUrl | URL of the Transcend backend. Use https://api.us.transcend.io for US hosting. | string - URL | https://api.transcend.io | false | | requestReceiptFolder | The path to the folder where receipts of each upload are stored. This allows for debugging of errors. | string | ./privacy-request-upload-receipts | false | | sombraAuth | The sombra internal key, use for additional authentication when self-hosting sombra. | string | N/A | false | | concurrency | The concurrency to use when uploading requests in parallel. | number | 20 | false | | requestIds | Specify the specific request IDs to restart | string[] | [] | false | | createdAt | Restart requests that were submitted before a specific date. | Date | Date.now() | false | | markSilent | Requests older than this date should be marked as silent mode | Date | Date.now() - 3 months | false | | sendEmailReceipt | Send email receipts to the restarted requests | boolean | false | false | | copyIdentifiers | Copy over all enriched identifiers from the initial request. Leave false to restart from scratch with initial identifiers only. | boolean | false | false | | skipWaitingPeriod | Skip queued state of request and go straight to compiling | boolean | false | false |

    Usage

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE
    

    For self-hosted sombras that use an internal key:

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --sombraAuth=$SOMBRA_INTERNAL_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE
    

    Specifying the backend URL, needed for US hosted backend infrastructure.

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --sombraAuth=$SOMBRA_INTERNAL_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE \
     --transcendUrl=https://api.us.transcend.io
    

    Increase the concurrency (defaults to 20)

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE --concurrency=100
    

    Restart specific requests by ID

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE --requestIds=c3ae78c9-2768-4666-991a-d2f729503337,342e4bd1-64ea-4af0-a4ad-704b5a07cfe4
    

    Restart requests that were submitted before a specific date.

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE --createdAt=2022-05-11T00:46
    

    Restart requests and place everything in silent mode submitted before a certain date

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE --markSilent=2022-12-05T00:46
    

    Send email receipts to the restarted requests

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE --sendEmailReceipt=true
    

    Copy over all enriched identifiers from the initial request. Leave false to restart from scratch with initial identifiers only

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE --copyIdentifiers=true
    

    Skip queued state of request and go straight to compiling

    yarn tr-request-restart --auth=$TRANSCEND_API_KEY --statuses=COMPILING,ENRICHING --actions=ACCESS,ERASURE --skipWaitingPeriod=true
    
    opened by michaelfarrell76 1
  • Adds new cli command tr-pull-cron-identifiers

    Adds new cli command tr-pull-cron-identifiers

    If you are using the cron job integration, you can run this command to pull the outstanding identifiers for the data silo to a CSV.

    Read more at https://docs.transcend.io/docs/integrations/cron-job-integration.

    https://user-images.githubusercontent.com/10264973/205483055-f4050645-bdf5-4ea2-8464-3183abd63074.mov

    Authentication

    In order to use this cli, you will first need to generate an API key on the Transcend Admin Dashboard (https://app.transcend.io/infrastructure/api-keys).

    The API key must be associated to the ID of the integration/data silo that is being operated on.

    Usage

    yarn tr-pull-cron-identifiers --auth=$TRANSCEND_API_KEY -dataSiloId=70810f2e-cf90-43f6-9776-901a5950599f \
       --requestType=ERASURE
    

    Pull to a specific file location

    yarn tr-pull-cron-identifiers --auth=$TRANSCEND_API_KEY -dataSiloId=70810f2e-cf90-43f6-9776-901a5950599f --requestType=ERASURE \
       --file=/Users/michaelfarrell/Desktop/test.csv
    

    For self-hosted sombras that use an internal key:

    yarn tr-pull-cron-identifiers --auth=$TRANSCEND_API_KEY -dataSiloId=70810f2e-cf90-43f6-9776-901a5950599f \
       --requestType=ERASURE --sombraAuth=$SOMBRA_INTERNAL_KEY
    

    Specifying the backend URL, needed for US hosted backend infrastructure.

    yarn tr-pull-cron-identifiers --auth=$TRANSCEND_API_KEY --sombraAuth=<sombra-internal-key> --file=/Users/michaelfarrell/Desktop/test.csv \
     --transcendApiUrl=https://api.us.transcend.io
    

    Specifying the page limit, defaults to 100.

    yarn tr-pull-cron-identifiers --auth=$TRANSCEND_API_KEY --sombraAuth=<sombra-internal-key> --file=/Users/michaelfarrell/Desktop/test.csv \
     --pageLimit=300
    
    opened by michaelfarrell76 1
  • Map attributes and identifiers

    Map attributes and identifiers

    Related Issues

    • picked from https://github.com/transcend-io/cli/pull/80
    • links https://transcend.height.app/T-13685

    Updates:

    • Adds a helper function mapColumnsToAttributes that uses inquirer to map request attributes to CSV columns.
    • Adds a helper function mapColumnsToIdentifiers that uses inquirer to map identifiers to CSV columns.
    opened by michaelfarrell76 1
  • Adds request helpers to submit a privacy request

    Adds request helpers to submit a privacy request

    Related Issues

    • picked from https://github.com/transcend-io/cli/pull/80
    • links https://transcend.height.app/T-13685

    New updates:

    • New helper function mapCsvRowsToRequestInput maps raw CSV rows to the privacy request input shape.
    • New helper function submitPrivacyRequest makes a call to sombra to submit the request.
    import { createSombraGotInstance, submitPrivacyRequest } from '@transcend-io/cli';
    
     const sombra = await createSombraGotInstance(
        'https://api.transcend.io',
        TRANSCEND_API_KEY,
        SOMBRA_API_KEY,
      );
      
    const request = await submitPrivacyRequest(sombra, {
      email: '[email protected]',
      emailIsVerified: true,
      isSilent: true,
      coreIdentifier: '12345',
      requestType: 'ERASURE',
      subjectType: 'Customer',
      // locale: 'en',
      // status: 'COMPLETED',
      // createdAt: new Date().toISOString(),
      // dataSiloId: ['20f976de-453d-4fd2-b645-8cc3540fca6b'],
    },  {
      details: `Uploaded by Transcend cli`,
      isTest: true,
      additionalAttributes: [{ key: 'test', values: ['dog', 'cat'] }],
    });
    
    opened by michaelfarrell76 1
  • Adds remaining inquirer helpers user in bulk DSR upload

    Adds remaining inquirer helpers user in bulk DSR upload

    Related Issues

    • links https://transcend.height.app/T-13685
    • see videos in https://github.com/transcend-io/cli/pull/80

    Changes:

    • New helper function mapRequestEnumValues uses inquirer to map the enum values found in a CSV to the enum values used by Transcend.
    • New helper mapEnumValues uses inquirer to create a mapping between two different enum sets.
    • New helper mapCsvColumnsToApi uses inquirer to map the columns in a CSV to the input values in Transcend's API.
    • New helper filterRows uses inquirer to filter down a CSV by selecting the column to filter on, and the values in the row to filter to.
    opened by michaelfarrell76 1
  • Adds helper functions for parsing csvs, grabbing unique values

    Adds helper functions for parsing csvs, grabbing unique values

    Related Issues

    • links https://transcend.height.app/T-13685

    Notes

    • Helper getUniqueValuesForColumn pulls unique values from a CSV
    • Helper readCsv parses a CSV and validates its shape using an io-ts codec
    • Helper splitToCsv splits a CSV string into a list
    • Moves around tests to be localized to folder.
    opened by michaelfarrell76 1
  • Improve the ability to sync state that has been removed

    Improve the ability to sync state that has been removed

    The current iteration of this cli focused on update or create operations. If a data silo is renamed or removed, or the objects of a data silo are removed, the resources will continue to exist on app.transcend.io.

    opened by michaelfarrell76 0
Owner
Transcend
The privacy platform that makes it easy to encode privacy across your stack, from GDPR to Facebook’s LDU protocol.
Transcend
A project for FAST command line interface tools.

FAST CLI Project This is the FAST CLI project, containing the FAST CLI package and other related CLI packages for FAST project creation and management

Microsoft 24 Dec 5, 2022
Autify Command Line Interface (CLI)

Autify Command Line Interface (CLI) Autify CLI can help your integration with Autify! Autify Command Line Interface (CLI) Usage Commands Usage Note: n

Autify 36 Jan 2, 2023
The command-line interface for versum

@versumstudios/cli The command-line interface for versum. versum-cli Usage Contributing How to use Export Templates Usage To install the latest versio

Versum Studios 8 Nov 3, 2022
Control the Plash app from the command-line

plash-cli Control the Plash app from the command-line Install $ npm install --global plash Requires Node.js 14 or later. Requires Plash 2.3.0 or late

Sindre Sorhus 33 Dec 30, 2022
a simple zero-configuration command-line http server

http-server: a command-line http server http-server is a simple, zero-configuration command-line http server. It is powerful enough for production usa

http ... PARTY! 12.4k Jan 4, 2023
Control the macOS dark mode from the command-line

dark-mode Control the macOS dark mode from the command-line Requires macOS 10.10 or later. macOS 10.13 or earlier needs to download the Swift runtime

Sindre Sorhus 630 Dec 30, 2022
node.js command-line interfaces made easy

Commander.js The complete solution for node.js command-line interfaces. Read this in other languages: English | 简体中文 Commander.js Installation Declari

TJ Holowaychuk 24k Jan 8, 2023
🌈 React for interactive command-line apps

React for CLIs. Build and test your CLI output using components. Ink provides the same component-based UI building experience that React offers in the

Vadim Demedes 19.7k Jan 9, 2023
Pretty unicode tables for the command line

cli-table3 This utility allows you to render unicode-aided tables on the command line from your node.js scripts. cli-table3 is based on (and api compa

null 418 Dec 28, 2022
A C++ based command-line (CLI) program that lets you manage your tasks

COMMAND LINE INTERFACE TODO APP a command-line (CLI) program that lets you manage your tasks. The specification for this project is written down as te

Rahul Prabhakar 1 Dec 25, 2021
Close chrome tabs from command-line (macOS only)

Close-tab Read all tabs from an activated window of the chrome, open with vi prompt, you can close tabs by deleting lines. Istallation npm install -g

Karl Saehun Chung 8 Jun 18, 2022
1History is a command line tool to backup your histories of different browsers into one place

1History All your history in one place. 1History is a command line tool to backup your histories of different browsers into one place. Features Suppor

null 340 Dec 31, 2022
Wordle and Termooo style classic word guessing game for the command line. One new word per day!

Wordle and Termooo style classic word guessing game for the command line. One new word per day!

Anderson Silva 3 Nov 27, 2022
Generate a Node.js command line tool from an OpenAPI definition

OpenAPI Commander Generate a Node.js command line tool from an OpenAPI definition using the commander library. Example usage Usage: Subcommands groupe

Barry Coughlan 12 Jan 3, 2023
Windows command line tool to block outbound connections for files within a directory.

fwg A Windows command line tool to block outbound connections for files within a directory. fwg utilizes the power of PowerShell and Windows Network S

raymond wang 3 Jul 19, 2022
LinkFree CLI is a command line tool that helps you to create your LinkFree profile through CLI.

LinkFree CLI LinkFree CLI is a command line tool that helps you to create your LinkFree profile through CLI. Demo Using the CLI (Commands) Note First

Pradumna Saraf 32 Dec 26, 2022
💻 macOS interface with ReactJS

macOS a clone of the macOS interface, made with ReactJS. this open source project was made for studies, and aims to replicate the macOS interface. Be

Marcos Andre 16 Nov 10, 2022
Run a command when a certain file exists, and/or watch files to rerun on changes

Run a command when a certain file exists, and/or watch files to rerun on changes

EGOIST 45 Sep 23, 2022
CLI Command for Two Factor Authentication.🚀

CLI Command for Two Factor Authentication.??

Yuga Sun 7 Nov 5, 2022