From 2c0a989929f00258f88f0a15da8cf6b797563359 Mon Sep 17 00:00:00 2001 From: Mohammed Sohail Date: Thu, 18 Apr 2024 18:47:47 +0800 Subject: [PATCH] debug-build: dump char encoding --- package-lock.json | 37 +++++++++++++++++++++++++++------- package.json | 1 + src/machines/transfer.ts | 12 +++++++++++ src/services/africasTalking.ts | 12 +++++++++++ 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7255a64..85e582d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "fastify-metrics": "^10.3.0", "fastify-plugin": "^4.5.0", "graphql-request": "^5.2.0", + "iconv-lite": "^0.6.3", "ioredis": "^5.3.2", "libphonenumber-js": "^1.10.30", "moment-timezone": "^0.5.43", @@ -4864,6 +4865,18 @@ "node": ">=4" } }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extract-files": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", @@ -6242,12 +6255,11 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -10193,6 +10205,18 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -11207,8 +11231,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass-lookup": { "version": "3.0.0", diff --git a/package.json b/package.json index c6a534f..5683655 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "fastify-metrics": "^10.3.0", "fastify-plugin": "^4.5.0", "graphql-request": "^5.2.0", + "iconv-lite": "^0.6.3", "ioredis": "^5.3.2", "libphonenumber-js": "^1.10.30", "moment-timezone": "^0.5.43", diff --git a/src/machines/transfer.ts b/src/machines/transfer.ts index 9c242ab..c56af85 100644 --- a/src/machines/transfer.ts +++ b/src/machines/transfer.ts @@ -19,6 +19,7 @@ import { config } from '@/config'; import {getPhoneNumberFromAddress} from "@services/account"; import {logger} from "@/app"; import {ethers} from "ethers"; +import iconv from "iconv-lite" const VPA_PATTERN = /^[a-zA-Z0-9]+@[a-zA-Z]+$/ @@ -318,6 +319,17 @@ async function validateRecipient(context: TransferContext, event: any) { const { input } = event let phoneNumber = input; let checksumAddress: string; + + logger.debug({ + user: context.user.account, + inputUtf8Buffer: iconv.encode(input, "utf8") + }, "input as utf8 buffer") + + logger.debug({ + user: context.user.account, + inputLatin1Buffer: iconv.encode(input, "ISO-8859-1") + }, "input as latin1 buffer") + if(input.startsWith('0x')){ try { checksumAddress = ethers.getAddress(input) diff --git a/src/services/africasTalking.ts b/src/services/africasTalking.ts index fda7ed1..86e4564 100644 --- a/src/services/africasTalking.ts +++ b/src/services/africasTalking.ts @@ -2,6 +2,8 @@ import { SystemError } from '@lib/errors'; import { SessionRequest } from '@services/session'; import { getCountryCode } from '@lib/ussd'; import { config } from '@/config'; +import { logger } from '@/app'; +import iconv from "iconv-lite" export const ATRequestBody = { type: 'object', @@ -29,6 +31,16 @@ export async function ATOnRequestHook(request: SessionRequest) { export async function ATPreHandlerHook(request: SessionRequest) { const { phoneNumber, sessionId, serviceCode, text } = request.body as ATRequest; + logger.debug({ + inputUtf8Buffer: iconv.encode(text, "utf8"), + phoneNumber: phoneNumber, + }, "AT request as utf8 buffer") + + logger.debug({ + inputLatin1Buffer: iconv.encode(text, "ISO-8859-1"), + phoneNumber: phoneNumber, + }, "AT reuqest text as latin1 buffer") + const countryCode = await getCountryCode(phoneNumber) if (!countryCode) { throw new SystemError(`Could not determine country code from phone number: ${phoneNumber}`);