Add enhanced subscription functionality with EOSE result modes
This commit is contained in:
parent
0f897ab1b3
commit
54a6044083
|
@ -1,223 +0,0 @@
|
|||
# NOSTR Core Library - Automatic Versioning System
|
||||
|
||||
## Overview
|
||||
|
||||
The NOSTR Core Library now features an automatic version increment system that automatically increments the patch version (e.g., v0.2.0 → v0.2.1) with each build. This ensures consistent versioning and traceability across builds.
|
||||
|
||||
## How It Works
|
||||
|
||||
### Version Format
|
||||
The library uses semantic versioning with the format: `vMAJOR.MINOR.PATCH`
|
||||
|
||||
- **MAJOR**: Incremented for breaking changes (manual)
|
||||
- **MINOR**: Incremented for new features (manual)
|
||||
- **PATCH**: Incremented automatically with each build
|
||||
|
||||
### Automatic Increment Process
|
||||
|
||||
1. **Version Detection**: The build system scans all git tags matching `v*.*.*` pattern
|
||||
2. **Highest Version**: Uses `sort -V` to find the numerically highest version (not chronologically latest)
|
||||
3. **Patch Increment**: Increments the patch number by 1
|
||||
4. **Git Tag Creation**: Creates a new git tag for the incremented version
|
||||
5. **File Generation**: Generates `nostr_core/version.h` and `nostr_core/version.c` with build metadata
|
||||
|
||||
### Generated Files
|
||||
|
||||
The system automatically generates two files during each build:
|
||||
|
||||
#### `nostr_core/version.h`
|
||||
```c
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 2
|
||||
#define VERSION_PATCH 1
|
||||
#define VERSION_STRING "0.2.1"
|
||||
#define VERSION_TAG "v0.2.1"
|
||||
|
||||
#define BUILD_DATE "2025-08-09"
|
||||
#define BUILD_TIME "10:42:45"
|
||||
#define BUILD_TIMESTAMP "2025-08-09 10:42:45"
|
||||
|
||||
#define GIT_HASH "ca6b475"
|
||||
#define GIT_BRANCH "master"
|
||||
|
||||
// API functions
|
||||
const char* nostr_core_get_version(void);
|
||||
const char* nostr_core_get_version_full(void);
|
||||
const char* nostr_core_get_build_info(void);
|
||||
```
|
||||
|
||||
#### `nostr_core/version.c`
|
||||
Contains the implementation of the version API functions.
|
||||
|
||||
## Usage
|
||||
|
||||
### Building with Auto-Versioning
|
||||
|
||||
All major build targets automatically increment the version:
|
||||
|
||||
```bash
|
||||
# Build static library (increments version)
|
||||
./build.sh lib
|
||||
|
||||
# Build shared library (increments version)
|
||||
./build.sh shared
|
||||
|
||||
# Build all libraries (increments version)
|
||||
./build.sh all
|
||||
|
||||
# Build examples (increments version)
|
||||
./build.sh examples
|
||||
|
||||
# Install to system (increments version)
|
||||
./build.sh install
|
||||
```
|
||||
|
||||
### Non-Versioned Builds
|
||||
|
||||
Some targets do not increment versions:
|
||||
|
||||
```bash
|
||||
# Clean build artifacts (no version increment)
|
||||
./build.sh clean
|
||||
|
||||
# Run tests (no version increment)
|
||||
./build.sh test
|
||||
```
|
||||
|
||||
### Using Version Information in Code
|
||||
|
||||
```c
|
||||
#include "version.h"
|
||||
|
||||
// Get version string
|
||||
printf("Version: %s\n", nostr_core_get_version());
|
||||
|
||||
// Get full version with timestamp and commit
|
||||
printf("Full: %s\n", nostr_core_get_version_full());
|
||||
|
||||
// Get detailed build information
|
||||
printf("Build: %s\n", nostr_core_get_build_info());
|
||||
|
||||
// Use version macros
|
||||
#if VERSION_MAJOR >= 1
|
||||
// Use new API
|
||||
#else
|
||||
// Use legacy API
|
||||
#endif
|
||||
```
|
||||
|
||||
### Testing Version System
|
||||
|
||||
A version test example is provided:
|
||||
|
||||
```bash
|
||||
# Build and run version test
|
||||
gcc -I. -Inostr_core examples/version_test.c -o examples/version_test ./libnostr_core.a ./secp256k1/.libs/libsecp256k1.a -lm
|
||||
./examples/version_test
|
||||
```
|
||||
|
||||
## Version History Tracking
|
||||
|
||||
### View All Versions
|
||||
```bash
|
||||
# List all version tags
|
||||
git tag --list
|
||||
|
||||
# View version history
|
||||
git log --oneline --decorate --graph
|
||||
```
|
||||
|
||||
### Current Version
|
||||
```bash
|
||||
# Check current version
|
||||
cat VERSION
|
||||
|
||||
# Or check the latest git tag
|
||||
git describe --tags --abbrev=0
|
||||
```
|
||||
|
||||
## Manual Version Management
|
||||
|
||||
### Major/Minor Version Bumps
|
||||
|
||||
For major or minor version changes, manually create the appropriate tag:
|
||||
|
||||
```bash
|
||||
# For a minor version bump (new features)
|
||||
git tag v0.3.0
|
||||
|
||||
# For a major version bump (breaking changes)
|
||||
git tag v1.0.0
|
||||
```
|
||||
|
||||
The next build will automatically increment from the new base version.
|
||||
|
||||
### Resetting Version
|
||||
|
||||
To reset or fix version numbering:
|
||||
|
||||
```bash
|
||||
# Delete incorrect tags (if needed)
|
||||
git tag -d v0.2.1
|
||||
git push origin --delete v0.2.1
|
||||
|
||||
# Create correct base version
|
||||
git tag v0.2.0
|
||||
|
||||
# Next build will create v0.2.1
|
||||
```
|
||||
|
||||
## Integration Notes
|
||||
|
||||
### Makefile Integration
|
||||
- The `version.c` file is automatically included in `LIB_SOURCES`
|
||||
- Version files are compiled and linked with the library
|
||||
- Clean targets remove generated version object files
|
||||
|
||||
### Git Integration
|
||||
- Version files (`version.h`, `version.c`) are excluded from git via `.gitignore`
|
||||
- Only version tags and the `VERSION` file are tracked
|
||||
- Build system works in any git repository with version tags
|
||||
|
||||
### Build System Integration
|
||||
- Version increment is integrated directly into `build.sh`
|
||||
- No separate scripts or external dependencies required
|
||||
- Self-contained and portable across systems
|
||||
|
||||
## Example Output
|
||||
|
||||
When building, you'll see output like:
|
||||
|
||||
```
|
||||
[INFO] Incrementing version...
|
||||
[INFO] Current version: v0.2.0
|
||||
[INFO] New version: v0.2.1
|
||||
[SUCCESS] Created new version tag: v0.2.1
|
||||
[SUCCESS] Generated version.h and version.c
|
||||
[SUCCESS] Updated VERSION file to 0.2.1
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Version Not Incrementing
|
||||
- Ensure you're in a git repository
|
||||
- Check that git tags exist with `git tag --list`
|
||||
- Verify tag format matches `v*.*.*` pattern
|
||||
|
||||
### Tag Already Exists
|
||||
If a tag already exists, the build will continue with the existing version:
|
||||
|
||||
```
|
||||
[WARNING] Tag v0.2.1 already exists - using existing version
|
||||
```
|
||||
|
||||
### Missing Git Information
|
||||
If git is not available, version files will show "unknown" for git hash and branch.
|
||||
|
||||
## Benefits
|
||||
|
||||
1. **Automatic Traceability**: Every build has a unique version
|
||||
2. **Build Metadata**: Includes timestamp, git commit, and branch information
|
||||
3. **API Integration**: Version information accessible via C API
|
||||
4. **Zero Maintenance**: No manual version file editing required
|
||||
5. **Git Integration**: Automatic git tag creation for version history
|
394
dev_build.sh
394
dev_build.sh
|
@ -1,394 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# NOSTR Core Library Build Script
|
||||
# Provides convenient build targets for the standalone library
|
||||
# Automatically increments patch version with each build
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to print colored output
|
||||
print_status() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Function to automatically increment version
|
||||
increment_version() {
|
||||
print_status "Incrementing version..."
|
||||
|
||||
# Check if we're in a git repository
|
||||
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
||||
print_warning "Not in a git repository - skipping version increment"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Get the highest version tag (not necessarily the most recent chronologically)
|
||||
LATEST_TAG=$(git tag -l 'v*.*.*' | sort -V | tail -n 1 || echo "v0.1.0")
|
||||
if [[ -z "$LATEST_TAG" ]]; then
|
||||
LATEST_TAG="v0.1.0"
|
||||
fi
|
||||
|
||||
# Extract version components (remove 'v' prefix if present)
|
||||
VERSION=${LATEST_TAG#v}
|
||||
|
||||
# Parse major.minor.patch
|
||||
if [[ $VERSION =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
|
||||
MAJOR=${BASH_REMATCH[1]}
|
||||
MINOR=${BASH_REMATCH[2]}
|
||||
PATCH=${BASH_REMATCH[3]}
|
||||
else
|
||||
print_error "Invalid version format in tag: $LATEST_TAG"
|
||||
print_error "Expected format: v0.1.0"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Increment patch version
|
||||
NEW_PATCH=$((PATCH + 1))
|
||||
NEW_VERSION="v${MAJOR}.${MINOR}.${NEW_PATCH}"
|
||||
|
||||
print_status "Current version: $LATEST_TAG"
|
||||
print_status "New version: $NEW_VERSION"
|
||||
|
||||
# Create new git tag
|
||||
if git tag "$NEW_VERSION" 2>/dev/null; then
|
||||
print_success "Created new version tag: $NEW_VERSION"
|
||||
else
|
||||
print_warning "Tag $NEW_VERSION already exists - using existing version"
|
||||
NEW_VERSION=$LATEST_TAG
|
||||
fi
|
||||
|
||||
# Update VERSION file for compatibility
|
||||
echo "${NEW_VERSION#v}" > VERSION
|
||||
print_success "Updated VERSION file to ${NEW_VERSION#v}"
|
||||
}
|
||||
|
||||
# Function to perform git operations after successful build
|
||||
perform_git_operations() {
|
||||
local commit_message="$1"
|
||||
|
||||
if [[ -z "$commit_message" ]]; then
|
||||
return 0 # No commit message provided, skip git operations
|
||||
fi
|
||||
|
||||
print_status "Performing git operations..."
|
||||
|
||||
# Check if we're in a git repository
|
||||
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
||||
print_warning "Not in a git repository - skipping git operations"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Check if there are changes to commit
|
||||
if git diff --quiet && git diff --cached --quiet; then
|
||||
print_warning "No changes to commit"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Add all changes
|
||||
print_status "Adding changes to git..."
|
||||
if ! git add .; then
|
||||
print_error "Failed to add changes to git"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Commit changes
|
||||
print_status "Committing changes with message: '$commit_message'"
|
||||
if ! git commit -m "$commit_message"; then
|
||||
print_error "Failed to commit changes"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Push changes
|
||||
print_status "Pushing changes to remote repository..."
|
||||
if ! git push; then
|
||||
print_error "Failed to push changes to remote repository"
|
||||
print_warning "Changes have been committed locally but not pushed"
|
||||
return 1
|
||||
fi
|
||||
|
||||
print_success "Git operations completed successfully!"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Function to show usage
|
||||
show_usage() {
|
||||
echo "NOSTR Core Library Build Script"
|
||||
echo "==============================="
|
||||
echo ""
|
||||
echo "Usage: $0 [target] [-m \"commit message\"]"
|
||||
echo ""
|
||||
echo "Available targets:"
|
||||
echo " clean - Clean all build artifacts"
|
||||
echo " lib - Build static libraries for both x64 and ARM64 (default)"
|
||||
echo " x64 - Build x64 static library only"
|
||||
echo " arm64 - Build ARM64 static library only"
|
||||
echo " all - Build both architectures and examples"
|
||||
echo " examples - Build example programs"
|
||||
echo " test - Run tests"
|
||||
echo " install - Install library to system"
|
||||
echo " uninstall - Remove library from system"
|
||||
echo " help - Show this help message"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -m \"message\" - Git commit message (triggers automatic git add, commit, push after successful build)"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 lib -m \"Add new proof-of-work parameters\""
|
||||
echo " $0 x64 -m \"Fix OpenSSL minimal build configuration\""
|
||||
echo " $0 lib # Build without git operations"
|
||||
echo ""
|
||||
echo "Library outputs (both self-contained with secp256k1):"
|
||||
echo " libnostr_core.a - x86_64 static library"
|
||||
echo " libnostr_core_arm64.a - ARM64 static library"
|
||||
echo " examples/* - Example programs"
|
||||
echo ""
|
||||
echo "Both libraries include secp256k1 objects internally."
|
||||
echo "Users only need to link with the library + -lm."
|
||||
}
|
||||
|
||||
# Parse command line arguments
|
||||
TARGET=""
|
||||
COMMIT_MESSAGE=""
|
||||
|
||||
# Parse arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-m)
|
||||
COMMIT_MESSAGE="$2"
|
||||
shift 2
|
||||
;;
|
||||
-*)
|
||||
print_error "Unknown option: $1"
|
||||
show_usage
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
if [[ -z "$TARGET" ]]; then
|
||||
TARGET="$1"
|
||||
else
|
||||
print_error "Multiple targets specified: $TARGET and $1"
|
||||
show_usage
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Set default target if none specified
|
||||
TARGET=${TARGET:-lib}
|
||||
|
||||
case "$TARGET" in
|
||||
clean)
|
||||
print_status "Cleaning build artifacts..."
|
||||
make clean
|
||||
print_success "Clean completed"
|
||||
;;
|
||||
|
||||
lib|library)
|
||||
increment_version
|
||||
print_status "Building both x64 and ARM64 static libraries..."
|
||||
make clean
|
||||
make
|
||||
|
||||
# Check both libraries were built
|
||||
SUCCESS=0
|
||||
if [ -f "libnostr_core.a" ]; then
|
||||
SIZE_X64=$(stat -c%s "libnostr_core.a")
|
||||
print_success "x64 static library built successfully (${SIZE_X64} bytes)"
|
||||
SUCCESS=$((SUCCESS + 1))
|
||||
else
|
||||
print_error "Failed to build x64 static library"
|
||||
fi
|
||||
|
||||
if [ -f "libnostr_core_arm64.a" ]; then
|
||||
SIZE_ARM64=$(stat -c%s "libnostr_core_arm64.a")
|
||||
print_success "ARM64 static library built successfully (${SIZE_ARM64} bytes)"
|
||||
SUCCESS=$((SUCCESS + 1))
|
||||
else
|
||||
print_error "Failed to build ARM64 static library"
|
||||
fi
|
||||
|
||||
if [ $SUCCESS -eq 2 ]; then
|
||||
print_success "Both architectures built successfully!"
|
||||
ls -la libnostr_core*.a
|
||||
perform_git_operations "$COMMIT_MESSAGE"
|
||||
else
|
||||
print_error "Failed to build all libraries"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
x64|x64-only)
|
||||
increment_version
|
||||
print_status "Building x64 static library only..."
|
||||
make clean
|
||||
make x64
|
||||
if [ -f "libnostr_core.a" ]; then
|
||||
SIZE=$(stat -c%s "libnostr_core.a")
|
||||
print_success "x64 static library built successfully (${SIZE} bytes)"
|
||||
ls -la libnostr_core.a
|
||||
perform_git_operations "$COMMIT_MESSAGE"
|
||||
else
|
||||
print_error "Failed to build x64 static library"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
arm64|arm64-only)
|
||||
increment_version
|
||||
print_status "Building ARM64 static library only..."
|
||||
make clean
|
||||
make arm64
|
||||
if [ -f "libnostr_core_arm64.a" ]; then
|
||||
SIZE=$(stat -c%s "libnostr_core_arm64.a")
|
||||
print_success "ARM64 static library built successfully (${SIZE} bytes)"
|
||||
ls -la libnostr_core_arm64.a
|
||||
perform_git_operations "$COMMIT_MESSAGE"
|
||||
else
|
||||
print_error "Failed to build ARM64 static library"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
shared)
|
||||
increment_version
|
||||
print_status "Building shared library..."
|
||||
make clean
|
||||
make libnostr_core.so
|
||||
if [ -f "libnostr_core.so" ]; then
|
||||
SIZE=$(stat -c%s "libnostr_core.so")
|
||||
print_success "Shared library built successfully (${SIZE} bytes)"
|
||||
ls -la libnostr_core.so
|
||||
perform_git_operations "$COMMIT_MESSAGE"
|
||||
else
|
||||
print_error "Failed to build shared library"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
all)
|
||||
increment_version
|
||||
print_status "Building all libraries and examples..."
|
||||
make clean
|
||||
make all
|
||||
|
||||
# Check both libraries and examples were built
|
||||
SUCCESS=0
|
||||
if [ -f "libnostr_core.a" ]; then
|
||||
SIZE_X64=$(stat -c%s "libnostr_core.a")
|
||||
print_success "x64 static library built successfully (${SIZE_X64} bytes)"
|
||||
SUCCESS=$((SUCCESS + 1))
|
||||
else
|
||||
print_error "Failed to build x64 static library"
|
||||
fi
|
||||
|
||||
if [ -f "libnostr_core_arm64.a" ]; then
|
||||
SIZE_ARM64=$(stat -c%s "libnostr_core_arm64.a")
|
||||
print_success "ARM64 static library built successfully (${SIZE_ARM64} bytes)"
|
||||
SUCCESS=$((SUCCESS + 1))
|
||||
else
|
||||
print_error "Failed to build ARM64 static library"
|
||||
fi
|
||||
|
||||
if [ $SUCCESS -eq 2 ]; then
|
||||
print_success "All libraries and examples built successfully!"
|
||||
ls -la libnostr_core*.a
|
||||
ls -la examples/
|
||||
perform_git_operations "$COMMIT_MESSAGE"
|
||||
else
|
||||
print_error "Failed to build all components"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
examples)
|
||||
increment_version
|
||||
print_status "Building both libraries and examples..."
|
||||
make clean
|
||||
make
|
||||
make examples
|
||||
|
||||
# Verify libraries were built
|
||||
if [ -f "libnostr_core.a" ] && [ -f "libnostr_core_arm64.a" ]; then
|
||||
print_success "Both libraries and examples built successfully"
|
||||
ls -la libnostr_core*.a
|
||||
ls -la examples/
|
||||
perform_git_operations "$COMMIT_MESSAGE"
|
||||
else
|
||||
print_error "Failed to build libraries for examples"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
test)
|
||||
print_status "Running tests..."
|
||||
make clean
|
||||
make
|
||||
if make test-crypto 2>/dev/null; then
|
||||
print_success "All tests passed"
|
||||
else
|
||||
print_warning "Running simple test instead..."
|
||||
make test
|
||||
print_success "Basic test completed"
|
||||
fi
|
||||
;;
|
||||
|
||||
tests)
|
||||
print_status "Running tests..."
|
||||
make clean
|
||||
make
|
||||
if make test-crypto 2>/dev/null; then
|
||||
print_success "All tests passed"
|
||||
else
|
||||
print_warning "Running simple test instead..."
|
||||
make test
|
||||
print_success "Basic test completed"
|
||||
fi
|
||||
;;
|
||||
|
||||
install)
|
||||
increment_version
|
||||
print_status "Installing library to system..."
|
||||
make clean
|
||||
make all
|
||||
sudo make install
|
||||
print_success "Library installed to /usr/local"
|
||||
perform_git_operations "$COMMIT_MESSAGE"
|
||||
;;
|
||||
|
||||
uninstall)
|
||||
print_status "Uninstalling library from system..."
|
||||
sudo make uninstall
|
||||
print_success "Library uninstalled"
|
||||
;;
|
||||
|
||||
help|--help|-h)
|
||||
show_usage
|
||||
;;
|
||||
|
||||
*)
|
||||
print_error "Unknown target: $TARGET"
|
||||
echo ""
|
||||
show_usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
|
@ -0,0 +1,150 @@
|
|||
#!/bin/bash
|
||||
|
||||
# increment_and_push.sh - Version increment and git automation script
|
||||
# Usage: ./increment_and_push.sh "meaningful git comment"
|
||||
|
||||
set -e # Exit on error
|
||||
|
||||
# Color constants
|
||||
RED='\033[31m'
|
||||
GREEN='\033[32m'
|
||||
YELLOW='\033[33m'
|
||||
BLUE='\033[34m'
|
||||
BOLD='\033[1m'
|
||||
RESET='\033[0m'
|
||||
|
||||
# Function to print output with colors
|
||||
print_info() {
|
||||
if [ "$USE_COLORS" = true ]; then
|
||||
echo -e "${BLUE}[INFO]${RESET} $1"
|
||||
else
|
||||
echo "[INFO] $1"
|
||||
fi
|
||||
}
|
||||
|
||||
print_success() {
|
||||
if [ "$USE_COLORS" = true ]; then
|
||||
echo -e "${GREEN}${BOLD}[SUCCESS]${RESET} $1"
|
||||
else
|
||||
echo "[SUCCESS] $1"
|
||||
fi
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
if [ "$USE_COLORS" = true ]; then
|
||||
echo -e "${YELLOW}[WARNING]${RESET} $1"
|
||||
else
|
||||
echo "[WARNING] $1"
|
||||
fi
|
||||
}
|
||||
|
||||
print_error() {
|
||||
if [ "$USE_COLORS" = true ]; then
|
||||
echo -e "${RED}${BOLD}[ERROR]${RESET} $1"
|
||||
else
|
||||
echo "[ERROR] $1"
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if we're in the correct directory
|
||||
CURRENT_DIR=$(basename "$(pwd)")
|
||||
if [ "$CURRENT_DIR" != "nostr_core_lib" ]; then
|
||||
print_error "Script must be run from the nostr_core_lib directory"
|
||||
echo ""
|
||||
echo "Current directory: $CURRENT_DIR"
|
||||
echo "Expected directory: nostr_core_lib"
|
||||
echo ""
|
||||
echo "Please change to the nostr_core_lib directory first."
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if git repository exists
|
||||
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
||||
print_error "Not a git repository. Please initialize git first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if we have a commit message
|
||||
if [ $# -eq 0 ]; then
|
||||
print_error "Usage: $0 \"meaningful git comment\""
|
||||
echo ""
|
||||
echo "Example: $0 \"Add enhanced subscription functionality\""
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMMIT_MESSAGE="$1"
|
||||
|
||||
# Check if nostr_core.h exists
|
||||
if [ ! -f "nostr_core/nostr_core.h" ]; then
|
||||
print_error "nostr_core/nostr_core.h not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_info "Starting version increment and push process..."
|
||||
|
||||
# Extract current version from nostr_core.h
|
||||
CURRENT_VERSION=$(grep '#define VERSION ' nostr_core/nostr_core.h | cut -d'"' -f2)
|
||||
if [ -z "$CURRENT_VERSION" ]; then
|
||||
print_error "Could not find VERSION define in nostr_core.h"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract version components
|
||||
VERSION_MAJOR=$(grep '#define VERSION_MAJOR ' nostr_core/nostr_core.h | awk '{print $3}')
|
||||
VERSION_MINOR=$(grep '#define VERSION_MINOR ' nostr_core/nostr_core.h | awk '{print $3}')
|
||||
VERSION_PATCH=$(grep '#define VERSION_PATCH ' nostr_core/nostr_core.h | awk '{print $3}')
|
||||
|
||||
if [ -z "$VERSION_MAJOR" ] || [ -z "$VERSION_MINOR" ] || [ -z "$VERSION_PATCH" ]; then
|
||||
print_error "Could not extract version components from nostr_core.h"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_info "Current version: $CURRENT_VERSION (Major: $VERSION_MAJOR, Minor: $VERSION_MINOR, Patch: $VERSION_PATCH)"
|
||||
|
||||
# Increment patch version
|
||||
NEW_PATCH=$((VERSION_PATCH + 1))
|
||||
NEW_VERSION="v$VERSION_MAJOR.$VERSION_MINOR.$NEW_PATCH"
|
||||
|
||||
print_info "New version will be: $NEW_VERSION"
|
||||
|
||||
# Update version in nostr_core.h
|
||||
sed -i "s/#define VERSION .*/#define VERSION \"$NEW_VERSION\"/" nostr_core/nostr_core.h
|
||||
sed -i "s/#define VERSION_PATCH .*/#define VERSION_PATCH $NEW_PATCH/" nostr_core/nostr_core.h
|
||||
|
||||
print_success "Updated version in nostr_core.h"
|
||||
|
||||
# Check if VERSION file exists and update it
|
||||
if [ -f "VERSION" ]; then
|
||||
echo "$VERSION_MAJOR.$VERSION_MINOR.$NEW_PATCH" > VERSION
|
||||
print_success "Updated VERSION file"
|
||||
fi
|
||||
|
||||
# Check git status
|
||||
if ! git diff --quiet; then
|
||||
print_info "Adding changes to git..."
|
||||
git add .
|
||||
|
||||
print_info "Committing changes..."
|
||||
git commit -m "$COMMIT_MESSAGE"
|
||||
|
||||
print_success "Changes committed"
|
||||
else
|
||||
print_warning "No changes to commit"
|
||||
fi
|
||||
|
||||
# Create and push git tag
|
||||
print_info "Creating git tag: $NEW_VERSION"
|
||||
git tag "$NEW_VERSION"
|
||||
|
||||
print_info "Pushing commits and tags..."
|
||||
git push origin main
|
||||
git push origin "$NEW_VERSION"
|
||||
|
||||
print_success "Version $NEW_VERSION successfully released!"
|
||||
print_info "Git commit: $COMMIT_MESSAGE"
|
||||
print_info "Tag: $NEW_VERSION"
|
||||
|
||||
echo ""
|
||||
echo "🎉 Release complete! Version $NEW_VERSION is now live."
|
|
@ -100,12 +100,27 @@ struct nostr_pool_subscription {
|
|||
|
||||
// Callbacks
|
||||
void (*on_event)(cJSON* event, const char* relay_url, void* user_data);
|
||||
void (*on_eose)(void* user_data);
|
||||
void (*on_eose)(cJSON** events, int event_count, void* user_data);
|
||||
void* user_data;
|
||||
|
||||
int closed;
|
||||
int close_on_eose; // Auto-close subscription when all relays send EOSE
|
||||
nostr_relay_pool_t* pool; // Back reference to pool
|
||||
|
||||
// New subscription control parameters
|
||||
int enable_deduplication; // Per-subscription deduplication control
|
||||
nostr_pool_eose_result_mode_t result_mode; // EOSE result selection mode
|
||||
int relay_timeout_seconds; // Timeout for individual relay operations
|
||||
int eose_timeout_seconds; // Timeout for waiting for EOSE completion
|
||||
time_t subscription_start_time; // When subscription was created
|
||||
|
||||
// Event collection for EOSE result modes
|
||||
cJSON** collected_events;
|
||||
int collected_event_count;
|
||||
int collected_events_capacity;
|
||||
|
||||
// Per-relay timeout tracking
|
||||
time_t* relay_last_activity; // Last activity time per relay
|
||||
};
|
||||
|
||||
struct nostr_relay_pool {
|
||||
|
@ -544,9 +559,13 @@ nostr_pool_subscription_t* nostr_relay_pool_subscribe(
|
|||
int relay_count,
|
||||
cJSON* filter,
|
||||
void (*on_event)(cJSON* event, const char* relay_url, void* user_data),
|
||||
void (*on_eose)(void* user_data),
|
||||
void (*on_eose)(cJSON** events, int event_count, void* user_data),
|
||||
void* user_data,
|
||||
int close_on_eose) {
|
||||
int close_on_eose,
|
||||
int enable_deduplication,
|
||||
nostr_pool_eose_result_mode_t result_mode,
|
||||
int relay_timeout_seconds,
|
||||
int eose_timeout_seconds) {
|
||||
|
||||
if (!pool || !relay_urls || relay_count <= 0 || !filter ||
|
||||
pool->subscription_count >= NOSTR_POOL_MAX_SUBSCRIPTIONS) {
|
||||
|
@ -603,6 +622,55 @@ nostr_pool_subscription_t* nostr_relay_pool_subscribe(
|
|||
sub->closed = 0;
|
||||
sub->close_on_eose = close_on_eose;
|
||||
sub->pool = pool;
|
||||
|
||||
// Set new subscription control parameters
|
||||
sub->enable_deduplication = enable_deduplication;
|
||||
sub->result_mode = result_mode;
|
||||
sub->relay_timeout_seconds = relay_timeout_seconds;
|
||||
sub->eose_timeout_seconds = eose_timeout_seconds;
|
||||
sub->subscription_start_time = time(NULL);
|
||||
|
||||
// Initialize event collection arrays (only for EOSE result modes)
|
||||
if (result_mode != NOSTR_POOL_EOSE_FIRST) {
|
||||
sub->collected_events_capacity = 10; // Initial capacity
|
||||
sub->collected_events = calloc(sub->collected_events_capacity, sizeof(cJSON*));
|
||||
if (!sub->collected_events) {
|
||||
// Cleanup on failure
|
||||
cJSON_Delete(sub->filter);
|
||||
for (int j = 0; j < relay_count; j++) {
|
||||
free(sub->relay_urls[j]);
|
||||
}
|
||||
free(sub->relay_urls);
|
||||
free(sub->eose_received);
|
||||
free(sub);
|
||||
return NULL;
|
||||
}
|
||||
sub->collected_event_count = 0;
|
||||
} else {
|
||||
sub->collected_events = NULL;
|
||||
sub->collected_event_count = 0;
|
||||
sub->collected_events_capacity = 0;
|
||||
}
|
||||
|
||||
// Initialize per-relay activity tracking
|
||||
sub->relay_last_activity = calloc(relay_count, sizeof(time_t));
|
||||
if (!sub->relay_last_activity) {
|
||||
// Cleanup on failure
|
||||
if (sub->collected_events) free(sub->collected_events);
|
||||
cJSON_Delete(sub->filter);
|
||||
for (int j = 0; j < relay_count; j++) {
|
||||
free(sub->relay_urls[j]);
|
||||
}
|
||||
free(sub->relay_urls);
|
||||
free(sub->eose_received);
|
||||
free(sub);
|
||||
return NULL;
|
||||
}
|
||||
// Initialize all relay activity times to current time
|
||||
time_t now = time(NULL);
|
||||
for (int i = 0; i < relay_count; i++) {
|
||||
sub->relay_last_activity[i] = now;
|
||||
}
|
||||
|
||||
// Add to pool
|
||||
pool->subscriptions[pool->subscription_count++] = sub;
|
||||
|
@ -700,43 +768,56 @@ static void process_relay_message(nostr_relay_pool_t* pool, relay_connection_t*
|
|||
if (event_id_json && cJSON_IsString(event_id_json)) {
|
||||
const char* event_id = cJSON_GetStringValue(event_id_json);
|
||||
|
||||
// Check for duplicate
|
||||
if (!is_event_seen(pool, event_id)) {
|
||||
mark_event_seen(pool, event_id);
|
||||
relay->stats.events_received++;
|
||||
|
||||
// Measure query latency (first event response)
|
||||
double latency_ms = remove_subscription_timing(relay, subscription_id);
|
||||
if (latency_ms > 0.0) {
|
||||
// Update query latency statistics
|
||||
if (relay->stats.query_samples == 0) {
|
||||
relay->stats.query_latency_avg = latency_ms;
|
||||
relay->stats.query_latency_min = latency_ms;
|
||||
relay->stats.query_latency_max = latency_ms;
|
||||
} else {
|
||||
relay->stats.query_latency_avg =
|
||||
(relay->stats.query_latency_avg * relay->stats.query_samples + latency_ms) /
|
||||
(relay->stats.query_samples + 1);
|
||||
|
||||
if (latency_ms < relay->stats.query_latency_min) {
|
||||
relay->stats.query_latency_min = latency_ms;
|
||||
}
|
||||
if (latency_ms > relay->stats.query_latency_max) {
|
||||
relay->stats.query_latency_max = latency_ms;
|
||||
}
|
||||
}
|
||||
relay->stats.query_samples++;
|
||||
// Find subscription first
|
||||
nostr_pool_subscription_t* sub = NULL;
|
||||
for (int i = 0; i < pool->subscription_count; i++) {
|
||||
if (pool->subscriptions[i] && !pool->subscriptions[i]->closed &&
|
||||
strcmp(pool->subscriptions[i]->subscription_id, subscription_id) == 0) {
|
||||
sub = pool->subscriptions[i];
|
||||
break;
|
||||
}
|
||||
|
||||
// Find subscription and call callback
|
||||
for (int i = 0; i < pool->subscription_count; i++) {
|
||||
nostr_pool_subscription_t* sub = pool->subscriptions[i];
|
||||
if (sub && !sub->closed &&
|
||||
strcmp(sub->subscription_id, subscription_id) == 0) {
|
||||
if (sub->on_event) {
|
||||
sub->on_event(event, relay->url, sub->user_data);
|
||||
}
|
||||
|
||||
if (sub) {
|
||||
// Check for duplicate (per-subscription deduplication)
|
||||
int is_duplicate = 0;
|
||||
if (sub->enable_deduplication) {
|
||||
if (is_event_seen(pool, event_id)) {
|
||||
is_duplicate = 1;
|
||||
} else {
|
||||
mark_event_seen(pool, event_id);
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_duplicate) {
|
||||
relay->stats.events_received++;
|
||||
|
||||
// Measure query latency (first event response)
|
||||
double latency_ms = remove_subscription_timing(relay, subscription_id);
|
||||
if (latency_ms > 0.0) {
|
||||
// Update query latency statistics
|
||||
if (relay->stats.query_samples == 0) {
|
||||
relay->stats.query_latency_avg = latency_ms;
|
||||
relay->stats.query_latency_min = latency_ms;
|
||||
relay->stats.query_latency_max = latency_ms;
|
||||
} else {
|
||||
relay->stats.query_latency_avg =
|
||||
(relay->stats.query_latency_avg * relay->stats.query_samples + latency_ms) /
|
||||
(relay->stats.query_samples + 1);
|
||||
|
||||
if (latency_ms < relay->stats.query_latency_min) {
|
||||
relay->stats.query_latency_min = latency_ms;
|
||||
}
|
||||
if (latency_ms > relay->stats.query_latency_max) {
|
||||
relay->stats.query_latency_max = latency_ms;
|
||||
}
|
||||
}
|
||||
break;
|
||||
relay->stats.query_samples++;
|
||||
}
|
||||
|
||||
// Call event callback
|
||||
if (sub->on_event) {
|
||||
sub->on_event(event, relay->url, sub->user_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -776,7 +857,14 @@ static void process_relay_message(nostr_relay_pool_t* pool, relay_connection_t*
|
|||
|
||||
if (all_eose) {
|
||||
if (sub->on_eose) {
|
||||
sub->on_eose(sub->user_data);
|
||||
// Pass collected events based on result mode
|
||||
if (sub->result_mode == NOSTR_POOL_EOSE_FIRST) {
|
||||
// FIRST mode: no events collected, pass NULL/0
|
||||
sub->on_eose(NULL, 0, sub->user_data);
|
||||
} else {
|
||||
// FULL_SET or MOST_RECENT: pass collected events
|
||||
sub->on_eose(sub->collected_events, sub->collected_event_count, sub->user_data);
|
||||
}
|
||||
}
|
||||
|
||||
// Auto-close subscription if close_on_eose is enabled
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
#ifndef NOSTR_CORE_H
|
||||
#define NOSTR_CORE_H
|
||||
|
||||
// Version information (auto-updated by increment_and_push.sh)
|
||||
#define VERSION "v0.4.3"
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 4
|
||||
#define VERSION_PATCH 3
|
||||
|
||||
/*
|
||||
* NOSTR Core Library - Complete API Reference
|
||||
*
|
||||
|
@ -159,6 +165,13 @@ typedef enum {
|
|||
NOSTR_POOL_RELAY_ERROR = -1
|
||||
} nostr_pool_relay_status_t;
|
||||
|
||||
// EOSE result mode for subscriptions
|
||||
typedef enum {
|
||||
NOSTR_POOL_EOSE_FULL_SET, // Wait for all relays, return all events
|
||||
NOSTR_POOL_EOSE_MOST_RECENT, // Wait for all relays, return most recent event
|
||||
NOSTR_POOL_EOSE_FIRST // Return results on first EOSE (fastest response)
|
||||
} nostr_pool_eose_result_mode_t;
|
||||
|
||||
typedef struct {
|
||||
int connection_attempts;
|
||||
int connection_failures;
|
||||
|
@ -204,6 +217,22 @@ void nostr_relay_pool_destroy(nostr_relay_pool_t* pool);
|
|||
|
||||
// Subscription management
|
||||
nostr_pool_subscription_t* nostr_relay_pool_subscribe(
|
||||
nostr_relay_pool_t* pool,
|
||||
const char** relay_urls,
|
||||
int relay_count,
|
||||
cJSON* filter,
|
||||
void (*on_event)(cJSON* event, const char* relay_url, void* user_data),
|
||||
void (*on_eose)(cJSON** events, int event_count, void* user_data),
|
||||
void* user_data,
|
||||
int close_on_eose,
|
||||
int enable_deduplication,
|
||||
nostr_pool_eose_result_mode_t result_mode,
|
||||
int relay_timeout_seconds,
|
||||
int eose_timeout_seconds);
|
||||
int nostr_pool_subscription_close(nostr_pool_subscription_t* subscription);
|
||||
|
||||
// Backward compatibility wrapper
|
||||
nostr_pool_subscription_t* nostr_relay_pool_subscribe_compat(
|
||||
nostr_relay_pool_t* pool,
|
||||
const char** relay_urls,
|
||||
int relay_count,
|
||||
|
@ -212,7 +241,6 @@ nostr_pool_subscription_t* nostr_relay_pool_subscribe(
|
|||
void (*on_eose)(void* user_data),
|
||||
void* user_data,
|
||||
int close_on_eose);
|
||||
int nostr_pool_subscription_close(nostr_pool_subscription_t* subscription);
|
||||
|
||||
// Event loop functions
|
||||
int nostr_relay_pool_run(nostr_relay_pool_t* pool, int timeout_ms);
|
||||
|
|
852
pool.log
852
pool.log
|
@ -1,852 +1,2 @@
|
|||
[Thu Oct 2 11:42:57 2025] 🚀 Pool test started
|
||||
|
||||
[Thu Oct 2 11:43:01 2025] ðŸ<C3B0>Š Pool started with default relay
|
||||
|
||||
[Thu Oct 2 11:43:14 2025] âž• Relay added: wss://nos.lol
|
||||
|
||||
[Thu Oct 2 11:43:36 2025] ðŸ”<C5B8> New subscription created (ID: 1)
|
||||
Filter: {
|
||||
"kinds": [1],
|
||||
"since": 1759419809,
|
||||
"limit": 10
|
||||
}
|
||||
|
||||
[Thu Oct 2 11:43:36 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 5449492f915a...
|
||||
├── Pubkey: c231760b10ce...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419811
|
||||
└── Content: 💜💜💜💜💜💜💜💜💜💜💜💜 https://nostr.download/e27f32b258bbdfe1e73dc7d06...
|
||||
|
||||
[Thu Oct 2 11:43:36 2025] 📋 EOSE received - all stored events delivered
|
||||
|
||||
[Thu Oct 2 11:43:41 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: caf09bb60e64...
|
||||
├── Pubkey: e62adca21cf6...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419821
|
||||
└── Content: john is the best
|
||||
he likes to just stand there
|
||||
he likes to eat sugar cubes
|
||||
he mostly just stands t...
|
||||
|
||||
[Thu Oct 2 11:43:44 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: e01356b1bf0a...
|
||||
├── Pubkey: 0406b1bbbe74...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419823
|
||||
└── Content: ðŸ<C3B0>…ギルティーギアXX
|
||||
|
||||
[Thu Oct 2 11:44:00 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 5fad5c083762...
|
||||
├── Pubkey: db0445869e55...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419839
|
||||
└── Content: Nothing but the best will do for magic internet money.
|
||||
https://blossom.primal.net/5f7fbea898bfcf9...
|
||||
|
||||
[Thu Oct 2 11:44:10 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 7cc57da68132...
|
||||
├── Pubkey: 087fe3adb094...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419850
|
||||
└── Content: That is a classic film
|
||||
|
||||
[Thu Oct 2 11:44:15 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 609a860530f5...
|
||||
├── Pubkey: 17538dc2a627...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419855
|
||||
└── Content: ðŸ˜<C5B8>
|
||||
|
||||
Zurich?
|
||||
|
||||
[Thu Oct 2 11:44:16 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 6af068b23493...
|
||||
├── Pubkey: 2b1de1346ff1...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419856
|
||||
└── Content: Does your door work with a string? How is the door locked? Or can you still push it up?
|
||||
|
||||
[Thu Oct 2 11:44:23 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 8ab3cd207956...
|
||||
├── Pubkey: deab79dafa1c...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419864
|
||||
└── Content: I'll never understand why people believe folks who are paid to say others words professionally ðŸ...
|
||||
|
||||
[Thu Oct 2 11:44:31 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: d59a8d8dc608...
|
||||
├── Pubkey: e62adca21cf6...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419871
|
||||
└── Content: sometimes he hangs out with the unnamed donkey made of moonlight
|
||||
|
||||
he has friends
|
||||
|
||||
[Thu Oct 2 11:44:32 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 6c4978b1fce6...
|
||||
├── Pubkey: c831e221f166...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419872
|
||||
└── Content: It was the Russian... but then again, maybe not 🤣
|
||||
|
||||
https://blossom.primal.net/986df1efadeff5...
|
||||
|
||||
[Thu Oct 2 11:44:34 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 2a2f196a072c...
|
||||
├── Pubkey: d3f94b353542...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419872
|
||||
└── Content: #meme #bitcoin
|
||||
|
||||
|
||||
|
||||
https://blossom.primal.net/813e03107f57f4606a2d8a8c129c6df03524fcdcbcdce6cbbf...
|
||||
|
||||
[Thu Oct 2 11:44:43 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 9570719ae3ca...
|
||||
├── Pubkey: f7922a0adb3f...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419882
|
||||
└── Content: This is the show that started all this #DeMu talk and its unlike anything you've ever listened to...
|
||||
|
||||
[Thu Oct 2 11:44:54 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 4c9de90e324d...
|
||||
├── Pubkey: 16cb4b38fe9a...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419893
|
||||
└── Content: https://i.nostr.build/q6whqe8wlzMy6ubL.png
|
||||
Its that time again! We're closing in on the end of th...
|
||||
|
||||
[Thu Oct 2 11:44:55 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 3b5a6c87be19...
|
||||
├── Pubkey: 036533caa872...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419894
|
||||
└── Content: Yeah! I like to think I don't save anything unnecessary, or totally unusable, but it happens. Let...
|
||||
|
||||
[Thu Oct 2 11:44:57 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 37bb53f99114...
|
||||
├── Pubkey: b834a8c07a51...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419897
|
||||
└── Content: #Lafayette Indiana https://v.nostr.build/x3WmXwgR0CTEBJq9.mp4
|
||||
|
||||
[Thu Oct 2 11:45:00 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 3a7898a12c5e...
|
||||
├── Pubkey: d7c13d1edc3e...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419900
|
||||
└── Content: ✄------------ 0:45 ------------✄
|
||||
|
||||
[Thu Oct 2 11:45:01 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 315bfab7c206...
|
||||
├── Pubkey: 087fe3adb094...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419901
|
||||
└── Content: That is freaky
|
||||
|
||||
[Thu Oct 2 11:45:03 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 6f06e3704059...
|
||||
├── Pubkey: 35edf1096d3c...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419902
|
||||
└── Content: And how a normie is supposed to safeguard such an id from hacks? RFID under the skin?
|
||||
|
||||
|
||||
|
||||
[Thu Oct 2 11:45:03 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 0ae20b5693f0...
|
||||
├── Pubkey: ad0de68eb660...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419904
|
||||
└── Content: ความà¸<C3A0>ันà¸<C3A0>ับความหวังต่างà¸<C3A0>ันตรงไหน
|
||||
#si...
|
||||
|
||||
[Thu Oct 2 11:45:05 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: a11231aea6b5...
|
||||
├── Pubkey: f768fae9f239...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419904
|
||||
└── Content: #ãƒ<C3A3>ズワードランã‚ング
|
||||
|
||||
1ä½<EFBFBD>: #リボ (11)
|
||||
2ä½<EFBFBD>: #ã<>ªã<C2AA><C3A3> (5)
|
||||
3ä½<EFBFBD>: #ミã‚サー (5)
|
||||
4ä½...
|
||||
|
||||
[Thu Oct 2 11:45:10 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: fda1a94c635b...
|
||||
├── Pubkey: bdb827d5dd18...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419931
|
||||
└── Content: Have been saying this for minimum 6-10 months now
|
||||
|
||||
[Thu Oct 2 11:45:15 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: fbbb1a8e1883...
|
||||
├── Pubkey: d3f94b353542...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419913
|
||||
└── Content: #meme #bitcoin
|
||||
|
||||
|
||||
|
||||
https://blossom.primal.net/ea65f26f04fe282a56efc0c74b6f7881dcf95cf1bed76e9646...
|
||||
|
||||
[Thu Oct 2 11:45:18 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: dae37e3e2a01...
|
||||
├── Pubkey: f683e87035f7...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419916
|
||||
└── Content: 📊 Reliable nostr statistics now available at npub.world
|
||||
|
||||
https://blossom.primal.net/fe6d77745c...
|
||||
|
||||
[Thu Oct 2 11:45:21 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: e98f692cd821...
|
||||
├── Pubkey: 4cf2e85f2ecf...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419902
|
||||
└── Content: Market snapshot (2 Oct): PX 2,359.40 +0.33%; DAX 24,423.61 +1.29%; DJ STOXX 600 567.60 +0.52%; NA...
|
||||
|
||||
[Thu Oct 2 11:45:25 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: a4debf6eda9d...
|
||||
├── Pubkey: 6a02b7d5d5c1...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419924
|
||||
└── Content: Well, nostr:npub1f5kc2agn63ecv2ua4909z9ahgmr2x9263na36jh6r908ql0926jq3nvk2u has done an amazing j...
|
||||
|
||||
[Thu Oct 2 11:45:36 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 75edaab76e6a...
|
||||
├── Pubkey: d3f94b353542...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419934
|
||||
└── Content: #meme #bitcoin
|
||||
|
||||
|
||||
|
||||
https://blossom.primal.net/47e112b56565c473db0300b9f1c8e9026d31f29b2e5a9f26b6...
|
||||
|
||||
[Thu Oct 2 11:45:42 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: cce964ee26c3...
|
||||
├── Pubkey: 4e64c603aceb...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419942
|
||||
└── Content: ðŸ‘<C5B8>ðŸ<C3B0>»ðŸ‘<C5B8>ðŸ<C3B0>»ðŸ‘<C5B8>ðŸ<C3B0>»ðŸ‘<C5B8>ðŸ<C3B0>»ðŸ™<C5B8>ðŸ<C3B0>»
|
||||
|
||||
nostr:nevent1qqswaa533cykjc0vgxxmf8nmu2dg3g6uu0xdm5cw4...
|
||||
|
||||
[Thu Oct 2 11:45:43 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: bd66386bb0e4...
|
||||
├── Pubkey: fdf22dc28791...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419943
|
||||
└── Content: https://image.nostr.build/ebf0ff9e9675e82b53718cf515dcb1168f03968fe0108993f43991559093c853.jpg
|
||||
|
||||
[Thu Oct 2 11:45:44 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 3f1089f6f622...
|
||||
├── Pubkey: adc14fa3ad59...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419943
|
||||
└── Content: 🫵ðŸ<C3B0>»ðŸ™<C5B8>
|
||||
|
||||
[Thu Oct 2 11:45:47 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: b2db18db5304...
|
||||
├── Pubkey: d3f94b353542...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419945
|
||||
└── Content: #meme #bitcoin
|
||||
|
||||
|
||||
|
||||
https://blossom.primal.net/cb9eb04c5bb49d58a33c0e17425606f1e3357893cb6d47d3e0...
|
||||
|
||||
[Thu Oct 2 11:45:47 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: c0abb73c57da...
|
||||
├── Pubkey: 96ae8563bd22...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419947
|
||||
└── Content: Health insurance is a scam.
|
||||
|
||||
[Thu Oct 2 11:45:54 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 25eaedc2c644...
|
||||
├── Pubkey: d1f8ac7cfbac...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419952
|
||||
└── Content: Happy Belated Birthday! Hope you had a Funtastic day 🎉ðŸŽ<C5B8>ðŸ’<C5B8>🎂🎊
|
||||
|
||||
[Thu Oct 2 11:45:57 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 3b6919f20ecb...
|
||||
├── Pubkey: 52b4a076bcbb...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419957
|
||||
└── Content: gm Nostr.
|
||||
|
||||
[Thu Oct 2 11:45:58 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: d05a586a961a...
|
||||
├── Pubkey: 71c20e5545c5...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419957
|
||||
└── Content: Mood every morning
|
||||
https://blossom.primal.net/a4b9b97b0948f6ab25036c52ce3580db28dd52396f1f3d7277...
|
||||
|
||||
[Thu Oct 2 11:46:02 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 93af19a07911...
|
||||
├── Pubkey: f683e87035f7...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419961
|
||||
└── Content: cc nostr:nprofile1qy2hwumn8ghj7ct8vaezumn0wd68ytnvv9hxgqg4waehxw309a5xjum59ehx7um5wghxcctwvsqzpmn...
|
||||
|
||||
[Thu Oct 2 11:46:06 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 92450741c3db...
|
||||
├── Pubkey: 8384e79741c1...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419967
|
||||
└── Content: It looks like some one with Parkinson's made it.
|
||||
|
||||
|
||||
|
||||
[Thu Oct 2 11:46:16 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: f0b1fa224498...
|
||||
├── Pubkey: d3f94b353542...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419974
|
||||
└── Content: #meme #bitcoin
|
||||
BUY BITCOIN
|
||||
|
||||
|
||||
|
||||
https://blossom.primal.net/cc20ee3b13ecfc84fef02edf5c6bde6ee12431...
|
||||
|
||||
[Thu Oct 2 11:46:20 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 8b05cc12eb5c...
|
||||
├── Pubkey: f40901c9f844...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419979
|
||||
└── Content: Pick a Random Open PR #2003
|
||||
タイトル: Use nip22 style tags in git statuses
|
||||
作æˆ<EFBFBD>者: dluvian...
|
||||
|
||||
[Thu Oct 2 11:46:23 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: e48131f4ad3e...
|
||||
├── Pubkey: 899ab335d3b0...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419983
|
||||
└── Content: Bitcoin is invading trad-fi.
|
||||
nostr:nevent1qqsxnxk6dc6gwthdd74em4tlrkecnyfg2zss3thdl390ja06qyhaf6g...
|
||||
|
||||
[Thu Oct 2 11:46:26 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: db3417a1ea38...
|
||||
├── Pubkey: 4cf2e85f2ecf...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419967
|
||||
└── Content: Commerzbank’s latest forecasts suggest the US economy will grow this year and next slightly bel...
|
||||
|
||||
[Thu Oct 2 11:46:27 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 9ef2f62d6b90...
|
||||
├── Pubkey: e62adca21cf6...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419986
|
||||
└── Content: they, john and the no name donkey,
|
||||
just kinda walk around or are still
|
||||
|
||||
ive never seen john get ...
|
||||
|
||||
[Thu Oct 2 11:46:28 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 764def10463e...
|
||||
├── Pubkey: f5e67a824944...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419986
|
||||
└── Content: compro mosquitos wolbachia ¿alguien?
|
||||
|
||||
[Thu Oct 2 11:46:33 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 67c7dd1bcba2...
|
||||
├── Pubkey: 04c960497af6...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419993
|
||||
└── Content: Oh, I didn't now we were orange , had a tail and ðŸ<C3B0>¾ðŸ<C3B0>¾ 🤔
|
||||
Maybe I am delusional 🤔😅
|
||||
|
||||
...
|
||||
|
||||
[Thu Oct 2 11:46:36 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: afe890faef3e...
|
||||
├── Pubkey: 17538dc2a627...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419996
|
||||
└── Content: https://npub.world/stats
|
||||
|
||||
🤌🤌
|
||||
|
||||
nostr:nevent1qqsd4cm78c4qrlskgp870qhh7qt9sepn98gp0utj2gk6v5j4...
|
||||
|
||||
[Thu Oct 2 11:46:51 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 7acc74259799...
|
||||
├── Pubkey: a3e4cba409d3...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419989
|
||||
└── Content:
|
||||
|
||||
https://uploads.postiz.com/3264e94fb1b846c8bfccf59e48d8bf85.png
|
||||
|
||||
[Thu Oct 2 11:46:58 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 2fd4cd59789e...
|
||||
├── Pubkey: 0b26f590631b...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420017
|
||||
└── Content: 🤣🤣🤣
|
||||
|
||||
[Thu Oct 2 11:47:01 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 9c46471834c1...
|
||||
├── Pubkey: 2b1de1346ff1...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420021
|
||||
└── Content: https://cdn.nostrcheck.me/1c674155c4f713054ec8a10df5eaa5636d243df40d07447980f1885642d706c1.webp
|
||||
|
||||
...
|
||||
|
||||
[Thu Oct 2 11:47:04 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 51a4d7c2106c...
|
||||
├── Pubkey: bc0bcc50f9a1...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420023
|
||||
└── Content: ألÙ<E2809E> مبروك 🥳 والله يرزقكم برهم وصلاØÙ‡Ù… والØÙ…دلله على ...
|
||||
|
||||
[Thu Oct 2 11:47:06 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: b63745941271...
|
||||
├── Pubkey: 6a02b7d5d5c1...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420018
|
||||
└── Content: Gm agitator
|
||||
|
||||
[Thu Oct 2 11:47:06 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: ed874935ec1d...
|
||||
├── Pubkey: 0406b1bbbe74...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420025
|
||||
└── Content: ã<>Šã‚„ã<E2809E>®ã<C2AE>™ðŸŒ”
|
||||
https://youtu.be/bOSWJTu5Prw?si=oT3DtqbpbOp0VDrr
|
||||
|
||||
[Thu Oct 2 11:47:06 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 0e32734cbc67...
|
||||
├── Pubkey: 17538dc2a627...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420025
|
||||
└── Content: https://image.nostr.build/7304775744fef9bc979a1940fb31202045b8b06f1ebfe90141266eeb28c52417.jpg
|
||||
|
||||
n...
|
||||
|
||||
[Thu Oct 2 11:47:21 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 56acfa902e7d...
|
||||
├── Pubkey: d981591e0ea6...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419861
|
||||
└── Content: DiversityWatch (October 2, 2025)
|
||||
|
||||
From Amerika.org
|
||||
|
||||
~~~ ADL Deletes ‘Extremism’ Database Afte...
|
||||
|
||||
[Thu Oct 2 11:47:25 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: faf15824f3bf...
|
||||
├── Pubkey: deab79dafa1c...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420047
|
||||
└── Content: GM semi 🫡
|
||||
|
||||
[Thu Oct 2 11:47:32 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: ea997cd30e54...
|
||||
├── Pubkey: e62adca21cf6...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420052
|
||||
└── Content: firewood or foraged pennyroyal
|
||||
|
||||
but he doesnt work that much
|
||||
|
||||
i would never call him a beast of b...
|
||||
|
||||
[Thu Oct 2 11:47:38 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: fe973c7c45f5...
|
||||
├── Pubkey: 0b26f590631b...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420057
|
||||
└── Content: Sorry brother 😬🤣 I was restarting router
|
||||
|
||||
[Thu Oct 2 11:47:39 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: f7f07c0a6a4d...
|
||||
├── Pubkey: 356875ffd729...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420059
|
||||
└── Content: You want to get as far away from the lipid profile of seed oils as you can.
|
||||
|
||||
Terrible = canola oi...
|
||||
|
||||
[Thu Oct 2 11:47:51 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: d5af40b4e947...
|
||||
├── Pubkey: edb470271297...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420072
|
||||
└── Content: 10 years ago I emerged from the woods to build something more
|
||||
|
||||
Now after having done so I feel t...
|
||||
|
||||
[Thu Oct 2 11:47:59 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 4abc3d65f486...
|
||||
├── Pubkey: af5e5c0f30b2...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420078
|
||||
└── Content: Dear me✨
|
||||
|
||||
Brave and beautiful one.
|
||||
From now on and till the end of your earthly journey, I will...
|
||||
|
||||
[Thu Oct 2 11:48:01 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: f0f30b54f0ae...
|
||||
├── Pubkey: d3f94b353542...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420079
|
||||
└── Content: #meme #bitcoin
|
||||
Ignore the direction of the school.
|
||||
Keep stacking sats, fish.
|
||||
|
||||
|
||||
|
||||
https://blossom....
|
||||
|
||||
[Thu Oct 2 11:48:05 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: c5935c3e834b...
|
||||
├── Pubkey: 3f770d65d3a7...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420085
|
||||
└── Content: Nice looking rooster, bro.
|
||||
|
||||
[Thu Oct 2 11:48:07 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: db0b8148c793...
|
||||
├── Pubkey: a4132de3f6fe...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420086
|
||||
└── Content: Intercepted Gaza flotilla boats arrive at Israel’s Ashdod port
|
||||
|
||||
Several boats from the Global S...
|
||||
|
||||
[Thu Oct 2 11:48:09 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: a61672484b30...
|
||||
├── Pubkey: e62adca21cf6...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420089
|
||||
└── Content: thats what i know about john
|
||||
|
||||
he stands there and he sometimes has company
|
||||
|
||||
[Thu Oct 2 11:48:10 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: be57235ebb4b...
|
||||
├── Pubkey: 01438c6f3044...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419985
|
||||
└── Content: Ex-OpenAI researcher dissects one of ChatGPT’s delusional spirals
|
||||
https://techcrunch.com/2025/1...
|
||||
|
||||
[Thu Oct 2 11:48:10 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 299ebf1ac3aa...
|
||||
├── Pubkey: 0d211376b2c9...
|
||||
├── Kind: 1
|
||||
├── Created: 1759419938
|
||||
└── Content: The best Amazon Prime Day deals on Anker charging gear and other accessories
|
||||
https://www.engadget...
|
||||
|
||||
[Thu Oct 2 11:48:16 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 1b9e8c4b3ee3...
|
||||
├── Pubkey: 17538dc2a627...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420095
|
||||
└── Content: ðŸ<C3B0>”
|
||||
|
||||
nostr:nevent1qqsfc3j8rq6vr75c3k7xsmd945u49dfxwsshnh9z4pm2s27wl4ymjtcppamhxue69uhkumewwd68yt...
|
||||
|
||||
[Thu Oct 2 11:48:16 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: dbce08f706dd...
|
||||
├── Pubkey: 36af108c2769...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420096
|
||||
└── Content: You don’t want your total cholesterol crazy high but don’t want it too low either. Mainstream...
|
||||
|
||||
[Thu Oct 2 11:48:42 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: a69f3dd53072...
|
||||
├── Pubkey: 6a02b7d5d5c1...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420119
|
||||
└── Content: Well looks like I have to look back for that one
|
||||
|
||||
[Thu Oct 2 11:48:45 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 8c11338af6bb...
|
||||
├── Pubkey: 71c20e5545c5...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420125
|
||||
└── Content: mood every morning
|
||||
https://blossom.primal.net/2de495138c52e3e71f19c437d4e2a83a78b215018dcf88f074...
|
||||
|
||||
[Thu Oct 2 11:48:55 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 09c37f81cd31...
|
||||
├── Pubkey: 8c5923931963...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420132
|
||||
└── Content: プラãƒ<C3A3>ナã<C5A0>«ã<C2AB>ªã<C2AA>£ã<C2A3>¦ã‚‹
|
||||
|
||||
[Thu Oct 2 11:48:56 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 7d80f283a966...
|
||||
├── Pubkey: 17538dc2a627...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420135
|
||||
└── Content: ðŸ˜<C5B8>
|
||||
|
||||
nostr:nevent1qqsxkzjr6tmef5kxng3c4p4nk58lkmr2jm60y60jmszrha64fpnuy2sppamhxue69uhkumewwd68yt...
|
||||
|
||||
[Thu Oct 2 11:48:57 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 55927691ba22...
|
||||
├── Pubkey: b63581fed371...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420136
|
||||
└── Content: â€<C3A2>Crypto Live Dealer Baccarat Redefines Online Gaming
|
||||
|
||||
The integration of blockchain technology ...
|
||||
|
||||
[Thu Oct 2 11:49:04 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 230569d0c203...
|
||||
├── Pubkey: 367cccfb659a...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420143
|
||||
└── Content: Original post: https://bsky.app/profile/did:plc:vrg5pyvxe6havmn5hiqqae22/post/3m274m4enuk2r https...
|
||||
|
||||
[Thu Oct 2 11:49:12 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: d9578c93625a...
|
||||
├── Pubkey: 50d94fc2d858...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420152
|
||||
└── Content: nostr:nprofile1qqsqa6p85dhghvx0cjpu7xrj0qgc939pd3v2ew36uttmz40qxu8f8wq8vdeta what's your favorit...
|
||||
|
||||
[Thu Oct 2 11:49:12 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: b8c5d604f68f...
|
||||
├── Pubkey: 17538dc2a627...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420152
|
||||
└── Content: If you have failed hard at birds I want to follow you
|
||||
|
||||
#farmstr
|
||||
|
||||
nostr:nevent1qqsqesh3dfqcyxmpf4p...
|
||||
|
||||
[Thu Oct 2 11:49:19 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: db5cb3126f16...
|
||||
├── Pubkey: cb230a5e9341...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420158
|
||||
└── Content: ã‚<C3A3>ã<EFBFBD><C3A3>ã€<C3A3>プラãƒ<C3A3>ナã<C5A0>£ã<C2A3>¦ã<C2A6>™ã<E284A2>”ã<E2809D>„ã<E2809E>§ã<C2A7>™ã<E284A2>〜ï¼<C3AF>ã<EFBFBD>Šã‚<C3A3>ã<EFBFBD>§ã<C2A7>¨ã<C2A8>†ã<E280A0>”ã<E2809D>–ã<E28093>„ã<E2809E>¾ã<C2BE>™ï¼<C3AF>ã<EFBFBD>©ã‚“ã<E2809C>ªã<C2AA>µã...
|
||||
|
||||
[Thu Oct 2 11:49:20 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 0b559f2c7aab...
|
||||
├── Pubkey: bf2376e17ba4...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420160
|
||||
└── Content: funny that I haven’t seen people being unnecessarily mean about core/knots on nostr, or maybe I...
|
||||
|
||||
[Thu Oct 2 11:49:22 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 225ec974be70...
|
||||
├── Pubkey: d981591e0ea6...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420041
|
||||
└── Content: The Shadowy Legacy of Andrew McCabe
|
||||
|
||||
From Roger Stone
|
||||
|
||||
Andrew McCabe, former Deputy Director of t...
|
||||
|
||||
[Thu Oct 2 11:49:23 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 6409e853ab14...
|
||||
├── Pubkey: d3f94b353542...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420162
|
||||
└── Content: It's a neverending paretto within the 20%.
|
||||
|
||||
|
||||
|
||||
[Thu Oct 2 11:49:32 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 492c3b86c6b2...
|
||||
├── Pubkey: 1848313553d3...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420172
|
||||
└── Content: Again, allowed yes. You should phrase your questions differently.
|
||||
The answer to if we "should all...
|
||||
|
||||
[Thu Oct 2 11:49:39 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 3df638b9b7bd...
|
||||
├── Pubkey: 5bab615f042d...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420178
|
||||
└── Content: betaã<61>«äººæ¨©ã<C2A9>ªã<C2AA>„ã<E2809E>£ã<C2A3>¦ã<C2A6>„ã<E2809E><C3A3>らã<E280B0>©ã‚“ã<E2809C>•ã‚“ã<E2809C>«è¨€ã‚<C3A3>れã<C592>Ÿã<C5B8>‹ã‚‰
|
||||
|
||||
[Thu Oct 2 11:49:44 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 9fc1d1f3c429...
|
||||
├── Pubkey: cf3a2db57981...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420184
|
||||
└── Content: Das ist nun die geputzte „Auslese“ für die erste richtige Pilzfanne in diesem Jahr 😋😋ð...
|
||||
|
||||
[Thu Oct 2 11:49:54 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 6b20ca81b8d9...
|
||||
├── Pubkey: 50d94fc2d858...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420193
|
||||
└── Content: nostr:nprofile1qqsqa6p85dhghvx0cjpu7xrj0qgc939pd3v2ew36uttmz40qxu8f8wq8vdeta can you hear me
|
||||
|
||||
[Thu Oct 2 11:49:54 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: a28bc5751cf3...
|
||||
├── Pubkey: 479ec16d345e...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420194
|
||||
└── Content: คิดถึงà¹<C3A0>ชมป์เหมืà¸à¸™à¸<C3A0>ัน เจà¸à¸<C3A0>ันเชียงใ...
|
||||
|
||||
[Thu Oct 2 11:50:00 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: bb9570ecdbb2...
|
||||
├── Pubkey: b1b4105a564a...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420200
|
||||
└── Content: ✄------------ 0:50 ------------✄
|
||||
|
||||
[Thu Oct 2 11:50:02 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 877bfd84cb78...
|
||||
├── Pubkey: 8c5923931963...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420199
|
||||
└── Content: ã<>Ÿã<C5B8>¶ã‚“有料ã<E284A2>®ã<C2AE>—ã<E28094>‹ã‚‚ã<E2809A>¡ã‚‡ã<E280A1>£ã<C2A3>¨ã<C2A8>„ã<E2809E>„プランã<C2B3>˜ã‚ƒã‚“
|
||||
|
||||
[Thu Oct 2 11:50:08 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: d2a24f8bd654...
|
||||
├── Pubkey: 832b77d5ecb0...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420208
|
||||
└── Content: 🟩BUY BTC with EUR
|
||||
Price: 102390.56EUR (0%)
|
||||
BTC: 0.023
|
||||
EUR: 2355
|
||||
Method: SEPA Instant
|
||||
Created: ...
|
||||
|
||||
[Thu Oct 2 11:50:09 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 4d617918bff3...
|
||||
├── Pubkey: b7a07661869d...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420209
|
||||
└── Content: Le consensus de Nakamoto – Episode 22
|
||||
Dans cette vidéo, Cyril Grunspan utilise à nouveau un m...
|
||||
|
||||
[Thu Oct 2 11:50:14 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: d60c3b59af2e...
|
||||
├── Pubkey: ff9f3daff5dc...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420210
|
||||
└── Content: 🥞 ¡#PancakeSwap pulveriza su propio récord! El DEX multichain alcanzó $749 mil millones en ...
|
||||
|
||||
[Thu Oct 2 11:50:19 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 347c25fe60e8...
|
||||
├── Pubkey: 45835c36f41d...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420218
|
||||
└── Content: btw i use this for everything, i love it:
|
||||
https://github.com/purifyjs/core
|
||||
|
||||
[Thu Oct 2 11:50:20 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 21c1e474706a...
|
||||
├── Pubkey: 367cccfb659a...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420219
|
||||
└── Content: Original post: https://bsky.app/profile/did:plc:keg3c3lhpxiihjho4e7auzaq/post/3m27frfqb7225 https...
|
||||
|
||||
[Thu Oct 2 11:50:25 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 540e8564dd09...
|
||||
├── Pubkey: 5bab615f042d...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420225
|
||||
└── Content: 何ã<E280A2>‹ã<E280B9>—らã<E280B0>®ç„¡åˆ¶é™<C3A9>ã<EFBFBD>Œã<C592>¤ã<C2A4><C3A3>ã‚„ã<E2809E>¤
|
||||
|
||||
[Thu Oct 2 11:50:26 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: b40bae265610...
|
||||
├── Pubkey: 957dd3687817...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420216
|
||||
└── Content: Jimmy Kimmel Calls Trump a 'Son of a Bitch,’ Says Government Shutdown Allows Him to ‘Say What...
|
||||
|
||||
[Thu Oct 2 11:50:27 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 4d880eb2bdfb...
|
||||
├── Pubkey: 5729ad991a7e...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420226
|
||||
└── Content: #asknostr how do you channel your creativity or excess energy?
|
||||
Or when you feel low, how do you ...
|
||||
|
||||
[Thu Oct 2 11:50:30 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 590e23e23d0f...
|
||||
├── Pubkey: ded3db391584...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420229
|
||||
└── Content: insert mia martini
|
||||
|
||||
https://image.nostr.build/9d8ebd836f785a679932f89113809ee63fcbb70d05f31daf5bc...
|
||||
|
||||
[Thu Oct 2 11:50:30 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 239892245953...
|
||||
├── Pubkey: 50d94fc2d858...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420230
|
||||
└── Content: nostr:nprofile1qqsqa6p85dhghvx0cjpu7xrj0qgc939pd3v2ew36uttmz40qxu8f8wq8vdeta hey
|
||||
|
||||
[Thu Oct 2 11:50:37 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 19ec03e4b586...
|
||||
├── Pubkey: 2ff7f5a3df59...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420236
|
||||
└── Content: Hulu Bender's New Look | Futurama | Hulu commercial
|
||||
#Hulu #abancommercials #commercial Video Hulu...
|
||||
|
||||
[Thu Oct 2 11:50:38 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 9575e4b84ac2...
|
||||
├── Pubkey: e62adca21cf6...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420237
|
||||
└── Content: john-knee?
|
||||
johnny yea i know a johnny
|
||||
like human john
|
||||
not active friendship but no quarrel
|
||||
|
||||
[Thu Oct 2 11:50:47 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 9ca71ff6759f...
|
||||
├── Pubkey: 2ff7f5a3df59...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420247
|
||||
└── Content: Xbox Announcing new updates to Xbox Game Pass Ultimate commercial
|
||||
#Xbox #abancommercials #commerc...
|
||||
|
||||
[Thu Oct 2 11:50:48 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 95a8a2fc10cb...
|
||||
├── Pubkey: edc615f59aa8...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420247
|
||||
└── Content: African what? Lol...
|
||||
|
||||
[Thu Oct 2 11:50:50 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 6156127e4923...
|
||||
├── Pubkey: 000001c66890...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420249
|
||||
└── Content: You think the neckline is bold? You should meet the attitude
|
||||
https://images2.imgbox.com/bf/a0/90...
|
||||
|
||||
[Thu Oct 2 11:50:58 2025] 📨 EVENT from wss://nos.lol
|
||||
├── ID: 92d07c3f1344...
|
||||
├── Pubkey: 2ff7f5a3df59...
|
||||
├── Kind: 1
|
||||
├── Created: 1759420257
|
||||
└── Content: How to save your progress in Ghost of Yotei
|
||||
#GhostofYotei #GamingGuide #GameTips Learn
|
||||
how to sa...
|
||||
[Thu Oct 2 14:40:34 2025] 🚀 Pool test started
|
||||
|
||||
|
|
BIN
tests/pool_test
BIN
tests/pool_test
Binary file not shown.
|
@ -73,13 +73,22 @@ void on_event(cJSON* event, const char* relay_url, void* user_data) {
|
|||
}
|
||||
|
||||
// EOSE callback - called when End of Stored Events is received
|
||||
void on_eose(void* user_data) {
|
||||
void on_eose(cJSON** events, int event_count, void* user_data) {
|
||||
(void)user_data;
|
||||
time_t now = time(NULL);
|
||||
char timestamp[26];
|
||||
ctime_r(&now, timestamp);
|
||||
timestamp[24] = '\0';
|
||||
dprintf(log_fd, "[%s] 📋 EOSE received - all stored events delivered\n\n", timestamp);
|
||||
dprintf(log_fd, "[%s] 📋 EOSE received - %d events collected\n", timestamp, event_count);
|
||||
|
||||
// Log collected events if any
|
||||
for (int i = 0; i < event_count; i++) {
|
||||
cJSON* id = cJSON_GetObjectItem(events[i], "id");
|
||||
if (id && cJSON_IsString(id)) {
|
||||
dprintf(log_fd, " Event %d: %.12s...\n", i + 1, cJSON_GetStringValue(id));
|
||||
}
|
||||
}
|
||||
dprintf(log_fd, "\n");
|
||||
}
|
||||
|
||||
// Background polling thread
|
||||
|
@ -270,7 +279,7 @@ void add_subscription() {
|
|||
int close_on_eose = (close_input && strcmp(close_input, "y") == 0) ? 1 : 0;
|
||||
free(close_input);
|
||||
|
||||
// Create subscription
|
||||
// Create subscription with new parameters
|
||||
nostr_pool_subscription_t* sub = nostr_relay_pool_subscribe(
|
||||
pool,
|
||||
(const char**)relay_urls,
|
||||
|
@ -279,7 +288,11 @@ void add_subscription() {
|
|||
on_event,
|
||||
on_eose,
|
||||
NULL,
|
||||
close_on_eose
|
||||
close_on_eose,
|
||||
1, // enable_deduplication
|
||||
NOSTR_POOL_EOSE_FULL_SET, // result_mode
|
||||
30, // relay_timeout_seconds
|
||||
60 // eose_timeout_seconds
|
||||
);
|
||||
|
||||
// Free relay URLs
|
||||
|
|
Binary file not shown.
|
@ -62,9 +62,17 @@ void on_event(cJSON* event, const char* relay_url, void* user_data) {
|
|||
}
|
||||
|
||||
// EOSE callback - called when End of Stored Events is received
|
||||
void on_eose(void* user_data) {
|
||||
void on_eose(cJSON** events, int event_count, void* user_data) {
|
||||
(void)user_data; // Suppress unused parameter warning
|
||||
printf("📋 EOSE received - all stored events delivered\n");
|
||||
printf("📋 EOSE received - %d events collected\n", event_count);
|
||||
|
||||
// Log collected events if any
|
||||
for (int i = 0; i < event_count; i++) {
|
||||
cJSON* id = cJSON_GetObjectItem(events[i], "id");
|
||||
if (id && cJSON_IsString(id)) {
|
||||
printf(" Event %d: %.12s...\n", i + 1, cJSON_GetStringValue(id));
|
||||
}
|
||||
}
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
|
@ -174,7 +182,7 @@ int main() {
|
|||
printf("%s\n\n", filter_json);
|
||||
free(filter_json);
|
||||
|
||||
// Create subscription
|
||||
// Create subscription with new parameters
|
||||
nostr_pool_subscription_t* subscription = nostr_relay_pool_subscribe(
|
||||
pool,
|
||||
relay_urls,
|
||||
|
@ -183,7 +191,11 @@ int main() {
|
|||
on_event, // Event callback
|
||||
on_eose, // EOSE callback
|
||||
NULL, // User data (not used)
|
||||
0 // close_on_eose (false - keep subscription open)
|
||||
0, // close_on_eose (false - keep subscription open)
|
||||
1, // enable_deduplication
|
||||
NOSTR_POOL_EOSE_FULL_SET, // result_mode
|
||||
30, // relay_timeout_seconds
|
||||
60 // eose_timeout_seconds
|
||||
);
|
||||
|
||||
if (!subscription) {
|
||||
|
|
Loading…
Reference in New Issue