node-pdu
Version:
Creates and parses SMS PDU strings
15 lines (14 loc) • 26.5 kB
JavaScript
'use strict';/*
* 📦 node-pdu
*
* 🏷️ Version: 2.1.1
* 📄 License: MIT
* 🕒 Build: 2025-07-12T10:00:05.406Z
* 🔗 Repository: git+https://github.com/JulianWowra/node-pdu.git
* 👤 Author: jackkum <jackkum@bk.ru>
* 👤 Maintainer: Julian Wowra <development@julianwowra.de>
*/
var F=Object.defineProperty;var V=(s,e)=>{for(var t in e)F(s,t,{get:e[t],enumerable:true});};var a=class s{static ALPHABET_7BIT=`@\xA3$\xA5\xE8\xE9\xF9\xEC\xF2\xC7
\xD8\xF8\r\xC5\xE5\u0394_\u03A6\u0393\u039B\u03A9\u03A0\u03A8\u03A3\u0398\u039E\x1B\xC6\xE6\xDF\xC9 !"#\xA4%&'()*+,-./0123456789:;<=>?\xA1ABCDEFGHIJKLMNOPQRSTUVWXYZ\xC4\xD6\xD1\xDC\`\xBFabcdefghijklmnopqrstuvwxyz\xE4\xF6\xF1\xFC\xE0`;static EXTENDED_TABLE="````````````````````^```````````````````{}`````\\````````````[~]`|````````````````````````````````````\u20AC``````````````````````````";static limitNormal=140;static limitCompress=160;static limitUnicode=70;static TEXT_ENCODER=new TextEncoder;static TEXT_DECODER=new TextDecoder;static hexToUint8Array(e){if(e.length%2!==0)throw new Error("Hex string must have an even number of characters");let t=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=parseInt(e.substring(r,r+2),16);return t}static asciiToUint8Array(e){return this.TEXT_ENCODER.encode(e)}static getByteFromHex(e){return parseInt(e.substring(0,2),16)}static ucfirst(e){return e.substring(0,1).toUpperCase()+e.substring(1)}static order(e){return e.charCodeAt(0)}static char(e){return String.fromCharCode(e)}static decode16Bit(e){return (e.match(/.{1,4}/g)||[]).map(t=>{let r=s.hexToUint8Array(t);return s.char(r[0]<<8|r[1])}).join("")}static decode8Bit(e){return (e.match(/.{1,2}/g)||[]).map(t=>s.char(s.getByteFromHex(t))).join("")}static decode7Bit(e,t,r){let i=[],n=s.hexToUint8Array(e),o=0,p=0,d=0,x=0,l=false;for(r&&n.length&&(r=r%7,p=n[o++],p>>=r,d=8-r);!(d<7&&o===n.length);){if(d<7){if(o===n.length)break;p|=n[o++]<<d,d+=8;}let g=p&127;if(p>>=7,d-=7,x++,g%128===27)l=true;else {let h=l?s.EXTENDED_TABLE.charCodeAt(g)||63:s.ALPHABET_7BIT.charCodeAt(g);l=false,h<128?i.push(h):h<2048?i.push(192|h>>6,128|h&63):(h&64512)===55296&&g+1<s.EXTENDED_TABLE.length&&(s.EXTENDED_TABLE.charCodeAt(g+1)&64512)===56320?(h=65536+((h&1023)<<10)+(s.EXTENDED_TABLE.charCodeAt(g+1)&1023),i.push(240|h>>18,128|h>>12&63,128|h>>6&63,128|h&63)):i.push(224|h>>12,128|h>>6&63,128|h&63);}if(t===void 0){if(o===n.length&&d===7&&!p)break}else if(x>=t)break}return this.TEXT_DECODER.decode(new Uint8Array(i))}static encode8Bit(e){let t=s.asciiToUint8Array(e),r="";for(let i=0;i<t.length;i++)r+=s.toStringHex(t[i]);return {length:t.length,result:r}}static encode7Bit(e,t=0){let r="",i=0,n=0,o=0;n=t;for(let p of e){let d;for((d=s.ALPHABET_7BIT.indexOf(p))!==-1?(i|=d<<n,n+=7,o++):(d=s.EXTENDED_TABLE.indexOf(p))!==-1?(i|=27<<n,n+=7,o++,i|=d<<n,n+=7,o++):(i|=32<<n,n+=7,o++);n>=8;)r+=s.toStringHex(i&255),i>>=8,n-=8;}return n>0&&(r+=s.toStringHex(i&255)),t&&o++,{length:o,result:r}}static encode16Bit(e){let t="";for(let r=0;r<e.length;r++){let i=s.order(e.substring(r,r+1));t+=s.toStringHex(i,4);}return {length:e.length*2,result:t}}static toStringHex(e,t=2){return e.toString(16).padStart(t,"0").toUpperCase()}};var u=class s{static CLASS_NONE=0;static CLASS_MOBILE_EQUIPMENT=1;static CLASS_SIM_SPECIFIC_MESSAGE=2;static CLASS_TERMINAL_EQUIPMENT=3;static INDICATION_TYPE_VOICEMAIL=0;static INDICATION_TYPE_FAX=1;static INDICATION_TYPE_EMAIL=2;static INDICATION_TYPE_OTHER=3;static ALPHABET_DEFAULT=0;static ALPHABET_8BIT=1;static ALPHABET_UCS2=2;static ALPHABET_RESERVED=3;_encodeGroup;_dataEncoding;_compressedText;_textAlphabet;_useMessageClass;_classMessage;_discardMessage;_storeMessage;_storeMessageUCS2;_dataCodingAndMessageClass;_messageIndication;_messageIndicationType;constructor(e={}){this._encodeGroup=e.encodeGroup||0,this._dataEncoding=e.dataEncoding||0,this._compressedText=e.compressedText||false,this._textAlphabet=e.textAlphabet||s.ALPHABET_DEFAULT,this._useMessageClass=e.useMessageClass||false,this._classMessage=e.classMessage||s.CLASS_NONE,this._discardMessage=e.discardMessage||false,this._storeMessage=e.storeMessage||false,this._storeMessageUCS2=e.storeMessageUCS2||false,this._dataCodingAndMessageClass=e.dataCodingAndMessageClass||false,this._messageIndication=e.messageIndication||0,this._messageIndicationType=e.messageIndicationType||0;}get encodeGroup(){return this._encodeGroup}get dataEncoding(){return this._dataEncoding}get compressedText(){return this._compressedText}get dataCodingAndMessageClass(){return this._dataCodingAndMessageClass}get discardMessage(){return this._discardMessage}setDiscardMessage(){return this._discardMessage=true,this}get storeMessage(){return this._storeMessage}setStoreMessage(){return this._storeMessage=true,this}get storeMessageUCS2(){return this._storeMessageUCS2}setStoreMessageUCS2(){return this._storeMessageUCS2=true,this}get messageIndication(){return this._messageIndication}setMessageIndication(e){return this._messageIndication=1&e,this}get messageIndicationType(){return this._messageIndicationType}setMessageIndicationType(e){switch(this._messageIndicationType=3&e,this._messageIndicationType){case s.INDICATION_TYPE_VOICEMAIL:break;case s.INDICATION_TYPE_FAX:break;case s.INDICATION_TYPE_EMAIL:break;case s.INDICATION_TYPE_OTHER:break;default:throw new Error("node-pdu: Wrong indication type!")}return this}get textTextCompressed(){return this._compressedText}setTextCompressed(e=true){return this._compressedText=e,this}get textAlphabet(){return this._textAlphabet}setTextAlphabet(e){switch(this._textAlphabet=3&e,this._textAlphabet){case s.ALPHABET_DEFAULT:break;case s.ALPHABET_8BIT:break;case s.ALPHABET_UCS2:break;case s.ALPHABET_RESERVED:break;default:throw new Error("node-pdu: Wrong alphabet!")}return this}get classMessage(){return this._classMessage}setClass(e){switch(this.setUseMessageClass(),this._classMessage=3&e,this._classMessage){case s.CLASS_NONE:this.setUseMessageClass(false);break;case s.CLASS_MOBILE_EQUIPMENT:break;case s.CLASS_SIM_SPECIFIC_MESSAGE:break;case s.CLASS_TERMINAL_EQUIPMENT:break;default:throw new Error("node-pdu: Wrong class type!")}return this}get useMessageClass(){return this._useMessageClass}setUseMessageClass(e=true){return this._useMessageClass=e,this}getValue(){if(this._encodeGroup=0,this._dataEncoding=this._textAlphabet<<2|this._classMessage,this._useMessageClass&&(this._encodeGroup|=1),this._compressedText&&(this._encodeGroup|=2),(this._discardMessage||this._storeMessage||this._storeMessageUCS2)&&(this._dataEncoding=0,this._messageIndication&&(this._dataEncoding|=8,this._dataEncoding|=this._messageIndicationType)),this._discardMessage&&(this._encodeGroup=12),this._storeMessage&&(this._encodeGroup=13),this._storeMessageUCS2&&(this._encodeGroup=14),this._dataCodingAndMessageClass)switch(this._encodeGroup=15,this._dataEncoding=3&this._classMessage,this._textAlphabet){case s.ALPHABET_8BIT:this._dataEncoding|=4;break;}return (15&this._encodeGroup)<<4|15&this._dataEncoding}toString(){return a.toStringHex(this.getValue())}};var b=class s{static IE_CONCAT_8BIT_REF=0;static IE_CONCAT_16BIT_REF=8;ies=[];concatIeIdx;constructor(e){if(Array.isArray(e)){for(let r of e){let i=a.hexToUint8Array(r.dataHex);if(r.type===s.IE_CONCAT_8BIT_REF){this.concatIeIdx=this.ies.length,this.ies.push({type:r.type,dataHex:r.dataHex,data:{msgRef:i[0],maxMsgNum:i[1],msgSeqNo:i[2]}});continue}if(r.type===s.IE_CONCAT_16BIT_REF){this.concatIeIdx=this.ies.length,this.ies.push({type:r.type,dataHex:r.dataHex,data:{msgRef:i[0]<<8|i[1],maxMsgNum:i[2],msgSeqNo:i[3]}});continue}this.ies.push({type:r.type,dataHex:r.dataHex});}return}let t=a.toStringHex(e.POINTER,4)+a.toStringHex(e.SEGMENTS)+a.toStringHex(e.CURRENT);this.ies.push({type:s.IE_CONCAT_16BIT_REF,dataHex:t,data:{msgRef:e.POINTER,maxMsgNum:e.SEGMENTS,msgSeqNo:e.CURRENT}}),this.concatIeIdx=this.ies.length-1;}toJSON(){return {POINTER:this.getPointer(),SEGMENTS:this.getSegments(),CURRENT:this.getCurrent()}}getSize(){let e=0;return this.ies.forEach(t=>{e+=2+t.dataHex.length/2;}),e}getType(){if(this.concatIeIdx!==void 0)return this.ies[this.concatIeIdx].type}getPointerSize(){return this.concatIeIdx!==void 0?this.ies[this.concatIeIdx].dataHex.length/2:0}getPointer(){return this.concatIeIdx!==void 0?this.ies[this.concatIeIdx].data?.msgRef:0}getSegments(){return this.concatIeIdx!==void 0?this.ies[this.concatIeIdx].data?.maxMsgNum:1}getCurrent(){return this.concatIeIdx!==void 0?this.ies[this.concatIeIdx].data?.msgSeqNo:1}toString(){let e=0,t="";return this.ies.forEach(r=>{e+=2+r.dataHex.length/2,t+=a.toStringHex(r.type)+a.toStringHex(r.dataHex.length/2)+r.dataHex;}),a.toStringHex(e)+t}};var D=class{data;size;text;header;constructor(e,t,r,i){this.data=e,this.size=t,this.text=r,this.header=i||null;}getPduString(e){return e.getStart()}getPartSize(){return a.toStringHex(this.size)}toString(e){return this.getPduString(e)+this.getPartSize()+(this.header?this.header.toString():"")+this.data}};var f=class s{static HEADER_SIZE=7;_data;_size;_parts;_isUnicode;constructor(e={}){this._size=e.size||0,this._data=e.data||"",this._parts=e.parts||[],this._isUnicode=e.isUnicode||false;}get data(){return this._data}get size(){return this._size}get parts(){return this._parts}get isUnicode(){return this._isUnicode}setData(e,t){return this._data=e,this.checkData(),this.prepareParts(t),this}checkData(){this._isUnicode=false,this._size=0;for(let e=0;e<this._data.length;e++)a.order(this._data.substring(e,e+1))>192&&(this._isUnicode=true),this._size++;}prepareParts(e){let t=s.HEADER_SIZE,r=a.limitNormal;this._isUnicode&&(r=a.limitUnicode,e.dataCodingScheme.setTextCompressed(false).setTextAlphabet(u.ALPHABET_UCS2)),e.dataCodingScheme.compressedText&&(r=a.limitCompress,t++);let i=this.splitMessage(r-t),n=i.length>1,o=Math.random()*65536|0;n&&e.type.setUserDataHeader(1),i.forEach((p,d)=>{let x=n?new b({SEGMENTS:i.length,CURRENT:d+1,POINTER:o}):void 0,l=(()=>{switch(e.dataCodingScheme.textAlphabet){case u.ALPHABET_DEFAULT:return a.encode7Bit(p);case u.ALPHABET_8BIT:return a.encode8Bit(p);case u.ALPHABET_UCS2:return a.encode16Bit(p);default:throw new Error("node-pdu: Unknown alphabet!")}})(),g=l.length,h=l.result;n&&(e.dataCodingScheme.textAlphabet===u.ALPHABET_DEFAULT?g+=Math.ceil(t*8/7):g+=t),this._parts.push(new D(h,g,p,x));});}partExists(e){for(let t of this._parts){if(e.header===null||t.header===null)throw new Error("node-pdu: Part is missing a header!");if(e.header.getPointer()!==t.header.getPointer()||e.header.getSegments()!==t.header.getSegments())throw new Error("node-pdu: Part from different message!");if(t.header.getCurrent()===e.header.getCurrent())return true}return false}sortParts(){this._data=this._parts.sort((e,t)=>(e.header?.getCurrent()||1)-(t.header?.getCurrent()||1)).map(e=>e.text).join("");}splitMessage(e){let t=[];for(let r=0;r<this._data.length;r+=e)t.push(this._data.substring(r,r+e));return t}getText(){return this.data}append(e){e.getParts().forEach(t=>{this.partExists(t)||this._parts.push(t);}),this.sortParts();}};var C=class s{static PID_ASSIGNED=0;static PID_GSM_03_40=1;static PID_RESERVED=2;static PID_SPECIFIC=3;static TYPE_IMPLICIT=0;static TYPE_TELEX=1;static TYPE_TELEFAX=2;static TYPE_VOICE=4;static TYPE_ERMES=5;static TYPE_NPS=6;static TYPE_X_400=17;static TYPE_IEM=18;_pid;_indicates;_type;constructor(e={}){this._pid=e.pid||s.PID_ASSIGNED,this._indicates=e.indicates||0,this._type=e.type||s.TYPE_IMPLICIT;}get pid(){return this._pid}setPid(e){return this._pid=3&e,this}get indicates(){return this._indicates}setIndicates(e){return this._indicates=1&e,this}get type(){return this._type}setType(e){return this._type=31&e,this}getValue(){return this._pid<<6|this._indicates<<5|this._type}toString(){return this.getValue().toString()}};var m=class{static TYPE_UNKNOWN=0;static TYPE_INTERNATIONAL=1;static TYPE_NATIONAL=2;static TYPE_ACCEPTER_INTO_NET=3;static TYPE_SUBSCRIBER_NET=4;static TYPE_ALPHANUMERICAL=5;static TYPE_TRIMMED=6;static TYPE_RESERVED=7;static PLAN_UNKNOWN=0;static PLAN_ISDN=1;static PLAN_X_121=2;static PLAN_TELEX=3;static PLAN_NATIONAL=8;static PLAN_INDIVIDUAL=9;static PLAN_ERMES=10;static PLAN_RESERVED=15;_type;_plan;constructor(e=145){this._type=7&e>>4,this._plan=15&e;}get type(){return this._type}setType(e){return this._type=7&e,this}get plan(){return this._plan}setPlan(e){return this._plan=15&e,this}getValue(){return 128|this._type<<4|this._plan}toString(){return a.toStringHex(this.getValue())}};var y=class s{type;_isAddress;_size=0;_encoded="";_phone=null;constructor(e=false,t={}){this.type=t.type||new m,this._isAddress=e;}get isAddress(){return this._isAddress}get size(){return this._size}get encoded(){return this._encoded}get phone(){return this._phone}setPhone(e,t=true,r=false){if(this._phone=e.trim(),this._isAddress=!r,this._isAddress&&t&&this.detectScaType(this._phone),this.type.type===m.TYPE_ALPHANUMERICAL){let n=a.encode7Bit(e);return this._size=Math.ceil(n.length*7/4),this._encoded=n.result,this}let i=this._phone.replace(/[^a-c0-9*#]/gi,"");return this._size=r?1+Math.ceil(i.length/2):i.length,this._encoded=i.split("").map(n=>s.mapFilterEncode(n)).join(""),this}detectScaType(e){let t=e.replace(/^\s+|\s+$/g,"");if(/\+\d+$/.test(t)){this._phone=t.substring(1),this.type.setType(m.TYPE_INTERNATIONAL);return}if(/00\d+$/.test(t)){this._phone=t.substring(2),this.type.setType(m.TYPE_INTERNATIONAL);return}if(/\d+$/.test(t)){this._phone=t,this.type.setType(m.TYPE_UNKNOWN);return}this.type.setType(m.TYPE_ALPHANUMERICAL);}getOffset(){return this._size?this._size+4:2}toString(){let e=a.toStringHex(this.size);if(this.size!==0)if(e+=this.type.toString(),this.type.type!==m.TYPE_ALPHANUMERICAL){let t=this.encoded.length;for(let r=0;r<t;r+=2){let i=this.encoded.substring(r,r+1),n=r+1>=t?"F":this.encoded.substring(r+1,r+2);e+=n+i;}}else e+=this.encoded;return e}static mapFilterDecode(e){switch(a.getByteFromHex(e)){case 10:return "*";case 11:return "#";case 12:return "a";case 13:return "b";case 14:return "c";default:return e}}static mapFilterEncode(e){switch(e){case "*":return "A";case "#":return "B";case "a":return "C";case "b":return "D";case "c":return "E";default:return e}}};var S=class{_address;_serviceCenterAddress;_protocolIdentifier;_dataCodingScheme;constructor(e,t={}){this._address=this.findAddress(e),this._serviceCenterAddress=t.serviceCenterAddress||new y(false),this._protocolIdentifier=t.protocolIdentifier||new C,this._dataCodingScheme=t.dataCodingScheme||new u;}get address(){return this._address}setAddress(e){return this._address=this.findAddress(e),this}get serviceCenterAddress(){return this._serviceCenterAddress}setServiceCenterAddress(e){return e instanceof y?(this._serviceCenterAddress=e,this):(this._serviceCenterAddress.setPhone(e,false,true),this)}get protocolIdentifier(){return this._protocolIdentifier}setProtocolIdentifier(e){return this._protocolIdentifier=e,this}get dataCodingScheme(){return this._dataCodingScheme}setDataCodingScheme(e){return this._dataCodingScheme=e,this}findAddress(e){return e instanceof y?e:new y().setPhone(e)}};var _=class{time;tzOff;constructor(e,t){this.time=e.getTime()/1e3,this.tzOff=t||-1*e.getTimezoneOffset();}getDateTime(){let e=Math.floor(Math.abs(this.tzOff)/15),t=Math.floor(e/10)*16+e%10+(this.tzOff<0?128:0);return this.getDateWithOffset().toISOString().replace(/[-T:]/g,"").slice(2,14)+a.toStringHex(t)}getDateWithOffset(){return new Date(this.time*1e3+this.tzOff*60*1e3)}getIsoString(){let e=this.getDateWithOffset().toISOString().replace(/.\d{3}Z$/,""),t=Math.abs(this.tzOff/60).toString().padStart(2,"0");return e+(this.tzOff>0?"+":"-")+t+":00"}toString(){return (this.getDateTime().match(/.{1,2}/g)||[]).map(e=>e.split("").reverse().join("")).join("")}};var c=class s{static SMS_SUBMIT=1;static SMS_DELIVER=0;static SMS_REPORT=2;static VPF_NONE=0;static VPF_SIEMENS=1;static VPF_RELATIVE=2;static VPF_ABSOLUTE=3;replyPath;rejectDuplicates;_userDataHeader;_statusReportRequest;_validityPeriodFormat;constructor(e){this.replyPath=e.replyPath,this._userDataHeader=e.userDataHeader,this._statusReportRequest=e.statusReportRequest,this._validityPeriodFormat=e.validityPeriodFormat,this.rejectDuplicates=e.rejectDuplicates;}get userDataHeader(){return this._userDataHeader}setUserDataHeader(e){return this._userDataHeader=1&e,this}get statusReportRequest(){return this._statusReportRequest}setStatusReportRequest(e){return this._statusReportRequest=1&e,this}get validityPeriodFormat(){return this._validityPeriodFormat}setValidityPeriodFormat(e){switch(this._validityPeriodFormat=3&e,this._validityPeriodFormat){case s.VPF_NONE:break;case s.VPF_SIEMENS:break;case s.VPF_RELATIVE:break;case s.VPF_ABSOLUTE:break;default:throw new Error("node-pdu: Wrong validity period format!")}return this}getValue(){return (1&this.replyPath)<<7|(1&this._userDataHeader)<<6|(1&this._statusReportRequest)<<5|(3&this._validityPeriodFormat)<<3|(1&this.rejectDuplicates)<<2|3&this.messageTypeIndicator}toString(){return a.toStringHex(this.getValue())}};var T=class extends c{messageTypeIndicator=c.SMS_DELIVER;constructor(e={}){super({replyPath:e.replyPath?1&e.replyPath:0,userDataHeader:e.userDataHeader?1&e.userDataHeader:0,statusReportRequest:e.statusReportRequest?1&e.statusReportRequest:0,rejectDuplicates:e.mms?1&e.mms:0,validityPeriodFormat:0});}};var M=class extends S{_type;_data;_serviceCenterTimeStamp;constructor(e,t,r={}){super(e,r),this._type=r.type||new T,this._data=this.findData(t),this._serviceCenterTimeStamp=r.serviceCenterTimeStamp||new _(this.getDateTime());}get type(){return this._type}setType(e){return this._type=e,this}get data(){return this._data}setData(e){return this._data=this.findData(e),this}get serviceCenterTimeStamp(){return this._serviceCenterTimeStamp}setServiceCenterTimeStamp(e=this.getDateTime()){return e instanceof _?(this._serviceCenterTimeStamp=e,this):(this._serviceCenterTimeStamp=new _(e),this)}getDateTime(){return new Date(Date.now()+864e6)}findData(e){return e instanceof f?e:new f().setData(e,this)}getParts(){return this._data.parts}getPartStrings(){return this._data.parts.map(e=>e.toString(this))}getStart(){let e="";return e+=this.serviceCenterAddress.toString(),e+=this._type.toString(),e+=this.address.toString(),e+=a.toStringHex(this.protocolIdentifier.getValue()),e+=this.dataCodingScheme.toString(),e+=this._serviceCenterTimeStamp.toString(),e}toString(){return this.getStart()}};var E=class extends c{messageTypeIndicator=c.SMS_REPORT;constructor(e={}){super({replyPath:e.replyPath?1&e.replyPath:0,userDataHeader:e.userDataHeader?1&e.userDataHeader:0,statusReportRequest:e.statusReportRequest?1&e.statusReportRequest:0,rejectDuplicates:e.mms?1&e.mms:0,validityPeriodFormat:0});}};var H=class extends S{_type;_reference;_dateTime;_discharge;_status;constructor(e,t,r,i,n,o={}){super(e,o),this._type=o.type||new E,this._reference=t,this._dateTime=r,this._discharge=i,this._status=n;}get type(){return this._type}setType(e){return this._type=e,this}get reference(){return this._reference}setReference(e){return this._reference=e,this}get dateTime(){return this._dateTime}setDateTime(e){return this._dateTime=e,this}get discharge(){return this._discharge}setDischarge(e){return this._discharge=e,this}get status(){return this._status}setStatus(e){return this._status=e,this}};var A=class extends c{messageTypeIndicator=c.SMS_SUBMIT;constructor(e={}){super({replyPath:e.replyPath?1&e.replyPath:0,userDataHeader:e.userDataHeader?1&e.userDataHeader:0,statusReportRequest:e.statusReportRequest?1&e.statusReportRequest:0,validityPeriodFormat:e.validityPeriodFormat?3&e.validityPeriodFormat:0,rejectDuplicates:e.rejectDuplicates?1&e.rejectDuplicates:0});}};var P=class{static PID_ASSIGNED=0;_datetime;_interval;constructor(e={}){this._datetime=e.datetime||null,this._interval=e.interval||null;}get dateTime(){return this._datetime}setDateTime(e){return e instanceof Date?(this._datetime=e,this):(this._datetime=new Date(Date.parse(e)),this)}get interval(){return this._interval}setInterval(e){return this._interval=e,this}toString(e){let t=e.type;if(this._datetime!==null)return t.setValidityPeriodFormat(c.VPF_ABSOLUTE),new _(this._datetime).toString();if(this._interval){t.setValidityPeriodFormat(c.VPF_RELATIVE);let r=Math.ceil(this._interval/60),i=Math.ceil(this._interval/60/60),n=Math.ceil(this._interval/60/60/24),o=Math.ceil(this._interval/60/60/24/7);return i<=12?a.toStringHex(Math.ceil(r/5)-1):i<=24?a.toStringHex(Math.ceil((r-720)/30)+143):i<=30*24*3600?a.toStringHex(n+166):a.toStringHex((o>63?63:o)+192)}return t.setValidityPeriodFormat(c.VPF_NONE),""}};var R=class extends S{_type;_data;_messageReference;_validityPeriod;constructor(e,t,r={}){super(e,r),this._type=r.type||new A,this._data=this.findData(t),this._messageReference=r.messageReference||0,this._validityPeriod=r.validityPeriod||new P;}get type(){return this._type}setType(e){return this._type=e,this}get data(){return this._data}setData(e){return this._data=this.findData(e),this}get messageReference(){return this._messageReference}setMessageReference(e){return this._messageReference=e,this}get validityPeriod(){return this._validityPeriod}setValidityPeriod(e){return e instanceof P?(this._validityPeriod=e,this):(this._validityPeriod=new P,typeof e=="string"?this._validityPeriod.setDateTime(e):this._validityPeriod.setInterval(e),this)}findData(e){return e instanceof f?e:new f().setData(e,this)}getParts(){return this._data.parts}getPartStrings(){return this._data.parts.map(e=>e.toString(this))}getStart(){let e="";return e+=this.serviceCenterAddress.toString(),e+=this._type.toString(),e+=a.toStringHex(this._messageReference),e+=this.address.toString(),e+=a.toStringHex(this.protocolIdentifier.getValue()),e+=this.dataCodingScheme.toString(),e+=this._validityPeriod.toString(this),e}toString(){return this.getParts().map(e=>e.toString(this)).join(`
`)}};function N(s,e,t,r){let i={};e.textAlphabet===u.ALPHABET_UCS2&&(i.isUnicode=true);let n=G(s,e,t,r);return i.data=n.text,i.size=n.size,i.parts=[n.part],new f(i)}function G(s,e,t,r){let i=0;e.textAlphabet===u.ALPHABET_DEFAULT?i=Math.ceil(t*7/8):i=t;let n,o=0;s.userDataHeader===1&&(n=z(r),o=1+n.getSize(),i-=o);let p=r(i*2),d=(()=>{if(e.textAlphabet===u.ALPHABET_DEFAULT){let l=t-Math.ceil(o*8/7),g=Math.ceil(o*8/7)*7-o*8;return a.decode7Bit(p,l,g)}if(e.textAlphabet===u.ALPHABET_8BIT)return a.decode8Bit(p);if(e.textAlphabet===u.ALPHABET_UCS2)return a.decode16Bit(p);throw new Error("node-pdu: Unknown alpabet!")})(),x=new D(p,t,d,n);return {text:d,size:t,part:x}}function z(s){let e=a.getByteFromHex(s(2)),t=[];for(;e>0;){let r=a.getByteFromHex(s(2)),i=a.getByteFromHex(s(2));t.push({type:r,dataHex:s(i*2)}),e-=2+i;}return new b(t)}function U(s){let e=a.getByteFromHex(s(2)),t={};switch(t.encodeGroup=15&e>>4,t.dataEncoding=15&e,t.textAlphabet=3&t.dataEncoding>>2,t.classMessage=3&t.dataEncoding,t.encodeGroup){case 12:t.discardMessage=true,t.textAlphabet=u.ALPHABET_DEFAULT;break;case 13:t.storeMessage=true;break;case 14:t.storeMessageUCS2=true;break;case 15:t.dataCodingAndMessageClass=true,t.dataEncoding&4&&(t.textAlphabet=u.ALPHABET_8BIT);break;default:t.useMessageClass=!!(t.encodeGroup&1),t.compressedText=!!(t.encodeGroup&2);}return (t.discardMessage||t.storeMessage||t.storeMessageUCS2)&&t.dataEncoding&8&&(t.messageIndication=1,t.messageIndicationType=3&t.dataEncoding),new u(t)}function O(s){let e=a.getByteFromHex(s(2)),t=new C;return t.setPid(e>>6),t.setIndicates(e>>5),t.setType(e),t}function v(s,e){let t=a.getByteFromHex(s(2)),r=new y(e),i;if(!t)return r;let n=t;e?i=Math.ceil(n/2):(n--,i=n,n*=2);let o=a.getByteFromHex(s(2)),p=new m(o),d=s(i*2);if(r.type.setType(p.type),r.type.setPlan(p.plan),r.type.type===m.TYPE_ALPHANUMERICAL){let l=Math.floor(n*4/7);return r.setPhone(a.decode7Bit(d,l),false,!e)}!e&&d.charAt(n-2)==="F"&&n--;let x=(d.match(/.{1,2}/g)||[]).map(l=>y.mapFilterDecode(l).split("").reverse().join("")).join("").slice(0,n);return r.setPhone(x,false,!e)}function I(s){let e=s(14),t=[];if(!e)throw new Error("node-pdu: Not enough bytes!");if((e.match(/.{1,2}/g)||[]).map(n=>{if(t.length<6&&/\D+/.test(n)||t.length===6&&/[^0-9A-Fa-f]/.test(n)){t.push(0);return}t.push(parseInt(n.split("").reverse().join(""),t.length<6?10:16));}),t.length<6)throw new Error("node-pdu: Parsing failed!");let r=t[6]&127;r=(r>>4)*10+(r&15),r=r*15,t[6]&128&&(r*=-1);let i=new Date(Date.UTC(t[0]>70?1900+t[0]:2e3+t[0],t[1]-1,t[2],t[3],t[4],t[5]));return i.setUTCMinutes(i.getUTCMinutes()-r),new _(i,r)}function L(s){let e=a.getByteFromHex(s(2)),t={replyPath:1&e>>7,userDataHeader:1&e>>6,statusReportRequest:1&e>>5,validityPeriodFormat:3&e>>3,rejectDuplicates:1&e>>2,messageTypeIndicator:3&e};switch(3&e){case c.SMS_DELIVER:return new T(t);case c.SMS_SUBMIT:return new A(t);case c.SMS_REPORT:return new E(t);default:throw new Error("node-pdu: Unknown SMS type!")}}function w(s,e){let t=s.validityPeriodFormat,r=new P;if(t===c.VPF_NONE)return r;if(t===c.VPF_ABSOLUTE){let i=I(e);return r.setDateTime(i.getIsoString()),r}if(t===c.VPF_RELATIVE){let i=a.getByteFromHex(e(2));return i<=143?(r.setInterval((i+1)*(5*60)),r):i<=167?(r.setInterval(3600*24*12+(i-143)*(30*60)),r):i<=196?(r.setInterval((i-167)*(3600*24)),r):(r.setInterval((i-196)*(3600*24*7)),r)}throw new Error("node-pdu: Unknown validity period format!")}function k(s){let e=s.toUpperCase(),t=n=>{let o=e.substring(0,n);return e=e.substring(n),o},r=v(t,false),i=L(t);if(i instanceof T)return Y(r,i,t);if(i instanceof E)return q(r,i,t);if(i instanceof A)return j(r,i,t);throw new Error("node-pdu: Unknown SMS type!")}function Y(s,e,t){let r=v(t,true),i=O(t),n=U(t),o=I(t),p=a.getByteFromHex(t(2)),d=N(e,n,p,t);return new M(r,d,{serviceCenterAddress:s,type:e,protocolIdentifier:i,dataCodingScheme:n,serviceCenterTimeStamp:o})}function q(s,e,t){let r=a.getByteFromHex(t(2)),i=v(t,true),n=I(t),o=I(t),p=a.getByteFromHex(t(2));return new H(i,r,n,o,p,{serviceCenterAddress:s,type:e})}function j(s,e,t){let r=a.getByteFromHex(t(2)),i=v(t,true),n=O(t),o=U(t),p=w(e,t),d=a.getByteFromHex(t(2)),x=N(e,o,d,t);return new R(i,x,{serviceCenterAddress:s,type:e,messageReference:r,protocolIdentifier:n,dataCodingScheme:o,validityPeriod:p})}var B={};V(B,{DCS:()=>u,Data:()=>f,DeliverType:()=>T,Header:()=>b,Helper:()=>a,PDU:()=>S,PDUType:()=>c,PID:()=>C,Part:()=>D,ReportType:()=>E,SCA:()=>y,SCAType:()=>m,SCTS:()=>_,SubmitType:()=>A,VP:()=>P});exports.Deliver=M;exports.Report=H;exports.Submit=R;exports.parse=k;exports.utils=B;//# sourceMappingURL=index.cjs.map
//# sourceMappingURL=index.cjs.map