File Coverage

blib/lib/SignalWire/Agents/REST/SignalWireClient.pm
Criterion Covered Total %
statement 95 95 100.0
branch n/a
condition n/a
subroutine 39 39 100.0
pod n/a
total 134 134 100.0


line stmt bran cond sub pod time code
1             package SignalWire::Agents::REST::SignalWireClient;
2 4     4   315844 use strict;
  4         10  
  4         201  
3 4     4   22 use warnings;
  4         9  
  4         229  
4 4     4   1831 use Moo;
  4         27539  
  4         25  
5              
6 4     4   7543 use SignalWire::Agents::REST::HttpClient;
  4         20  
  4         195  
7 4     4   1969 use SignalWire::Agents::REST::Namespaces::Base;
  4         18  
  4         186  
8 4     4   4017 use SignalWire::Agents::REST::Namespaces::Fabric;
  4         23  
  4         199  
9 4     4   3352 use SignalWire::Agents::REST::Namespaces::Calling;
  4         15  
  4         153  
10 4     4   2605 use SignalWire::Agents::REST::Namespaces::PhoneNumbers;
  4         17  
  4         192  
11 4     4   2718 use SignalWire::Agents::REST::Namespaces::Datasphere;
  4         14  
  4         150  
12 4     4   2707 use SignalWire::Agents::REST::Namespaces::Video;
  4         35  
  4         189  
13 4     4   3330 use SignalWire::Agents::REST::Namespaces::Compat;
  4         27  
  4         219  
14 4     4   3348 use SignalWire::Agents::REST::Namespaces::Resources;
  4         36  
  4         226  
15 4     4   2779 use SignalWire::Agents::REST::Namespaces::Registry;
  4         20  
  4         187  
16 4     4   2880 use SignalWire::Agents::REST::Namespaces::Logs;
  4         18  
  4         171  
17 4     4   2875 use SignalWire::Agents::REST::Namespaces::Project;
  4         19  
  4         160  
18 4     4   2644 use SignalWire::Agents::REST::Namespaces::PubSub;
  4         48  
  4         155  
19 4     4   2607 use SignalWire::Agents::REST::Namespaces::Chat;
  4         15  
  4         5148  
20              
21             has 'project' => ( is => 'ro', required => 1 );
22             has 'token' => ( is => 'ro', required => 1 );
23             has 'host' => ( is => 'ro', required => 1 );
24              
25             has '_http' => ( is => 'lazy' );
26              
27             # --- Namespaced sub-objects (all 21) ---
28              
29             # Fabric API
30             has 'fabric' => ( is => 'lazy' );
31              
32             # Calling API
33             has 'calling' => ( is => 'lazy' );
34              
35             # Relay REST resources
36             has 'phone_numbers' => ( is => 'lazy' );
37             has 'addresses' => ( is => 'lazy' );
38             has 'queues' => ( is => 'lazy' );
39             has 'recordings' => ( is => 'lazy' );
40             has 'number_groups' => ( is => 'lazy' );
41             has 'verified_callers' => ( is => 'lazy' );
42             has 'sip_profile' => ( is => 'lazy' );
43             has 'lookup' => ( is => 'lazy' );
44             has 'short_codes' => ( is => 'lazy' );
45             has 'imported_numbers' => ( is => 'lazy' );
46             has 'mfa' => ( is => 'lazy' );
47             has 'registry' => ( is => 'lazy' );
48              
49             # Datasphere API
50             has 'datasphere' => ( is => 'lazy' );
51              
52             # Video API
53             has 'video' => ( is => 'lazy' );
54              
55             # Logs
56             has 'logs' => ( is => 'lazy' );
57              
58             # Project management
59             has 'project_ns' => ( is => 'lazy' );
60              
61             # PubSub & Chat
62             has 'pubsub' => ( is => 'lazy' );
63             has 'chat' => ( is => 'lazy' );
64              
65             # Compatibility (Twilio-compatible) API
66             has 'compat' => ( is => 'lazy' );
67              
68             # --- Builders ---
69              
70             sub _build__http {
71 16     16   9163 my ($self) = @_;
72 16         477 return SignalWire::Agents::REST::HttpClient->new(
73             project => $self->project,
74             token => $self->token,
75             host => $self->host,
76             );
77             }
78              
79             sub _build_fabric {
80 4     4   434480 my ($self) = @_;
81 4         105 return SignalWire::Agents::REST::Namespaces::Fabric->new(_http => $self->_http);
82             }
83              
84             sub _build_calling {
85 5     5   205353 my ($self) = @_;
86 5         121 return SignalWire::Agents::REST::Namespaces::Calling->new(
87             _http => $self->_http,
88             _base_path => '/api/calling/calls',
89             );
90             }
91              
92             sub _build_phone_numbers {
93 4     4   2192 my ($self) = @_;
94 4         92 return SignalWire::Agents::REST::Namespaces::PhoneNumbers->new(
95             _http => $self->_http,
96             _base_path => '/api/relay/rest/phone_numbers',
97             );
98             }
99              
100             sub _build_addresses {
101 2     2   1342 my ($self) = @_;
102 2         40 return SignalWire::Agents::REST::Namespaces::Addresses->new(
103             _http => $self->_http,
104             _base_path => '/api/relay/rest/addresses',
105             );
106             }
107              
108             sub _build_queues {
109 3     3   5657 my ($self) = @_;
110 3         75 return SignalWire::Agents::REST::Namespaces::Queues->new(
111             _http => $self->_http,
112             _base_path => '/api/relay/rest/queues',
113             );
114             }
115              
116             sub _build_recordings {
117 2     2   1498 my ($self) = @_;
118 2         65 return SignalWire::Agents::REST::Namespaces::Recordings->new(
119             _http => $self->_http,
120             _base_path => '/api/relay/rest/recordings',
121             );
122             }
123              
124             sub _build_number_groups {
125 3     3   5968 my ($self) = @_;
126 3         72 return SignalWire::Agents::REST::Namespaces::NumberGroups->new(
127             _http => $self->_http,
128             _base_path => '/api/relay/rest/number_groups',
129             );
130             }
131              
132             sub _build_verified_callers {
133 3     3   1311 my ($self) = @_;
134 3         67 return SignalWire::Agents::REST::Namespaces::VerifiedCallers->new(
135             _http => $self->_http,
136             _base_path => '/api/relay/rest/verified_caller_ids',
137             );
138             }
139              
140             sub _build_sip_profile {
141 3     3   2030 my ($self) = @_;
142 3         83 return SignalWire::Agents::REST::Namespaces::SipProfile->new(
143             _http => $self->_http,
144             _base_path => '/api/relay/rest/sip_profile',
145             );
146             }
147              
148             sub _build_lookup {
149 3     3   8568 my ($self) = @_;
150 3         77 return SignalWire::Agents::REST::Namespaces::Lookup->new(
151             _http => $self->_http,
152             _base_path => '/api/relay/rest/lookup',
153             );
154             }
155              
156             sub _build_short_codes {
157 2     2   5323 my ($self) = @_;
158 2         45 return SignalWire::Agents::REST::Namespaces::ShortCodes->new(
159             _http => $self->_http,
160             _base_path => '/api/relay/rest/short_codes',
161             );
162             }
163              
164             sub _build_imported_numbers {
165 3     3   6787 my ($self) = @_;
166 3         74 return SignalWire::Agents::REST::Namespaces::ImportedNumbers->new(
167             _http => $self->_http,
168             _base_path => '/api/relay/rest/imported_phone_numbers',
169             );
170             }
171              
172             sub _build_mfa {
173 3     3   5758 my ($self) = @_;
174 3         71 return SignalWire::Agents::REST::Namespaces::MFA->new(
175             _http => $self->_http,
176             _base_path => '/api/relay/rest/mfa',
177             );
178             }
179              
180             sub _build_registry {
181 3     3   13038 my ($self) = @_;
182 3         67 return SignalWire::Agents::REST::Namespaces::Registry->new(_http => $self->_http);
183             }
184              
185             sub _build_datasphere {
186 3     3   21651 my ($self) = @_;
187 3         71 return SignalWire::Agents::REST::Namespaces::Datasphere->new(_http => $self->_http);
188             }
189              
190             sub _build_video {
191 3     3   6461 my ($self) = @_;
192 3         81 return SignalWire::Agents::REST::Namespaces::Video->new(_http => $self->_http);
193             }
194              
195             sub _build_logs {
196 3     3   11320 my ($self) = @_;
197 3         75 return SignalWire::Agents::REST::Namespaces::Logs->new(_http => $self->_http);
198             }
199              
200             sub _build_project_ns {
201 3     3   8378 my ($self) = @_;
202 3         72 return SignalWire::Agents::REST::Namespaces::Project->new(_http => $self->_http);
203             }
204              
205             sub _build_pubsub {
206 4     4   8657 my ($self) = @_;
207 4         204 return SignalWire::Agents::REST::Namespaces::PubSub->new(
208             _http => $self->_http,
209             _base_path => '/api/pubsub/tokens',
210             );
211             }
212              
213             sub _build_chat {
214 4     4   10553 my ($self) = @_;
215 4         97 return SignalWire::Agents::REST::Namespaces::Chat->new(
216             _http => $self->_http,
217             _base_path => '/api/chat/tokens',
218             );
219             }
220              
221             sub _build_compat {
222 3     3   10175 my ($self) = @_;
223 3         71 return SignalWire::Agents::REST::Namespaces::Compat->new(
224             _http => $self->_http,
225             account_sid => $self->project,
226             );
227             }
228              
229             1;