Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
twilio-run
Advanced tools
CLI tool to locally develop and deploy to the Twilio Runtime. Part of the Serverless Toolkit
This project is part of the Serverless Toolkit. For a more extended documentation, check out the Twilio Docs.
You can install the CLI tool via npm
or another package manager. Ideally install it as a dev dependency instead of global:
# Install it as a dev dependency
npm install twilio-run --save-dev
# Afterwards you can use by using:
node_modules/.bin/twilio-run
npx twilio-run
# Or inside your package.json scripts section as "twilio-run"
# Create a valid project, for example:
npx create-twilio-function my-project
# Navigate into project
cd my-project
# Start local development server
twilio-run start
# Deploy to Twilio
twilio-run deploy
The CLI exposes a variety of commands. The best way to find out about the flags and commands available is to run twilio-run --help
or twilio-run [command] --help
twilio-run start [dir]
twilio-run dev
, twilio-run
Starts a local development server for testing and debugging of your environment. By default only variables in the .env
file will be available via process.env
or through the context
argument inside Twilio Functions.
# Serves all functions in current functions sub directory
twilio-run
# Serves all functions in demo/functions
twilio-run demo
# Serves functions on port 9000
PORT=9000 twilio-run
# Serves functions on port 4200
twilio-run --port=4200
# Starts up the inspector mode for the node process
twilio-run --inspect
# Exposes the Twilio functions via ngrok to share them
twilio-run --ngrok
twilio-run deploy
Deploys your project to Twilio. It will read dependencies automatically from your package.json
's dependencies
field and install them. It will also upload and set the variables that are specified in your .env
file. You can point it against a different .env
file via command-line flags.
# Deploys all functions and assets in the current working directory
twilio-run deploy
# Creates an environment with the domain suffix "prod"
twilio-run deploy --environment=prod
twilio-run list-templates
Lists the available templates that you can use to generate new functions and/or assets inside your current project with the twilio-run new
command below.
# List available templates
twilio-run list-templates
twilio-run new [namespace]
Creates a new set of functions and/or assets inside your current project based on a template.
# Create a new function using the blank template
# in a subfolder (namespace) demo
twilio-run new demo --template=blank
twilio-run list [types]
Lists a set of available resources for different types related to your Account. Available resources that can be listed:
# Lists all existing services/projects associated with your Twilio Account
twilio-run list services
# Lists all existing functions & assets associated with the `dev` environment of this service/project
twilio-run ls functions,assets --environment=dev --service-name=demo
# Outputs all environments for a specific service with extended output for better parsing
twilio-run ls environments --service-sid=ZSxxxxx --extended-output
# Only lists the SIDs and dates of last update for assets, variables and functions
twilio-run ls assets,variables,functions --properties=sid,date_updated
twilio-run activate
twilio-run promote
Promotes an existing deployment to a new environment. It can also create a new environment if it doesn't exist.
# Promotes the same build that is on the "dev" environment to the "prod" environment
twilio-run activate --environment=prod --source-environment=dev
# Duplicates an existing build to a new environment called `demo`
twilio-run activate --environment=demo --create-environment --build-sid=ZB1234xxxxxxxxxx
twilio-run logs
Print logs from your Twilio Serverless project
# Gets the latest logs for the current project in the dev environment
twilio-run logs
# Continuously streams the latest logs for the current project in the dev environment
twilio-run logs --tail
# Gets the latest logs for the function sid in the production environment
twilio-run logs --function-sid ZFXXX --environment production
The module also exposes two functions that you can use outside of the CLI tool to spin up local development.
If you want to interact with the Runtime API instead, check out the @twilio-labs/serverless-api
package.
runDevServer(port: number, baseDir: string): Promise<Express.Application>
This allows you to trigger running an express server that will expose all functions and assets. Example:
const { runDevServer } = require('twilio-run');
runDevServer(9000)
.then(app => {
console.log(`Server is running on port ${app.get('port')})`);
})
.catch(err => {
console.error('Something failed');
});
handleToExpressRoute(handler: TwilioHandlerFunction): Express.RequestHandler
You can take the handler
function of a Twilio Function file and expose it in an existing Express server. Example:
const express = require('express');
const bodyParser = require('body-parser');
const { handlerToExpressRoute } = require('twilio-run');
const { handler } = require('./path/to/function.js');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.all(handlerToExpressRoute(handler));
app.listen(3000, () => console.log('Server running on port 3000'));
If your local Twilio Function throws an unhandled error or returns an Error
instance via the callback
method, we will return an HTTP status code of 500
and return the error object as JSON.
By default we will clean up the stack trace for you to remove internal code of the dev server and add it as at [Twilio Dev Server internals]
into the stack trace.
An example would look like this:
Error: What?
at format (/Users/dkundel/dev/twilio-run/examples/basic/functions/hello.js:5:9)
at exports.handler (/Users/dkundel/dev/twilio-run/examples/basic/functions/hello.js:13:3)
at [Twilio Dev Server internals]
If you want to have the full un-modified stack trace instead, set the following environment variable, either in your Twilio Function or via .env
:
TWILIO_SERVERLESS_FULL_ERRORS=true
This will result into a stack trace like this:
Error: What?
at format (/Users/dkundel/dev/twilio-run/examples/basic/functions/hello.js:5:9)
at exports.handler (/Users/dkundel/dev/twilio-run/examples/basic/functions/hello.js:13:3)
at twilioFunctionHandler (/Users/dkundel/dev/twilio-run/dist/runtime/route.js:125:13)
at app.all (/Users/dkundel/dev/twilio-run/dist/runtime/server.js:122:82)
at Layer.handle [as handle_request] (/Users/dkundel/dev/twilio-run/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/dkundel/dev/twilio-run/node_modules/express/lib/router/route.js:137:13)
at next (/Users/dkundel/dev/twilio-run/node_modules/express/lib/router/route.js:131:14)
at next (/Users/dkundel/dev/twilio-run/node_modules/express/lib/router/route.js:131:14)
at next (/Users/dkundel/dev/twilio-run/node_modules/express/lib/router/route.js:131:14)
at next (/Users/dkundel/dev/twilio-run/node_modules/express/lib/router/route.js:131:14)
In general you'll want to use the cleaned-up stack trace since the internals might change throughout time.
This project welcomes contributions from the community. Please see the CONTRIBUTING.md
file for more details.
Please be aware that this project has a Code of Conduct. The tldr; is to just be excellent to each other ❤️
Thanks goes to these wonderful people (emoji key):
Dominik Kundel 💻 | dbbidclips 💻 🐛 | Shelby Hagman 🐛 💻 | JavaScript Joe 🐛 | Stefan Judis 🐛 💻 | Phil Nash 🐛 💻 👀 |
---|
This project follows the all-contributors specification. Contributions of any kind welcome!
FAQs
CLI tool to run Twilio Functions locally for development
The npm package twilio-run receives a total of 2,166 weekly downloads. As such, twilio-run popularity was classified as popular.
We found that twilio-run demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.