Skip to content

Commit f90dc6f

Browse files
Adding the phone number apis for usage in lkcli (#764)
1 parent 9ea660a commit f90dc6f

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed

phonenumberclient.go

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
// Copyright 2024 LiveKit, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package lksdk
16+
17+
import (
18+
"context"
19+
"net/http"
20+
"time"
21+
22+
"github.com/twitchtv/twirp"
23+
24+
"github.com/livekit/protocol/livekit"
25+
"github.com/livekit/protocol/utils/xtwirp"
26+
"github.com/livekit/server-sdk-go/v2/signalling"
27+
)
28+
29+
type PhoneNumberClient struct {
30+
phoneNumberClient livekit.PhoneNumberService
31+
authBase
32+
}
33+
34+
// NewPhoneNumberClient creates a LiveKit Phone Number client.
35+
func NewPhoneNumberClient(url string, apiKey string, secretKey string, opts ...twirp.ClientOption) *PhoneNumberClient {
36+
opts = append(opts, xtwirp.DefaultClientOptions()...)
37+
return &PhoneNumberClient{
38+
phoneNumberClient: livekit.NewPhoneNumberServiceProtobufClient(signalling.ToHttpURL(url), &http.Client{}, opts...),
39+
authBase: authBase{
40+
apiKey: apiKey,
41+
apiSecret: secretKey,
42+
},
43+
}
44+
}
45+
46+
// SearchPhoneNumbers searches for available phone numbers in inventory.
47+
func (p *PhoneNumberClient) SearchPhoneNumbers(ctx context.Context, in *livekit.SearchPhoneNumbersRequest) (*livekit.SearchPhoneNumbersResponse, error) {
48+
if in == nil {
49+
return nil, ErrInvalidParameter
50+
}
51+
52+
ctx, err := p.withAuth(ctx, withSIPGrant{Admin: true})
53+
if err != nil {
54+
return nil, err
55+
}
56+
57+
// Add timeout to prevent connection issues
58+
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
59+
defer cancel()
60+
61+
return p.phoneNumberClient.SearchPhoneNumbers(ctx, in)
62+
}
63+
64+
// PurchasePhoneNumber purchases a phone number from inventory.
65+
func (p *PhoneNumberClient) PurchasePhoneNumber(ctx context.Context, in *livekit.PurchasePhoneNumberRequest) (*livekit.PurchasePhoneNumberResponse, error) {
66+
if in == nil {
67+
return nil, ErrInvalidParameter
68+
}
69+
70+
ctx, err := p.withAuth(ctx, withSIPGrant{Admin: true})
71+
if err != nil {
72+
return nil, err
73+
}
74+
return p.phoneNumberClient.PurchasePhoneNumber(ctx, in)
75+
}
76+
77+
// ListPhoneNumbers lists phone numbers for a project.
78+
func (p *PhoneNumberClient) ListPhoneNumbers(ctx context.Context, in *livekit.ListPhoneNumbersRequest) (*livekit.ListPhoneNumbersResponse, error) {
79+
if in == nil {
80+
return nil, ErrInvalidParameter
81+
}
82+
83+
ctx, err := p.withAuth(ctx, withSIPGrant{Admin: true})
84+
if err != nil {
85+
return nil, err
86+
}
87+
return p.phoneNumberClient.ListPhoneNumbers(ctx, in)
88+
}
89+
90+
// GetPhoneNumber gets a phone number from a project.
91+
func (p *PhoneNumberClient) GetPhoneNumber(ctx context.Context, in *livekit.GetPhoneNumberRequest) (*livekit.GetPhoneNumberResponse, error) {
92+
if in == nil {
93+
return nil, ErrInvalidParameter
94+
}
95+
96+
ctx, err := p.withAuth(ctx, withSIPGrant{Admin: true})
97+
if err != nil {
98+
return nil, err
99+
}
100+
return p.phoneNumberClient.GetPhoneNumber(ctx, in)
101+
}
102+
103+
// UpdatePhoneNumber updates a phone number in a project.
104+
func (p *PhoneNumberClient) UpdatePhoneNumber(ctx context.Context, in *livekit.UpdatePhoneNumberRequest) (*livekit.UpdatePhoneNumberResponse, error) {
105+
if in == nil {
106+
return nil, ErrInvalidParameter
107+
}
108+
109+
ctx, err := p.withAuth(ctx, withSIPGrant{Admin: true})
110+
if err != nil {
111+
return nil, err
112+
}
113+
return p.phoneNumberClient.UpdatePhoneNumber(ctx, in)
114+
}
115+
116+
// ReleasePhoneNumbers releases phone numbers.
117+
func (p *PhoneNumberClient) ReleasePhoneNumbers(ctx context.Context, in *livekit.ReleasePhoneNumbersRequest) (*livekit.ReleasePhoneNumbersResponse, error) {
118+
if in == nil {
119+
return nil, ErrInvalidParameter
120+
}
121+
122+
ctx, err := p.withAuth(ctx, withSIPGrant{Admin: true})
123+
if err != nil {
124+
return nil, err
125+
}
126+
return p.phoneNumberClient.ReleasePhoneNumbers(ctx, in)
127+
}

0 commit comments

Comments
 (0)