Product
Introducing License Enforcement in Socket
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
contactsnag
Advanced tools
Bugsnag utilities for Contactlab's applications.
This package embeds 2 main functionalities:
ContactSnag
in your code gives you access to a "lazy" and "side-effect aware" Bugsnag client that exposes the same APIs of the original SDK.webpack-bugsnag-plugins
in order to upload sourcemaps and report builds using Webpack (take a look here for available configuration).It is fully written in TypeScript and extensively uses fp-ts
library.
fp-ts
>= v2.8.0io-ts
>= v2.2.10Get the latest version from NPM registry:
$ npm install contactsnag fp-ts io-ts --save
# -- or --
$ yarn add contactsnag fp-ts io-ts
The package exposes a single ContactSnag
function.
This receives a configuration object and returns a ContactSnag client:
declare function ContactSnag(conf: Config): Client;
Config
is a kind of subset of Bugsnag's configuration options with some differences:
appVersion
, enabledReleaseStages
, and releaseStage
are required properties;endpoints
and enabledBreadcrumbTypes
cannot be set/overwritten.Client
is a custom data structure which embeds some Bugsnag.Client
features, guarantees a lazy initialization and that an error is raised if a wrong configuration is passed.
interface Client {
readonly client: () => ActualClient;
readonly start: () => void;
readonly notify: (
error: Bugsnag.NotifiableError,
onError?: Bugsnag.OnErrorCallback
) => IOEither<Error, void>;
readonly setUser: (user: Bugsnag.User) => IOEither<Error, void>;
}
The ActualClient
type encodes the three different states of the ContactSnag client:
type ActualClient = ConfigError | Still | Started;
ConfigError
represents a not valid configuration provided to the client's creation function:
interface ConfigError {
readonly type: 'ConfigError';
readonly error: Error;
}
Still
represents a not started client:
interface Still {
readonly type: 'Still';
readonly config: Config;
}
Started
represents a started client:
interface Started {
readonly type: 'Started';
readonly bugsnag: Bugsnag.Client;
}
Each time a Client
's method is called, it will internally check (a.k.a. fold) the current state and execute an operation.
client()
Returns the current ActualClient
.
start()
Starts the client if it's in the Still
state, otherwise it does nothing.
notify()
Returns a void
effectful operation that can fail (IOEither
).
When the IO
is ran:
Started
state, it will notify an error to Bugsnag or will fail if the Bugsnag client raises an exception;ConfigError
state, it will return a Left<Error>
("configuration error");Still
state, it will return a Left<Error>
("not yet started error").Notify Bugsnag with a custom error message:
import {ContactSnag} from 'contactsnag';
const client = ContactSnag({
apiKey: 'TEST-API-KEY',
appVersion: '1.2.3',
enabledReleaseStages: ['production'],
releaseStage: 'production'
});
// Set notification on button click
document.getElementById('btn').addEventListener('click', () =>
client.notify(new Error('Custom error message'), event => {
event.addMetadata('custom', 'errname', 'My error name');
})()
);
// Start Bugsnag
client.start();
setUser()
Returns a void
effectful operation that can fail (IOEither
).
When the IO
is ran:
Started
state, it will set the provided user on the Bugsnag client;ConfigError
state, it will return a Left<Error>
("configuration error");Still
state, it will return a Left<Error>
("not yet started error").Set a user for the entire session:
import {ContactSnag} from 'contactsnag';
const client = ContactSnag({
apiKey: 'TEST-API-KEY',
appVersion: '1.2.3',
enabledReleaseStages: ['production'],
releaseStage: 'production'
});
// Start Bugsnag
client.start();
// Set user after 1 second
setTimeout(() => {
client.setUser({id: '1'})();
}, 1000);
Opening issues is always welcome.
Then, fork the repository or create a new branch, write your code and send a pull request.
This project uses Prettier (automatically applied as pre-commit hook), ESLint (with TypeScript integration) and Jest.
Tests are run with:
$ npm test
Breaking:
Dependencies:
FAQs
Bugsnag utilities for Contactlab's applications
The npm package contactsnag receives a total of 2 weekly downloads. As such, contactsnag popularity was classified as not popular.
We found that contactsnag demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 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.
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.
Product
We're excited to introduce Socket Optimize, a powerful CLI command to secure open source dependencies with tested, optimized package overrides.