{"version":3,"sources":["jsdelivr-header.js","/npm/sms-router@1.1.12/dist/index.js"],"names":[],"mappings":"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","file":"/npm/sms-router@1.1.12/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/sms-router@1.1.12/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _SmsRouter_socket, _SmsRouter_channel, _SmsRouter_decryptor, _SmsRouter_extractor;\nimport \"@total-typescript/ts-reset\";\nimport Websocket from \"isomorphic-ws\";\nimport qs from \"node:querystring\";\nimport { Socket } from \"phoenix\";\nimport { Base64Ciphertext, SmsDecryptor } from \"./decryptor.js\";\nimport debug from \"debug\";\nimport { z } from \"zod\";\nimport { Extractor } from \"./extractor.js\";\nconst log = debug(\"sms-router\");\nexport const Sms = z.object({\n    body: z.string(),\n    sender: z.string(),\n    date: z.number(),\n    messageClass: z.string(),\n});\nconst smsList = z.array(Base64Ciphertext);\nclass SmsRouter {\n    // \"ws://localhost:4000/subscribe/websocket\";\n    constructor(opts) {\n        this.opts = opts;\n        _SmsRouter_socket.set(this, void 0);\n        _SmsRouter_channel.set(this, void 0);\n        _SmsRouter_decryptor.set(this, new SmsDecryptor(this.opts.secret));\n        _SmsRouter_extractor.set(this, void 0);\n        const params = { routing_key: __classPrivateFieldGet(this, _SmsRouter_decryptor, \"f\").hashedSecret() };\n        const url = `${this.opts.websocketUrl ?? SmsRouter.DEFAULT_WEBSOCKET_URL}?${qs.stringify(params)}`;\n        __classPrivateFieldSet(this, _SmsRouter_socket, new Socket(url, {\n            params,\n            transport: Websocket,\n        }), \"f\");\n        __classPrivateFieldSet(this, _SmsRouter_channel, __classPrivateFieldGet(this, _SmsRouter_socket, \"f\").channel(`sms:${params.routing_key}`, {}), \"f\");\n        __classPrivateFieldSet(this, _SmsRouter_extractor, opts.extractor, \"f\");\n    }\n    static async withExtractor(opts) {\n        const extractor = await Extractor.fromSmsRegex();\n        return new SmsRouter({\n            ...opts,\n            extractor,\n        });\n    }\n    async list() {\n        const res = await fetch(`https://${SmsRouter.DEFAULT_HOST}/api/v1/sms/${__classPrivateFieldGet(this, _SmsRouter_decryptor, \"f\").hashedSecret()}`);\n        const data = smsList.parse(await res.json());\n        return data\n            .map((data) => {\n            try {\n                const sms = JSON.parse(__classPrivateFieldGet(this, _SmsRouter_decryptor, \"f\").decryptCiphertext(data));\n                const metadata = this.extractFromSms(sms);\n                return { sms, metadata };\n            }\n            catch (err) {\n                log(err);\n                return;\n            }\n        })\n            .filter(Boolean);\n    }\n    isDefaultSms(data) {\n        return Sms.safeParse(data).success;\n    }\n    waitFor(rules, opts) {\n        return new Promise((resolve, reject) => {\n            if (!__classPrivateFieldGet(this, _SmsRouter_extractor, \"f\")) {\n                throw new Error(\"Cannot wait for sms without an extractor. Use SmsRouter.withExtractor() to initialize the class\");\n            }\n            const extractor = __classPrivateFieldGet(this, _SmsRouter_extractor, \"f\");\n            let matchedMessages = 0;\n            let timer;\n            const leave = this.listen(({ sms }) => {\n                const metadata = this.extractFromSms(sms);\n                if (this.isDefaultSms(sms) &&\n                    !extractor.testSms({ sms, metadata }, rules)) {\n                    matchedMessages++;\n                    return;\n                }\n                clearTimeout(timer);\n                leave();\n                resolve({ sms, metadata });\n            });\n            if (opts?.timeout) {\n                const { timeout } = opts;\n                timer = setTimeout(() => {\n                    leave();\n                    if (matchedMessages > 0) {\n                        reject(new Error(`Could not find a message matching ${JSON.stringify(rules)} in ${timeout}ms. But found ${matchedMessages} total non-matching messages`));\n                    }\n                    reject(new Error(`Did not receive any messages matching ${JSON.stringify(rules)} in ${timeout}ms`));\n                }, timeout);\n            }\n        });\n    }\n    extractFromSms(obj) {\n        return __classPrivateFieldGet(this, _SmsRouter_extractor, \"f\") && \"body\" in obj && typeof obj.body === \"string\"\n            ? __classPrivateFieldGet(this, _SmsRouter_extractor, \"f\").extract(obj.body, \"sender\" in obj && typeof obj.sender === \"string\"\n                ? obj.sender\n                : undefined)\n            : undefined;\n    }\n    listen(f) {\n        __classPrivateFieldGet(this, _SmsRouter_socket, \"f\").connect();\n        log(\"ran listen function\");\n        __classPrivateFieldGet(this, _SmsRouter_channel, \"f\")\n            .join(1000)\n            .receive(\"ok\", (res) => {\n            log(\"joined channel\", res);\n        })\n            .receive(\"error\", (err) => {\n            log(\"error\", err);\n        });\n        __classPrivateFieldGet(this, _SmsRouter_channel, \"f\").on(\"new\", (data) => {\n            log(\"encrypted sms\", data);\n            if (!data.ciphertext) {\n                console.warn(\"Got an empty sms message?\");\n                return;\n            }\n            try {\n                const val = Base64Ciphertext.parse(data.ciphertext);\n                const sms = __classPrivateFieldGet(this, _SmsRouter_decryptor, \"f\").decryptCiphertext(val);\n                const out = JSON.parse(sms);\n                const metadata = this.extractFromSms(out);\n                f({ sms: out, metadata });\n            }\n            catch (err) {\n                if (this.opts.onError && err instanceof Error) {\n                    this.opts.onError(err);\n                }\n                else {\n                    throw err;\n                }\n            }\n        });\n        return () => {\n            log(\"leaving channel\");\n            __classPrivateFieldGet(this, _SmsRouter_channel, \"f\").leave();\n        };\n    }\n}\n_SmsRouter_socket = new WeakMap(), _SmsRouter_channel = new WeakMap(), _SmsRouter_decryptor = new WeakMap(), _SmsRouter_extractor = new WeakMap();\nSmsRouter.DEFAULT_HOST = \"sms.xetera.dev\";\nSmsRouter.DEFAULT_WEBSOCKET_URL = `wss://${SmsRouter.DEFAULT_HOST}/subscribe/websocket`;\nexport { SmsRouter };\n// async function main() {\n//   const secretKey =\n//     \"9d04971f8d17c915660179ad186b58db7feaa00ae51e3c35ff00163e0cc1393b\";\n//   const smsRouter = await SmsRouter.withExtractor({ secret: secretKey });\n//   // smsRouter.listen((sms) => {\n//   //   console.log(sms);\n//   // });\n//   // const sms = await smsRouter.waitFor(/\\ /, { timeout: 60 * 5000 });\n//   log(inspect(await smsRouter.list(), { depth: null }));\n//   // const code2fa = sms.body.match(/sifreniz: (\\d+)/)?.[0];\n// }\n// main();\n"]}