@proteos/sdk 0.51.0 → 0.52.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-IRFFXJMB.js → chunk-VKS2VX24.js} +289 -16
- package/dist/chunk-VKS2VX24.js.map +1 -0
- package/dist/{chunk-RKFXHDVU.cjs → chunk-WEEC4REL.cjs} +301 -15
- package/dist/chunk-WEEC4REL.cjs.map +1 -0
- package/dist/index.cjs +162 -102
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +107 -8
- package/dist/index.d.ts +107 -8
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/meta/index.cjs +111 -59
- 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-C9flkAj-.d.cts → types-DHhuGDpV.d.cts} +1200 -75
- package/dist/{types-C9flkAj-.d.ts → types-DHhuGDpV.d.ts} +1200 -75
- package/package.json +1 -1
- package/src/conversation/index.ts +39 -0
- package/src/conversation/types.ts +72 -1
- package/src/index.ts +41 -0
- package/src/meta/entity-extensions.ts +98 -0
- package/src/meta/index.ts +76 -0
- package/src/meta/layout/common-props.ts +8 -0
- package/src/meta/layout/elements.ts +15 -10
- package/src/meta/layout/index.ts +1 -0
- package/src/meta/list-extensions.ts +98 -0
- package/src/meta/menu-configuration-extensions.ts +132 -0
- package/src/meta/page-extensions.ts +98 -0
- package/src/meta/types.ts +398 -0
- package/dist/chunk-IRFFXJMB.js.map +0 -1
- package/dist/chunk-RKFXHDVU.cjs.map +0 -1
package/package.json
CHANGED
|
@@ -33,6 +33,7 @@ import type {
|
|
|
33
33
|
CreateGlossaryTermRequest,
|
|
34
34
|
CreateSendingRuleRequest,
|
|
35
35
|
CreateToneProfileSetupRequest,
|
|
36
|
+
CreateTranscriptionFromTextRequest,
|
|
36
37
|
CreateTranscriptionRequest,
|
|
37
38
|
DeleteConnectionQuery,
|
|
38
39
|
DispatchMeetingBotRequest,
|
|
@@ -106,6 +107,7 @@ import type {
|
|
|
106
107
|
UpdatePhoneNumberRequest,
|
|
107
108
|
UpdateSendingRuleRequest,
|
|
108
109
|
UpdateTranscriptionRequest,
|
|
110
|
+
UpsertToneProfileRequest,
|
|
109
111
|
} from './types.js'
|
|
110
112
|
import { type VoiceService, VoiceServiceImpl } from './voice.js'
|
|
111
113
|
|
|
@@ -1121,6 +1123,20 @@ export interface ToneProfileService {
|
|
|
1121
1123
|
getProfile(id: string): Promise<ToneProfile>
|
|
1122
1124
|
/** The single most-specific profile for a drafting context; 404 when none. */
|
|
1123
1125
|
resolve(query: ResolveToneProfileQuery): Promise<ToneProfile>
|
|
1126
|
+
/**
|
|
1127
|
+
* Writes a HAND-AUTHORED profile, addressed by its scope tuple rather than an
|
|
1128
|
+
* id — so re-sending the same scope updates the row it created. The row lands
|
|
1129
|
+
* `source: 'manual'`, which locks that scope against synthesis forever after;
|
|
1130
|
+
* it also takes the scope over from a `model` row already there. Needs no
|
|
1131
|
+
* setup: a setup is the opt-in to AI synthesis, and writing a voice by hand is
|
|
1132
|
+
* the opposite of asking for one.
|
|
1133
|
+
*/
|
|
1134
|
+
upsertProfile(request: UpsertToneProfileRequest): Promise<ToneProfile>
|
|
1135
|
+
/**
|
|
1136
|
+
* Removes one profile row, manual or model. A deleted model row comes back on
|
|
1137
|
+
* the next run; a deleted manual row hands its scope back to synthesis.
|
|
1138
|
+
*/
|
|
1139
|
+
deleteProfile(id: string): Promise<void>
|
|
1124
1140
|
}
|
|
1125
1141
|
|
|
1126
1142
|
class ToneProfileServiceImpl implements ToneProfileService {
|
|
@@ -1170,6 +1186,17 @@ class ToneProfileServiceImpl implements ToneProfileService {
|
|
|
1170
1186
|
query,
|
|
1171
1187
|
)
|
|
1172
1188
|
}
|
|
1189
|
+
|
|
1190
|
+
upsertProfile(request: UpsertToneProfileRequest): Promise<ToneProfile> {
|
|
1191
|
+
return this.client.request('PUT', `${CONVERSATION_BASE_PATH}/tone-profiles`, request)
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
async deleteProfile(id: string): Promise<void> {
|
|
1195
|
+
await this.client.request(
|
|
1196
|
+
'DELETE',
|
|
1197
|
+
`${CONVERSATION_BASE_PATH}/tone-profiles/${encodeURIComponent(id)}`,
|
|
1198
|
+
)
|
|
1199
|
+
}
|
|
1173
1200
|
}
|
|
1174
1201
|
|
|
1175
1202
|
/** Batch transcription of stored audio files + materialization. */
|
|
@@ -1180,6 +1207,14 @@ export interface TranscriptionService {
|
|
|
1180
1207
|
* status is `completed` (or `failed`), then `materialize`.
|
|
1181
1208
|
*/
|
|
1182
1209
|
createFromFile(request: CreateTranscriptionRequest): Promise<Transcription>
|
|
1210
|
+
/**
|
|
1211
|
+
* Lands an ALREADY WRITTEN transcript. Synchronous — no provider runs, and
|
|
1212
|
+
* the entity comes back `completed`, ready to `materialize` straight away.
|
|
1213
|
+
* The door for authoring a transcript (and so a conversation) from text with
|
|
1214
|
+
* nothing to upload. Same endpoint as `createFromFile`; the shape of the body
|
|
1215
|
+
* chooses the mode, and exactly one of the two is allowed.
|
|
1216
|
+
*/
|
|
1217
|
+
createFromText(request: CreateTranscriptionFromTextRequest): Promise<Transcription>
|
|
1183
1218
|
list(query?: ListTranscriptionsQuery): Promise<ListResponse<Transcription>>
|
|
1184
1219
|
get(id: string): Promise<Transcription>
|
|
1185
1220
|
/**
|
|
@@ -1204,6 +1239,10 @@ class TranscriptionServiceImpl implements TranscriptionService {
|
|
|
1204
1239
|
return this.client.request('POST', `${CONVERSATION_BASE_PATH}/transcriptions`, request)
|
|
1205
1240
|
}
|
|
1206
1241
|
|
|
1242
|
+
createFromText(request: CreateTranscriptionFromTextRequest): Promise<Transcription> {
|
|
1243
|
+
return this.client.request('POST', `${CONVERSATION_BASE_PATH}/transcriptions`, request)
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1207
1246
|
list(query: ListTranscriptionsQuery = {}): Promise<ListResponse<Transcription>> {
|
|
1208
1247
|
return this.client.requestWithQuery('GET', `${CONVERSATION_BASE_PATH}/transcriptions`, query)
|
|
1209
1248
|
}
|
|
@@ -914,6 +914,14 @@ export type ToneProfileSetupStatus = 'empty' | 'processing' | 'ready'
|
|
|
914
914
|
/** A tone profile row's tier — derived, most specific wins at read time. */
|
|
915
915
|
export type ToneProfileScope = 'user' | 'channel' | 'group' | 'contact'
|
|
916
916
|
|
|
917
|
+
/**
|
|
918
|
+
* Who wrote a tone profile, and therefore who may change it. `manual` rows are
|
|
919
|
+
* hand-authored and authoritative: synthesis never overwrites or prunes them,
|
|
920
|
+
* and deleting the user's setup (the AI opt-in) leaves them standing. `model`
|
|
921
|
+
* rows belong to the synthesis sweep, which owns them outright.
|
|
922
|
+
*/
|
|
923
|
+
export type ToneProfileSource = 'manual' | 'model'
|
|
924
|
+
|
|
917
925
|
/**
|
|
918
926
|
* The per-user opt-in for tone-of-voice synthesis: only set-up users are
|
|
919
927
|
* swept. Also carries the whole-user synthesis claim (status/started_at).
|
|
@@ -933,7 +941,8 @@ export interface ToneProfileSetup {
|
|
|
933
941
|
}
|
|
934
942
|
|
|
935
943
|
/**
|
|
936
|
-
* One
|
|
944
|
+
* One tone-of-voice instruction row — synthesized or hand-authored (`source`).
|
|
945
|
+
* Rows form a specificity
|
|
937
946
|
* hierarchy — user aggregate (the constant voice), per-channel base, per
|
|
938
947
|
* contact-group, per individual contact — and every row is SELF-CONTAINED: a
|
|
939
948
|
* drafting consumer injects exactly one row's `instructions` verbatim (use
|
|
@@ -951,6 +960,8 @@ export interface ToneProfile {
|
|
|
951
960
|
/** Scopes the row to one individual contact within the group. */
|
|
952
961
|
contact_id?: string
|
|
953
962
|
scope: ToneProfileScope
|
|
963
|
+
/** Who owns this row — see ToneProfileSource. */
|
|
964
|
+
source: ToneProfileSource
|
|
954
965
|
/** COMPLETE markdown instruction set, served verbatim to a drafting model. */
|
|
955
966
|
instructions: string
|
|
956
967
|
/** Short delta vs the tier above — what a human scans; empty on root tiers. */
|
|
@@ -975,6 +986,30 @@ export interface ListToneProfilesQuery extends PaginationQuery {
|
|
|
975
986
|
owned_by_id?: string
|
|
976
987
|
channel?: Channel
|
|
977
988
|
scope?: ToneProfileScope
|
|
989
|
+
/** Narrow to hand-authored (`manual`) or synthesized (`model`) rows. */
|
|
990
|
+
source?: ToneProfileSource
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
/**
|
|
994
|
+
* Writes ONE hand-authored tone profile. The identity is the scope tuple, not
|
|
995
|
+
* an id — re-sending the same scope updates the row it created. The row lands
|
|
996
|
+
* `source: 'manual'`, which locks that scope against synthesis; it also takes
|
|
997
|
+
* the scope over from a `model` row already sitting there.
|
|
998
|
+
*
|
|
999
|
+
* Scope grammar (mirrors the resolve precedence): omit `channel` for the
|
|
1000
|
+
* cross-channel base voice; `contact_group_key` needs a `channel`;
|
|
1001
|
+
* `contact_id` needs both, because resolution reaches a contact row only
|
|
1002
|
+
* through its group.
|
|
1003
|
+
*/
|
|
1004
|
+
export interface UpsertToneProfileRequest {
|
|
1005
|
+
owned_by_id: string
|
|
1006
|
+
channel?: Channel
|
|
1007
|
+
contact_group_key?: string
|
|
1008
|
+
contact_id?: string
|
|
1009
|
+
/** COMPLETE markdown style guide for this tier; never a delta. */
|
|
1010
|
+
instructions: string
|
|
1011
|
+
/** Optional human-facing note on how this tier differs from the one above. */
|
|
1012
|
+
differences?: string
|
|
978
1013
|
}
|
|
979
1014
|
|
|
980
1015
|
/**
|
|
@@ -1595,6 +1630,10 @@ export interface Transcription {
|
|
|
1595
1630
|
updated_by: UserRef
|
|
1596
1631
|
}
|
|
1597
1632
|
|
|
1633
|
+
/**
|
|
1634
|
+
* Transcribes a storage-service audio file. Asynchronous: the row lands
|
|
1635
|
+
* `processing` and the caller polls until `completed`.
|
|
1636
|
+
*/
|
|
1598
1637
|
export interface CreateTranscriptionRequest {
|
|
1599
1638
|
file_id: string
|
|
1600
1639
|
language?: string
|
|
@@ -1602,6 +1641,38 @@ export interface CreateTranscriptionRequest {
|
|
|
1602
1641
|
is_diarized?: boolean
|
|
1603
1642
|
}
|
|
1604
1643
|
|
|
1644
|
+
/**
|
|
1645
|
+
* Lands an ALREADY WRITTEN transcript — no provider runs and the row is
|
|
1646
|
+
* `completed` when the call returns. This is how a transcript, and through
|
|
1647
|
+
* `materialize` a conversation, is authored from text with nothing to upload.
|
|
1648
|
+
* `source_file_id` stays empty, which is how a reader tells the two kinds apart.
|
|
1649
|
+
*
|
|
1650
|
+
* Timings are optional: plain text has none, and materialization then sequences
|
|
1651
|
+
* the turns by their position instead of by `start_ms`.
|
|
1652
|
+
*/
|
|
1653
|
+
/**
|
|
1654
|
+
* One turn of an authored transcript. Distinct from TranscriptTurn (the read
|
|
1655
|
+
* shape, always fully populated) because everything but who-said-what is
|
|
1656
|
+
* derived server-side: an unlabelled speaker becomes "Speaker N", and text with
|
|
1657
|
+
* no timings is sequenced by position at materialization.
|
|
1658
|
+
*/
|
|
1659
|
+
export interface AuthoredTranscriptTurn {
|
|
1660
|
+
/** Speaker index — the same number means the same person. */
|
|
1661
|
+
speaker: number
|
|
1662
|
+
speaker_label?: string
|
|
1663
|
+
text: string
|
|
1664
|
+
start_ms?: number
|
|
1665
|
+
end_ms?: number
|
|
1666
|
+
confidence?: number
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
export interface CreateTranscriptionFromTextRequest {
|
|
1670
|
+
turns: AuthoredTranscriptTurn[]
|
|
1671
|
+
language?: string
|
|
1672
|
+
/** Defaults to whether the turns name more than one speaker. */
|
|
1673
|
+
is_diarized?: boolean
|
|
1674
|
+
}
|
|
1675
|
+
|
|
1605
1676
|
/**
|
|
1606
1677
|
* Edits a COMPLETED transcription in place. `turns`, when present, replace the
|
|
1607
1678
|
* diarized turns wholesale; `speaker_labels` maps diarized speaker indexes
|
package/src/index.ts
CHANGED
|
@@ -238,6 +238,7 @@ export type {
|
|
|
238
238
|
AttachContactAddressRequest,
|
|
239
239
|
AttachConversationBriefRequest,
|
|
240
240
|
Attachment,
|
|
241
|
+
AuthoredTranscriptTurn,
|
|
241
242
|
AutomatedFilterConfig,
|
|
242
243
|
AutomatedSignal,
|
|
243
244
|
BlockContactRequest,
|
|
@@ -310,6 +311,7 @@ export type {
|
|
|
310
311
|
CreateGlossaryTermRequest,
|
|
311
312
|
CreateSendingRuleRequest,
|
|
312
313
|
CreateToneProfileSetupRequest,
|
|
314
|
+
CreateTranscriptionFromTextRequest,
|
|
313
315
|
DispatchMeetingBotRequest,
|
|
314
316
|
DomainFilterConfig,
|
|
315
317
|
EmailDnsRecord,
|
|
@@ -412,6 +414,7 @@ export type {
|
|
|
412
414
|
ToneProfileService,
|
|
413
415
|
ToneProfileSetup,
|
|
414
416
|
ToneProfileSetupStatus,
|
|
417
|
+
ToneProfileSource,
|
|
415
418
|
TranscribeStreamOptions,
|
|
416
419
|
Transcription,
|
|
417
420
|
TranscriptionReviewStatus,
|
|
@@ -430,6 +433,7 @@ export type {
|
|
|
430
433
|
UpdateGlossaryTermRequest,
|
|
431
434
|
UpdatePhoneNumberRequest,
|
|
432
435
|
UpdateSendingRuleRequest,
|
|
436
|
+
UpsertToneProfileRequest,
|
|
433
437
|
VoiceService,
|
|
434
438
|
VoiceTranscriptionStream,
|
|
435
439
|
WarmupRuleConfig,
|
|
@@ -602,10 +606,14 @@ export type {
|
|
|
602
606
|
CreateAppRequest,
|
|
603
607
|
CreateComponentRequest,
|
|
604
608
|
CreateDesignReferenceRequest,
|
|
609
|
+
CreateEntityExtensionRequest,
|
|
605
610
|
CreateEntityRequest,
|
|
611
|
+
CreateListExtensionRequest,
|
|
606
612
|
CreateListRequest,
|
|
607
613
|
CreateListViewRequest,
|
|
614
|
+
CreateMenuConfigurationExtensionRequest,
|
|
608
615
|
CreateMenuConfigurationRequest,
|
|
616
|
+
CreatePageExtensionRequest,
|
|
609
617
|
CreatePageRequest,
|
|
610
618
|
CreateVariableRequest,
|
|
611
619
|
// Currency attribute meta + value
|
|
@@ -620,10 +628,13 @@ export type {
|
|
|
620
628
|
DesignReferenceService,
|
|
621
629
|
// Entity types
|
|
622
630
|
Entity,
|
|
631
|
+
EntityExtension,
|
|
632
|
+
EntityExtensionService,
|
|
623
633
|
EntityService,
|
|
624
634
|
EntityWithSchema,
|
|
625
635
|
EnumAttributeMeta,
|
|
626
636
|
EnumValue,
|
|
637
|
+
ExtensionPosition,
|
|
627
638
|
// File attribute meta
|
|
628
639
|
FileAttributeMeta,
|
|
629
640
|
FilterElement,
|
|
@@ -635,10 +646,17 @@ export type {
|
|
|
635
646
|
ListComponentsOptions,
|
|
636
647
|
ListDesignReferencesOptions,
|
|
637
648
|
ListEntitiesOptions,
|
|
649
|
+
ListEntityExtensionsOptions,
|
|
650
|
+
ListExtension,
|
|
651
|
+
ListExtensionColumnPlacement,
|
|
652
|
+
ListExtensionService,
|
|
653
|
+
ListListExtensionsOptions,
|
|
638
654
|
ListListsOptions,
|
|
639
655
|
ListListViewsOptions,
|
|
656
|
+
ListMenuConfigurationExtensionsOptions,
|
|
640
657
|
ListMenuConfigurationsOptions,
|
|
641
658
|
ListModulesOptions,
|
|
659
|
+
ListPageExtensionsOptions,
|
|
642
660
|
ListPagesOptions,
|
|
643
661
|
ListService,
|
|
644
662
|
ListVariablesOptions,
|
|
@@ -648,6 +666,10 @@ export type {
|
|
|
648
666
|
LogicalOperator,
|
|
649
667
|
// MenuConfiguration types
|
|
650
668
|
MenuConfiguration,
|
|
669
|
+
MenuConfigurationExtension,
|
|
670
|
+
MenuConfigurationExtensionPlacement,
|
|
671
|
+
MenuConfigurationExtensionPosition,
|
|
672
|
+
MenuConfigurationExtensionService,
|
|
651
673
|
MenuConfigurationService,
|
|
652
674
|
MenuItem,
|
|
653
675
|
// Shared meta types
|
|
@@ -661,6 +683,9 @@ export type {
|
|
|
661
683
|
Page,
|
|
662
684
|
PageAction,
|
|
663
685
|
PageActionKind,
|
|
686
|
+
PageExtension,
|
|
687
|
+
PageExtensionPlacement,
|
|
688
|
+
PageExtensionService,
|
|
664
689
|
PageLayout,
|
|
665
690
|
PageService,
|
|
666
691
|
PageType,
|
|
@@ -675,10 +700,14 @@ export type {
|
|
|
675
700
|
UpdateAppRequest,
|
|
676
701
|
UpdateComponentRequest,
|
|
677
702
|
UpdateDesignReferenceRequest,
|
|
703
|
+
UpdateEntityExtensionRequest,
|
|
678
704
|
UpdateEntityRequest,
|
|
705
|
+
UpdateListExtensionRequest,
|
|
679
706
|
UpdateListRequest,
|
|
680
707
|
UpdateListViewRequest,
|
|
708
|
+
UpdateMenuConfigurationExtensionRequest,
|
|
681
709
|
UpdateMenuConfigurationRequest,
|
|
710
|
+
UpdatePageExtensionRequest,
|
|
682
711
|
UpdatePageRequest,
|
|
683
712
|
UpdateVariableRequest,
|
|
684
713
|
// Variable types
|
|
@@ -703,24 +732,36 @@ export {
|
|
|
703
732
|
currencySymbol,
|
|
704
733
|
currencySymbolSide,
|
|
705
734
|
DesignReferenceSchema,
|
|
735
|
+
EntityExtensionSchema,
|
|
706
736
|
EntitySchema,
|
|
707
737
|
EntityWithSchemaSchema,
|
|
738
|
+
ExtensionPositionSchema,
|
|
708
739
|
FilterElementSchema,
|
|
709
740
|
FilterGroupSchema,
|
|
710
741
|
formatAmount,
|
|
711
742
|
formatMoney,
|
|
712
743
|
isCurrentUserDefault,
|
|
713
744
|
isPlatformAttributeName,
|
|
745
|
+
ListExtensionColumnPlacementSchema,
|
|
746
|
+
ListExtensionSchema,
|
|
714
747
|
ListSchema,
|
|
715
748
|
ListViewSchema,
|
|
716
749
|
localeNumberSeparators,
|
|
750
|
+
MENU_CONFIGURATION_EXTENSION_ANCHOR_ITEMS,
|
|
751
|
+
MenuConfigurationExtensionPlacementSchema,
|
|
752
|
+
MenuConfigurationExtensionPositionSchema,
|
|
753
|
+
MenuConfigurationExtensionSchema,
|
|
717
754
|
MenuConfigurationSchema,
|
|
718
755
|
MenuItemSchema,
|
|
719
756
|
MenuItemType,
|
|
720
757
|
MetaClient,
|
|
721
758
|
ModuleSchema,
|
|
722
759
|
OnDeleteActionSchema,
|
|
760
|
+
PAGE_EXTENSION_ANCHOR_MAIN,
|
|
761
|
+
PAGE_EXTENSION_ANCHOR_SIDE_PANEL,
|
|
723
762
|
PageActionSchema,
|
|
763
|
+
PageExtensionPlacementSchema,
|
|
764
|
+
PageExtensionSchema,
|
|
724
765
|
PageLayoutSchema,
|
|
725
766
|
PageSchema,
|
|
726
767
|
PLATFORM_ATTRIBUTE_NAMES,
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { ProteosClient } from '../client.js'
|
|
2
|
+
import { PageIterator } from '../iterator.js'
|
|
3
|
+
import type { ListResult } from '../types/common.js'
|
|
4
|
+
import type {
|
|
5
|
+
CreateEntityExtensionRequest,
|
|
6
|
+
EntityExtension,
|
|
7
|
+
ListEntityExtensionsOptions,
|
|
8
|
+
UpdateEntityExtensionRequest,
|
|
9
|
+
} from './types.js'
|
|
10
|
+
|
|
11
|
+
const ENTITY_EXTENSIONS_BASE_PATH = '/meta/v1/entity-extensions'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Service for entity extensions — attributes contributed to an EXISTING host
|
|
15
|
+
* entity by a resource that does not own it (typically a second module). The
|
|
16
|
+
* host's `attributes` are the materialized merge: its own attributes plus every
|
|
17
|
+
* extension's, each stamped with `extension_key`. Every write here
|
|
18
|
+
* re-materializes the host; an attribute name shared with the host or another
|
|
19
|
+
* extension is refused (`entity_extension_attribute_collision`).
|
|
20
|
+
*/
|
|
21
|
+
export interface EntityExtensionService {
|
|
22
|
+
/** Lists entity extensions (auto-paginating iterator). */
|
|
23
|
+
list(
|
|
24
|
+
options?: ListEntityExtensionsOptions,
|
|
25
|
+
): PageIterator<EntityExtension, ListEntityExtensionsOptions>
|
|
26
|
+
|
|
27
|
+
/** Fetches a single page of entity extensions. */
|
|
28
|
+
listPage(options?: ListEntityExtensionsOptions): Promise<ListResult<EntityExtension>>
|
|
29
|
+
|
|
30
|
+
/** Gets an entity extension by key (404 when unknown). */
|
|
31
|
+
get(key: string): Promise<EntityExtension>
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Creates an entity extension and merges its attributes into the host.
|
|
35
|
+
* @throws {ProteosError} 409 `entity_extension_already_exists` when the key
|
|
36
|
+
* is taken; 400 `entity_extension_entity_not_found` when the host does
|
|
37
|
+
* not exist; 400 `entity_extension_attribute_collision` on a name clash.
|
|
38
|
+
*/
|
|
39
|
+
create(request: CreateEntityExtensionRequest): Promise<EntityExtension>
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Creates or replaces an entity extension idempotently by key
|
|
43
|
+
* (`PUT /meta/v1/entity-extensions/:key`). Replaces the whole definition;
|
|
44
|
+
* the host binding (`entity_slug`) of an existing key is immutable.
|
|
45
|
+
*/
|
|
46
|
+
upsert(key: string, request: CreateEntityExtensionRequest): Promise<EntityExtension>
|
|
47
|
+
|
|
48
|
+
/** Partially updates an entity extension (`attributes` replaces the whole list). */
|
|
49
|
+
update(key: string, request: UpdateEntityExtensionRequest): Promise<EntityExtension>
|
|
50
|
+
|
|
51
|
+
/** Deletes an entity extension and removes its attributes from the host. */
|
|
52
|
+
delete(key: string): Promise<void>
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export class EntityExtensionServiceImpl implements EntityExtensionService {
|
|
56
|
+
constructor(private readonly client: ProteosClient) {}
|
|
57
|
+
|
|
58
|
+
list(
|
|
59
|
+
options: ListEntityExtensionsOptions = {},
|
|
60
|
+
): PageIterator<EntityExtension, ListEntityExtensionsOptions> {
|
|
61
|
+
return new PageIterator((opts) => this.listPage(opts), options)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async listPage(options: ListEntityExtensionsOptions = {}): Promise<ListResult<EntityExtension>> {
|
|
65
|
+
return this.client.requestWithQuery<ListResult<EntityExtension>>(
|
|
66
|
+
'GET',
|
|
67
|
+
ENTITY_EXTENSIONS_BASE_PATH,
|
|
68
|
+
options,
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async get(key: string): Promise<EntityExtension> {
|
|
73
|
+
return this.client.request<EntityExtension>('GET', `${ENTITY_EXTENSIONS_BASE_PATH}/${key}`)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async create(request: CreateEntityExtensionRequest): Promise<EntityExtension> {
|
|
77
|
+
return this.client.request<EntityExtension>('POST', ENTITY_EXTENSIONS_BASE_PATH, request)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async upsert(key: string, request: CreateEntityExtensionRequest): Promise<EntityExtension> {
|
|
81
|
+
return this.client.request<EntityExtension>('PUT', `${ENTITY_EXTENSIONS_BASE_PATH}/${key}`, {
|
|
82
|
+
...request,
|
|
83
|
+
key,
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async update(key: string, request: UpdateEntityExtensionRequest): Promise<EntityExtension> {
|
|
88
|
+
return this.client.request<EntityExtension>(
|
|
89
|
+
'PATCH',
|
|
90
|
+
`${ENTITY_EXTENSIONS_BASE_PATH}/${key}`,
|
|
91
|
+
request,
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
async delete(key: string): Promise<void> {
|
|
96
|
+
await this.client.request<void>('DELETE', `${ENTITY_EXTENSIONS_BASE_PATH}/${key}`)
|
|
97
|
+
}
|
|
98
|
+
}
|
package/src/meta/index.ts
CHANGED
|
@@ -4,13 +4,20 @@ import { type AppService, AppServiceImpl } from './apps.js'
|
|
|
4
4
|
import { type ComponentService, ComponentServiceImpl } from './components.js'
|
|
5
5
|
import { type DesignReferenceService, DesignReferenceServiceImpl } from './design-references.js'
|
|
6
6
|
import { type EntityService, EntityServiceImpl } from './entities.js'
|
|
7
|
+
import { type EntityExtensionService, EntityExtensionServiceImpl } from './entity-extensions.js'
|
|
8
|
+
import { type ListExtensionService, ListExtensionServiceImpl } from './list-extensions.js'
|
|
7
9
|
import { type ListViewService, ListViewServiceImpl } from './list-views.js'
|
|
8
10
|
import { type ListService, ListServiceImpl } from './lists.js'
|
|
11
|
+
import {
|
|
12
|
+
type MenuConfigurationExtensionService,
|
|
13
|
+
MenuConfigurationExtensionServiceImpl,
|
|
14
|
+
} from './menu-configuration-extensions.js'
|
|
9
15
|
import {
|
|
10
16
|
type MenuConfigurationService,
|
|
11
17
|
MenuConfigurationServiceImpl,
|
|
12
18
|
} from './menu-configurations.js'
|
|
13
19
|
import { type ModuleService, ModuleServiceImpl } from './modules.js'
|
|
20
|
+
import { type PageExtensionService, PageExtensionServiceImpl } from './page-extensions.js'
|
|
14
21
|
import { type PageService, PageServiceImpl } from './pages.js'
|
|
15
22
|
import { type VariableService, VariableServiceImpl } from './variables.js'
|
|
16
23
|
|
|
@@ -40,6 +47,30 @@ export class MetaClient {
|
|
|
40
47
|
*/
|
|
41
48
|
readonly entities: EntityService
|
|
42
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Service for managing entity extensions — attributes contributed to a host
|
|
52
|
+
* entity by a resource that does not own it.
|
|
53
|
+
*/
|
|
54
|
+
readonly entityExtensions: EntityExtensionService
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Service for managing page extensions — anchored layout blocks contributed
|
|
58
|
+
* to a host page by a resource that does not own it.
|
|
59
|
+
*/
|
|
60
|
+
readonly pageExtensions: PageExtensionService
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Service for managing list extensions — columns and toolbar actions
|
|
64
|
+
* contributed to a host list by a resource that does not own it.
|
|
65
|
+
*/
|
|
66
|
+
readonly listExtensions: ListExtensionService
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Service for managing menu-configuration extensions — items contributed
|
|
70
|
+
* to a host menu by another module or resource.
|
|
71
|
+
*/
|
|
72
|
+
readonly menuConfigurationExtensions: MenuConfigurationExtensionService
|
|
73
|
+
|
|
43
74
|
/**
|
|
44
75
|
* Service for managing WebAssembly modules.
|
|
45
76
|
*/
|
|
@@ -98,6 +129,10 @@ export class MetaClient {
|
|
|
98
129
|
*/
|
|
99
130
|
constructor(client: ProteosClient) {
|
|
100
131
|
this.entities = new EntityServiceImpl(client)
|
|
132
|
+
this.entityExtensions = new EntityExtensionServiceImpl(client)
|
|
133
|
+
this.pageExtensions = new PageExtensionServiceImpl(client)
|
|
134
|
+
this.listExtensions = new ListExtensionServiceImpl(client)
|
|
135
|
+
this.menuConfigurationExtensions = new MenuConfigurationExtensionServiceImpl(client)
|
|
101
136
|
this.modules = new ModuleServiceImpl(client)
|
|
102
137
|
this.variables = new VariableServiceImpl(client)
|
|
103
138
|
this.components = new ComponentServiceImpl(client)
|
|
@@ -118,12 +153,16 @@ export * from './currency/index.js'
|
|
|
118
153
|
export type { DesignReferenceService } from './design-references.js'
|
|
119
154
|
// Re-export service interfaces
|
|
120
155
|
export type { EntityService } from './entities.js'
|
|
156
|
+
export type { EntityExtensionService } from './entity-extensions.js'
|
|
121
157
|
// Re-export the layout module (PageLayout types + Zod schemas + control registry)
|
|
122
158
|
export * from './layout/index.js'
|
|
159
|
+
export type { ListExtensionService } from './list-extensions.js'
|
|
123
160
|
export type { ListViewService } from './list-views.js'
|
|
124
161
|
export type { ListService } from './lists.js'
|
|
162
|
+
export type { MenuConfigurationExtensionService } from './menu-configuration-extensions.js'
|
|
125
163
|
export type { MenuConfigurationService } from './menu-configurations.js'
|
|
126
164
|
export type { ModuleService } from './modules.js'
|
|
165
|
+
export type { PageExtensionService } from './page-extensions.js'
|
|
127
166
|
export type { PageService } from './pages.js'
|
|
128
167
|
// Re-export types
|
|
129
168
|
export type {
|
|
@@ -147,10 +186,14 @@ export type {
|
|
|
147
186
|
CreateAppRequest,
|
|
148
187
|
CreateComponentRequest,
|
|
149
188
|
CreateDesignReferenceRequest,
|
|
189
|
+
CreateEntityExtensionRequest,
|
|
150
190
|
CreateEntityRequest,
|
|
191
|
+
CreateListExtensionRequest,
|
|
151
192
|
CreateListRequest,
|
|
152
193
|
CreateListViewRequest,
|
|
194
|
+
CreateMenuConfigurationExtensionRequest,
|
|
153
195
|
CreateMenuConfigurationRequest,
|
|
196
|
+
CreatePageExtensionRequest,
|
|
154
197
|
CreatePageRequest,
|
|
155
198
|
CreateVariableRequest,
|
|
156
199
|
// Currency attribute meta + value
|
|
@@ -165,9 +208,12 @@ export type {
|
|
|
165
208
|
DesignReferenceContent,
|
|
166
209
|
// Entity types
|
|
167
210
|
Entity,
|
|
211
|
+
// EntityExtension types
|
|
212
|
+
EntityExtension,
|
|
168
213
|
EntityWithSchema,
|
|
169
214
|
EnumAttributeMeta,
|
|
170
215
|
EnumValue,
|
|
216
|
+
ExtensionPosition,
|
|
171
217
|
// File attribute meta
|
|
172
218
|
FileAttributeMeta,
|
|
173
219
|
FilterElement,
|
|
@@ -179,10 +225,17 @@ export type {
|
|
|
179
225
|
ListComponentsOptions,
|
|
180
226
|
ListDesignReferencesOptions,
|
|
181
227
|
ListEntitiesOptions,
|
|
228
|
+
ListEntityExtensionsOptions,
|
|
229
|
+
// ListExtension types
|
|
230
|
+
ListExtension,
|
|
231
|
+
ListExtensionColumnPlacement,
|
|
232
|
+
ListListExtensionsOptions,
|
|
182
233
|
ListListsOptions,
|
|
183
234
|
ListListViewsOptions,
|
|
235
|
+
ListMenuConfigurationExtensionsOptions,
|
|
184
236
|
ListMenuConfigurationsOptions,
|
|
185
237
|
ListModulesOptions,
|
|
238
|
+
ListPageExtensionsOptions,
|
|
186
239
|
ListPagesOptions,
|
|
187
240
|
ListVariablesOptions,
|
|
188
241
|
// ListView types
|
|
@@ -190,6 +243,10 @@ export type {
|
|
|
190
243
|
LogicalOperator,
|
|
191
244
|
// MenuConfiguration types
|
|
192
245
|
MenuConfiguration,
|
|
246
|
+
// MenuConfigurationExtension types
|
|
247
|
+
MenuConfigurationExtension,
|
|
248
|
+
MenuConfigurationExtensionPlacement,
|
|
249
|
+
MenuConfigurationExtensionPosition,
|
|
193
250
|
MenuItem,
|
|
194
251
|
// Shared types
|
|
195
252
|
MetaListOptions,
|
|
@@ -203,6 +260,9 @@ export type {
|
|
|
203
260
|
Page,
|
|
204
261
|
PageAction,
|
|
205
262
|
PageActionKind,
|
|
263
|
+
// PageExtension types
|
|
264
|
+
PageExtension,
|
|
265
|
+
PageExtensionPlacement,
|
|
206
266
|
PageType,
|
|
207
267
|
// User attribute meta
|
|
208
268
|
PrincipalAttributeMeta,
|
|
@@ -221,10 +281,14 @@ export type {
|
|
|
221
281
|
UpdateAppRequest,
|
|
222
282
|
UpdateComponentRequest,
|
|
223
283
|
UpdateDesignReferenceRequest,
|
|
284
|
+
UpdateEntityExtensionRequest,
|
|
224
285
|
UpdateEntityRequest,
|
|
286
|
+
UpdateListExtensionRequest,
|
|
225
287
|
UpdateListRequest,
|
|
226
288
|
UpdateListViewRequest,
|
|
289
|
+
UpdateMenuConfigurationExtensionRequest,
|
|
227
290
|
UpdateMenuConfigurationRequest,
|
|
291
|
+
UpdatePageExtensionRequest,
|
|
228
292
|
UpdatePageRequest,
|
|
229
293
|
UpdateVariableRequest,
|
|
230
294
|
UserAttributeMeta,
|
|
@@ -244,21 +308,33 @@ export {
|
|
|
244
308
|
CURRENT_USER_DEFAULT,
|
|
245
309
|
CurrencyAttributeMetaSchema,
|
|
246
310
|
DesignReferenceSchema,
|
|
311
|
+
EntityExtensionSchema,
|
|
247
312
|
EntitySchema,
|
|
248
313
|
EntityWithSchemaSchema,
|
|
314
|
+
ExtensionPositionSchema,
|
|
249
315
|
FileAttributeMetaSchema,
|
|
250
316
|
FilterElementSchema,
|
|
251
317
|
FilterGroupSchema,
|
|
252
318
|
isCurrentUserDefault,
|
|
253
319
|
isPlatformAttributeName,
|
|
320
|
+
ListExtensionColumnPlacementSchema,
|
|
321
|
+
ListExtensionSchema,
|
|
254
322
|
ListSchema,
|
|
255
323
|
ListViewSchema,
|
|
324
|
+
MENU_CONFIGURATION_EXTENSION_ANCHOR_ITEMS,
|
|
325
|
+
MenuConfigurationExtensionPlacementSchema,
|
|
326
|
+
MenuConfigurationExtensionPositionSchema,
|
|
327
|
+
MenuConfigurationExtensionSchema,
|
|
256
328
|
MenuConfigurationSchema,
|
|
257
329
|
MenuItemSchema,
|
|
258
330
|
MenuItemType,
|
|
259
331
|
ModuleSchema,
|
|
260
332
|
OnDeleteActionSchema,
|
|
333
|
+
PAGE_EXTENSION_ANCHOR_MAIN,
|
|
334
|
+
PAGE_EXTENSION_ANCHOR_SIDE_PANEL,
|
|
261
335
|
PageActionSchema,
|
|
336
|
+
PageExtensionPlacementSchema,
|
|
337
|
+
PageExtensionSchema,
|
|
262
338
|
PageSchema,
|
|
263
339
|
PLATFORM_ATTRIBUTE_NAMES,
|
|
264
340
|
parseCurrencyMeta,
|
|
@@ -62,6 +62,13 @@ const ResponsiveSizingSchema = z.object({
|
|
|
62
62
|
*/
|
|
63
63
|
export interface CommonProps {
|
|
64
64
|
id?: string
|
|
65
|
+
/**
|
|
66
|
+
* Server-stamped back-reference to the page extension that contributes this
|
|
67
|
+
* element to its host page. Present only on a host's merged layout; ignored
|
|
68
|
+
* (stripped and re-derived) on writes. Mirrors `ExtensionKey` in the Go
|
|
69
|
+
* `metamodel.CommonProps`.
|
|
70
|
+
*/
|
|
71
|
+
extension_key?: string
|
|
65
72
|
visible_when?: FilterGroup
|
|
66
73
|
read_only_when?: FilterGroup
|
|
67
74
|
width?: SizeValue
|
|
@@ -78,6 +85,7 @@ export interface CommonProps {
|
|
|
78
85
|
*/
|
|
79
86
|
export const commonPropsShape = {
|
|
80
87
|
id: z.string().optional(),
|
|
88
|
+
extension_key: z.string().optional(),
|
|
81
89
|
visible_when: FilterGroupSchema.optional(),
|
|
82
90
|
read_only_when: FilterGroupSchema.optional(),
|
|
83
91
|
width: SizeValueSchema.optional(),
|