@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.
@@ -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 { DEFAULT_PAGE_SIZE as $, type AuditFields as A, type ComponentService as B, CURRENT_USER_DEFAULT as C, type CreateAppConfigurationRequest as D, type CreateAppRequest as E, type FileRef as F, type CreateComponentRequest as G, type CreateDesignReferenceRequest as H, type CreateEntityExtensionRequest as I, type CreateEntityRequest as J, type CreateListExtensionRequest as K, type ListOptions as L, type CreateListRequest as M, type CreateListViewRequest as N, type CreateMenuConfigurationExtensionRequest as O, PageIterator as P, type CreateMenuConfigurationRequest as Q, type CreatePageExtensionRequest as R, type CreatePageRequest as S, type CreateVariableRequest as T, type UserRef as U, type CurrencyAttributeMeta as V, CurrencyAttributeMetaSchema as W, type CurrencySymbolSide as X, type CurrencyValue as Y, type CurrentUserDefault as Z, DEFAULT_OPTIONS as _, type Attribute as a, type MenuConfigurationService as a$, DONE as a0, type DeployModuleRequest as a1, type DesignReference as a2, type DesignReferenceContent as a3, DesignReferenceSchema as a4, type DesignReferenceService as a5, type Done as a6, type Entity as a7, type EntityExtension as a8, EntityExtensionSchema as a9, type ListExtensionService as aA, type ListFn as aB, type ListListExtensionsOptions as aC, type ListListViewsOptions as aD, type ListListsOptions as aE, type ListMenuConfigurationExtensionsOptions as aF, type ListMenuConfigurationsOptions as aG, type ListModulesOptions as aH, type ListPageExtensionsOptions as aI, type ListPagesOptions as aJ, ListSchema as aK, type ListService as aL, type ListVariablesOptions as aM, type ListView as aN, ListViewSchema as aO, type ListViewService as aP, type LogicalOperator as aQ, MENU_CONFIGURATION_EXTENSION_ANCHOR_ITEMS as aR, type MenuConfiguration as aS, type MenuConfigurationExtension as aT, type MenuConfigurationExtensionPlacement as aU, MenuConfigurationExtensionPlacementSchema as aV, type MenuConfigurationExtensionPosition as aW, MenuConfigurationExtensionPositionSchema as aX, MenuConfigurationExtensionSchema as aY, type MenuConfigurationExtensionService as aZ, MenuConfigurationSchema as a_, type EntityExtensionService as aa, EntitySchema as ab, type EntityService as ac, type EntityWithSchema as ad, EntityWithSchemaSchema as ae, type EnumAttributeMeta as af, type EnumValue as ag, type ExtensionPosition as ah, ExtensionPositionSchema as ai, type FileAttributeMeta as aj, FileRefSchema as ak, type FilterElement as al, FilterElementSchema as am, type FilterGroup as an, FilterGroupSchema as ao, type List as ap, type ListAppConfigurationsOptions as aq, type ListAppsOptions as ar, type ListComponentsOptions as as, type ListDesignReferencesOptions as at, type ListEntitiesOptions as au, type ListEntityExtensionsOptions as av, type ListExtension as aw, type ListExtensionColumnPlacement as ax, ListExtensionColumnPlacementSchema as ay, ListExtensionSchema as az, type ListResult as b, createIterator as b$, type MenuItem as b0, MenuItemSchema as b1, MenuItemType as b2, MetaClient as b3, type MetaListOptions as b4, type Module as b5, ModuleSchema as b6, type ModuleService as b7, type ModuleStatus as b8, type OnDeleteAction as b9, ResponseMetaSchema as bA, type SortConfig as bB, SortConfigSchema as bC, type SortDirection as bD, type Timestamps as bE, type TokenProvider as bF, type UpdateAppConfigurationRequest as bG, type UpdateAppRequest as bH, type UpdateComponentRequest as bI, type UpdateDesignReferenceRequest as bJ, type UpdateEntityExtensionRequest as bK, type UpdateEntityRequest as bL, type UpdateListExtensionRequest as bM, type UpdateListRequest as bN, type UpdateListViewRequest as bO, type UpdateMenuConfigurationExtensionRequest as bP, type UpdateMenuConfigurationRequest as bQ, type UpdatePageExtensionRequest as bR, type UpdatePageRequest as bS, type UpdateVariableRequest as bT, UserRefSchema as bU, type UserType as bV, type Variable as bW, VariableSchema as bX, type VariableService as bY, acceptsCurrentUserDefault as bZ, allCurrencyCodes as b_, OnDeleteActionSchema as ba, PAGE_EXTENSION_ANCHOR_MAIN as bb, PAGE_EXTENSION_ANCHOR_SIDE_PANEL as bc, PLATFORM_ATTRIBUTE_NAMES as bd, PLATFORM_USER_ID as be, type Page as bf, type PageAction as bg, type PageActionKind as bh, PageActionSchema as bi, type PageExtension as bj, type PageExtensionPlacement as bk, PageExtensionPlacementSchema as bl, PageExtensionSchema as bm, type PageExtensionService as bn, type PageLayout as bo, PageLayoutSchema as bp, PageSchema as bq, type PageService as br, type PageType as bs, type PublicPageComponent as bt, type PublicPageResponse as bu, type RelationAttributeMeta as bv, RelationAttributeMetaSchema as bw, type RequestOptions as bx, type ResolvedClientOptions as by, type ResponseMeta as bz, ProteosClient as c, UserAttributeMetaSchema as c$, createListResultSchema as c0, currencyLabel as c1, currencySymbol as c2, currencySymbolSide as c3, formatAmount as c4, formatMoney as c5, isCurrentUserDefault as c6, isPlatformAttributeName as c7, localeNumberSeparators as c8, parseAmount as c9, LayoutTabSchema as cA, type ListElement as cB, type NumberAttributeMeta as cC, type ObjectAttributeMeta as cD, PAGE_BACKGROUND_TOKENS as cE, type PageBackgroundToken as cF, type PageLayoutSidePanel as cG, PageLayoutSidePanelSchema as cH, type PageStyle as cI, PageStyleSchema as cJ, type PrincipalAttributeMeta as cK, type PrincipalType as cL, type RecordFilterElement as cM, type RelatedListElement as cN, type RelatedRecordElement as cO, type ResponsiveSizing as cP, type RowElement as cQ, type SectionElement as cR, type SizeValue as cS, SizeValueSchema as cT, type SizingProps as cU, type StringAttributeMeta as cV, type StringFormat as cW, type TabsElement as cX, type TextElement as cY, type TextVariant as cZ, type UserAttributeMeta as c_, parseCurrencyMeta as ca, parseFileMeta as cb, parseRelationMeta as cc, platformAttributes as cd, resolveOptions as ce, type AttributeForLookup as cf, type AttributeMeta as cg, BUILT_IN_CONTROLS as ch, type BuiltInControlSlug as ci, type CardElement as cj, type ColumnElement as ck, type CommonProps as cl, type ComponentElement as cm, type ControlBucket as cn, type DatetimeAttributeMeta as co, type DatetimeFormat as cp, type DividerElement as cq, type FieldElement as cr, FileAttributeMetaSchema as cs, type LayoutAlign as ct, type LayoutElement as cu, LayoutElementSchema as cv, LayoutElementType as cw, type LayoutGap as cx, type LayoutJustify as cy, type LayoutTab as cz, type PrincipalRef as d, type WorkflowTriggerElement as d0, isBuiltInControl as d1, lookupCompatibleControls as d2, lookupControls as d3, lookupPrimaryControl as d4, parsePrincipalMeta as d5, parseUserMeta as d6, 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 };
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.52.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/biome-config": "0.0.0",
70
- "@proteos/tsconfig": "0.0.0"
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. Immutable once created.
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
- export type ChannelActionType = 'message' | 'invitation' | 'inmail' | 'profile_visit'
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 { type RecordService, RecordServiceImpl } from './records.js'
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
@@ -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
+ }