0.21.2 • Published 1 year ago

sajisip v0.21.2

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

SIP.js Logo

Build Status npm version

SIP Library for JavaScript

  • Create real-time peer-to-peer audio and video sessions via WebRTC
  • Utilize SIP in your web application via SIP over WebSocket
  • Send instant messages and view presence
  • Support early media, hold and transfers
  • Send DTMF RFC 2833 or SIP INFO
  • Share your screen or desktop
  • Written in TypeScript
  • Runs in all major web browsers
  • Compatible with standards compliant servers including Asterisk and FreeSWITCH

Demo

Want see it in action? The project website, sipjs.com, has a live demo.

Looking for code to get started with? This repository includes demonstrations which run in a web browser.

Usage

To place a SIP call, either utilize the SimpleUser class...

import { Web } from "sip.js";

// Helper function to get an HTML audio element
function getAudioElement(id: string): HTMLAudioElement {
  const el = document.getElementById(id);
  if (!(el instanceof HTMLAudioElement)) {
    throw new Error(`Element "${id}" not found or not an audio element.`);
  }
  return el;
}

// Options for SimpleUser
const options: Web.SimpleUserOptions = {
  aor: "sip:alice@example.com", // caller
  media: {
    constraints: { audio: true, video: false }, // audio only call
    remote: { audio: getAudioElement("remoteAudio") } // play remote audio
  }
};

// WebSocket server to connect with
const server = "wss://sip.example.com";

// Construct a SimpleUser instance
const simpleUser = new Web.SimpleUser(server, options);

// Connect to server and place call
simpleUser.connect()
  .then(() => simpleUser.call("sip:bob@example.com"))
  .catch((error: Error) => {
    // Call failed
  });

Or, alternatively, use the full API framework...

import { Inviter, SessionState, UserAgent } from "sip.js";

// Create user agent instance (caller)
const userAgent = new UserAgent({
  uri: UserAgent.makeURI("sip:alice@example.com"),
  transportOptions: {
    server: "wss://sip.example.com"
  },
});

// Connect the user agent
userAgent.start().then(() => {

  // Set target destination (callee)
  const target = UserAgent.makeURI("sip:bob@example.com");
  if (!target) {
    throw new Error("Failed to create target URI.");
  }

  // Create a user agent client to establish a session
  const inviter = new Inviter(userAgent, target, {
    sessionDescriptionHandlerOptions: {
      constraints: { audio: true, video: false }
    }
  });

  // Handle outgoing session state changes
  inviter.stateChange.addListener((newState) => {
    switch (newState) {
      case SessionState.Establishing:
        // Session is establishing
        break;
      case SessionState.Established:
        // Session has been established
        break;
      case SessionState.Terminated:
        // Session has terminated
        break;
      default:
        break;
    }
  });

  // Send initial INVITE request
  inviter.invite()
    .then(() => {
      // INVITE sent
    })
    .catch((error: Error) => {
      // INVITE did not send
    });

});

Installation

Node module

npm install sip.js

UMD bundle

Building, Development and Testing

Clone this repository, then...

npm install
npm run build-and-test

For more info please see the Documentation.

Support

  • For migration guides and API reference please see the Documentation.
  • For bug reports and feature requests please open a GitHub Issue.
  • For questions or usage problems please use the Google Group.
  • For more information see the project website at SIPjs.com.
acceptsacornacorn-import-assertionsacorn-jsxajvajv-keywordsansi-regexansi-stylesanymatchargparsearray-unionbalanced-matchbase64idbinary-extensionsbody-parserbrace-expansionbracesbrowserslistbuffer-frombytescall-bindcallsitescaniuse-litechalkchokidarchrome-trace-eventcliuiclone-deepcolor-convertcolor-namecolorettecolorscommanderconcat-mapconnectcontent-typecookiecorscross-spawncustom-eventdate-formatdebugdeep-isdepddestroydidir-globdoctrinedom-serializeee-firstelectron-to-chromiumemoji-regexencodeurlengine.ioengine.io-parserenhanced-resolveentenvinfoes-module-lexerescaladeescape-htmlescape-string-regexpeslint-scopeeslint-utilseslint-visitor-keysespreeesprimaesqueryesrecurseestraverseesutilseventemitter3eventsextendfast-deep-equalfast-difffast-globfast-json-stable-stringifyfast-levenshteinfastest-levenshteinfastqfile-entry-cachefill-rangefinalhandlerfind-upflat-cacheflattedfollow-redirectsfs-extrafs.realpathfseventsfunction-bindget-caller-fileget-intrinsicglobglob-parentglob-to-regexpglobalsglobbygraceful-fsgrapheme-splitterhashas-flaghas-symbolshttp-errorshttp-proxyiconv-liteignoreimport-freshimport-lazyimport-localimurmurhashinflightinheritsinterpretis-binary-pathis-core-moduleis-extglobis-fullwidth-code-pointis-globis-numberis-plain-objectisbinaryfileisexeisobjectjest-workerjjujs-sdsljs-yamljson-parse-even-better-errorsjson-schema-traversejson-stable-stringify-without-jsonifyjsonfilekind-oflevnloader-runnerlocate-pathlodashlodash.getlodash.isequallodash.mergelog-symbolslog4jslru-cachemedia-typermerge-streammerge2micromatchmimemime-dbmime-typesminimatchminimistmkdirpmsnatural-comparenegotiatorneo-asyncnode-releasesnormalize-pathobject-assignobject-inspecton-finishedonceoptionatorp-limitp-locatep-tryparent-moduleparseurlpath-existspath-is-absolutepath-keypath-parsepath-typepicocolorspicomatchpkg-dirprelude-lsprettier-linter-helperspunycodeqjobsqsqueue-microtaskrandombytesrange-parserraw-bodyreaddirprechoirregexpprequire-directoryrequires-portresolveresolve-cwdresolve-fromreusifyrfdcrimrafrun-parallelsafe-buffersafer-bufferschema-utilssemverserialize-javascriptsetprototypeofshallow-cloneshebang-commandshebang-regexside-channelslashsocket.iosocket.io-adaptersocket.io-parsersource-mapsource-map-supportsprintf-jsstatusesstreamrollerstring-argvstring-widthstrip-ansistrip-json-commentssupports-colortapableterserterser-webpack-plugintext-tabletimsorttmpto-regex-rangetoidentifiertslibtsutilstype-checktype-festtype-isua-parser-jsuniversalifyunpipeupdate-browserslist-dburi-jsutils-mergevalidatorvaryvoid-elementswatchpackwebpack-mergewebpack-sourceswhichwildcardword-wrapwrap-ansiwrappywsy18nyallistyargsyargs-parseryocto-queuez-schema
0.21.2

1 year ago