Skip to content

LegionIO/lex-sftp

lex-sftp

SFTP file transfer for LegionIO. Upload, download, and manage files on SFTP servers from within task chains. Designed for healthcare file exchange (HL7, EDI, FHIR bundles).

Installation

gem install lex-sftp

Or add to your Gemfile:

gem 'lex-sftp'

Runners

FileOps

Method Parameters Description
upload local_path:, remote_path:, **opts Upload a file to the SFTP server
download remote_path:, local_path:, **opts Download a file from the SFTP server
delete remote_path:, **opts Remove a file from the SFTP server
rename old_path:, new_path:, **opts Rename or move a remote file
stat remote_path:, **opts Get file attributes (size, mtime, permissions)

All methods return { success: true/false, ... } hashes.

Directory

Method Parameters Description
list remote_path:, **opts List directory entries
mkdir remote_path:, **opts Create a remote directory
rmdir remote_path:, **opts Remove a remote directory
entries remote_path:, pattern: nil, **opts Filtered directory listing (glob pattern)

Transfer

Method Parameters Description
batch_upload files:, remote_dir:, **opts Upload an array of local file paths
batch_download files:, local_dir:, **opts Download an array of remote file paths
sync local_dir:, remote_dir:, direction: :upload, **opts Sync a directory (:upload or :download)

Authentication

Pass authentication kwargs alongside other parameters:

Parameter Description
host SFTP server hostname or IP
user SFTP username (default: 'sftp')
port SFTP port (default: 22)
password Password authentication
key_path Path to private key file
key_data Inline private key data
timeout Connection timeout in seconds (default: 30)

Standalone Client

Use Legion::Extensions::Sftp::Client outside the full LegionIO framework.

require 'legion/extensions/sftp'

client = Legion::Extensions::Sftp::Client.new(
  host:     'sftp.clearinghouse.example.com',
  user:     'hl7_sender',
  key_path: '/etc/legion/sftp_key'
)

# Upload HL7 message
client.upload(local_path: '/tmp/ADT_A01_20240101.hl7', remote_path: '/inbound/ADT_A01_20240101.hl7')

# List outbound results
result = client.entries(remote_path: '/outbound', pattern: '*.hl7')
result[:entries].each { |e| puts e[:name] }

# Download all results
client.sync(local_dir: '/tmp/results', remote_dir: '/outbound', direction: :download)

Constructor: Client.new(**opts). All kwargs are stored and passed through to Net::SFTP on each call.

Requirements

  • Ruby >= 3.4
  • SFTP server access
  • net-sftp ~> 4.0

License

MIT

About

LegionIO SFTP extension

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages