tyler_efm_client 1.0.0.pre.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/tyler_efm_client'
5
+
6
+ ##
7
+ # Tyler EFM Client - Authentication Example
8
+ #
9
+ # This example demonstrates how to authenticate with Tyler EFM services
10
+ # using the tyler_efm_client gem.
11
+ def main
12
+ puts 'Tyler EFM Client - Authentication Example'
13
+ puts '=' * 50
14
+
15
+ # Initialize the client
16
+ client = TylerEfmClient::Client.new
17
+
18
+ # Configuration - REPLACE WITH YOUR ACTUAL VALUES
19
+ base_url = 'https://georgia-stage.tylertech.cloud/EFM/EFMUserService.svc'
20
+ pfx_file = 'path/to/your/certificate.pfx' # Path to your PFX certificate
21
+ pfx_password = 'your-pfx-password' # PFX certificate password
22
+ user_email = 'your-email@example.com' # Your EFM user email
23
+ user_password = 'your-password' # Your EFM user password
24
+
25
+ begin
26
+ puts 'šŸ” Authenticating with Tyler EFM...'
27
+
28
+ # Authenticate
29
+ auth_result = client.authenticate(
30
+ base_url: base_url,
31
+ pfx_file: pfx_file,
32
+ pfx_password: pfx_password,
33
+ user_email: user_email,
34
+ user_password: user_password
35
+ )
36
+
37
+ if auth_result.success?
38
+ puts 'āœ… Authentication successful!'
39
+ puts " Password Hash: #{auth_result.password_hash}"
40
+ puts " User ID: #{auth_result.user_id}"
41
+ puts " Name: #{auth_result.first_name} #{auth_result.last_name}"
42
+ puts " Email: #{auth_result.email}"
43
+ puts " Expires: #{auth_result.expiration_date}"
44
+
45
+ # Store the password hash for subsequent service calls
46
+ password_hash = auth_result.password_hash
47
+ puts "\nšŸ’” Save this password hash for service calls: #{password_hash}"
48
+
49
+ else
50
+ puts 'āŒ Authentication failed!'
51
+ puts " Error Code: #{auth_result.error_code}"
52
+ puts " Error Message: #{auth_result.error_message}"
53
+ end
54
+
55
+ rescue TylerEfmClient::AuthenticationError => e
56
+ puts "āŒ Authentication error: #{e.message}"
57
+ rescue TylerEfmClient::Error => e
58
+ puts "āŒ EFM client error: #{e.message}"
59
+ rescue StandardError => e
60
+ puts "āŒ Unexpected error: #{e.message}"
61
+ end
62
+ end
63
+
64
+ main if __FILE__ == $0
@@ -0,0 +1,149 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/tyler_efm_client'
5
+
6
+ ##
7
+ # Tyler EFM Client - Complete Workflow Example
8
+ #
9
+ # This example demonstrates a complete workflow:
10
+ # 1. Authentication
11
+ # 2. GetCaseList operation
12
+ # 3. Multiple service calls with the same client
13
+ def main
14
+ puts 'Tyler EFM Client - Complete Workflow Example'
15
+ puts '=' * 60
16
+
17
+ # Configuration - REPLACE WITH YOUR ACTUAL VALUES
18
+ config = {
19
+ user_service_url: 'https://georgia-stage.tylertech.cloud/EFM/EFMUserService.svc',
20
+ court_service_url: 'https://georgia-stage.tylertech.cloud/efm/v5/CourtRecordService.svc',
21
+ pfx_file: 'path/to/your/certificate.pfx',
22
+ pfx_password: 'your-pfx-password',
23
+ user_email: 'your-email@example.com',
24
+ user_password: 'your-password'
25
+ }
26
+
27
+ # Initialize the client (reuse for multiple operations)
28
+ client = TylerEfmClient::Client.new
29
+
30
+ begin
31
+ # Step 1: Authentication
32
+ puts 'šŸ” Step 1: Authenticating with Tyler EFM...'
33
+
34
+ auth_result = client.authenticate(
35
+ base_url: config[:user_service_url],
36
+ pfx_file: config[:pfx_file],
37
+ pfx_password: config[:pfx_password],
38
+ user_email: config[:user_email],
39
+ user_password: config[:user_password]
40
+ )
41
+
42
+ unless auth_result.success?
43
+ puts "āŒ Authentication failed: #{auth_result.error_message}"
44
+ return
45
+ end
46
+
47
+ puts 'āœ… Authentication successful!'
48
+ puts " User: #{auth_result.first_name} #{auth_result.last_name}"
49
+ puts " Email: #{auth_result.email}"
50
+ puts " Password Hash: #{auth_result.password_hash}"
51
+
52
+ # Step 2: GetCaseList Operation
53
+ puts "\nšŸ“‹ Step 2: Getting case list..."
54
+
55
+ case_list_body = <<~SOAP
56
+ <wrappers:GetCaseListRequest xmlns:wrappers="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/wrappers">
57
+ <caselistrequest:GetCaseListRequestMessage
58
+ xmlns:caselistrequest="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/caselistrequest"
59
+ xmlns:j="http://release.niem.gov/niem/domains/jxdm/6.1/"
60
+ xmlns:nc="http://release.niem.gov/niem/niem-core/4.0/"
61
+ xmlns:tylercommon="urn:tyler:ecf:v5.0:extensions:common"
62
+ xmlns:ecf="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/ecf">
63
+
64
+ <nc:DocumentIdentification/>
65
+ <ecf:SendingMDELocationID>
66
+ <nc:IdentificationID>https://filingassemblymde.com</nc:IdentificationID>
67
+ </ecf:SendingMDELocationID>
68
+ <ecf:ServiceInteractionProfileCode>urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:WebServicesMessaging-5.0</ecf:ServiceInteractionProfileCode>
69
+ <j:CaseCourt>
70
+ <nc:OrganizationIdentification>
71
+ <nc:IdentificationID>fulton:mag</nc:IdentificationID>
72
+ </nc:OrganizationIdentification>
73
+ </j:CaseCourt>
74
+ <nc:DocumentPostDate>
75
+ <nc:DateTime>2025-06-27T20:00:00.000000Z</nc:DateTime>
76
+ </nc:DocumentPostDate>
77
+ <caselistrequest:CaseListQueryCriteria>
78
+ <tylercommon:CaseListQueryCriteriaAugmentation>
79
+ <j:CaseNumberText>23MPF011258</j:CaseNumberText>
80
+ </tylercommon:CaseListQueryCriteriaAugmentation>
81
+ </caselistrequest:CaseListQueryCriteria>
82
+ </caselistrequest:GetCaseListRequestMessage>
83
+ </wrappers:GetCaseListRequest>
84
+ SOAP
85
+
86
+ response = client.call_service(
87
+ base_url: config[:court_service_url],
88
+ password_hash: auth_result.password_hash,
89
+ operation: 'GetCaseList',
90
+ soap_body: case_list_body,
91
+ user_email: config[:user_email],
92
+ return_json: false # Get raw XML this time
93
+ )
94
+
95
+ if response.success?
96
+ puts 'āœ… GetCaseList successful!'
97
+ puts " Response length: #{response.raw_xml.length} characters"
98
+
99
+ # Quick case extraction from XML
100
+ if response.raw_xml.include?('CaseNumberText')
101
+ puts ' šŸ“ Found case data in response'
102
+ else
103
+ puts ' āš ļø No case data found'
104
+ end
105
+ else
106
+ puts "āŒ GetCaseList failed: HTTP #{response.status_code}"
107
+ end
108
+
109
+ # Step 3: Demonstrate multiple calls with same client
110
+ puts "\nšŸ”„ Step 3: Making another call with same client..."
111
+
112
+ # You can make multiple calls without re-authenticating
113
+ # The client retains the certificate and can be reused
114
+
115
+ # Example: Call a User Service operation
116
+ user_service_body = <<~SOAP
117
+ <tns:GetUser xmlns:tns="urn:tyler:efm:services">
118
+ <tns:GetUserRequest>
119
+ <UserID xmlns="urn:tyler:efm:services:schema:GetUserRequest">#{auth_result.user_id}</UserID>
120
+ </tns:GetUserRequest>
121
+ </tns:GetUser>
122
+ SOAP
123
+
124
+ user_response = client.call_service(
125
+ base_url: config[:user_service_url],
126
+ password_hash: auth_result.password_hash,
127
+ operation: 'GetUser',
128
+ soap_body: user_service_body
129
+ )
130
+
131
+ if user_response.success?
132
+ puts 'āœ… GetUser call successful!'
133
+ else
134
+ puts "ā„¹ļø GetUser call: HTTP #{user_response.status_code} (expected - may need different parameters)"
135
+ end
136
+
137
+ puts "\nšŸŽ‰ Workflow completed successfully!"
138
+ puts ' Total operations: Authentication + 2 service calls'
139
+ puts ' Client reused: āœ…'
140
+ puts ' Certificate handling: Automatic'
141
+
142
+ rescue TylerEfmClient::Error => e
143
+ puts "āŒ EFM client error: #{e.message}"
144
+ rescue StandardError => e
145
+ puts "āŒ Unexpected error: #{e.message}"
146
+ end
147
+ end
148
+
149
+ main if __FILE__ == $0
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/tyler_efm_client'
5
+
6
+ ##
7
+ # Tyler EFM Client - GetCaseList Example
8
+ #
9
+ # This example demonstrates how to call the GetCaseList operation
10
+ # using the tyler_efm_client gem.
11
+ def main
12
+ puts 'Tyler EFM Client - GetCaseList Example'
13
+ puts '=' * 50
14
+
15
+ # Initialize the client
16
+ client = TylerEfmClient::Client.new
17
+
18
+ # Configuration - REPLACE WITH YOUR ACTUAL VALUES
19
+ user_service_url = 'https://georgia-stage.tylertech.cloud/EFM/EFMUserService.svc'
20
+ court_service_url = 'https://georgia-stage.tylertech.cloud/efm/v5/CourtRecordService.svc'
21
+ pfx_file = 'path/to/your/certificate.pfx'
22
+ pfx_password = 'your-pfx-password'
23
+ user_email = 'your-email@example.com'
24
+ user_password = 'your-password'
25
+ case_number = '23MPF011258' # Example case number
26
+
27
+ begin
28
+ puts 'šŸ” Step 1: Authenticating...'
29
+
30
+ # First, authenticate to get password hash
31
+ auth_result = client.authenticate(
32
+ base_url: user_service_url,
33
+ pfx_file: pfx_file,
34
+ pfx_password: pfx_password,
35
+ user_email: user_email,
36
+ user_password: user_password
37
+ )
38
+
39
+ unless auth_result.success?
40
+ puts "āŒ Authentication failed: #{auth_result.error_message}"
41
+ return
42
+ end
43
+
44
+ puts "āœ… Authentication successful! Password hash: #{auth_result.password_hash}"
45
+
46
+ puts "\nšŸ“‹ Step 2: Building GetCaseList request..."
47
+
48
+ # Build GetCaseList SOAP body
49
+ soap_body = <<~SOAP
50
+ <wrappers:GetCaseListRequest xmlns:wrappers="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/wrappers">
51
+ <caselistrequest:GetCaseListRequestMessage
52
+ xmlns:caselistrequest="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/caselistrequest"
53
+ xmlns:j="http://release.niem.gov/niem/domains/jxdm/6.1/"
54
+ xmlns:nc="http://release.niem.gov/niem/niem-core/4.0/"
55
+ xmlns:tylercommon="urn:tyler:ecf:v5.0:extensions:common"
56
+ xmlns:ecf="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/ecf">
57
+
58
+ <nc:DocumentIdentification/>
59
+
60
+ <ecf:SendingMDELocationID>
61
+ <nc:IdentificationID>https://filingassemblymde.com</nc:IdentificationID>
62
+ </ecf:SendingMDELocationID>
63
+
64
+ <ecf:ServiceInteractionProfileCode>urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:WebServicesMessaging-5.0</ecf:ServiceInteractionProfileCode>
65
+
66
+ <j:CaseCourt>
67
+ <nc:OrganizationIdentification>
68
+ <nc:IdentificationID>fulton:mag</nc:IdentificationID>
69
+ </nc:OrganizationIdentification>
70
+ </j:CaseCourt>
71
+
72
+ <nc:DocumentPostDate>
73
+ <nc:DateTime>2025-06-27T20:00:00.000000Z</nc:DateTime>
74
+ </nc:DocumentPostDate>
75
+
76
+ <caselistrequest:CaseListQueryCriteria>
77
+ <tylercommon:CaseListQueryCriteriaAugmentation>
78
+ <j:CaseNumberText>#{case_number}</j:CaseNumberText>
79
+ </tylercommon:CaseListQueryCriteriaAugmentation>
80
+ </caselistrequest:CaseListQueryCriteria>
81
+
82
+ </caselistrequest:GetCaseListRequestMessage>
83
+ </wrappers:GetCaseListRequest>
84
+ SOAP
85
+
86
+ puts 'šŸ“¤ Step 3: Calling GetCaseList service...'
87
+
88
+ # Call GetCaseList service
89
+ response = client.call_service(
90
+ base_url: court_service_url,
91
+ password_hash: auth_result.password_hash,
92
+ operation: 'GetCaseList',
93
+ soap_body: soap_body,
94
+ user_email: user_email,
95
+ return_json: true # Get JSON response for easier parsing
96
+ )
97
+
98
+ if response.success?
99
+ puts 'āœ… GetCaseList call successful!'
100
+
101
+ if response.json_data
102
+ puts "\nšŸŽÆ JSON Response Summary:"
103
+ # Navigate the JSON structure to find cases
104
+ begin
105
+ envelope = response.json_data
106
+ body = envelope['Body'] || {}
107
+ case_list_response = body['GetCaseListResponse'] || {}
108
+ message = case_list_response['GetCaseListResponseMessage'] || {}
109
+ cases = message['Case'] || []
110
+
111
+ cases = [cases] unless cases.is_a?(Array) # Single case
112
+
113
+ puts " Found #{cases.length} case(s):"
114
+ cases.each_with_index do |case_data, index|
115
+ case_number = case_data.dig('CaseAugmentation', 'CaseNumberText') || 'N/A'
116
+ case_title = case_data['CaseTitleText'] || 'N/A'
117
+ puts " #{index + 1}. Case: #{case_number}"
118
+ puts " Title: #{case_title}"
119
+ end
120
+
121
+ rescue StandardError => parse_error
122
+ puts " JSON parsing note: #{parse_error.message}"
123
+ puts ' (Raw response available in response.raw_xml)'
124
+ end
125
+ end
126
+
127
+ puts "\nšŸ“„ Raw XML Response Length: #{response.raw_xml.length} characters"
128
+
129
+ else
130
+ puts "āŒ GetCaseList call failed: HTTP #{response.status_code}"
131
+ puts " Error: #{response.error_message}" if response.error_message
132
+ puts " Response preview: #{response.raw_xml[0..499]}#{'...' if response.raw_xml.length > 500}"
133
+ end
134
+
135
+ rescue TylerEfmClient::Error => e
136
+ puts "āŒ EFM client error: #{e.message}"
137
+ rescue StandardError => e
138
+ puts "āŒ Unexpected error: #{e.message}"
139
+ end
140
+ end
141
+
142
+ main if __FILE__ == $0