@proteos/sdk 0.52.0 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-VKS2VX24.js → chunk-HEUXXELG.js} +25 -4
- package/dist/chunk-HEUXXELG.js.map +1 -0
- package/dist/{chunk-WEEC4REL.cjs → chunk-SWCPI6SL.cjs} +27 -3
- package/dist/chunk-SWCPI6SL.cjs.map +1 -0
- package/dist/index.cjs +161 -114
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +109 -7
- package/dist/index.d.ts +109 -7
- package/dist/index.js +37 -2
- package/dist/index.js.map +1 -1
- package/dist/meta/index.cjs +84 -72
- package/dist/meta/index.d.cts +1 -1
- package/dist/meta/index.d.ts +1 -1
- package/dist/meta/index.js +1 -1
- package/dist/{types-DHhuGDpV.d.cts → types-D5P6yk1L.d.cts} +111 -17
- package/dist/{types-DHhuGDpV.d.ts → types-D5P6yk1L.d.ts} +111 -17
- package/package.json +3 -3
- package/src/conversation/types.ts +37 -4
- package/src/data/index.ts +15 -2
- package/src/data/records.ts +63 -0
- package/src/data/types.ts +52 -0
- package/src/index.ts +19 -1
- package/src/meta/index.ts +8 -1
- package/src/meta/layout/control-registry.json +10 -2
- package/src/meta/types.ts +72 -0
- package/dist/chunk-VKS2VX24.js.map +0 -1
- package/dist/chunk-WEEC4REL.cjs.map +0 -1
|
@@ -2086,7 +2086,7 @@ interface MetaListOptions extends ListOptions {
|
|
|
2086
2086
|
* full set; format/structural variation lives on `Attribute.meta` (see
|
|
2087
2087
|
* `AttributeMeta` below), not on the type discriminator.
|
|
2088
2088
|
*/
|
|
2089
|
-
type AttributeType = 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object' | 'datetime' | 'enum' | 'relation' | 'user' | 'principal' | 'currency' | 'knowledge-text' | 'file';
|
|
2089
|
+
type AttributeType = 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object' | 'datetime' | 'enum' | 'relation' | 'user' | 'principal' | 'currency' | 'knowledge-text' | 'file' | 'contact-address';
|
|
2090
2090
|
/**
|
|
2091
2091
|
* Attribute-level permissions: restricting a FIELD rather than a record — a
|
|
2092
2092
|
* salary column readable only by the people team, a margin column writable only
|
|
@@ -2299,6 +2299,35 @@ declare const CurrencyAttributeMetaSchema: z.ZodObject<{
|
|
|
2299
2299
|
default_currency_code?: string | undefined;
|
|
2300
2300
|
allowed_currency_codes?: string[] | undefined;
|
|
2301
2301
|
}>;
|
|
2302
|
+
/**
|
|
2303
|
+
* Which endpoint a `contact-address` attribute holds. The record-capable
|
|
2304
|
+
* subset of the conversation contact-address kinds — what a human types.
|
|
2305
|
+
*/
|
|
2306
|
+
type ContactAddressAttributeKind = 'email' | 'phone' | 'linkedin_public_identifier';
|
|
2307
|
+
/**
|
|
2308
|
+
* Metadata for a `contact-address`-typed attribute: ONE canonical reachable
|
|
2309
|
+
* address of the person the record represents. The stored value is a plain
|
|
2310
|
+
* string canonicalized on write (lowercased email, E.164 phone with a leading
|
|
2311
|
+
* `+`, LinkedIn public identifier — a pasted profile URL is reduced to its
|
|
2312
|
+
* `/in/<slug>`; displayed as https://www.linkedin.com/in/<slug>; LinkedIn
|
|
2313
|
+
* profile ids such as ACoAA… are refused — the platform learns them itself).
|
|
2314
|
+
* Records carrying such values bind to exactly one conversation contact;
|
|
2315
|
+
* `kind` is REQUIRED. Mirror of the Go `metamodel.ContactAddressAttributeMeta`.
|
|
2316
|
+
*/
|
|
2317
|
+
interface ContactAddressAttributeMeta {
|
|
2318
|
+
kind: ContactAddressAttributeKind;
|
|
2319
|
+
description?: string;
|
|
2320
|
+
}
|
|
2321
|
+
declare const ContactAddressAttributeMetaSchema: z.ZodObject<{
|
|
2322
|
+
kind: z.ZodEnum<["email", "phone", "linkedin_public_identifier"]>;
|
|
2323
|
+
description: z.ZodOptional<z.ZodString>;
|
|
2324
|
+
}, "strip", z.ZodTypeAny, {
|
|
2325
|
+
kind: "email" | "phone" | "linkedin_public_identifier";
|
|
2326
|
+
description?: string | undefined;
|
|
2327
|
+
}, {
|
|
2328
|
+
kind: "email" | "phone" | "linkedin_public_identifier";
|
|
2329
|
+
description?: string | undefined;
|
|
2330
|
+
}>;
|
|
2302
2331
|
/**
|
|
2303
2332
|
* Metadata for a `knowledge-text`-typed attribute. The value is a
|
|
2304
2333
|
* {@link KnowledgeNodeRef}; the data-service materializes client-sent text
|
|
@@ -2337,7 +2366,7 @@ declare const FileAttributeMetaSchema: z.ZodObject<{
|
|
|
2337
2366
|
* appropriate shape based on `Attribute.type`; runtime consumers can
|
|
2338
2367
|
* narrow via the `type` field.
|
|
2339
2368
|
*/
|
|
2340
|
-
type AttributeMeta = StringAttributeMeta | NumberAttributeMeta | DatetimeAttributeMeta | ArrayAttributeMeta | ObjectAttributeMeta | EnumAttributeMeta | RelationAttributeMeta | UserAttributeMeta | PrincipalAttributeMeta | CurrencyAttributeMeta | KnowledgeTextAttributeMeta | FileAttributeMeta;
|
|
2369
|
+
type AttributeMeta = StringAttributeMeta | NumberAttributeMeta | DatetimeAttributeMeta | ArrayAttributeMeta | ObjectAttributeMeta | EnumAttributeMeta | RelationAttributeMeta | UserAttributeMeta | PrincipalAttributeMeta | CurrencyAttributeMeta | KnowledgeTextAttributeMeta | FileAttributeMeta | ContactAddressAttributeMeta;
|
|
2341
2370
|
/**
|
|
2342
2371
|
* Entity attribute definition. Mirrors `model.Attribute` in the Go SDK.
|
|
2343
2372
|
*/
|
|
@@ -2525,6 +2554,13 @@ declare function parseUserMeta(attr: Attribute): UserAttributeMeta | null;
|
|
|
2525
2554
|
* with no meta still resolves to an empty `{}` rather than null.
|
|
2526
2555
|
*/
|
|
2527
2556
|
declare function parseFileMeta(attr: Attribute): FileAttributeMeta | null;
|
|
2557
|
+
/**
|
|
2558
|
+
* Returns the typed `ContactAddressAttributeMeta` when `attr` is a
|
|
2559
|
+
* contact-address attribute with a valid kind; null otherwise. Unlike the
|
|
2560
|
+
* `{}`-defaulting parsers, `kind` is required — an attribute without one
|
|
2561
|
+
* cannot be canonicalized, so it resolves to null (shape of parseRelationMeta).
|
|
2562
|
+
*/
|
|
2563
|
+
declare function parseContactAddressMeta(attr: Attribute): ContactAddressAttributeMeta | null;
|
|
2528
2564
|
/**
|
|
2529
2565
|
* A single operation a resource may be publicly exposed for. Independent set
|
|
2530
2566
|
* (not a level): a resource can be public for `write` without `read`. Only
|
|
@@ -2535,6 +2571,28 @@ type PublicAccessOperation = 'read' | 'write' | 'delete';
|
|
|
2535
2571
|
* Entity definition.
|
|
2536
2572
|
* Note: Entity uses `slug` as its primary identifier, not `id`.
|
|
2537
2573
|
*/
|
|
2574
|
+
/**
|
|
2575
|
+
* What happens when a record's contact-address value already belongs to a
|
|
2576
|
+
* contact linked to ANOTHER record of the same entity: `reject` fails the
|
|
2577
|
+
* write (409 `record_duplicate`); `flag` (default) accepts it and raises a
|
|
2578
|
+
* record duplicate pair for review.
|
|
2579
|
+
*/
|
|
2580
|
+
type ContactBindingDuplicatePolicy = 'reject' | 'flag';
|
|
2581
|
+
/**
|
|
2582
|
+
* The entity-level contact-binding setting — meaningful only for entities
|
|
2583
|
+
* with `contact-address` attributes; absent on the wire means `flag`. Mirror
|
|
2584
|
+
* of the Go `metamodel.ContactBinding`.
|
|
2585
|
+
*/
|
|
2586
|
+
interface EntityContactBinding {
|
|
2587
|
+
duplicate_policy: ContactBindingDuplicatePolicy;
|
|
2588
|
+
}
|
|
2589
|
+
declare const EntityContactBindingSchema: z.ZodObject<{
|
|
2590
|
+
duplicate_policy: z.ZodEnum<["reject", "flag"]>;
|
|
2591
|
+
}, "strip", z.ZodTypeAny, {
|
|
2592
|
+
duplicate_policy: "reject" | "flag";
|
|
2593
|
+
}, {
|
|
2594
|
+
duplicate_policy: "reject" | "flag";
|
|
2595
|
+
}>;
|
|
2538
2596
|
interface Entity extends AuditFields {
|
|
2539
2597
|
slug: string;
|
|
2540
2598
|
name: string;
|
|
@@ -2548,6 +2606,11 @@ interface Entity extends AuditFields {
|
|
|
2548
2606
|
* (default).
|
|
2549
2607
|
*/
|
|
2550
2608
|
public_record_access: PublicAccessOperation[];
|
|
2609
|
+
/**
|
|
2610
|
+
* Contact-binding setting (see `EntityContactBinding`). Optional: a Go
|
|
2611
|
+
* build that predates the setting omits it, which means `flag`.
|
|
2612
|
+
*/
|
|
2613
|
+
contact_binding?: EntityContactBinding;
|
|
2551
2614
|
module_slug: string;
|
|
2552
2615
|
/**
|
|
2553
2616
|
* Liquid template that renders a human-readable title for an instance
|
|
@@ -2590,6 +2653,13 @@ declare const EntitySchema: z.ZodObject<{
|
|
|
2590
2653
|
description: z.ZodString;
|
|
2591
2654
|
is_remote: z.ZodBoolean;
|
|
2592
2655
|
public_record_access: z.ZodDefault<z.ZodArray<z.ZodEnum<["read", "write", "delete"]>, "many">>;
|
|
2656
|
+
contact_binding: z.ZodOptional<z.ZodObject<{
|
|
2657
|
+
duplicate_policy: z.ZodEnum<["reject", "flag"]>;
|
|
2658
|
+
}, "strip", z.ZodTypeAny, {
|
|
2659
|
+
duplicate_policy: "reject" | "flag";
|
|
2660
|
+
}, {
|
|
2661
|
+
duplicate_policy: "reject" | "flag";
|
|
2662
|
+
}>>;
|
|
2593
2663
|
module_slug: z.ZodString;
|
|
2594
2664
|
title_template: z.ZodDefault<z.ZodString>;
|
|
2595
2665
|
attributes: z.ZodArray<z.ZodObject<{
|
|
@@ -2734,6 +2804,9 @@ declare const EntitySchema: z.ZodObject<{
|
|
|
2734
2804
|
public_record_access: ("read" | "write" | "delete")[];
|
|
2735
2805
|
module_slug: string;
|
|
2736
2806
|
title_template: string;
|
|
2807
|
+
contact_binding?: {
|
|
2808
|
+
duplicate_policy: "reject" | "flag";
|
|
2809
|
+
} | undefined;
|
|
2737
2810
|
}, {
|
|
2738
2811
|
name: string;
|
|
2739
2812
|
created_at: string;
|
|
@@ -2775,6 +2848,9 @@ declare const EntitySchema: z.ZodObject<{
|
|
|
2775
2848
|
is_remote: boolean;
|
|
2776
2849
|
module_slug: string;
|
|
2777
2850
|
public_record_access?: ("read" | "write" | "delete")[] | undefined;
|
|
2851
|
+
contact_binding?: {
|
|
2852
|
+
duplicate_policy: "reject" | "flag";
|
|
2853
|
+
} | undefined;
|
|
2778
2854
|
title_template?: string | undefined;
|
|
2779
2855
|
}>;
|
|
2780
2856
|
/**
|
|
@@ -2812,6 +2888,13 @@ declare const EntityWithSchemaSchema: z.ZodObject<{
|
|
|
2812
2888
|
description: z.ZodString;
|
|
2813
2889
|
is_remote: z.ZodBoolean;
|
|
2814
2890
|
public_record_access: z.ZodDefault<z.ZodArray<z.ZodEnum<["read", "write", "delete"]>, "many">>;
|
|
2891
|
+
contact_binding: z.ZodOptional<z.ZodObject<{
|
|
2892
|
+
duplicate_policy: z.ZodEnum<["reject", "flag"]>;
|
|
2893
|
+
}, "strip", z.ZodTypeAny, {
|
|
2894
|
+
duplicate_policy: "reject" | "flag";
|
|
2895
|
+
}, {
|
|
2896
|
+
duplicate_policy: "reject" | "flag";
|
|
2897
|
+
}>>;
|
|
2815
2898
|
module_slug: z.ZodString;
|
|
2816
2899
|
title_template: z.ZodDefault<z.ZodString>;
|
|
2817
2900
|
attributes: z.ZodArray<z.ZodObject<{
|
|
@@ -2959,6 +3042,9 @@ declare const EntityWithSchemaSchema: z.ZodObject<{
|
|
|
2959
3042
|
module_slug: string;
|
|
2960
3043
|
title_template: string;
|
|
2961
3044
|
schema: Record<string, unknown>;
|
|
3045
|
+
contact_binding?: {
|
|
3046
|
+
duplicate_policy: "reject" | "flag";
|
|
3047
|
+
} | undefined;
|
|
2962
3048
|
}, {
|
|
2963
3049
|
name: string;
|
|
2964
3050
|
created_at: string;
|
|
@@ -3001,6 +3087,9 @@ declare const EntityWithSchemaSchema: z.ZodObject<{
|
|
|
3001
3087
|
module_slug: string;
|
|
3002
3088
|
schema: Record<string, unknown>;
|
|
3003
3089
|
public_record_access?: ("read" | "write" | "delete")[] | undefined;
|
|
3090
|
+
contact_binding?: {
|
|
3091
|
+
duplicate_policy: "reject" | "flag";
|
|
3092
|
+
} | undefined;
|
|
3004
3093
|
title_template?: string | undefined;
|
|
3005
3094
|
}>;
|
|
3006
3095
|
/**
|
|
@@ -3025,6 +3114,10 @@ interface CreateEntityRequest {
|
|
|
3025
3114
|
* the field resets it to private.
|
|
3026
3115
|
*/
|
|
3027
3116
|
public_record_access?: PublicAccessOperation[];
|
|
3117
|
+
/**
|
|
3118
|
+
* Contact-binding setting; full-replacement on upsert (omitted = `flag`).
|
|
3119
|
+
*/
|
|
3120
|
+
contact_binding?: EntityContactBinding;
|
|
3028
3121
|
module_slug: string;
|
|
3029
3122
|
description: string;
|
|
3030
3123
|
title_template?: string;
|
|
@@ -3037,6 +3130,7 @@ interface UpdateEntityRequest {
|
|
|
3037
3130
|
name?: string;
|
|
3038
3131
|
is_remote?: boolean;
|
|
3039
3132
|
public_record_access?: PublicAccessOperation[];
|
|
3133
|
+
contact_binding?: EntityContactBinding;
|
|
3040
3134
|
module_slug?: string;
|
|
3041
3135
|
description?: string;
|
|
3042
3136
|
title_template?: string;
|
|
@@ -3462,8 +3556,8 @@ declare const PageActionSchema: z.ZodObject<{
|
|
|
3462
3556
|
workflow?: string | undefined;
|
|
3463
3557
|
inputs?: Record<string, string> | undefined;
|
|
3464
3558
|
skip_confirmation?: boolean | undefined;
|
|
3465
|
-
action?: string | undefined;
|
|
3466
3559
|
kind?: "workflow" | "action" | undefined;
|
|
3560
|
+
action?: string | undefined;
|
|
3467
3561
|
}, {
|
|
3468
3562
|
label: string;
|
|
3469
3563
|
icon: string;
|
|
@@ -3472,8 +3566,8 @@ declare const PageActionSchema: z.ZodObject<{
|
|
|
3472
3566
|
workflow?: string | undefined;
|
|
3473
3567
|
inputs?: Record<string, string> | undefined;
|
|
3474
3568
|
skip_confirmation?: boolean | undefined;
|
|
3475
|
-
action?: string | undefined;
|
|
3476
3569
|
kind?: "workflow" | "action" | undefined;
|
|
3570
|
+
action?: string | undefined;
|
|
3477
3571
|
}>;
|
|
3478
3572
|
/**
|
|
3479
3573
|
* Whether a list's rows can be checked, and whether the checkboxes show from
|
|
@@ -3596,8 +3690,8 @@ declare const ListSchema: z.ZodObject<{
|
|
|
3596
3690
|
workflow?: string | undefined;
|
|
3597
3691
|
inputs?: Record<string, string> | undefined;
|
|
3598
3692
|
skip_confirmation?: boolean | undefined;
|
|
3599
|
-
action?: string | undefined;
|
|
3600
3693
|
kind?: "workflow" | "action" | undefined;
|
|
3694
|
+
action?: string | undefined;
|
|
3601
3695
|
}, {
|
|
3602
3696
|
label: string;
|
|
3603
3697
|
icon: string;
|
|
@@ -3606,8 +3700,8 @@ declare const ListSchema: z.ZodObject<{
|
|
|
3606
3700
|
workflow?: string | undefined;
|
|
3607
3701
|
inputs?: Record<string, string> | undefined;
|
|
3608
3702
|
skip_confirmation?: boolean | undefined;
|
|
3609
|
-
action?: string | undefined;
|
|
3610
3703
|
kind?: "workflow" | "action" | undefined;
|
|
3704
|
+
action?: string | undefined;
|
|
3611
3705
|
}>, "many">>;
|
|
3612
3706
|
selection_mode: z.ZodOptional<z.ZodEnum<["on_demand", "always", "off"]>>;
|
|
3613
3707
|
sorting: z.ZodArray<z.ZodObject<{
|
|
@@ -3655,8 +3749,8 @@ declare const ListSchema: z.ZodObject<{
|
|
|
3655
3749
|
workflow?: string | undefined;
|
|
3656
3750
|
inputs?: Record<string, string> | undefined;
|
|
3657
3751
|
skip_confirmation?: boolean | undefined;
|
|
3658
|
-
action?: string | undefined;
|
|
3659
3752
|
kind?: "workflow" | "action" | undefined;
|
|
3753
|
+
action?: string | undefined;
|
|
3660
3754
|
}[] | undefined;
|
|
3661
3755
|
selection_mode?: "on_demand" | "always" | "off" | undefined;
|
|
3662
3756
|
}, {
|
|
@@ -3693,8 +3787,8 @@ declare const ListSchema: z.ZodObject<{
|
|
|
3693
3787
|
workflow?: string | undefined;
|
|
3694
3788
|
inputs?: Record<string, string> | undefined;
|
|
3695
3789
|
skip_confirmation?: boolean | undefined;
|
|
3696
|
-
action?: string | undefined;
|
|
3697
3790
|
kind?: "workflow" | "action" | undefined;
|
|
3791
|
+
action?: string | undefined;
|
|
3698
3792
|
}[] | undefined;
|
|
3699
3793
|
selection_mode?: "on_demand" | "always" | "off" | undefined;
|
|
3700
3794
|
}>;
|
|
@@ -3966,8 +4060,8 @@ declare const PageSchema: z.ZodObject<{
|
|
|
3966
4060
|
workflow?: string | undefined;
|
|
3967
4061
|
inputs?: Record<string, string> | undefined;
|
|
3968
4062
|
skip_confirmation?: boolean | undefined;
|
|
3969
|
-
action?: string | undefined;
|
|
3970
4063
|
kind?: "workflow" | "action" | undefined;
|
|
4064
|
+
action?: string | undefined;
|
|
3971
4065
|
}, {
|
|
3972
4066
|
label: string;
|
|
3973
4067
|
icon: string;
|
|
@@ -3976,8 +4070,8 @@ declare const PageSchema: z.ZodObject<{
|
|
|
3976
4070
|
workflow?: string | undefined;
|
|
3977
4071
|
inputs?: Record<string, string> | undefined;
|
|
3978
4072
|
skip_confirmation?: boolean | undefined;
|
|
3979
|
-
action?: string | undefined;
|
|
3980
4073
|
kind?: "workflow" | "action" | undefined;
|
|
4074
|
+
action?: string | undefined;
|
|
3981
4075
|
}>, "many">;
|
|
3982
4076
|
layout: z.ZodObject<{
|
|
3983
4077
|
version: z.ZodLiteral<1>;
|
|
@@ -4063,8 +4157,8 @@ declare const PageSchema: z.ZodObject<{
|
|
|
4063
4157
|
workflow?: string | undefined;
|
|
4064
4158
|
inputs?: Record<string, string> | undefined;
|
|
4065
4159
|
skip_confirmation?: boolean | undefined;
|
|
4066
|
-
action?: string | undefined;
|
|
4067
4160
|
kind?: "workflow" | "action" | undefined;
|
|
4161
|
+
action?: string | undefined;
|
|
4068
4162
|
}[];
|
|
4069
4163
|
layout: {
|
|
4070
4164
|
version: 1;
|
|
@@ -4105,8 +4199,8 @@ declare const PageSchema: z.ZodObject<{
|
|
|
4105
4199
|
workflow?: string | undefined;
|
|
4106
4200
|
inputs?: Record<string, string> | undefined;
|
|
4107
4201
|
skip_confirmation?: boolean | undefined;
|
|
4108
|
-
action?: string | undefined;
|
|
4109
4202
|
kind?: "workflow" | "action" | undefined;
|
|
4203
|
+
action?: string | undefined;
|
|
4110
4204
|
}[];
|
|
4111
4205
|
layout: {
|
|
4112
4206
|
version: 1;
|
|
@@ -5087,8 +5181,8 @@ declare const ListExtensionSchema: z.ZodObject<{
|
|
|
5087
5181
|
workflow?: string | undefined;
|
|
5088
5182
|
inputs?: Record<string, string> | undefined;
|
|
5089
5183
|
skip_confirmation?: boolean | undefined;
|
|
5090
|
-
action?: string | undefined;
|
|
5091
5184
|
kind?: "workflow" | "action" | undefined;
|
|
5185
|
+
action?: string | undefined;
|
|
5092
5186
|
}, {
|
|
5093
5187
|
label: string;
|
|
5094
5188
|
icon: string;
|
|
@@ -5097,8 +5191,8 @@ declare const ListExtensionSchema: z.ZodObject<{
|
|
|
5097
5191
|
workflow?: string | undefined;
|
|
5098
5192
|
inputs?: Record<string, string> | undefined;
|
|
5099
5193
|
skip_confirmation?: boolean | undefined;
|
|
5100
|
-
action?: string | undefined;
|
|
5101
5194
|
kind?: "workflow" | "action" | undefined;
|
|
5195
|
+
action?: string | undefined;
|
|
5102
5196
|
}>, "many">;
|
|
5103
5197
|
}, "strip", z.ZodTypeAny, {
|
|
5104
5198
|
key: string;
|
|
@@ -5134,8 +5228,8 @@ declare const ListExtensionSchema: z.ZodObject<{
|
|
|
5134
5228
|
workflow?: string | undefined;
|
|
5135
5229
|
inputs?: Record<string, string> | undefined;
|
|
5136
5230
|
skip_confirmation?: boolean | undefined;
|
|
5137
|
-
action?: string | undefined;
|
|
5138
5231
|
kind?: "workflow" | "action" | undefined;
|
|
5232
|
+
action?: string | undefined;
|
|
5139
5233
|
}[];
|
|
5140
5234
|
org_id: string;
|
|
5141
5235
|
}, {
|
|
@@ -5172,8 +5266,8 @@ declare const ListExtensionSchema: z.ZodObject<{
|
|
|
5172
5266
|
workflow?: string | undefined;
|
|
5173
5267
|
inputs?: Record<string, string> | undefined;
|
|
5174
5268
|
skip_confirmation?: boolean | undefined;
|
|
5175
|
-
action?: string | undefined;
|
|
5176
5269
|
kind?: "workflow" | "action" | undefined;
|
|
5270
|
+
action?: string | undefined;
|
|
5177
5271
|
}[];
|
|
5178
5272
|
org_id: string;
|
|
5179
5273
|
}>;
|
|
@@ -5612,4 +5706,4 @@ declare function isCurrentUserDefault(value: unknown): value is CurrentUserDefau
|
|
|
5612
5706
|
/** Only the identity-valued attribute types can carry the sentinel. */
|
|
5613
5707
|
declare function acceptsCurrentUserDefault(type: AttributeType): boolean;
|
|
5614
5708
|
|
|
5615
|
-
export {
|
|
5709
|
+
export { type CurrencySymbolSide as $, type AuditFields as A, type ComponentService as B, CURRENT_USER_DEFAULT as C, type ContactAddressAttributeKind as D, type ContactAddressAttributeMeta as E, type FileRef as F, ContactAddressAttributeMetaSchema as G, type ContactBindingDuplicatePolicy as H, type CreateAppConfigurationRequest as I, type CreateAppRequest as J, type CreateComponentRequest as K, type ListOptions as L, type CreateDesignReferenceRequest as M, type CreateEntityExtensionRequest as N, type CreateEntityRequest as O, PageIterator as P, type CreateListExtensionRequest as Q, type CreateListRequest as R, type CreateListViewRequest as S, type CreateMenuConfigurationExtensionRequest as T, type UserRef as U, type CreateMenuConfigurationRequest as V, type CreatePageExtensionRequest as W, type CreatePageRequest as X, type CreateVariableRequest as Y, type CurrencyAttributeMeta as Z, CurrencyAttributeMetaSchema as _, type Attribute as a, MenuConfigurationExtensionPlacementSchema as a$, type CurrencyValue as a0, type CurrentUserDefault as a1, DEFAULT_OPTIONS as a2, DEFAULT_PAGE_SIZE as a3, DONE as a4, type DeployModuleRequest as a5, type DesignReference as a6, type DesignReferenceContent as a7, DesignReferenceSchema as a8, type DesignReferenceService as a9, type ListEntitiesOptions as aA, type ListEntityExtensionsOptions as aB, type ListExtension as aC, type ListExtensionColumnPlacement as aD, ListExtensionColumnPlacementSchema as aE, ListExtensionSchema as aF, type ListExtensionService as aG, type ListFn as aH, type ListListExtensionsOptions as aI, type ListListViewsOptions as aJ, type ListListsOptions as aK, type ListMenuConfigurationExtensionsOptions as aL, type ListMenuConfigurationsOptions as aM, type ListModulesOptions as aN, type ListPageExtensionsOptions as aO, type ListPagesOptions as aP, ListSchema as aQ, type ListService as aR, type ListVariablesOptions as aS, type ListView as aT, ListViewSchema as aU, type ListViewService as aV, type LogicalOperator as aW, MENU_CONFIGURATION_EXTENSION_ANCHOR_ITEMS as aX, type MenuConfiguration as aY, type MenuConfigurationExtension as aZ, type MenuConfigurationExtensionPlacement as a_, type Done as aa, type Entity as ab, type EntityContactBinding as ac, EntityContactBindingSchema as ad, type EntityExtension as ae, EntityExtensionSchema as af, type EntityExtensionService as ag, EntitySchema as ah, type EntityService as ai, type EntityWithSchema as aj, EntityWithSchemaSchema as ak, type EnumAttributeMeta as al, type EnumValue as am, type ExtensionPosition as an, ExtensionPositionSchema as ao, type FileAttributeMeta as ap, FileRefSchema as aq, type FilterElement as ar, FilterElementSchema as as, type FilterGroup as at, FilterGroupSchema as au, type List as av, type ListAppConfigurationsOptions as aw, type ListAppsOptions as ax, type ListComponentsOptions as ay, type ListDesignReferencesOptions as az, type ListResult as b, type UserType as b$, type MenuConfigurationExtensionPosition as b0, MenuConfigurationExtensionPositionSchema as b1, MenuConfigurationExtensionSchema as b2, type MenuConfigurationExtensionService as b3, MenuConfigurationSchema as b4, type MenuConfigurationService as b5, type MenuItem as b6, MenuItemSchema as b7, MenuItemType as b8, MetaClient as b9, type PublicPageResponse as bA, type RelationAttributeMeta as bB, RelationAttributeMetaSchema as bC, type RequestOptions as bD, type ResolvedClientOptions as bE, type ResponseMeta as bF, ResponseMetaSchema as bG, type SortConfig as bH, SortConfigSchema as bI, type SortDirection as bJ, type Timestamps as bK, type TokenProvider as bL, type UpdateAppConfigurationRequest as bM, type UpdateAppRequest as bN, type UpdateComponentRequest as bO, type UpdateDesignReferenceRequest as bP, type UpdateEntityExtensionRequest as bQ, type UpdateEntityRequest as bR, type UpdateListExtensionRequest as bS, type UpdateListRequest as bT, type UpdateListViewRequest as bU, type UpdateMenuConfigurationExtensionRequest as bV, type UpdateMenuConfigurationRequest as bW, type UpdatePageExtensionRequest as bX, type UpdatePageRequest as bY, type UpdateVariableRequest as bZ, UserRefSchema as b_, type MetaListOptions as ba, type Module as bb, ModuleSchema as bc, type ModuleService as bd, type ModuleStatus as be, type OnDeleteAction as bf, OnDeleteActionSchema as bg, PAGE_EXTENSION_ANCHOR_MAIN as bh, PAGE_EXTENSION_ANCHOR_SIDE_PANEL as bi, PLATFORM_ATTRIBUTE_NAMES as bj, PLATFORM_USER_ID as bk, type Page as bl, type PageAction as bm, type PageActionKind as bn, PageActionSchema as bo, type PageExtension as bp, type PageExtensionPlacement as bq, PageExtensionPlacementSchema as br, PageExtensionSchema as bs, type PageExtensionService as bt, type PageLayout as bu, PageLayoutSchema as bv, PageSchema as bw, type PageService as bx, type PageType as by, type PublicPageComponent as bz, ProteosClient as c, type SizingProps as c$, type Variable as c0, VariableSchema as c1, type VariableService as c2, acceptsCurrentUserDefault as c3, allCurrencyCodes as c4, createIterator as c5, createListResultSchema as c6, currencyLabel as c7, currencySymbol as c8, currencySymbolSide as c9, type LayoutAlign as cA, type LayoutElement as cB, LayoutElementSchema as cC, LayoutElementType as cD, type LayoutGap as cE, type LayoutJustify as cF, type LayoutTab as cG, LayoutTabSchema as cH, type ListElement as cI, type NumberAttributeMeta as cJ, type ObjectAttributeMeta as cK, PAGE_BACKGROUND_TOKENS as cL, type PageBackgroundToken as cM, type PageLayoutSidePanel as cN, PageLayoutSidePanelSchema as cO, type PageStyle as cP, PageStyleSchema as cQ, type PrincipalAttributeMeta as cR, type PrincipalType as cS, type RecordFilterElement as cT, type RelatedListElement as cU, type RelatedRecordElement as cV, type ResponsiveSizing as cW, type RowElement as cX, type SectionElement as cY, type SizeValue as cZ, SizeValueSchema as c_, formatAmount as ca, formatMoney as cb, isCurrentUserDefault as cc, isPlatformAttributeName as cd, localeNumberSeparators as ce, parseAmount as cf, parseContactAddressMeta as cg, parseCurrencyMeta as ch, parseFileMeta as ci, parseRelationMeta as cj, platformAttributes as ck, resolveOptions as cl, type AttributeForLookup as cm, type AttributeMeta as cn, BUILT_IN_CONTROLS as co, type BuiltInControlSlug as cp, type CardElement as cq, type ColumnElement as cr, type CommonProps as cs, type ComponentElement as ct, type ControlBucket as cu, type DatetimeAttributeMeta as cv, type DatetimeFormat as cw, type DividerElement as cx, type FieldElement as cy, FileAttributeMetaSchema as cz, type PrincipalRef as d, type StringAttributeMeta as d0, type StringFormat as d1, type TabsElement as d2, type TextElement as d3, type TextVariant as d4, type UserAttributeMeta as d5, UserAttributeMetaSchema as d6, type WorkflowTriggerElement as d7, isBuiltInControl as d8, lookupCompatibleControls as d9, lookupControls as da, lookupPrimaryControl as db, parsePrincipalMeta as dc, parseUserMeta as dd, type PublicAccessOperation as e, type App as f, type AppConfiguration as g, AppConfigurationSchema as h, type AppConfigurationService as i, type AppHome as j, AppHomeSchema as k, type AppHomeType as l, AppSchema as m, type AppService as n, type ArrayAttributeMeta as o, type AttributeAccessRule as p, type AttributeRestrictions as q, AttributeSchema as r, type AttributeType as s, AuditFieldsSchema as t, type ClientOptions as u, type Column as v, ColumnSchema as w, type ComparisonOperator as x, type Component as y, ComponentSchema as z };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proteos/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.53.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "TypeScript SDK for the Proteos platform",
|
|
6
6
|
"repository": {
|
|
@@ -66,8 +66,8 @@
|
|
|
66
66
|
"tsup": "^8.3.0",
|
|
67
67
|
"typescript": "^5.7.0",
|
|
68
68
|
"vitest": "^3.0.0",
|
|
69
|
-
"@proteos/
|
|
70
|
-
"@proteos/
|
|
69
|
+
"@proteos/tsconfig": "0.0.0",
|
|
70
|
+
"@proteos/biome-config": "0.0.0"
|
|
71
71
|
},
|
|
72
72
|
"scripts": {
|
|
73
73
|
"build": "tsup",
|
|
@@ -1264,6 +1264,11 @@ export type ContactAddressKind =
|
|
|
1264
1264
|
| 'email'
|
|
1265
1265
|
| 'phone'
|
|
1266
1266
|
| 'slack'
|
|
1267
|
+
/** LinkedIn's stable profile id (ACoAA… / ACwAA… / AE…) — what sending needs. */
|
|
1268
|
+
| 'linkedin_id'
|
|
1269
|
+
/** The `/in/<slug>` public identifier — what humans and records hold. */
|
|
1270
|
+
| 'linkedin_public_identifier'
|
|
1271
|
+
/** Legacy alias of `linkedin_id` (rows written before the kind split); read-only. */
|
|
1267
1272
|
| 'linkedin'
|
|
1268
1273
|
| 'telegram'
|
|
1269
1274
|
| 'instagram'
|
|
@@ -1501,10 +1506,25 @@ export interface AttachContactAddressRequest {
|
|
|
1501
1506
|
name?: string
|
|
1502
1507
|
}
|
|
1503
1508
|
|
|
1509
|
+
/** How a contact→record edge came to be: a user's explicit link, or the
|
|
1510
|
+
* binding maintained from the record's contact-address attributes (exactly one
|
|
1511
|
+
* per record; never unlinked by hand). */
|
|
1512
|
+
export type ContactRecordLinkSource = 'manual' | 'record'
|
|
1513
|
+
|
|
1514
|
+
/** One canonical address key of a contact (the dedup backbone). */
|
|
1515
|
+
export interface ContactAddressKey {
|
|
1516
|
+
kind: ContactAddressKind
|
|
1517
|
+
value: string
|
|
1518
|
+
scope?: string
|
|
1519
|
+
raw_value?: string
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1504
1522
|
/**
|
|
1505
1523
|
* A directed edge from a contact to a business record (entity_slug +
|
|
1506
1524
|
* record_id). Bare — no role; the relationship's semantics come from the
|
|
1507
|
-
* target entity.
|
|
1525
|
+
* target entity. A `manual` link is immutable once created; a `record`
|
|
1526
|
+
* binding repoints/refreshes as the record's addresses change and carries the
|
|
1527
|
+
* keys the record contributed (`address_keys`).
|
|
1508
1528
|
*/
|
|
1509
1529
|
export interface ContactRecordLink {
|
|
1510
1530
|
id: string
|
|
@@ -1512,8 +1532,12 @@ export interface ContactRecordLink {
|
|
|
1512
1532
|
contact_id: string
|
|
1513
1533
|
entity_slug: string
|
|
1514
1534
|
record_id: string
|
|
1535
|
+
source: ContactRecordLinkSource
|
|
1536
|
+
address_keys?: ContactAddressKey[]
|
|
1515
1537
|
created_at: string
|
|
1516
1538
|
created_by: UserRef
|
|
1539
|
+
updated_at?: string
|
|
1540
|
+
updated_by?: UserRef
|
|
1517
1541
|
}
|
|
1518
1542
|
|
|
1519
1543
|
export interface CreateContactRecordLinkRequest {
|
|
@@ -1526,6 +1550,7 @@ export interface ListContactRecordLinksQuery extends PaginationQuery {
|
|
|
1526
1550
|
contact_id?: string
|
|
1527
1551
|
entity_slug?: string
|
|
1528
1552
|
record_id?: string
|
|
1553
|
+
source?: ContactRecordLinkSource
|
|
1529
1554
|
}
|
|
1530
1555
|
|
|
1531
1556
|
export interface MergeContactsRequest {
|
|
@@ -1792,9 +1817,17 @@ export type SendingPeriod = 'rolling_24h' | 'rolling_7d' | 'rolling_30d'
|
|
|
1792
1817
|
* ONE kind of act performed through a channel connection — shared by a
|
|
1793
1818
|
* limit's `action` (what it counts), a channel action's `action_type` (what
|
|
1794
1819
|
* was performed) and the eligibility check. `message` is the plain send
|
|
1795
|
-
* (valid on a limit, never on a channel action row).
|
|
1796
|
-
|
|
1797
|
-
|
|
1820
|
+
* (valid on a limit, never on a channel action row). `profile_lookup` is the
|
|
1821
|
+
* silent twin of `profile_visit`: one provider read the platform performs to
|
|
1822
|
+
* learn a person's full identity (LinkedIn profile id + public identifier),
|
|
1823
|
+
* ledgered and limited like any other act.
|
|
1824
|
+
*/
|
|
1825
|
+
export type ChannelActionType =
|
|
1826
|
+
| 'message'
|
|
1827
|
+
| 'invitation'
|
|
1828
|
+
| 'inmail'
|
|
1829
|
+
| 'profile_visit'
|
|
1830
|
+
| 'profile_lookup'
|
|
1798
1831
|
export type Weekday =
|
|
1799
1832
|
| 'monday'
|
|
1800
1833
|
| 'tuesday'
|
package/src/data/index.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { ProteosClient } from '../client.js'
|
|
2
2
|
import { type QueryService, QueryServiceImpl } from './queries.js'
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
type RecordDuplicateService,
|
|
5
|
+
RecordDuplicateServiceImpl,
|
|
6
|
+
type RecordService,
|
|
7
|
+
RecordServiceImpl,
|
|
8
|
+
} from './records.js'
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* Facade for the data-service (records + raw-SQL query API).
|
|
@@ -16,10 +21,13 @@ import { type RecordService, RecordServiceImpl } from './records.js'
|
|
|
16
21
|
export class DataClient {
|
|
17
22
|
readonly records: RecordService
|
|
18
23
|
readonly queries: QueryService
|
|
24
|
+
/** Duplicate pairs of an entity's records (raised by contact binding). */
|
|
25
|
+
readonly recordDuplicates: RecordDuplicateService
|
|
19
26
|
|
|
20
27
|
constructor(client: ProteosClient) {
|
|
21
28
|
this.records = new RecordServiceImpl(client)
|
|
22
29
|
this.queries = new QueryServiceImpl(client)
|
|
30
|
+
this.recordDuplicates = new RecordDuplicateServiceImpl(client)
|
|
23
31
|
}
|
|
24
32
|
}
|
|
25
33
|
|
|
@@ -33,15 +41,20 @@ export type {
|
|
|
33
41
|
QueryValidateMeta,
|
|
34
42
|
QueryValidateResponse,
|
|
35
43
|
} from './queries.js'
|
|
36
|
-
export type { RecordService } from './records.js'
|
|
44
|
+
export type { RecordDuplicateService, RecordService } from './records.js'
|
|
37
45
|
export type {
|
|
38
46
|
BatchTransactionError,
|
|
39
47
|
BatchTransactionStatus,
|
|
40
48
|
BatchUpsertRecordsResponse,
|
|
41
49
|
BatchUpsertTransaction,
|
|
42
50
|
BatchUpsertTransactionResult,
|
|
51
|
+
ListRecordDuplicatesQuery,
|
|
43
52
|
ListRecordsOptions,
|
|
53
|
+
PublishContactObservationsResponse,
|
|
44
54
|
RecordData,
|
|
55
|
+
RecordDuplicate,
|
|
56
|
+
RecordDuplicateSource,
|
|
57
|
+
RecordDuplicateStatus,
|
|
45
58
|
} from './types.js'
|
|
46
59
|
|
|
47
60
|
// Re-export Zod schemas
|
package/src/data/records.ts
CHANGED
|
@@ -4,8 +4,11 @@ import type { ListResult } from '../types/common.js'
|
|
|
4
4
|
import type {
|
|
5
5
|
BatchUpsertRecordsResponse,
|
|
6
6
|
BatchUpsertTransaction,
|
|
7
|
+
ListRecordDuplicatesQuery,
|
|
7
8
|
ListRecordsOptions,
|
|
9
|
+
PublishContactObservationsResponse,
|
|
8
10
|
RecordData,
|
|
11
|
+
RecordDuplicate,
|
|
9
12
|
} from './types.js'
|
|
10
13
|
|
|
11
14
|
const RECORDS_BASE_PATH = '/data/v1/records'
|
|
@@ -92,6 +95,26 @@ export interface RecordService {
|
|
|
92
95
|
* (bare refs) on this path.
|
|
93
96
|
*/
|
|
94
97
|
getPublic(orgId: string, entitySlug: string, id: string): Promise<RecordData>
|
|
98
|
+
/**
|
|
99
|
+
* Replays ONE page of the entity's records as record_contact_observation
|
|
100
|
+
* events (the backfill after an attribute became contact-address). Requires
|
|
101
|
+
* unscoped write on the entity; loop until `page + 1 >= pages_total`.
|
|
102
|
+
*/
|
|
103
|
+
publishContactObservations(
|
|
104
|
+
entitySlug: string,
|
|
105
|
+
options?: { page?: number; page_size?: number },
|
|
106
|
+
): Promise<PublishContactObservationsResponse>
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Record duplicates — "these two records may be the same thing" pairs of one
|
|
111
|
+
* entity (see `RecordDuplicate`). Reading = entity read, dismissing = entity write.
|
|
112
|
+
*/
|
|
113
|
+
export interface RecordDuplicateService {
|
|
114
|
+
list(entitySlug: string, query?: ListRecordDuplicatesQuery): Promise<ListResult<RecordDuplicate>>
|
|
115
|
+
get(entitySlug: string, id: string): Promise<RecordDuplicate>
|
|
116
|
+
/** Closes a pair as "not a duplicate" (409 `record_duplicate_not_open` when already closed). */
|
|
117
|
+
dismiss(entitySlug: string, id: string): Promise<RecordDuplicate>
|
|
95
118
|
}
|
|
96
119
|
|
|
97
120
|
/**
|
|
@@ -149,6 +172,17 @@ export class RecordServiceImpl implements RecordService {
|
|
|
149
172
|
)
|
|
150
173
|
}
|
|
151
174
|
|
|
175
|
+
async publishContactObservations(
|
|
176
|
+
entitySlug: string,
|
|
177
|
+
options: { page?: number; page_size?: number } = {},
|
|
178
|
+
): Promise<PublishContactObservationsResponse> {
|
|
179
|
+
return this.client.requestWithQuery<PublishContactObservationsResponse>(
|
|
180
|
+
'POST',
|
|
181
|
+
`${RECORDS_BASE_PATH}/${entitySlug}/contact-observations`,
|
|
182
|
+
options,
|
|
183
|
+
)
|
|
184
|
+
}
|
|
185
|
+
|
|
152
186
|
listPublic(
|
|
153
187
|
orgId: string,
|
|
154
188
|
entitySlug: string,
|
|
@@ -180,3 +214,32 @@ export class RecordServiceImpl implements RecordService {
|
|
|
180
214
|
)
|
|
181
215
|
}
|
|
182
216
|
}
|
|
217
|
+
|
|
218
|
+
export class RecordDuplicateServiceImpl implements RecordDuplicateService {
|
|
219
|
+
constructor(private readonly client: ProteosClient) {}
|
|
220
|
+
|
|
221
|
+
async list(
|
|
222
|
+
entitySlug: string,
|
|
223
|
+
query: ListRecordDuplicatesQuery = {},
|
|
224
|
+
): Promise<ListResult<RecordDuplicate>> {
|
|
225
|
+
return this.client.requestWithQuery<ListResult<RecordDuplicate>>(
|
|
226
|
+
'GET',
|
|
227
|
+
`${RECORDS_BASE_PATH}/${entitySlug}/duplicates`,
|
|
228
|
+
query,
|
|
229
|
+
)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
async get(entitySlug: string, id: string): Promise<RecordDuplicate> {
|
|
233
|
+
return this.client.request<RecordDuplicate>(
|
|
234
|
+
'GET',
|
|
235
|
+
`${RECORDS_BASE_PATH}/${entitySlug}/duplicates/${encodeURIComponent(id)}`,
|
|
236
|
+
)
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
async dismiss(entitySlug: string, id: string): Promise<RecordDuplicate> {
|
|
240
|
+
return this.client.request<RecordDuplicate>(
|
|
241
|
+
'POST',
|
|
242
|
+
`${RECORDS_BASE_PATH}/${entitySlug}/duplicates/${encodeURIComponent(id)}/dismiss`,
|
|
243
|
+
)
|
|
244
|
+
}
|
|
245
|
+
}
|
package/src/data/types.ts
CHANGED
|
@@ -96,3 +96,55 @@ export const BatchUpsertTransactionResultSchema = z.object({
|
|
|
96
96
|
export const BatchUpsertRecordsResponseSchema = z.object({
|
|
97
97
|
results: z.array(BatchUpsertTransactionResultSchema),
|
|
98
98
|
})
|
|
99
|
+
|
|
100
|
+
// ── Record duplicates ─────────────────────────────────────────────────────────
|
|
101
|
+
|
|
102
|
+
/** How a duplicate pair was detected. `contact_binding` = two records bound to
|
|
103
|
+
* the same conversation contact through their contact-address attributes. */
|
|
104
|
+
export type RecordDuplicateSource = 'contact_binding' | (string & {})
|
|
105
|
+
|
|
106
|
+
export type RecordDuplicateStatus = 'open' | 'dismissed' | 'resolved'
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* "These two records of one entity may be the same thing." Asymmetric:
|
|
110
|
+
* `primary_record_id` is the record to keep, `secondary_record_id` the
|
|
111
|
+
* newcomer. A group of colliding records has ONE primary and one row per other
|
|
112
|
+
* member (four records = three rows). `evidence` is shaped by `source` — for
|
|
113
|
+
* `contact_binding`: `{ contact_id, address_keys: [{kind, value}] }`.
|
|
114
|
+
*/
|
|
115
|
+
export interface RecordDuplicate {
|
|
116
|
+
id: string
|
|
117
|
+
org_id: string
|
|
118
|
+
entity_slug: string
|
|
119
|
+
primary_record_id: string
|
|
120
|
+
secondary_record_id: string
|
|
121
|
+
source: RecordDuplicateSource
|
|
122
|
+
evidence: Record<string, unknown>
|
|
123
|
+
status: RecordDuplicateStatus
|
|
124
|
+
resolved_by?: { type: string; id: string }
|
|
125
|
+
resolved_at?: string
|
|
126
|
+
created_at: string
|
|
127
|
+
created_by: { type: string; id: string }
|
|
128
|
+
updated_at: string
|
|
129
|
+
updated_by: { type: string; id: string }
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export interface ListRecordDuplicatesQuery {
|
|
133
|
+
/** Only pairs this record takes part in (either side). */
|
|
134
|
+
record_id?: string
|
|
135
|
+
/** Defaults to `open` on the server. */
|
|
136
|
+
status?: RecordDuplicateStatus
|
|
137
|
+
page?: number
|
|
138
|
+
page_size?: number
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** ONE page of an entity's records replayed as contact observations. */
|
|
142
|
+
export interface PublishContactObservationsResponse {
|
|
143
|
+
entity_slug: string
|
|
144
|
+
page: number
|
|
145
|
+
page_size: number
|
|
146
|
+
pages_total: number
|
|
147
|
+
items_total: number
|
|
148
|
+
published: number
|
|
149
|
+
skipped: number
|
|
150
|
+
}
|