Skip to content

LoLFactor/sms-splitter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

npm type definitions npm (scoped) GitHub Build status

LOLTECH SMS Splitter

A Typescript library for splitting a message string into parts according to GSM specifications.

Installation

This package is meant for usage in Node.js. Should work in the browser when using something like webpack or rollup.

yarn add @loltech/sms-splitter

OR

npm install @loltech/sms-splitter

Usage

import { isMultipart, split } from '@loltech/sms-splitter';

Is a message multipart?

function isMultipart(message: string): boolean;

Given a message string, determines whether that string needs to be split up according to GSM spec. Return the result as a boolean.

Split the message

function split(message: string): ISplitResult | null;

Given a message string, will determine its required encoding and split it into parts according to GSM spec.

Return value

If message is anything other than a string, it returns null. If message is a string, it returns an object of the form:

interface ISplitResult {
  encoding: ENCODING;
  extended?: boolean;
  parts: string[];
}
  • encoding - Can be GSM-7, UCS-2, UTF-16. UCS-2 and UTF-16 are very similar, but UTF-16 can also encode UTF-32 characters. UCS-2 basically means the string does not use characters outside the BMP.

  • extended - Only present when encoding is GSM-7. Signals the string contains GSM-7 extended characters.

  • parts - An array of strings making up the resultant SMS parts.

Note on behaviour

When splitting SMS messages for transmission, it's best practice to not split up characters. This happens both in GSM-7 (where extended characters are actually made up of two characters) and UTF-16 (where surrogate pairs are employed). This library DOES NOT split characters. While this is technically correct, it's not the whole story. As can be seen in this particular patch comment, some carries cannot handle messages split within character boundaries. Unfortunately the only possible solution I found will be to use Intl.breakItreator, but that feature hasn't been standardized or implemented yet.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published