npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sms-href

v1.1.3

Published

SMS Href creates SMS URL strings, updates existing SMS URL strings, or updates all href attributes containing SMS URLs on a web page or in a defined DOM context.

Downloads

8

Readme








Installation

| Manager | Command | |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------| | | npm install sms-href | | | yarn add sms-href | | | pnpm add sms-href |

DEV runners

| runner | output | description | |----------------------|-----------------------------------------|-------------------------------------------| | npm run build | ./lib/**/* | Transpile from Typescript to Javascript | | npm run build:pack | ./sms-href-{package-json-version}.tgz | Create NPM package file (*.tgz) | | npm run demo | ./demo/dist/demo.js | Build demo and measure minimal build size |

Basic usage (without catching outputs)

import {SmsHref} from "sms-href";

const smsHref: SmsHref = new SmsHref();

// As promise
smsHref.fixAll().catch();

// OR sync
try {
    await smsHref.fixAll();
} catch (e) {
}

Tested platforms

| Android | iOS | iPadOS | |------------------|-----------|-----------| | 10 (Quince Tart) | 6 | 6 | | 12 (Snow Cone) | 8 | 8 | | 13 (Tiramisu) | 12 | 12 | | | 15 | 15 | | | 16 | 16 | | | 17 (beta) | 17 (beta) |


API

Instance

Syntax:

new SmsHref( [ options: Options ] )

Instance of SmsHref

Example:

const smsHref: SmsHref = new SmsHref();

Constructor parameters:

| | type | default | description | |------------------------------------|-----------------------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [options] | Options | | Configuration of custom separator and allowed devices - Show detail | | [options.allow] | Devices | | List of enable/disable devices - Show detail | | [options.allow.mobile = true ] | boolean | true | Enable/disable href update for mobile devices | | [options.allow.tablet = true ] | boolean | true | Enable/disable href update for tablet devices | | [options.allow.facebook = true ] | boolean | true | Enable/disable href update for Facebook app web view | | [options.separator = null ] | string null | null | User defined SMS body (body=) separator. Read more NOTE: Internal platform detection and allowed devices list will be disabled. | | [options.encode = true ] | boolean | true | Enable/disable message text encoding globally ( e.g., encodeURIComponent )NOTE: Methods fixValue() and create() have their own parameter for enable/disable encoding and this global parameter can be overridden. |

Example (disable tablets and facebook app web view):

const smsHref: SmsHref = new SmsHref({
    allow: {
        facebook: false,
        tablet: false
    }
});

Custom separator definition

If you want to define your own separator, you can use existed separator constants

| constant name | value | type | description | |------------------------------|-------|----------|----------------------------------------------------------------------------------------| | ANDROID_SEPARATOR | ? | string | Body separator ?body= for Android platform | | IOS_7_AND_LOWER_SEPARATOR | ; | string | Body separator ;body= for IOS <= 7 platform | | IOS_8_AND_HIGHER_SEPARATOR | & | string | Body separator &body= for IOS >= 8 platform | | MIN_IOS_VERSION | 7 | number | Value is 7 - because iOS7 allegedly doesn't support sms: href links. |

NOTE: IOS 7 allegedly does not support sms: protocol.

Example:

import {
    SmsHref,
    MIN_IOS_VERSION,
    ANDROID_SEPARATOR,
    IOS_7_AND_LOWER_SEPARATOR,
    IOS_8_AND_HIGHER_SEPARATOR
} from "sms-href";

// Custom
function customSeparatorMechanism(): string | null {
    const platform: CustomPlatformDetection = new CustomPlatformDetection();

    if (platform.name === 'Android')
        return ANDROID_SEPARATOR;

    if (platform.name === 'IOS') {
        if (platform.version.major <= MIN_IOS_VERSION)
            return IOS_7_AND_LOWER_SEPARATOR
        return IOS_8_AND_HIGHER_SEPARATOR;
    }

    return null;
}

// Instance
const smsHref: SmsHref = new SmsHref({
    separator: customSeparatorMechanism()
});

fixAll

Syntax:

async fixAll( [ context: Element | HTMLElement | Document ] ) : Promise<ResultCode>

Finds and update all anchor links with sms: protocol value by current platform in set DOM context.

| | type | default | description | |-------------------------|------------------------------------|------------|------------------------------------| | [context = document ] | Element HTMLElement Document | document | Defines parent DOM node for search | | returns | Promise<ResultCode> | | | | throws | Promise.catch<ResultCode> | | |

Example:

await smsHref.fixAll();

Example with custom defined context:

const context: HTMLElement = document.querySelector('.context-element');

await smsHref.fixAll(context);

Example with using resultCode in Promise<ResultCode>.

import {
    SmsHref,
    ResultCode,
    CODE_SUCCESS,
    CODE_NOT_FOUND,
    CODE_UNSUPPORTED_OS
} from "sms-href";

const smsHref: SmsHref = new SmsHref();

smsHref.fixAll()
    .then((resultCode: ResultCode): void => {
        if (resultCode === CODE_SUCCESS)
            console.log(`All sms: href values in anchors was updated`);
    })
    .catch((resultCode: any): void => {
        if (resultCode === CODE_NOT_FOUND)
            console.log(`'Anchors with sms: href value doesn't exist'`);
        else if (resultCode === CODE_UNSUPPORTED_OS)
            console.log(`Current platform doesn't support sms: href protocol`);
    });

ResultCode constants list:

| constant name | value | type | status | description | |-----------------------|-------|----------|---------------------|-----------------------------------------------------| | CODE_SUCCESS | 200 | number | Ok | All sms: href values in anchors was updated | | CODE_NOT_FOUND | 404 | number | Not found | Anchors with sms: href value doesn't exist | | CODE_UNSUPPORTED_OS | 501 | number | Not Implemented | Current platform doesn't support sms: href protocol |


fixValue

Syntax:

async fixValue( smsValue: string [, encode: boolean ] ) : Promise<string>

Update input string value by current platform.

| | type | default | description | |------------|-------------------|------------------------------------|---------------------------------------------------------------------| | smsValue | string | | Input string for update | | [encode] | boolean | Constructor options.encode value | Enable/disable message text encoding ( e.g., encodeURIComponent ) | | returns | Promise<string> | | Valid SMS Href sms:anchor string |

Example:

await smsHref.fixValue('1234@body=Your message');
// Android  --> sms:1234?body=Your%20message
// IOS <= 7 --> sms:1234;body=Your%20message
// IOS >= 8 --> sms:1234&body=Your%20message

Example (with disabled message encoding):

await smsHref.fixValue('1234@body=Your message', false);
// Android  --> sms:1234?body=Your message
// IOS <= 7 --> sms:1234;body=Your message
// IOS >= 8 --> sms:1234&body=Your message

create

Syntax:

async create( smsConfiguration: SmsConfiguration [, encode: boolean] ) : Promise<string>

Creates sms: href string from phone number and sms message text.

| | type | default | description | |------------------------------|--------------------------------------------------------|------------------------------------|---------------------------------------------------------------------| | smsConfiguration | SmsConfiguration | | | | smsConfiguration[.phone] | string number | | SMS Phone number | | smsConfiguration[.message] | string | | SMS message text | | [ encode ] | boolean | Constructor options.encode value | Enable/disable message text encoding ( e.g., encodeURIComponent ) | | returns | Promise<string> - Valid SMS Href sms:anchor string | | | | throws | Promise.reject<TypeError> | | If phone and message are both not provided |

NOTES:

  • Phone and message are both optional, but one of them must be provided.
  • Phone number format validation is not implemented. You should use own validation.
  • SMS message format validation is not implemented. You should use own validation.

Example:

await smsHref.create({
    phone: 1234,
    message: 'Your message'
});
// Android  --> sms:1234?body=Your%20message
// IOS <= 7 --> sms:1234;body=Your%20message
// IOS >= 8 --> sms:1234&body=Your%20message

Example (with disabled message encoding):

await smsHref.create({
    phone: 1234,
    message: 'Your message'
}, false);
// Android  --> sms:1234?body=Your message
// IOS <= 7 --> sms:1234;body=Your message
// IOS >= 8 --> sms:1234&body=Your message



Types

ResultCode

type ResultCode = number;

Options

type Options = {
    allow?: Devices;
    separator?: string | null;
    encode?: boolean;
}

Devices

type Devices = {
    mobile?: boolean;
    tablet?: boolean;
    facebook?: boolean;
};

SmsConfiguration

type SmsConfiguration = {
    phone?: string | number;
    message?: string;
}



License

MIT © Dárius Bokor


References