
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
A unified Python package for Ghana-specific services and APIs including Nalo Solutions
Núnyá kátã (All Knowledge in Ewe) is A unified Python library wrapping Ghanaian digital services like payments, identity verification, SMS, USSD, and more. Built to simplify integrations with providers such as appsNmobile, Nalo, and others, all in one place.
.env
filespip install nunyakata
For environment variable support:
pip install nunyakata[env]
cp .env.example .env
.env
:# SMS API (choose one method)
NALO_SMS_AUTH_KEY=your_auth_key_here
NALO_SMS_SOURCE=YOUR_SENDER_ID
# Payment API
NALO_PAYMENT_USERNAME=your_username
NALO_PAYMENT_PASSWORD=your_password
NALO_MERCHANT_ID=your_merchant_id
from nunyakata import NaloSolutions, create_nalo_client
# Method 1: Using configuration dictionary
config = {
"sms": {
"username": "your_username",
"password": "your_password",
"sender_id": "YOUR_SENDER_ID"
},
"payment": {
"merchant_id": "your_merchant_id",
"username": "your_username",
"password": "your_password"
},
"email": {
"username": "your_username",
"password": "your_password",
"from_email": "sender@example.com"
}
}
client = NaloSolutions(config)
# Send SMS
response = client.send_sms("233501234567", "Hello Ghana!")
# Make payment
payment_response = client.make_payment(
amount=10.00,
customer_number="233501234567",
customer_name="John Doe",
item_desc="Product purchase",
order_id="ORDER_123",
payby="MTN",
callback_url="https://yoursite.com/callback"
)
# Send email
email_response = client.send_email(
to_email="recipient@example.com",
subject="Test Email",
message="Hello from Ghana!"
)
# Handle USSD requests (for webhook endpoints)
ussd_response = client.handle_ussd_request({
"USERID": "test_user",
"MSISDN": "233501234567",
"USERDATA": "",
"MSGTYPE": True,
"SESSIONID": "session_123"
})
from nunyakata import NaloSolutions
client = NaloSolutions(
# SMS credentials
sms_username="your_username",
sms_password="your_password",
sms_sender_id="YOUR_SENDER_ID",
# Payment credentials
payment_username="your_username",
payment_password="your_password",
payment_merchant_id="your_merchant_id",
# Email credentials
email_username="your_email_username",
email_password="your_email_password",
email_from_email="sender@example.com"
)
)
See the examples/
directory for comprehensive usage examples:
examples/nalo_solutions_demo.py
- Basic usage examplesexamples/environment_config_demo.py
- Environment configurationexamples/sms_comprehensive_demo.py
- All SMS featuresexamples/email_comprehensive_demo.py
- All email featuresexamples/ussd_comprehensive_demo.py
- USSD application with Flaskexamples/nalo_webhook_example.py
- Webhook handlingDetailed API documentation available in the docs/
directory:
docs/nalo_solutions.md
- Nalo Solutions API guidedocs/nalo_api_compliance.md
- API compliance detailsdocs/sms_api_compliance.md
- SMS API implementation detailsdocs/ussd_api_compliance.md
- USSD API implementation detailsdocs/email_api_compliance.md
- Email API implementation detailsdocs/setup_guide.md
- Complete setup guideSee .env.example
for all available configuration options:
# SMS Configuration
NALO_SMS_USERNAME=your_sms_username
NALO_SMS_PASSWORD=your_sms_password
NALO_SMS_SENDER_ID=YOUR_SENDER_ID
# Payment Configuration
NALO_PAYMENT_USERNAME=your_payment_username
NALO_PAYMENT_PASSWORD=your_payment_password
NALO_PAYMENT_MERCHANT_ID=your_merchant_id
# Email Configuration
NALO_EMAIL_USERNAME=your_email_username
NALO_EMAIL_PASSWORD=your_email_password
NALO_EMAIL_FROM_EMAIL=sender@example.com
NALO_EMAIL_FROM_NAME=Your Name
# USSD Configuration
NALO_USSD_USERID=your_ussd_userid
NALO_USSD_MSISDN=233501234567
# Optional Callbacks
PAYMENT_CALLBACK_URL=https://yoursite.com/webhooks/payment
SMS_DELIVERY_CALLBACK_URL=https://yoursite.com/webhooks/sms
EMAIL_CALLBACK_URL=https://yoursite.com/webhooks/email
from nunyakata import NaloSolutions
# Initialize client with configuration
config = {
"sms": {"username": "test", "password": "test"},
"payment": {"merchant_id": "123", "username": "test", "password": "test"}
}
client = NaloSolutions(config)
print("Client initialized successfully!")
git clone https://github.com/SeveighTech/nunyakata.git
cd nunyakata
pip install -e ".[dev]"
pytest
pytest --cov=nunyakata tests/
black src/ tests/
isort src/ tests/
flake8 src/ tests/
mypy src/
# Clone the repository
git clone https://github.com/SeveighTech/nunyakata.git
cd nunyakata
# Install in development mode
pip install -e ".[dev,test]"
# Run tests
pytest
# Run with coverage
pytest --cov=src/nunyakata --cov-report=html
This project uses automated publishing through GitHub Actions. To release:
Prepare the release:
python release.py 0.1.0 # Replace with your version
Commit and tag:
git add .
git commit -m "Release v0.1.0"
git tag v0.1.0
git push origin main --tags
Create GitHub Release:
Manual publishing (if needed):
# Test PyPI first
python release.py test
# Then PyPI
python release.py publish
Our comprehensive test suite includes:
MIT License - see LICENSE file for details.
docs/
directoryexamples/
directoryFAQs
A unified Python package for Ghana-specific services and APIs including Nalo Solutions
We found that nunyakata demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.