File Coverage

blib/lib/SignalWire/Agents/REST/Namespaces/Fabric.pm
Criterion Covered Total %
statement 59 117 50.4
branch 0 16 0.0
condition n/a
subroutine 31 54 57.4
pod 0 24 0.0
total 90 211 42.6


line stmt bran cond sub pod time code
1             package SignalWire::Agents::REST::Namespaces::Fabric;
2 4     4   31 use strict;
  4         10  
  4         297  
3 4     4   49 use warnings;
  4         10  
  4         233  
4 4     4   27 use Moo;
  4         9  
  4         28  
5              
6             # --- Fabric Resource (PATCH updates) ---
7             package SignalWire::Agents::REST::Namespaces::Fabric::Resource;
8 4     4   2038 use Moo;
  4         20  
  4         18  
9             extends 'SignalWire::Agents::REST::Namespaces::CrudResource';
10              
11             sub list_addresses {
12 0     0 0 0 my ($self, $resource_id, %params) = @_;
13 0 0       0 my $p = %params ? \%params : undef;
14 0         0 return $self->_http->get($self->_path($resource_id, 'addresses'), params => $p);
15             }
16              
17             # --- Fabric Resource with PUT updates ---
18             package SignalWire::Agents::REST::Namespaces::Fabric::ResourcePUT;
19 4     4   2151 use Moo;
  4         10  
  4         43  
20             extends 'SignalWire::Agents::REST::Namespaces::Fabric::Resource';
21             has '+_update_method' => ( default => sub { 'PUT' } );
22              
23             # --- CallFlows ---
24             package SignalWire::Agents::REST::Namespaces::Fabric::CallFlows;
25 4     4   2008 use Moo;
  4         11  
  4         116  
26             extends 'SignalWire::Agents::REST::Namespaces::Fabric::ResourcePUT';
27              
28             sub list_addresses {
29 0     0 0 0 my ($self, $resource_id, %params) = @_;
30 0         0 (my $path = $self->_base_path) =~ s/call_flows/call_flow/;
31 0 0       0 my $p = %params ? \%params : undef;
32 0         0 return $self->_http->get("$path/$resource_id/addresses", params => $p);
33             }
34              
35             sub list_versions {
36 0     0 0 0 my ($self, $resource_id, %params) = @_;
37 0         0 (my $path = $self->_base_path) =~ s/call_flows/call_flow/;
38 0 0       0 my $p = %params ? \%params : undef;
39 0         0 return $self->_http->get("$path/$resource_id/versions", params => $p);
40             }
41              
42             sub deploy_version {
43 0     0 0 0 my ($self, $resource_id, %kwargs) = @_;
44 0         0 (my $path = $self->_base_path) =~ s/call_flows/call_flow/;
45 0         0 return $self->_http->post("$path/$resource_id/versions", body => \%kwargs);
46             }
47              
48             # --- ConferenceRooms ---
49             package SignalWire::Agents::REST::Namespaces::Fabric::ConferenceRooms;
50 4     4   3316 use Moo;
  4         32  
  4         24  
51             extends 'SignalWire::Agents::REST::Namespaces::Fabric::ResourcePUT';
52              
53             sub list_addresses {
54 0     0 0 0 my ($self, $resource_id, %params) = @_;
55 0         0 (my $path = $self->_base_path) =~ s/conference_rooms/conference_room/;
56 0 0       0 my $p = %params ? \%params : undef;
57 0         0 return $self->_http->get("$path/$resource_id/addresses", params => $p);
58             }
59              
60             # --- Subscribers ---
61             package SignalWire::Agents::REST::Namespaces::Fabric::Subscribers;
62 4     4   2651 use Moo;
  4         21  
  4         36  
63             extends 'SignalWire::Agents::REST::Namespaces::Fabric::ResourcePUT';
64              
65             sub list_sip_endpoints {
66 0     0 0 0 my ($self, $subscriber_id, %params) = @_;
67 0 0       0 my $p = %params ? \%params : undef;
68 0         0 return $self->_http->get($self->_path($subscriber_id, 'sip_endpoints'), params => $p);
69             }
70              
71             sub create_sip_endpoint {
72 0     0 0 0 my ($self, $subscriber_id, %kwargs) = @_;
73 0         0 return $self->_http->post($self->_path($subscriber_id, 'sip_endpoints'), body => \%kwargs);
74             }
75              
76             sub get_sip_endpoint {
77 0     0 0 0 my ($self, $subscriber_id, $endpoint_id) = @_;
78 0         0 return $self->_http->get($self->_path($subscriber_id, 'sip_endpoints', $endpoint_id));
79             }
80              
81             sub update_sip_endpoint {
82 0     0 0 0 my ($self, $subscriber_id, $endpoint_id, %kwargs) = @_;
83 0         0 return $self->_http->patch($self->_path($subscriber_id, 'sip_endpoints', $endpoint_id), body => \%kwargs);
84             }
85              
86             sub delete_sip_endpoint {
87 0     0 0 0 my ($self, $subscriber_id, $endpoint_id) = @_;
88 0         0 return $self->_http->delete_request($self->_path($subscriber_id, 'sip_endpoints', $endpoint_id));
89             }
90              
91             # --- CxmlApplications (no create) ---
92             package SignalWire::Agents::REST::Namespaces::Fabric::CxmlApplications;
93 4     4   3044 use Moo;
  4         8  
  4         20  
94             extends 'SignalWire::Agents::REST::Namespaces::Fabric::ResourcePUT';
95              
96             sub create {
97 2     2 0 5184 die "cXML applications cannot be created via this API";
98             }
99              
100             # --- GenericResources ---
101             package SignalWire::Agents::REST::Namespaces::Fabric::GenericResources;
102 4     4   2037 use Moo;
  4         9  
  4         18  
103             extends 'SignalWire::Agents::REST::Namespaces::Base';
104              
105             sub list {
106 0     0 0 0 my ($self, %params) = @_;
107 0 0       0 my $p = %params ? \%params : undef;
108 0         0 return $self->_http->get($self->_base_path, params => $p);
109             }
110              
111             sub get {
112 0     0 0 0 my ($self, $resource_id) = @_;
113 0         0 return $self->_http->get($self->_path($resource_id));
114             }
115              
116             sub delete_resource {
117 0     0 0 0 my ($self, $resource_id) = @_;
118 0         0 return $self->_http->delete_request($self->_path($resource_id));
119             }
120              
121             sub list_addresses {
122 0     0 0 0 my ($self, $resource_id, %params) = @_;
123 0 0       0 my $p = %params ? \%params : undef;
124 0         0 return $self->_http->get($self->_path($resource_id, 'addresses'), params => $p);
125             }
126              
127             sub assign_phone_route {
128 0     0 0 0 my ($self, $resource_id, %kwargs) = @_;
129 0         0 return $self->_http->post($self->_path($resource_id, 'phone_routes'), body => \%kwargs);
130             }
131              
132             sub assign_domain_application {
133 0     0 0 0 my ($self, $resource_id, %kwargs) = @_;
134 0         0 return $self->_http->post($self->_path($resource_id, 'domain_applications'), body => \%kwargs);
135             }
136              
137             # --- FabricAddresses (read-only) ---
138             package SignalWire::Agents::REST::Namespaces::Fabric::Addresses;
139 4     4   3137 use Moo;
  4         8  
  4         38  
140             extends 'SignalWire::Agents::REST::Namespaces::Base';
141              
142             sub list {
143 0     0 0 0 my ($self, %params) = @_;
144 0 0       0 my $p = %params ? \%params : undef;
145 0         0 return $self->_http->get($self->_base_path, params => $p);
146             }
147              
148             sub get {
149 0     0 0 0 my ($self, $address_id) = @_;
150 0         0 return $self->_http->get($self->_path($address_id));
151             }
152              
153             # --- FabricTokens ---
154             package SignalWire::Agents::REST::Namespaces::Fabric::Tokens;
155 4     4   2404 use Moo;
  4         10  
  4         40  
156             extends 'SignalWire::Agents::REST::Namespaces::Base';
157              
158             sub create_subscriber_token {
159 0     0 0 0 my ($self, %kwargs) = @_;
160 0         0 return $self->_http->post($self->_path('subscribers', 'tokens'), body => \%kwargs);
161             }
162              
163             sub refresh_subscriber_token {
164 0     0 0 0 my ($self, %kwargs) = @_;
165 0         0 return $self->_http->post($self->_path('subscribers', 'tokens', 'refresh'), body => \%kwargs);
166             }
167              
168             sub create_invite_token {
169 0     0 0 0 my ($self, %kwargs) = @_;
170 0         0 return $self->_http->post($self->_path('subscriber', 'invites'), body => \%kwargs);
171             }
172              
173             sub create_guest_token {
174 0     0 0 0 my ($self, %kwargs) = @_;
175 0         0 return $self->_http->post($self->_path('guests', 'tokens'), body => \%kwargs);
176             }
177              
178             sub create_embed_token {
179 0     0 0 0 my ($self, %kwargs) = @_;
180 0         0 return $self->_http->post($self->_path('embeds', 'tokens'), body => \%kwargs);
181             }
182              
183             # --- FabricNamespace (top-level grouping) ---
184             package SignalWire::Agents::REST::Namespaces::Fabric;
185 4     4   2935 use Moo;
  4         9  
  4         31  
186              
187             has '_http' => ( is => 'ro', required => 1 );
188              
189             has 'swml_scripts' => ( is => 'lazy' );
190             has 'relay_applications' => ( is => 'lazy' );
191             has 'call_flows' => ( is => 'lazy' );
192             has 'conference_rooms' => ( is => 'lazy' );
193             has 'freeswitch_connectors' => ( is => 'lazy' );
194             has 'subscribers' => ( is => 'lazy' );
195             has 'sip_endpoints' => ( is => 'lazy' );
196             has 'cxml_scripts' => ( is => 'lazy' );
197             has 'cxml_applications' => ( is => 'lazy' );
198             has 'swml_webhooks' => ( is => 'lazy' );
199             has 'ai_agents' => ( is => 'lazy' );
200             has 'sip_gateways' => ( is => 'lazy' );
201             has 'cxml_webhooks' => ( is => 'lazy' );
202             has 'resources' => ( is => 'lazy' );
203             has 'addresses' => ( is => 'lazy' );
204             has 'tokens' => ( is => 'lazy' );
205              
206             my $base = '/api/fabric/resources';
207              
208 2     2   6241 sub _build_swml_scripts { $_[0]->_mk('ResourcePUT', "$base/swml_scripts") }
209 2     2   2798 sub _build_relay_applications { $_[0]->_mk('ResourcePUT', "$base/relay_applications") }
210 2     2   3266 sub _build_call_flows { SignalWire::Agents::REST::Namespaces::Fabric::CallFlows->new(_http => $_[0]->_http, _base_path => "$base/call_flows") }
211 2     2   3465 sub _build_conference_rooms { SignalWire::Agents::REST::Namespaces::Fabric::ConferenceRooms->new(_http => $_[0]->_http, _base_path => "$base/conference_rooms") }
212 1     1   19 sub _build_freeswitch_connectors { $_[0]->_mk('ResourcePUT', "$base/freeswitch_connectors") }
213 2     2   2908 sub _build_subscribers { SignalWire::Agents::REST::Namespaces::Fabric::Subscribers->new(_http => $_[0]->_http, _base_path => "$base/subscribers") }
214 2     2   3387 sub _build_sip_endpoints { $_[0]->_mk('ResourcePUT', "$base/sip_endpoints") }
215 2     2   2388 sub _build_cxml_scripts { $_[0]->_mk('ResourcePUT', "$base/cxml_scripts") }
216 2     2   99 sub _build_cxml_applications { SignalWire::Agents::REST::Namespaces::Fabric::CxmlApplications->new(_http => $_[0]->_http, _base_path => "$base/cxml_applications") }
217 2     2   2826 sub _build_swml_webhooks { $_[0]->_mk('Resource', "$base/swml_webhooks") }
218 2     2   548 sub _build_ai_agents { $_[0]->_mk('Resource', "$base/ai_agents") }
219 2     2   401 sub _build_sip_gateways { $_[0]->_mk('Resource', "$base/sip_gateways") }
220 2     2   421 sub _build_cxml_webhooks { $_[0]->_mk('Resource', "$base/cxml_webhooks") }
221 2     2   6427 sub _build_resources { SignalWire::Agents::REST::Namespaces::Fabric::GenericResources->new(_http => $_[0]->_http, _base_path => $base) }
222 2     2   6047 sub _build_addresses { SignalWire::Agents::REST::Namespaces::Fabric::Addresses->new(_http => $_[0]->_http, _base_path => '/api/fabric/addresses') }
223 2     2   6772 sub _build_tokens { SignalWire::Agents::REST::Namespaces::Fabric::Tokens->new(_http => $_[0]->_http, _base_path => '/api/fabric') }
224              
225             sub _mk {
226 17     17   59 my ($self, $type, $path) = @_;
227 17         37 my $class = "SignalWire::Agents::REST::Namespaces::Fabric::$type";
228 17         371 return $class->new(_http => $self->_http, _base_path => $path);
229             }
230              
231             1;