Add governed contact channel facts
This commit is contained in:
@@ -84,6 +84,53 @@ export type Contact = {
|
||||
updated_at: string;
|
||||
};
|
||||
|
||||
export type AddressDistributionChannel = "email" | "postal" | "internal_mail" | "portal";
|
||||
export type AddressChannelDecision =
|
||||
| "allowed"
|
||||
| "opted_in"
|
||||
| "preferred"
|
||||
| "opted_out"
|
||||
| "suppressed"
|
||||
| "invalid"
|
||||
| "returned"
|
||||
| "temporarily_unavailable";
|
||||
|
||||
export type ContactChannelRule = {
|
||||
id: string;
|
||||
tenant_id?: string | null;
|
||||
contact_id: string;
|
||||
channel: AddressDistributionChannel;
|
||||
purpose?: string | null;
|
||||
contact_point_id?: string | null;
|
||||
decision: AddressChannelDecision;
|
||||
legal_basis?: string | null;
|
||||
evidence_ref?: string | null;
|
||||
reason?: string | null;
|
||||
preference_rank?: number | null;
|
||||
locale?: string | null;
|
||||
effective_from?: string | null;
|
||||
effective_until?: string | null;
|
||||
metadata: Record<string, unknown>;
|
||||
created_by_account_id?: string | null;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
};
|
||||
|
||||
export type ContactChannelRulePayload = {
|
||||
channel: AddressDistributionChannel;
|
||||
purpose?: string | null;
|
||||
contact_point_id?: string | null;
|
||||
decision: AddressChannelDecision;
|
||||
legal_basis?: string | null;
|
||||
evidence_ref?: string | null;
|
||||
reason?: string | null;
|
||||
preference_rank?: number | null;
|
||||
locale?: string | null;
|
||||
effective_from?: string | null;
|
||||
effective_until?: string | null;
|
||||
metadata?: Record<string, unknown>;
|
||||
};
|
||||
|
||||
export type AddressBookCreatePayload = {
|
||||
scope_type: AddressBookScope;
|
||||
group_id?: string | null;
|
||||
@@ -341,6 +388,10 @@ type AddressSyncConflictListResponse = {
|
||||
conflicts: AddressSyncConflict[];
|
||||
};
|
||||
|
||||
type ContactChannelRuleListResponse = {
|
||||
rules: ContactChannelRule[];
|
||||
};
|
||||
|
||||
function queryString(params: Record<string, string | number | null | undefined>): string {
|
||||
const search = new URLSearchParams();
|
||||
for (const [key, value] of Object.entries(params)) {
|
||||
@@ -626,6 +677,31 @@ export function restoreContact(settings: ApiSettings, contactId: string): Promis
|
||||
return apiFetch<Contact>(settings, `/api/v1/addresses/contacts/${contactId}/restore`, { method: "POST" });
|
||||
}
|
||||
|
||||
export async function listContactChannelRules(settings: ApiSettings, contactId: string): Promise<ContactChannelRule[]> {
|
||||
const response = await apiFetch<ContactChannelRuleListResponse>(
|
||||
settings,
|
||||
`/api/v1/addresses/contacts/${contactId}/channel-rules`
|
||||
);
|
||||
return response.rules;
|
||||
}
|
||||
|
||||
export function createContactChannelRule(
|
||||
settings: ApiSettings,
|
||||
contactId: string,
|
||||
payload: ContactChannelRulePayload
|
||||
): Promise<ContactChannelRule> {
|
||||
return apiFetch<ContactChannelRule>(settings, `/api/v1/addresses/contacts/${contactId}/channel-rules`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
}
|
||||
|
||||
export function endContactChannelRule(settings: ApiSettings, ruleId: string): Promise<ContactChannelRule> {
|
||||
return apiFetch<ContactChannelRule>(settings, `/api/v1/addresses/contact-channel-rules/${ruleId}`, {
|
||||
method: "DELETE"
|
||||
});
|
||||
}
|
||||
|
||||
export function importAddressBookVcards(settings: ApiSettings, addressBookId: string, content: string): Promise<VCardImportResult> {
|
||||
return apiFetch<VCardImportResult>(settings, `/api/v1/addresses/address-books/${addressBookId}/vcards/import`, {
|
||||
method: "POST",
|
||||
|
||||
Reference in New Issue
Block a user