Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
89c37d2
chore: bump version to 3.0.0-dev
Fivell Apr 17, 2026
b6e0f4a
feat!: set default X-DIDWW-API-Version to 2026-04-16
Fivell Apr 17, 2026
fcd2113
feat!: rename requirement_validations resource to address_requirement…
Fivell Apr 17, 2026
628ec02
chore: gitignore .claude/ and coverage artifacts
Fivell Apr 17, 2026
718ee09
feat!: rename requirements resource to address_requirements
Fivell Apr 17, 2026
d3d9a53
feat!: rename AddressRequirementValidation#requirement relation to ad…
Fivell Apr 17, 2026
7a4e494
feat!: address_verifications#reject_reasons is now an array of strings
Fivell Apr 17, 2026
a37572b
feat!: rename DidGroup#requirement relation to address_requirement
Fivell Apr 17, 2026
ab9c28a
feat!: drop sms_out from did_groups features
Fivell Apr 17, 2026
1cbcb4e
feat!: rename DidReservation#expire_at to expires_at
Fivell Apr 17, 2026
68e6931
feat!: rename EncryptedFile#expire_at to expires_at
Fivell Apr 17, 2026
861c448
feat!: encrypted_files POST accepts a single file per request
Fivell Apr 17, 2026
74c2bf3
feat!: replace exports year/month filters with from/to datetime range
Fivell Apr 17, 2026
ce79f0f
feat!: add diversion_relay_policy to VoiceInTrunk SIP configuration
Fivell Apr 17, 2026
fe40a76
feat!: replace flat VoiceOutTrunk credentials with polymorphic authen…
Fivell Apr 17, 2026
d202850
feat: add DidHistory resource (/v3/did_history) for 2026-04-16
Fivell Apr 17, 2026
2a7768c
feat: add EmergencyRequirement resource (/v3/emergency_requirements) …
Fivell Apr 17, 2026
6a6eba9
feat: add EmergencyRequirementValidation resource (/v3/emergency_requ…
Fivell Apr 17, 2026
5a5f0e2
feat: add EmergencyCallingService resource (/v3/emergency_calling_ser…
Fivell Apr 17, 2026
99287b7
feat: add EmergencyVerification resource (/v3/emergency_verifications…
Fivell Apr 17, 2026
ed1754c
feat: add external_reference_id to Address for 2026-04-16
Fivell Apr 17, 2026
aa61086
feat: add reject_comment and external_reference_id to AddressVerifica…
Fivell Apr 17, 2026
d107e64
feat: support PATCH /address_verifications/:id to update external_ref…
Fivell Apr 17, 2026
fd8991b
feat: add external_reference_id to Export for 2026-04-16
Fivell Apr 17, 2026
780d4f6
feat: support PATCH /exports/:id to update external_reference_id (202…
Fivell Apr 17, 2026
98b02c7
feat: support PATCH /emergency_verifications/:id to update external_r…
Fivell Apr 17, 2026
39dda54
feat: add external_reference_id to Order for 2026-04-16
Fivell Apr 17, 2026
dc7af11
feat: add external_reference_id to PermanentSupportingDocument for 20…
Fivell Apr 17, 2026
c94a9f4
feat: add external_reference_id to Proof for 2026-04-16
Fivell Apr 17, 2026
67861a2
feat: add external_reference_id to SharedCapacityGroup for 2026-04-16
Fivell Apr 17, 2026
4f418a7
feat: add external_reference_id to VoiceInTrunkGroup for 2026-04-16
Fivell Apr 17, 2026
38fa917
feat: add external_reference_id to VoiceInTrunk for 2026-04-16
Fivell Apr 17, 2026
1c0c59c
feat: add external_reference_id to VoiceOutTrunk for 2026-04-16
Fivell Apr 17, 2026
7e4c5f6
feat: add emergency_enable_all to VoiceOutTrunk for 2026-04-16
Fivell Apr 17, 2026
17144ce
feat: add rtp_timeout to VoiceOutTrunk for 2026-04-16
Fivell Apr 17, 2026
c1c765d
feat: add emergency_dids has_many relationship to VoiceOutTrunk for 2…
Fivell Apr 17, 2026
161385f
feat: add emergency_enabled to Did for 2026-04-16
Fivell Apr 17, 2026
e9a2057
feat: add emergency_calling_service has_one relationship to Did for 2…
Fivell Apr 17, 2026
a83681d
feat: add emergency_verification has_one relationship to Did for 2026…
Fivell Apr 17, 2026
a180e33
feat: add identity has_one relationship to Did for 2026-04-16
Fivell Apr 17, 2026
a534c96
feat: add birth_country has_one relationship to Identity for 2026-04-16
Fivell Apr 17, 2026
24fb10b
feat: add p2p/a2p/emergency/cnam_out features to DidGroup for 2026-04-16
Fivell Apr 17, 2026
d8562a9
feat: add service_restrictions attribute to DidGroup for 2026-04-16
Fivell Apr 17, 2026
4fca067
feat: add EmergencyOrderItem complex object for 2026-04-16 Order support
Fivell Apr 17, 2026
8f1ce0c
examples: update voice_out_trunks to use 2026-04-16 polymorphic authe…
Fivell Apr 17, 2026
295bc22
examples: add did_history example for 2026-04-16
Fivell Apr 17, 2026
106e3cc
examples: add emergency_requirements example for 2026-04-16
Fivell Apr 17, 2026
46cf88f
complex_objects: clarify ExportFilters from/to semantics (from=inclus…
Fivell Apr 17, 2026
09e3592
examples: enhance exports example for 2026-04-16
Fivell Apr 17, 2026
984cd99
examples: add emergency_calling_services example for 2026-04-16
Fivell Apr 17, 2026
69c7b72
examples: add emergency_verifications example for 2026-04-16
Fivell Apr 17, 2026
f6341a0
examples: add emergency_requirement_validations example for 2026-04-16
Fivell Apr 17, 2026
fbb219a
examples: add address_verifications example for 2026-04-16
Fivell Apr 17, 2026
ae16559
examples: add orders_emergency example for 2026-04-16
Fivell Apr 17, 2026
e01a8e6
examples: identities_and_proofs - include birth_country for 2026-04-16
Fivell Apr 17, 2026
d98df86
examples: document new 2026-04-16 examples in README
Fivell Apr 17, 2026
d01beac
examples: voice_in_trunk_groups - demonstrate external_reference_id
Fivell Apr 17, 2026
292e104
examples: shared_capacity_groups - display external_reference_id
Fivell Apr 17, 2026
5e98578
examples: orders - demonstrate external_reference_id
Fivell Apr 17, 2026
bd62bfa
examples: dids - display 2026-04-16 emergency fields and identity
Fivell Apr 17, 2026
345ebaf
examples: did_groups - display allow_additional_channels / service_re…
Fivell Apr 17, 2026
896e95b
fix: declare has_one :address on EmergencyCallingService to mirror se…
Fivell Apr 17, 2026
254b432
docs(readme): refresh to API version 2026-04-16
Fivell Apr 17, 2026
baeaa0a
test: lock in PATCH dirty-tracking for polymorphic authentication_method
Fivell Apr 17, 2026
8bc8e47
docs: add property docblocks to new Emergency resources
Fivell Apr 17, 2026
1df8eff
feat: add status predicate helpers to VoiceOutTrunk
Fivell Apr 17, 2026
591d678
feat: surface STATUS_PENDING and STATUS_PROCESSING on Export
Fivell Apr 17, 2026
2173eba
feat: add status predicate helpers to EmergencyCallingService
Fivell Apr 17, 2026
4816509
docs: document DidHistory#meta fields for billing_cycles_count_changed
Fivell Apr 17, 2026
eabd2d2
test: cover PATCH /dids/:id unassigning emergency_calling_service
Fivell Apr 17, 2026
46e05d8
test: cover PATCH /voice_out_trunks/:id emergency_dids + emergency_en…
Fivell Apr 17, 2026
66f7b24
feat: add status predicate helpers to AddressVerification, EmergencyV…
Fivell Apr 17, 2026
4876870
docs(readme): document module path decision (no /v3 suffix)
Fivell Apr 17, 2026
8188030
fix(fixtures): replace 0.0.0.0/0 with RFC 5737 TEST-NET-3 range (203.…
Fivell Apr 17, 2026
9106ce0
feat!: standardize attribute values to lowercase snake_case
Fivell Apr 17, 2026
039b664
chore: remove compiled binaries from tracking; add to .gitignore
Fivell Apr 17, 2026
d946add
test: use RFC 5737 documentation IPs (203.0.113.0/24) in fixtures and…
Fivell Apr 17, 2026
94b72e8
fix(tests): update area_level assertions to match lowercase snake_cas…
Fivell Apr 17, 2026
f97d0c7
test: add dirty-tracking tests for VoiceOutTrunk emergency_dids repla…
Fivell Apr 17, 2026
c0febd3
examples: add emergency_scenario end-to-end example
Fivell Apr 22, 2026
4a6e06f
examples: add did_trunk_assignment example
Fivell Apr 22, 2026
b223450
docs(readme): update date and datetime field documentation
Fivell Apr 22, 2026
d16c5d1
docs(readme): add emergency and diversion enums to documentation
Fivell Apr 22, 2026
ec55858
docs(readme): add emergency and did_history resource examples
Fivell Apr 22, 2026
20d2cc1
feat: add resource-level meta support for EmergencyCallingService and…
Fivell Apr 23, 2026
b9273f9
fix: use credentials_and_ip for VoiceOutTrunk create (ip_only is not …
Fivell Apr 23, 2026
4edd218
test: add fixture and test for reading VoiceOutTrunk with ip_only aut…
Fivell Apr 23, 2026
6ed3bdc
feat: add twilio auth fixtures/tests + update Voice Out Trunks docume…
Fivell Apr 23, 2026
0213ff7
refactor!: rename IsCancelled to IsCanceled for wire-format consistency
Fivell Apr 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Claude AI
.claude/

# Coverage
coverage.out

# Compiled example binaries (go build artifacts)
address_verifications
did_groups
did_history
dids
emergency_calling_services
emergency_requirement_validations
emergency_requirements
emergency_verifications
exports
identities
orders
orders_emergency
shared_capacity_groups
voice_in_trunk_groups
voice_out_trunks
/emergency_scenario
/did_trunk_assignment
108 changes: 91 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@ This SDK implements JSON:API serialization and deserialization without external
Read more https://doc.didww.com/api

This SDK targets DIDWW API v3 documentation version:
[https://doc.didww.com/api3/2022-05-10/index.html](https://doc.didww.com/api3/2022-05-10/index.html)
[https://doc.didww.com/api3/2026-04-16/index.html](https://doc.didww.com/api3/2026-04-16/index.html)

The client sends the `X-DIDWW-API-Version: 2022-05-10` header with each request.
The client sends the `X-DIDWW-API-Version: 2026-04-16` header with each request.

Version **3.x** targets API version `2026-04-16`.
Version **2.x** (branch `release-2`) targets API version `2022-05-10`.

## Requirements

Expand All @@ -29,6 +32,11 @@ The client sends the `X-DIDWW-API-Version: 2022-05-10` header with each request.
go get github.com/didww/didww-api-3-go-sdk
```

**Note on module path:** This module intentionally does not use a `/v3` suffix,
following the same convention established in v2. The major version is bumped in
`go.mod` and tagged releases, but the import path stays
`github.com/didww/didww-api-3-go-sdk` for backward compatibility.

## Usage

```go
Expand Down Expand Up @@ -161,8 +169,14 @@ proofTypes, _ := client.ProofTypes().List(ctx, nil)
// Public Keys
publicKeys, _ := client.PublicKeys().List(ctx, nil)

// Requirements
requirements, _ := client.Requirements().List(ctx, nil)
// Address Requirements
requirements, _ := client.AddressRequirements().List(ctx, nil)

// Emergency Requirements (2026-04-16)
emergReqs, _ := client.EmergencyRequirements().List(ctx, nil)

// DID History (2026-04-16)
history, _ := client.DIDHistory().List(ctx, nil)

// Supporting Document Templates
templates, _ := client.SupportingDocumentTemplates().List(ctx, nil)
Expand Down Expand Up @@ -232,19 +246,32 @@ created, _ := client.VoiceInTrunkGroups().Create(ctx, group)
> **Note:** Voice Out Trunks require additional account configuration. Contact DIDWW support to enable.
> The `replace_cli` and `randomize_cli` values of `OnCliMismatchAction` also require account configuration.

Voice Out Trunks use a polymorphic `AuthenticationMethod` (2026-04-16). Three types are supported:

- **`credentials_and_ip`** -- default method; `Username` and `Password` are server-generated and returned in the response.
- **`twilio`** -- requires a `TwilioAccountSid`.
- **`ip_only`** -- read-only; can only be configured by DIDWW staff upon request. Cannot be set via the API.

```go
import "github.com/didww/didww-api-3-go-sdk/resource/enums"
import (
"github.com/didww/didww-api-3-go-sdk/resource/authenticationmethod"
"github.com/didww/didww-api-3-go-sdk/resource/enums"
)

// NOTE: 203.0.113.0/24 is RFC 5737 TEST-NET-3 documentation space.
// Replace with the real CIDR of your SIP infrastructure.
trunk := &didww.VoiceOutTrunk{
Name: "My Outbound Trunk",
AllowedSipIPs: []string{"0.0.0.0/0"},
AllowedRtpIPs: []string{"0.0.0.0/0"},
DstPrefixes: []string{},
Name: "My Outbound Trunk",
AuthenticationMethod: &authenticationmethod.CredentialsAndIp{
AllowedSipIPs: []string{"203.0.113.0/24"},
},
DefaultDstAction: enums.DefaultDstActionAllowAll,
OnCliMismatchAction: enums.OnCliMismatchActionRejectCall,
MediaEncryptionMode: enums.MediaEncryptionModeDisabled,
}
created, _ := client.VoiceOutTrunks().Create(ctx, trunk)
// created.AuthenticationMethod.(*authenticationmethod.CredentialsAndIp).Username -- server-generated
// created.AuthenticationMethod.(*authenticationmethod.CredentialsAndIp).Password -- server-generated
```

### Orders
Expand Down Expand Up @@ -335,14 +362,41 @@ verification := &didww.AddressVerification{
created, _ := client.AddressVerifications().Create(ctx, verification)
```

### Emergency Services (2026-04-16)

```go
// List emergency requirements filtered by country
params := didww.NewQueryParams().Filter("country.id", "country-uuid")
reqs, _ := client.EmergencyRequirements().List(ctx, params)

// Create emergency verification
verification := &didww.EmergencyVerification{
AddressID: "address-uuid",
IdentityID: "identity-uuid",
DIDIDs: []string{"did-uuid"},
}
created, _ := client.EmergencyVerifications().Create(ctx, verification)

// List emergency calling services
services, _ := client.EmergencyCallingServices().List(ctx, nil)
```

### DID History (2026-04-16)

```go
// List DID history entries
params := didww.NewQueryParams().Filter("did.id", "did-uuid")
history, _ := client.DIDHistory().List(ctx, params)
```

### Exports

```go
import "github.com/didww/didww-api-3-go-sdk/resource/enums"

export := &didww.Export{
ExportType: enums.ExportTypeCdrIn,
Filters: map[string]interface{}{"year": 2025, "month": 1},
Filters: map[string]interface{}{"from": "2026-04-01 00:00:00", "to": "2026-04-16 00:00:00"},
}
created, _ := client.Exports().Create(ctx, export)
```
Expand Down Expand Up @@ -439,6 +493,7 @@ updated, _ := client.VoiceInTrunks().Update(ctx, trunk)
| Available DID | `available_did_order_items` |
| Reservation DID | `reservation_did_order_items` |
| Capacity | `capacity_order_items` |
| Emergency | `emergency_order_items` |
| Generic (response only) | `generic_order_items` |

## Error Handling
Expand Down Expand Up @@ -478,7 +533,9 @@ if err != nil {
| AvailableDID | `client.AvailableDIDs()` | list, find |
| ProofType | `client.ProofTypes()` | list, find |
| PublicKey | `client.PublicKeys()` | list |
| Requirement | `client.Requirements()` | list, find |
| AddressRequirement | `client.AddressRequirements()` | list, find |
| EmergencyRequirement | `client.EmergencyRequirements()` | list, find |
| DIDHistory | `client.DIDHistory()` | list |
| SupportingDocumentTemplate | `client.SupportingDocumentTemplates()` | list, find |
| Balance | `client.Balance()` | find |
| DID | `client.DIDs()` | list, find, update, delete |
Expand All @@ -490,14 +547,17 @@ if err != nil {
| CapacityPool | `client.CapacityPools()` | list, find, update |
| SharedCapacityGroup | `client.SharedCapacityGroups()` | list, find, create, update, delete |
| Order | `client.Orders()` | list, find, create, delete |
| Export | `client.Exports()` | list, find, create |
| Export | `client.Exports()` | list, find, create, update |
| Address | `client.Addresses()` | list, find, create, update, delete |
| AddressVerification | `client.AddressVerifications()` | list, find, create |
| AddressVerification | `client.AddressVerifications()` | list, find, create, update |
| EmergencyCallingService | `client.EmergencyCallingServices()` | list, find, delete |
| EmergencyVerification | `client.EmergencyVerifications()` | list, find, create, update |
| EmergencyRequirementValidation | `client.EmergencyRequirementValidations()` | create |
| Identity | `client.Identities()` | list, find, create, update, delete |
| EncryptedFile | `client.EncryptedFiles()` | list, find, delete |
| PermanentSupportingDocument | `client.PermanentSupportingDocuments()` | create |
| Proof | `client.Proofs()` | create |
| RequirementValidation | `client.RequirementValidations()` | create |
| AddressRequirementValidation | `client.AddressRequirementValidations()` | create |
| StockKeepingUnit | include on `DIDGroups` | — |
| QtyBasedPricing | include on `CapacityPools` | — |

Expand All @@ -509,9 +569,22 @@ if err != nil {
The SDK distinguishes between date-only and datetime fields:

- **Datetime fields** are deserialized as `time.Time` (UTC) when always present, or `*time.Time` when optional (nil if the API omits the value):
- All `CreatedAt` fields — `time.Time`, present on most resources
- Expiry fields — `*time.Time`: `DID.ExpiresAt`, `Proof.ExpiresAt`, `EncryptedFile.ExpireAt`; `DIDReservation.ExpireAt` is `time.Time` (always present)
- **Date-only fields** (`Identity.BirthDate`, `CapacityPool.RenewDate`, order item `BilledFrom`/`BilledTo`) remain as `string` in `"YYYY-MM-DD"` format — Go has no separate date-only type, so the raw string avoids timezone ambiguity.
- `CreatedAt` — `time.Time`, present on most resources
- `ExpiresAt` — `*time.Time`: `DID`, `DIDReservation`, `Proof`, `EncryptedFile`
- `ActivatedAt` — `*time.Time`: `EmergencyCallingService` (nullable)
- `CanceledAt` — `*time.Time`: `EmergencyCallingService` (nullable)
- **Date-only fields** remain as `string` in `"YYYY-MM-DD"` format — Go has no separate date-only type, so the raw string avoids timezone ambiguity:
- `Identity.BirthDate`
- `CapacityPool.RenewDate`, `EmergencyCallingService.RenewDate` (nullable)
- Order item `BilledFrom` / `BilledTo`
- **String fields** (not numeric):
- `EmergencyRequirement.EstimateSetupTime` — e.g. `"7-14 days"`, `"1"`
- `EmergencyRequirement.RequirementRestrictionMessage` — nullable

**Important changes from previous API versions:**
- `ExpiresAt` replaces `ExpireAt` on `DIDReservation` and `EncryptedFile`
- `RenewDate` is a date-only string, NOT a `time.Time`
- `EstimateSetupTime` is a string, NOT an integer

```go
did, _ := client.DIDs().Find(ctx, "uuid")
Expand All @@ -528,6 +601,7 @@ The SDK provides enum types in `github.com/didww/didww-api-3-go-sdk/resource/enu

`CallbackMethod`, `IdentityType`, `OrderStatus`, `ExportType`, `ExportStatus`, `CliFormat`,
`OnCliMismatchAction`\*, `MediaEncryptionMode`, `DefaultDstAction`, `VoiceOutTrunkStatus`,
`EmergencyCallingServiceStatus`, `EmergencyVerificationStatus`, `DiversionRelayPolicy`,
`TransportProtocol`, `Codec`, `RxDtmfFormat`, `TxDtmfFormat`, `SstRefreshMethod`,
`ReroutingDisconnectCode`, `Feature`, `AreaLevel`, `AddressVerificationStatus`, `StirShakenMode`

Expand Down
43 changes: 42 additions & 1 deletion address_verifications_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func TestAddressVerificationsCreate(t *testing.T) {
})

cbURL := "http://example.com"
cbMethod := "GET"
cbMethod := "get"
av, err := server.client.AddressVerifications().Create(context.Background(), &resource.AddressVerification{
CallbackURL: &cbURL,
CallbackMethod: &cbMethod,
Expand Down Expand Up @@ -63,6 +63,47 @@ func TestAddressVerificationsFind(t *testing.T) {
assert.Nil(t, av.RejectReasons)
}

func TestAddressVerificationsUpdateExternalReferenceID(t *testing.T) {
server, capturedBodyPtr := captureRequestBody(t, map[string]testRoute{
"PATCH /v3/address_verifications/c8e004b0-87ec-4987-b4fb-ee89db099f0e": {status: http.StatusOK, fixture: "address_verifications/update.json"},
})

extRef := "ext-ref-123"
av, err := server.client.AddressVerifications().Update(context.Background(), &resource.AddressVerification{
ID: "c8e004b0-87ec-4987-b4fb-ee89db099f0e",
ExternalReferenceID: &extRef,
})
require.NoError(t, err)

assert.Equal(t, "c8e004b0-87ec-4987-b4fb-ee89db099f0e", av.ID)
require.NotNil(t, av.ExternalReferenceID)
assert.Equal(t, "ext-ref-123", *av.ExternalReferenceID)

assertRequestJSON(t, *capturedBodyPtr, "address_verifications/update_request.json")
}

func TestAddressVerificationsUpdateExternalReferenceIDFromLoaded(t *testing.T) {
server, capturedBodyPtr := captureRequestBody(t, map[string]testRoute{
"GET /v3/address_verifications/c8e004b0-87ec-4987-b4fb-ee89db099f0e": {status: http.StatusOK, fixture: "address_verifications/show.json"},
"PATCH /v3/address_verifications/c8e004b0-87ec-4987-b4fb-ee89db099f0e": {status: http.StatusOK, fixture: "address_verifications/update.json"},
})

av, err := server.client.AddressVerifications().Find(context.Background(), "c8e004b0-87ec-4987-b4fb-ee89db099f0e")
require.NoError(t, err)

extRef := "ext-ref-123"
av.ExternalReferenceID = &extRef

av, err = server.client.AddressVerifications().Update(context.Background(), av)
require.NoError(t, err)

assert.Equal(t, "c8e004b0-87ec-4987-b4fb-ee89db099f0e", av.ID)
require.NotNil(t, av.ExternalReferenceID)
assert.Equal(t, "ext-ref-123", *av.ExternalReferenceID)

assertRequestJSON(t, *capturedBodyPtr, "address_verifications/update_request.json")
}

func TestAddressVerificationsFindRejected(t *testing.T) {
_, client := newTestServer(t, map[string]testRoute{
"GET /v3/address_verifications/429e6d4e-2ee9-4953-aa98-0b3ac07f0f96": {status: http.StatusOK, fixture: "address_verifications/show_rejected.json"},
Expand Down
23 changes: 19 additions & 4 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,11 @@ func (c *Client) Proofs() *Repository[resource.Proof] { return NewRepository[res
func (c *Client) ProofTypes() *Repository[resource.ProofType] {
return NewRepository[resource.ProofType](c)
}
func (c *Client) Requirements() *Repository[resource.Requirement] {
return NewRepository[resource.Requirement](c)
func (c *Client) AddressRequirements() *Repository[resource.AddressRequirement] {
return NewRepository[resource.AddressRequirement](c)
}
func (c *Client) RequirementValidations() *Repository[resource.RequirementValidation] {
return NewRepository[resource.RequirementValidation](c)
func (c *Client) AddressRequirementValidations() *Repository[resource.AddressRequirementValidation] {
return NewRepository[resource.AddressRequirementValidation](c)
}
func (c *Client) Exports() *Repository[resource.Export] { return NewRepository[resource.Export](c) }
func (c *Client) CapacityPools() *Repository[resource.CapacityPool] {
Expand All @@ -199,6 +199,21 @@ func (c *Client) PermanentSupportingDocuments() *Repository[resource.PermanentSu
func (c *Client) NanpaPrefixes() *Repository[resource.NanpaPrefix] {
return NewRepository[resource.NanpaPrefix](c)
}
func (c *Client) EmergencyCallingServices() *Repository[resource.EmergencyCallingService] {
return NewRepository[resource.EmergencyCallingService](c)
}
func (c *Client) EmergencyVerifications() *Repository[resource.EmergencyVerification] {
return NewRepository[resource.EmergencyVerification](c)
}
func (c *Client) EmergencyRequirementValidations() *Repository[resource.EmergencyRequirementValidation] {
return NewRepository[resource.EmergencyRequirementValidation](c)
}
func (c *Client) EmergencyRequirements() *Repository[resource.EmergencyRequirement] {
return NewRepository[resource.EmergencyRequirement](c)
}
func (c *Client) DIDHistory() *Repository[resource.DIDHistory] {
return NewRepository[resource.DIDHistory](c)
}
func (c *Client) VoiceOutTrunkRegenerateCredentials() *Repository[resource.VoiceOutTrunkRegenerateCredential] {
return NewRepository[resource.VoiceOutTrunkRegenerateCredential](c)
}
2 changes: 1 addition & 1 deletion client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func TestClientSendsCorrectHeaders(t *testing.T) {
assert.Equal(t, "application/vnd.api+json", receivedAccept)
assert.Equal(t, "test-api-key", receivedAPIKey)
assert.Equal(t, apiVersion, receivedAPIVersion)
assert.Equal(t, "didww-go-sdk/1.0.0", receivedUserAgent)
assert.Equal(t, "didww-go-sdk/3.0.0-dev", receivedUserAgent)
}

func TestClientHandlesHTTPErrors(t *testing.T) {
Expand Down
24 changes: 12 additions & 12 deletions did_groups_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func TestDIDGroupsFindWithIncludedRequirement(t *testing.T) {
"GET /v3/did_groups/2187c36d-28fb-436f-8861-5a0f5b5a3ee1": {status: http.StatusOK, fixture: "did_groups/show_with_requirement.json"},
})

params := NewQueryParams().Include("requirement")
params := NewQueryParams().Include("address_requirement")
group, err := client.DIDGroups().Find(context.Background(), "2187c36d-28fb-436f-8861-5a0f5b5a3ee1", params)
require.NoError(t, err)

Expand All @@ -70,15 +70,15 @@ func TestDIDGroupsFindWithIncludedRequirement(t *testing.T) {
assert.False(t, group.IsMetered)
assert.True(t, group.AllowAdditionalChannels)

// Verify included requirement
require.NotNil(t, group.Requirement)
assert.Equal(t, "8da1e0b2-047c-4baf-9c57-57143f09b9ce", group.Requirement.ID)
assert.Equal(t, "Any", group.Requirement.IdentityType)
assert.Equal(t, "WorldWide", group.Requirement.PersonalAreaLevel)
assert.Equal(t, "Country", group.Requirement.BusinessAreaLevel)
assert.Equal(t, "City", group.Requirement.AddressAreaLevel)
assert.Equal(t, 1, group.Requirement.PersonalProofQty)
assert.Equal(t, 1, group.Requirement.BusinessProofQty)
assert.Equal(t, 1, group.Requirement.AddressProofQty)
assert.False(t, group.Requirement.ServiceDescriptionRequired)
// Verify included address_requirement
require.NotNil(t, group.AddressRequirement)
assert.Equal(t, "8da1e0b2-047c-4baf-9c57-57143f09b9ce", group.AddressRequirement.ID)
assert.Equal(t, "any", group.AddressRequirement.IdentityType)
assert.Equal(t, "world_wide", group.AddressRequirement.PersonalAreaLevel)
assert.Equal(t, "country", group.AddressRequirement.BusinessAreaLevel)
assert.Equal(t, "city", group.AddressRequirement.AddressAreaLevel)
assert.Equal(t, 1, group.AddressRequirement.PersonalProofQty)
assert.Equal(t, 1, group.AddressRequirement.BusinessProofQty)
assert.Equal(t, 1, group.AddressRequirement.AddressProofQty)
assert.False(t, group.AddressRequirement.ServiceDescriptionRequired)
}
Loading
Loading