@auxx/sdk 0.0.25 → 0.0.26

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.
@@ -172,7 +172,7 @@ export async function generateServerEntry({ appDirAbsolute, srcDirAbsolute, webh
172
172
  // Build __AUXX_DATA_CONNECTORS__ — the connector registry read by the
173
173
  // lambda data-connector-executor. Mirrors __AUXX_TOOLS__: the executor
174
174
  // reads execute({ streamKey, mode, state, connection, config }) off this
175
- // global. See plans/data-connectors/claude/03-connectors-and-sources.md §4.
175
+ // global. See docs/app-fields-and-entities-guide.md.
176
176
  const __AUXX_DATA_CONNECTORS__ = {};
177
177
 
178
178
  for (const [connectorId, handlers] of dataConnectorModulesMap.entries()) {
package/lib/root/app.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { BulkRecordAction, RecordAction, RecordWidget } from '../client/record-actions.js';
2
2
  import type { DataConnectorDefinition } from './data-connectors/types.js';
3
+ import type { EntityDecl } from './entities/index.js';
3
4
  import type { AppFieldDefinition } from './fields/index.js';
4
5
  import type { ScopedSettingsSchema } from './settings/settings-schema.js';
5
6
  import type { ToolDefinition, Toolset } from './tools/types.js';
@@ -51,6 +52,7 @@ export interface App {
51
52
  readonly tools?: ReadonlyArray<ToolDefinition>;
52
53
  readonly toolsets?: ReadonlyArray<Toolset>;
53
54
  readonly fields?: ReadonlyArray<AppFieldDefinition>;
55
+ readonly entities?: ReadonlyArray<EntityDecl>;
54
56
  readonly dataConnectors?: ReadonlyArray<DataConnectorDefinition>;
55
57
  readonly settings?: {
56
58
  readonly organization?: ScopedSettingsSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/root/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/root/app.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"define-data-connector.d.ts","sourceRoot":"","sources":["../../../src/root/data-connectors/define-data-connector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAyDzD,wBAAgB,mBAAmB,CAAC,aAAa,SAAS,CAAC,CAAC,UAAU,EACpE,SAAS,EAAE,uBAAuB,CAAC,aAAa,CAAC,GAChD,uBAAuB,CAAC,aAAa,CAAC,CA6CxC"}
1
+ {"version":3,"file":"define-data-connector.d.ts","sourceRoot":"","sources":["../../../src/root/data-connectors/define-data-connector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAoB,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAuJ3E,wBAAgB,mBAAmB,CAAC,aAAa,SAAS,CAAC,CAAC,UAAU,EACpE,SAAS,EAAE,uBAAuB,CAAC,aAAa,CAAC,GAChD,uBAAuB,CAAC,aAAa,CAAC,CA2CxC"}
@@ -1,4 +1,41 @@
1
1
  const CONNECTOR_ID_RE = /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)*$/;
2
+ function assertValidMapping(connectorId, streamKey, mapping) {
3
+ const target = mapping.target;
4
+ const hasEntityKey = 'entityKey' in target;
5
+ const hasEntityKind = 'entityKind' in target;
6
+ if (hasEntityKey === hasEntityKind) {
7
+ throw new Error(`defineDataConnector: connector "${connectorId}" stream "${streamKey}" mapping "${mapping.rootPath}": target must name exactly one of entityKey or entityKind`);
8
+ }
9
+ if (hasEntityKey) {
10
+ if (mapping.connectionFields) {
11
+ throw new Error(`defineDataConnector: connector "${connectorId}" stream "${streamKey}" mapping "${mapping.rootPath}": connectionFields is only valid on a contributing (entityKind) mapping`);
12
+ }
13
+ for (const field of mapping.fields ?? []) {
14
+ const owned = field;
15
+ if (!owned.key || !owned.sourcePath) {
16
+ throw new Error(`defineDataConnector: connector "${connectorId}" stream "${streamKey}" mapping "${mapping.rootPath}": every owned field needs a key and a sourcePath`);
17
+ }
18
+ }
19
+ return;
20
+ }
21
+ const contributing = mapping;
22
+ for (const field of contributing.fields ?? []) {
23
+ if (!field.sourcePath) {
24
+ throw new Error(`defineDataConnector: connector "${connectorId}" stream "${streamKey}" mapping "${mapping.rootPath}": every contributing field needs a sourcePath`);
25
+ }
26
+ if (field.target && field.appField) {
27
+ throw new Error(`defineDataConnector: connector "${connectorId}" stream "${streamKey}" mapping "${mapping.rootPath}": field "${field.sourcePath}" cannot set both target and appField`);
28
+ }
29
+ if (!field.target && !field.appField && !(field.type && field.name)) {
30
+ throw new Error(`defineDataConnector: connector "${connectorId}" stream "${streamKey}" mapping "${mapping.rootPath}": field "${field.sourcePath}" needs a target, an appField, or both type and name (source-only projection)`);
31
+ }
32
+ }
33
+ for (const conn of contributing.connectionFields ?? []) {
34
+ if (!conn.appField || !conn.from) {
35
+ throw new Error(`defineDataConnector: connector "${connectorId}" stream "${streamKey}" mapping "${mapping.rootPath}": every connectionFields entry needs appField and from`);
36
+ }
37
+ }
38
+ }
2
39
  export function defineDataConnector(connector) {
3
40
  if (!CONNECTOR_ID_RE.test(connector.id)) {
4
41
  throw new Error(`defineDataConnector: invalid id "${connector.id}" — must match ${CONNECTOR_ID_RE.source}`);
@@ -15,8 +52,8 @@ export function defineDataConnector(connector) {
15
52
  throw new Error(`defineDataConnector: connector "${connector.id}" has duplicate stream key "${stream.key}"`);
16
53
  }
17
54
  seenStreamKeys.add(stream.key);
18
- if (!stream.fields[stream.displayFieldKey]) {
19
- throw new Error(`defineDataConnector: stream "${stream.key}" displayFieldKey "${stream.displayFieldKey}" is not a declared field`);
55
+ for (const mapping of stream.mappings ?? []) {
56
+ assertValidMapping(connector.id, stream.key, mapping);
20
57
  }
21
58
  if (stream.exampleRecord !== undefined) {
22
59
  try {
@@ -1,3 +1,3 @@
1
1
  export { defineDataConnector } from './define-data-connector.js';
2
- export type { ConnectorConnection, ConnectorDefaultMapping, ConnectorEntityDecl, ConnectorExecute, ConnectorExecuteArgs, ConnectorFetchResult, ConnectorFieldCapabilities, ConnectorFieldDecl, ConnectorRecord, ConnectorRelationshipDecl, ConnectorRelationshipTargetRef, ConnectorStreamDecl, ConnectorStreamState, DataConnectorDefinition, } from './types.js';
2
+ export type { ConnectorConnection, ConnectorConnectionField, ConnectorContributingFieldSourceOnly, ConnectorContributingFieldToAppField, ConnectorContributingFieldToTarget, ConnectorContributingMappingField, ConnectorExecute, ConnectorExecuteArgs, ConnectorFetchResult, ConnectorMapping, ConnectorOwnedMappingField, ConnectorRecord, ConnectorStreamDecl, ConnectorStreamState, ContributingConnectorMapping, DataConnectorDefinition, FieldMergeStrategy, OwnedConnectorMapping, } from './types.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/root/data-connectors/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,yBAAyB,EACzB,8BAA8B,EAC9B,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/root/data-connectors/index.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,oCAAoC,EACpC,oCAAoC,EACpC,kCAAkC,EAClC,iCAAiC,EACjC,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,YAAY,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { z } from 'zod/v4';
2
- import type { FieldSelectOption, FieldType } from '../fields/field-types.js';
3
- import type { ActionInputHint } from '../tools/types.js';
2
+ import type { FieldType } from '../fields/field-types.js';
3
+ import type { ActionInputHint, EntityRefKind } from '../tools/types.js';
4
4
  export interface ConnectorRecord {
5
5
  streamKey: string;
6
6
  externalId: string;
@@ -22,70 +22,64 @@ export interface ConnectorFetchResult {
22
22
  retryAfterMs?: number;
23
23
  };
24
24
  }
25
- export interface ConnectorFieldCapabilities {
26
- hidden?: boolean;
27
- filterable?: boolean;
28
- }
29
- export interface ConnectorFieldDecl {
30
- sourcePath: string;
31
- type: FieldType;
32
- name: string;
33
- pii?: boolean;
34
- capabilities?: ConnectorFieldCapabilities;
35
- options?: FieldSelectOption[];
36
- addressComponents?: string[];
37
- isExternalId?: boolean;
38
- }
39
- export interface ConnectorEntityDecl {
40
- key: string;
41
- apiSlug: string;
42
- singular: string;
43
- plural: string;
44
- primaryDisplayField?: string;
45
- avatarField?: string;
46
- }
47
- export type ConnectorRelationshipTargetRef = {
48
- ownedKey: string;
49
- } | {
50
- entityKind: string;
51
- };
52
- export interface ConnectorRelationshipDecl {
53
- fieldKey: string;
54
- name: string;
55
- cardinality: 'has_many' | 'has_one' | 'belongs_to' | 'many_to_many';
56
- inverseName: string;
57
- targetRef?: ConnectorRelationshipTargetRef;
58
- }
59
- export interface ConnectorDefaultMapping {
60
- rootPath: string;
61
- parentRootPath?: string;
62
- linkMode?: 'upsert' | 'reference';
63
- relationshipFieldKey?: string;
64
- relationship?: ConnectorRelationshipDecl;
65
- target: {
66
- mode: 'owned';
67
- entity: ConnectorEntityDecl;
68
- } | {
69
- mode: 'contributing';
70
- entityKind: string;
71
- matchFieldKeys?: string[];
72
- fieldBindings?: {
73
- sourceFieldKey: string;
74
- targetKey?: string;
75
- targetAppField?: string;
76
- }[];
77
- connectionAppFields?: {
78
- appFieldKey: string;
79
- from: string;
80
- }[];
25
+ export type FieldMergeStrategy = 'overwrite' | 'fill_blank' | 'connector_owned_only' | 'manual_review' | 'ignore';
26
+ export interface ConnectorOwnedMappingField {
27
+ readonly key: string;
28
+ readonly sourcePath: string;
29
+ }
30
+ interface ConnectorContributingFieldBase {
31
+ readonly sourcePath: string;
32
+ readonly match?: boolean | 'exclusive';
33
+ readonly mergeStrategy?: FieldMergeStrategy;
34
+ }
35
+ export interface ConnectorContributingFieldToTarget extends ConnectorContributingFieldBase {
36
+ readonly target: string;
37
+ readonly appField?: never;
38
+ readonly type?: never;
39
+ readonly name?: never;
40
+ }
41
+ export interface ConnectorContributingFieldToAppField extends ConnectorContributingFieldBase {
42
+ readonly appField: string;
43
+ readonly target?: never;
44
+ readonly type?: never;
45
+ readonly name?: never;
46
+ }
47
+ export interface ConnectorContributingFieldSourceOnly extends ConnectorContributingFieldBase {
48
+ readonly type: FieldType;
49
+ readonly name: string;
50
+ readonly target?: never;
51
+ readonly appField?: never;
52
+ }
53
+ export type ConnectorContributingMappingField = ConnectorContributingFieldToTarget | ConnectorContributingFieldToAppField | ConnectorContributingFieldSourceOnly;
54
+ export interface ConnectorConnectionField {
55
+ readonly appField: string;
56
+ readonly from: string;
57
+ }
58
+ interface ConnectorMappingBase {
59
+ readonly rootPath: string;
60
+ readonly parentRootPath?: string;
61
+ readonly linkMode?: 'upsert' | 'reference';
62
+ readonly relationshipFieldKey?: string;
63
+ }
64
+ export interface OwnedConnectorMapping extends ConnectorMappingBase {
65
+ readonly target: {
66
+ readonly entityKey: string;
67
+ };
68
+ readonly fields?: readonly ConnectorOwnedMappingField[];
69
+ readonly connectionFields?: never;
70
+ }
71
+ export interface ContributingConnectorMapping extends ConnectorMappingBase {
72
+ readonly target: {
73
+ readonly entityKind: EntityRefKind;
81
74
  };
75
+ readonly fields?: readonly ConnectorContributingMappingField[];
76
+ readonly connectionFields?: readonly ConnectorConnectionField[];
82
77
  }
78
+ export type ConnectorMapping = OwnedConnectorMapping | ContributingConnectorMapping;
83
79
  export interface ConnectorStreamDecl {
84
80
  key: string;
85
- displayFieldKey: string;
86
81
  syncMode?: 'snapshot' | 'incremental';
87
- fields: Record<string, ConnectorFieldDecl>;
88
- defaultMappings?: ConnectorDefaultMapping[];
82
+ mappings: ConnectorMapping[];
89
83
  exampleRecord?: Record<string, unknown>;
90
84
  webhookTrigger?: {
91
85
  filter?: Record<string, unknown>;
@@ -121,4 +115,5 @@ export interface DataConnectorDefinition<TConfigSchema extends z.ZodTypeAny = z.
121
115
  };
122
116
  execute: ConnectorExecute<z.output<TConfigSchema>>;
123
117
  }
118
+ export {};
124
119
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/root/data-connectors/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/root/data-connectors/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type FieldDecl } from '../fields/define-field.js';
2
+ export interface EntityDecl {
3
+ readonly key: string;
4
+ readonly apiSlug: string;
5
+ readonly singular: string;
6
+ readonly plural: string;
7
+ readonly description?: string;
8
+ readonly icon?: string;
9
+ readonly color?: string;
10
+ readonly primaryDisplayField: string;
11
+ readonly secondaryDisplayField?: string;
12
+ readonly avatarField?: string;
13
+ readonly fields: readonly FieldDecl[];
14
+ }
15
+ export declare function defineEntity<const E extends EntityDecl>(entity: E): E;
16
+ //# sourceMappingURL=define-entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-entity.d.ts","sourceRoot":"","sources":["../../../src/root/entities/define-entity.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAiBpF,MAAM,WAAW,UAAU;IAQzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IAGpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IAGvB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IAGpC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAGvC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAO7B,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAA;CACtC;AA+BD,wBAAgB,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAgDrE"}
@@ -0,0 +1,39 @@
1
+ import { assertValidIdentityField } from '../fields/define-field.js';
2
+ const ENTITY_KEY_RE = /^[a-zA-Z][a-zA-Z0-9_]{0,63}$/;
3
+ const API_SLUG_RE = /^[a-z][a-z0-9_]*$/;
4
+ export function defineEntity(entity) {
5
+ if (!ENTITY_KEY_RE.test(entity.key)) {
6
+ throw new Error(`defineEntity: invalid key "${entity.key}" — must match ${ENTITY_KEY_RE.source}`);
7
+ }
8
+ if (!API_SLUG_RE.test(entity.apiSlug)) {
9
+ throw new Error(`defineEntity "${entity.key}": invalid apiSlug "${entity.apiSlug}" — must match ${API_SLUG_RE.source}`);
10
+ }
11
+ const fieldKeys = new Set();
12
+ let identityFieldKey;
13
+ for (const field of entity.fields) {
14
+ if (!ENTITY_KEY_RE.test(field.key)) {
15
+ throw new Error(`defineEntity "${entity.key}": invalid field key "${field.key}" — must match ${ENTITY_KEY_RE.source}`);
16
+ }
17
+ if (fieldKeys.has(field.key)) {
18
+ throw new Error(`defineEntity "${entity.key}": duplicate field key "${field.key}"`);
19
+ }
20
+ fieldKeys.add(field.key);
21
+ assertValidIdentityField(field);
22
+ if (field.identity) {
23
+ if (identityFieldKey !== undefined) {
24
+ throw new Error(`defineEntity "${entity.key}": more than one identity field ("${identityFieldKey}" and "${field.key}") — at most one identity field is allowed per entity`);
25
+ }
26
+ identityFieldKey = field.key;
27
+ }
28
+ }
29
+ for (const [label, fieldKey] of [
30
+ ['primaryDisplayField', entity.primaryDisplayField],
31
+ ['secondaryDisplayField', entity.secondaryDisplayField],
32
+ ['avatarField', entity.avatarField],
33
+ ]) {
34
+ if (fieldKey !== undefined && !fieldKeys.has(fieldKey)) {
35
+ throw new Error(`defineEntity "${entity.key}": ${label} "${fieldKey}" is not a declared field`);
36
+ }
37
+ }
38
+ return entity;
39
+ }
@@ -0,0 +1,2 @@
1
+ export { defineEntity, type EntityDecl } from './define-entity.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/root/entities/index.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1 @@
1
+ export { defineEntity } from './define-entity.js';
@@ -1,46 +1,66 @@
1
1
  import type { EntityRefKind } from '../tools/types.js';
2
2
  import type { FieldCapabilities, FieldScope, FieldSelectOption, FieldType } from './field-types.js';
3
3
  type SelectFieldType = 'SINGLE_SELECT' | 'MULTI_SELECT' | 'TAGS';
4
- type ScalarFieldType = Exclude<FieldType, SelectFieldType | 'RELATIONSHIP' | 'CALC' | 'ACTOR'>;
5
- interface BaseAppFieldDefinition {
6
- readonly appFieldKey: string;
7
- readonly targetEntity: EntityRefKind;
8
- readonly scope: FieldScope;
4
+ type ScalarFieldType = Exclude<FieldType, SelectFieldType | 'RELATIONSHIP' | 'CALC' | 'ADDRESS_STRUCT' | 'ACTOR'>;
5
+ export type FieldDecl = ScalarFieldDecl | AddressStructFieldDecl | SelectFieldDecl | RelationshipFieldDecl | CalcFieldDecl;
6
+ interface BaseFieldDecl {
7
+ readonly key: string;
9
8
  readonly name: string;
10
9
  readonly description?: string;
11
10
  readonly capabilities?: FieldCapabilities;
12
11
  readonly identity?: boolean;
12
+ readonly pii?: boolean;
13
13
  }
14
- interface ScalarAppFieldDefinition extends BaseAppFieldDefinition {
14
+ interface ScalarFieldDecl extends BaseFieldDecl {
15
15
  readonly type: ScalarFieldType;
16
16
  readonly options?: never;
17
+ readonly addressComponents?: never;
17
18
  readonly relationship?: never;
18
19
  readonly calc?: never;
19
20
  }
20
- interface SelectAppFieldDefinition extends BaseAppFieldDefinition {
21
+ interface AddressStructFieldDecl extends BaseFieldDecl {
22
+ readonly type: 'ADDRESS_STRUCT';
23
+ readonly addressComponents?: readonly string[];
24
+ readonly options?: never;
25
+ readonly relationship?: never;
26
+ readonly calc?: never;
27
+ }
28
+ interface SelectFieldDecl extends BaseFieldDecl {
21
29
  readonly type: SelectFieldType;
22
30
  readonly options: readonly FieldSelectOption[];
31
+ readonly addressComponents?: never;
23
32
  readonly relationship?: never;
24
33
  readonly calc?: never;
25
34
  }
26
- interface RelationshipAppFieldDefinition extends BaseAppFieldDefinition {
35
+ interface RelationshipFieldDecl extends BaseFieldDecl {
27
36
  readonly type: 'RELATIONSHIP';
28
37
  readonly relationship: {
29
- readonly targetEntity: EntityRefKind;
30
- readonly cardinality: 'one' | 'many';
38
+ readonly target: {
39
+ readonly entityKey: string;
40
+ } | {
41
+ readonly entityKind: EntityRefKind;
42
+ };
43
+ readonly cardinality: 'has_many' | 'has_one' | 'belongs_to' | 'many_to_many';
44
+ readonly inverseName?: string;
31
45
  };
32
46
  readonly options?: never;
47
+ readonly addressComponents?: never;
33
48
  readonly calc?: never;
34
49
  }
35
- interface CalcAppFieldDefinition extends BaseAppFieldDefinition {
50
+ interface CalcFieldDecl extends BaseFieldDecl {
36
51
  readonly type: 'CALC';
37
52
  readonly calc: {
38
53
  readonly expression: string;
39
54
  };
40
55
  readonly options?: never;
56
+ readonly addressComponents?: never;
41
57
  readonly relationship?: never;
42
58
  }
43
- export type AppFieldDefinition = ScalarAppFieldDefinition | SelectAppFieldDefinition | RelationshipAppFieldDefinition | CalcAppFieldDefinition;
59
+ export type AppFieldDefinition = FieldDecl & {
60
+ readonly targetEntity: EntityRefKind;
61
+ readonly scope: FieldScope;
62
+ };
63
+ export declare function assertValidIdentityField(field: FieldDecl): void;
44
64
  export declare function defineField<const F extends AppFieldDefinition>(field: F): F;
45
65
  export declare function defineFields<const F extends readonly AppFieldDefinition[]>(fields: F): F;
46
66
  type OptionValues<F> = F extends {
@@ -48,7 +68,7 @@ type OptionValues<F> = F extends {
48
68
  } ? O extends {
49
69
  value: infer V;
50
70
  } ? V : string : string;
51
- export type FieldValueType<F extends AppFieldDefinition> = F extends {
71
+ export type FieldValueType<F extends FieldDecl> = F extends {
52
72
  type: 'SINGLE_SELECT';
53
73
  } ? OptionValues<F> : F extends {
54
74
  type: 'MULTI_SELECT' | 'TAGS';
@@ -61,8 +81,8 @@ export type FieldValueType<F extends AppFieldDefinition> = F extends {
61
81
  } ? unknown : F extends {
62
82
  type: 'RELATIONSHIP';
63
83
  } ? string : string;
64
- export type AppFieldValues<F extends readonly AppFieldDefinition[]> = {
65
- [K in F[number] as K['appFieldKey']]: FieldValueType<K>;
84
+ export type AppFieldValues<F extends readonly FieldDecl[]> = {
85
+ [K in F[number] as K['key']]: FieldValueType<K>;
66
86
  };
67
87
  export {};
68
88
  //# sourceMappingURL=define-field.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-field.d.ts","sourceRoot":"","sources":["../../../src/root/fields/define-field.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define-field.d.ts","sourceRoot":"","sources":["../../../src/root/fields/define-field.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const APP_FIELD_KEY_RE = /^[a-zA-Z][a-zA-Z0-9_]{0,63}$/;
1
+ const FIELD_KEY_RE = /^[a-zA-Z][a-zA-Z0-9_]{0,63}$/;
2
2
  const NON_IDENTITY_FIELD_TYPES = new Set([
3
3
  'RELATIONSHIP',
4
4
  'CALC',
@@ -7,19 +7,20 @@ const NON_IDENTITY_FIELD_TYPES = new Set([
7
7
  'TAGS',
8
8
  'FILE',
9
9
  'JSON',
10
+ 'ADDRESS_STRUCT',
10
11
  'ACTOR',
11
12
  ]);
12
- function assertValidIdentityField(field) {
13
+ export function assertValidIdentityField(field) {
13
14
  if (!field.identity)
14
15
  return;
15
16
  if (NON_IDENTITY_FIELD_TYPES.has(field.type)) {
16
- throw new Error(`defineField: "${field.appFieldKey}" cannot be identity: true with type "${field.type}" — ` +
17
+ throw new Error(`defineField: "${field.key}" cannot be identity: true with type "${field.type}" — ` +
17
18
  'identity fields must be a scalar single-value type (TEXT unless another scalar is needed)');
18
19
  }
19
20
  }
20
21
  export function defineField(field) {
21
- if (!APP_FIELD_KEY_RE.test(field.appFieldKey)) {
22
- throw new Error(`defineField: invalid appFieldKey "${field.appFieldKey}" — must match ${APP_FIELD_KEY_RE.source}`);
22
+ if (!FIELD_KEY_RE.test(field.key)) {
23
+ throw new Error(`defineField: invalid key "${field.key}" — must match ${FIELD_KEY_RE.source}`);
23
24
  }
24
25
  assertValidIdentityField(field);
25
26
  return field;
@@ -27,12 +28,12 @@ export function defineField(field) {
27
28
  export function defineFields(fields) {
28
29
  const seen = new Set();
29
30
  for (const field of fields) {
30
- if (!APP_FIELD_KEY_RE.test(field.appFieldKey)) {
31
- throw new Error(`defineFields: invalid appFieldKey "${field.appFieldKey}" — must match ${APP_FIELD_KEY_RE.source}`);
31
+ if (!FIELD_KEY_RE.test(field.key)) {
32
+ throw new Error(`defineFields: invalid key "${field.key}" — must match ${FIELD_KEY_RE.source}`);
32
33
  }
33
- const dedupeKey = `${field.targetEntity}:${field.appFieldKey}`;
34
+ const dedupeKey = `${field.targetEntity}:${field.key}`;
34
35
  if (seen.has(dedupeKey)) {
35
- throw new Error(`defineFields: duplicate appFieldKey "${field.appFieldKey}" on entity "${field.targetEntity}"`);
36
+ throw new Error(`defineFields: duplicate key "${field.key}" on entity "${field.targetEntity}"`);
36
37
  }
37
38
  seen.add(dedupeKey);
38
39
  assertValidIdentityField(field);
@@ -1,4 +1,4 @@
1
- export declare const FIELD_TYPES: readonly ["TEXT", "EMAIL", "URL", "RICH_TEXT", "PHONE", "PHONE_INTL", "ADDRESS", "ADDRESS_STRUCT", "FILE", "DATE", "DATETIME", "TIME", "NUMBER", "CURRENCY", "CHECKBOX", "JSON", "NAME", "SINGLE_SELECT", "MULTI_SELECT", "TAGS", "RELATIONSHIP", "CALC", "ACTOR"];
1
+ export declare const FIELD_TYPES: readonly ["TEXT", "EMAIL", "URL", "RICH_TEXT", "PHONE_INTL", "ADDRESS", "ADDRESS_STRUCT", "FILE", "DATE", "DATETIME", "TIME", "NUMBER", "CURRENCY", "CHECKBOX", "JSON", "NAME", "SINGLE_SELECT", "MULTI_SELECT", "TAGS", "RELATIONSHIP", "CALC", "ACTOR"];
2
2
  export type FieldType = (typeof FIELD_TYPES)[number];
3
3
  export interface FieldCapabilities {
4
4
  filterable?: boolean;
@@ -21,7 +21,6 @@ export interface FieldTypeValueMap {
21
21
  EMAIL: string;
22
22
  URL: string;
23
23
  RICH_TEXT: string;
24
- PHONE: string;
25
24
  PHONE_INTL: string;
26
25
  ADDRESS: string;
27
26
  DATE: string;
@@ -1 +1 @@
1
- {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../src/root/fields/field-types.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,WAAW,oQAwBd,CAAA;AAGV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAOpD,MAAM,WAAW,iBAAiB;IAEhC,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,SAAS,CAAC,EAAE,OAAO,CAAA;IAGnB,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAIlB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAGD,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,CAAA;AAGtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAQD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACzB"}
1
+ {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../src/root/fields/field-types.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,WAAW,2PAuBd,CAAA;AAQV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAOpD,MAAM,WAAW,iBAAiB;IAEhC,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,SAAS,CAAC,EAAE,OAAO,CAAA;IAGnB,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAIlB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAGD,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,CAAA;AAGtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AASD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACzB"}
@@ -3,7 +3,6 @@ export const FIELD_TYPES = [
3
3
  'EMAIL',
4
4
  'URL',
5
5
  'RICH_TEXT',
6
- 'PHONE',
7
6
  'PHONE_INTL',
8
7
  'ADDRESS',
9
8
  'ADDRESS_STRUCT',
@@ -1,3 +1,3 @@
1
- export { type AppFieldDefinition, type AppFieldValues, defineField, defineFields, type FieldValueType, } from './define-field.js';
1
+ export { type AppFieldDefinition, type AppFieldValues, defineField, defineFields, type FieldDecl, type FieldValueType, } from './define-field.js';
2
2
  export { FIELD_TYPES, type FieldCapabilities, type FieldScope, type FieldSelectOption, type FieldType, type FieldTypeValueMap, } from './field-types.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/root/fields/index.ts"],"names":[],"mappings":"AA0BA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/root/fields/index.ts"],"names":[],"mappings":"AA6BA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAA"}
@@ -2,9 +2,10 @@ export type { BulkRecordAction, RecordAction, RecordActionContext, } from '../cl
2
2
  export type { TriggerContext, WorkflowContext, WorkflowInput, WorkflowOutput, } from '../server/workflow/index.js';
3
3
  export { parseScopeString, resolveCapabilities } from '../shared/scopes.js';
4
4
  export type { App, AppSettings, Permission } from './app.js';
5
- export type { ConnectorConnection, ConnectorDefaultMapping, ConnectorEntityDecl, ConnectorExecute, ConnectorExecuteArgs, ConnectorFetchResult, ConnectorFieldCapabilities, ConnectorFieldDecl, ConnectorRecord, ConnectorRelationshipDecl, ConnectorRelationshipTargetRef, ConnectorStreamDecl, ConnectorStreamState, DataConnectorDefinition, } from './data-connectors/index.js';
5
+ export type { ConnectorConnection, ConnectorConnectionField, ConnectorContributingFieldSourceOnly, ConnectorContributingFieldToAppField, ConnectorContributingFieldToTarget, ConnectorContributingMappingField, ConnectorExecute, ConnectorExecuteArgs, ConnectorFetchResult, ConnectorMapping, ConnectorOwnedMappingField, ConnectorRecord, ConnectorStreamDecl, ConnectorStreamState, ContributingConnectorMapping, DataConnectorDefinition, FieldMergeStrategy, OwnedConnectorMapping, } from './data-connectors/index.js';
6
6
  export { defineDataConnector } from './data-connectors/index.js';
7
- export { type AppFieldDefinition, type AppFieldValues, defineField, defineFields, FIELD_TYPES, type FieldCapabilities, type FieldScope, type FieldSelectOption, type FieldType, type FieldTypeValueMap, type FieldValueType, } from './fields/index.js';
7
+ export { defineEntity, type EntityDecl } from './entities/index.js';
8
+ export { type AppFieldDefinition, type AppFieldValues, defineField, defineFields, FIELD_TYPES, type FieldCapabilities, type FieldDecl, type FieldScope, type FieldSelectOption, type FieldType, type FieldTypeValueMap, type FieldValueType, } from './fields/index.js';
8
9
  export { Settings } from './settings/index.js';
9
10
  export type { BaseSettingOptions, BooleanSettingOptions, NumberSettingOptions, SelectSettingOptions, SettingsBooleanNode, SettingsNode, SettingsNumberNode, SettingsSchema, SettingsSelectNode, SettingsStringNode, SettingsStructNode, StringSettingOptions, StructSettingOptions, } from './settings/settings-schema.js';
10
11
  export type { AuxxRefMeta, EntityRefKind, ToolActionContext, ToolActionEntity, ToolActionParticipant, ToolActionSurface, ToolAgentSurface, ToolConfig, ToolDefinition, ToolExecuteContext, Toolset, } from './tools/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/root/index.ts"],"names":[],"mappings":"AASA,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,YAAY,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,6BAA6B,CAAA;AAKpC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC5D,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,yBAAyB,EACzB,8BAA8B,EAC9B,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,OAAO,GACR,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAA;AACtD,YAAY,EACV,iBAAiB,EACjB,QAAQ,EACR,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EAEZ,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EAEjB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/root/index.ts"],"names":[],"mappings":"AASA,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,YAAY,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,6BAA6B,CAAA;AAKpC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC5D,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,oCAAoC,EACpC,oCAAoC,EACpC,kCAAkC,EAClC,iCAAiC,EACjC,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEnE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,OAAO,GACR,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAA;AACtD,YAAY,EACV,iBAAiB,EACjB,QAAQ,EACR,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EAEZ,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EAEjB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
package/lib/root/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { parseScopeString, resolveCapabilities } from '../shared/scopes.js';
2
2
  export { defineDataConnector } from './data-connectors/index.js';
3
+ export { defineEntity } from './entities/index.js';
3
4
  export { defineField, defineFields, FIELD_TYPES, } from './fields/index.js';
4
5
  export { Settings } from './settings/index.js';
5
6
  export { defineTool, refs, z } from './tools/index.js';
@@ -19,7 +19,7 @@ export interface ToolActionContext {
19
19
  participants: ToolActionParticipant[];
20
20
  entities: ToolActionEntity[];
21
21
  }
22
- export type EntityRefKind = 'contact' | 'company' | 'ticket' | 'article' | 'thread' | 'order' | 'invoice' | 'catalog_item' | 'part' | 'product' | 'build' | 'purchase_order' | 'vendor_bill' | 'gl_account' | 'gl_posting';
22
+ export type EntityRefKind = 'contact' | 'company' | 'ticket' | 'article' | 'thread' | 'order' | 'invoice' | 'line_item' | 'catalog_item' | 'part' | 'product' | 'build' | 'purchase_order' | 'vendor_bill' | 'gl_account';
23
23
  export interface ToolConfig {
24
24
  readonly requiresConnection?: boolean;
25
25
  readonly timeout?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/root/tools/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/root/tools/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAO/B,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,kBAAkB,EAAE,MAAM,CAAA;IAE1B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IAEnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAKD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,OAAO,CAAA;IAEnB,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B;AAMD,MAAM,WAAW,iBAAiB;IAEhC,QAAQ,EAAE,MAAM,CAAA;IAGhB,MAAM,CAAC,EAAE,gBAAgB,CAAA;IAGzB,YAAY,EAAE,qBAAqB,EAAE,CAAA;IAOrC,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAuED,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,SAAS,GACT,WAAW,GACX,cAAc,GACd,MAAM,GACN,SAAS,GACT,OAAO,GACP,gBAAgB,GAChB,aAAa,GACb,YAAY,CAAA;AAKhB,MAAM,WAAW,UAAU;IAEzB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAMrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IAGzB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAa7B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAQD,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;AAMpE,MAAM,WAAW,gBAAgB;IAE/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IAEtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAE7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAE7B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAE5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAO7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IAQlC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAe/B,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;QACrC,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EACH;YAAE,IAAI,EAAE,KAAK,CAAC;YAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;SAAE,GAChD;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,KAAK,EAAE,OAAO,CAAA;SAAE,GACjC;YAAE,IAAI,EAAE,OAAO,CAAA;SAAE,CAAA;KACtB,CAAC,CAAA;CACH;AAOD,MAAM,WAAW,iBAAiB;IAEhC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAA;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAAA;IAClD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAA;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAQ1E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAClD;AAOD,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,aAAa,EAAE,iBAAiB,CAAA;CAAE,CAAA;AAO1F,MAAM,WAAW,iBAAiB;IAEhC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAM5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAMvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAE3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAE9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAElC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAQ3B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAC/B;AAcD,MAAM,WAAW,cAAc,CAC7B,MAAM,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,EAC1C,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IAG3C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAGnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAGrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAG5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAA;IAGtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAGvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IASzB,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAG1C,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAA;IAO5B,QAAQ,CAAC,OAAO,EAAE,CAChB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EACtB,GAAG,EAAE,kBAAkB,KACpB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAG5E,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IAGjC,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAA;CACpC;AAWD,MAAM,WAAW,OAAO;IAEtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAA;IAEtC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IAMjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAQD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC"}
@@ -8,6 +8,14 @@ import { complete, errored, isErrored } from '../errors.js';
8
8
  const __filename = fileURLToPath(import.meta.url);
9
9
  const __dirname = path.dirname(__filename);
10
10
  const SDK_ROOT = path.resolve(__dirname, '..', '..');
11
+ const RESERVED_SYSTEM_ATTRIBUTES = new Set([
12
+ 'record_id',
13
+ 'created_at',
14
+ 'updated_at',
15
+ 'created_by_id',
16
+ 'quote_number',
17
+ 'part_quantity_on_hand',
18
+ ]);
11
19
  export async function compileAndExtractCatalog() {
12
20
  const srcDirAbsolute = path.resolve('src');
13
21
  const candidates = ['app.ts', 'app.tsx'];
@@ -45,6 +53,7 @@ export async function compileAndExtractCatalog() {
45
53
  const SDK_REAL_TOOLS = path.join(SDK_ROOT, 'lib', 'root', 'tools', 'index.js');
46
54
  const SDK_REAL_WORKFLOW = path.join(SDK_ROOT, 'lib', 'root', 'workflow', 'index.js');
47
55
  const SDK_REAL_FIELDS = path.join(SDK_ROOT, 'lib', 'root', 'fields', 'index.js');
56
+ const SDK_REAL_ENTITIES = path.join(SDK_ROOT, 'lib', 'root', 'entities', 'index.js');
48
57
  const SDK_REAL_DATA_CONNECTORS = path.join(SDK_ROOT, 'lib', 'root', 'data-connectors', 'index.js');
49
58
  const stubSdkSubpaths = {
50
59
  name: 'auxx-stub-sdk-subpaths',
@@ -58,6 +67,8 @@ export async function compileAndExtractCatalog() {
58
67
  return { path: SDK_REAL_WORKFLOW };
59
68
  if (args.path === '@auxx/sdk/fields')
60
69
  return { path: SDK_REAL_FIELDS };
70
+ if (args.path === '@auxx/sdk/entities')
71
+ return { path: SDK_REAL_ENTITIES };
61
72
  if (args.path === '@auxx/sdk/data-connectors')
62
73
  return { path: SDK_REAL_DATA_CONNECTORS };
63
74
  return { path: args.path, namespace: 'auxx-sdk-stub' };
@@ -124,12 +135,14 @@ export async function compileAndExtractCatalog() {
124
135
  const workflowBlocksArr = (app.workflow?.blocks ?? []);
125
136
  const workflowTriggersArr = (app.workflow?.triggers ?? []);
126
137
  const fieldsArr = (app.fields ?? []);
138
+ const entitiesArr = (app.entities ?? []);
127
139
  const dataConnectorsArr = (app.dataConnectors ?? []);
128
140
  if (!toolsArr.length &&
129
141
  !toolsetsArr.length &&
130
142
  !workflowBlocksArr.length &&
131
143
  !workflowTriggersArr.length &&
132
144
  !fieldsArr.length &&
145
+ !entitiesArr.length &&
133
146
  !dataConnectorsArr.length) {
134
147
  return complete(undefined);
135
148
  }
@@ -291,34 +304,102 @@ export async function compileAndExtractCatalog() {
291
304
  : {}),
292
305
  });
293
306
  }
307
+ function projectFieldDecl(field) {
308
+ return {
309
+ key: field.key,
310
+ type: field.type,
311
+ name: field.name,
312
+ description: field.description,
313
+ capabilities: field.capabilities,
314
+ identity: field.identity,
315
+ options: field.options,
316
+ addressComponents: field.addressComponents,
317
+ relationship: field.relationship,
318
+ calc: field.calc,
319
+ pii: field.pii,
320
+ };
321
+ }
294
322
  const cataloguedFields = [];
295
323
  const seenFieldKeys = new Set();
324
+ const identityFieldByTargetEntity = new Map();
296
325
  for (const field of fieldsArr) {
297
- if (!field?.appFieldKey) {
298
- return errored({ code: 'CATALOG_VALIDATION_FAILED', message: 'Field is missing appFieldKey' });
326
+ if (!field?.key) {
327
+ return errored({ code: 'CATALOG_VALIDATION_FAILED', message: 'Field is missing key' });
299
328
  }
300
- const dedupeKey = `${field.targetEntity}:${field.appFieldKey}`;
329
+ const dedupeKey = `${field.targetEntity}:${field.key}`;
301
330
  if (seenFieldKeys.has(dedupeKey)) {
302
331
  return errored({
303
332
  code: 'CATALOG_VALIDATION_FAILED',
304
- message: `Duplicate field "${field.appFieldKey}" on entity "${field.targetEntity}"`,
333
+ message: `Duplicate field "${field.key}" on entity "${field.targetEntity}"`,
305
334
  });
306
335
  }
307
336
  seenFieldKeys.add(dedupeKey);
337
+ if (field.identity) {
338
+ const existing = identityFieldByTargetEntity.get(field.targetEntity);
339
+ if (existing) {
340
+ return errored({
341
+ code: 'CATALOG_VALIDATION_FAILED',
342
+ message: `More than one identity field targets "${field.targetEntity}" ("${existing}" and "${field.key}") — at most one identity field is allowed per entity`,
343
+ });
344
+ }
345
+ identityFieldByTargetEntity.set(field.targetEntity, field.key);
346
+ }
308
347
  cataloguedFields.push({
309
- appFieldKey: field.appFieldKey,
348
+ ...projectFieldDecl(field),
310
349
  scope: field.scope,
311
350
  targetEntity: field.targetEntity,
312
- type: field.type,
313
- name: field.name,
314
- description: field.description,
315
- options: field.options,
316
- relationship: field.relationship,
317
- calc: field.calc,
318
- capabilities: field.capabilities,
319
- identity: field.identity,
320
351
  });
321
352
  }
353
+ const cataloguedEntities = [];
354
+ const entityKeys = new Set(entitiesArr.map((e) => e.key));
355
+ const entityFieldsByKey = new Map();
356
+ for (const entity of entitiesArr) {
357
+ if (!entity?.key) {
358
+ return errored({ code: 'CATALOG_VALIDATION_FAILED', message: 'Entity is missing a key' });
359
+ }
360
+ const fieldMap = new Map();
361
+ for (const field of entity.fields ?? []) {
362
+ fieldMap.set(field.key, field);
363
+ if (field.type === 'RELATIONSHIP' &&
364
+ field.relationship &&
365
+ 'entityKey' in field.relationship.target) {
366
+ const targetKey = field.relationship.target.entityKey;
367
+ if (!entityKeys.has(targetKey)) {
368
+ return errored({
369
+ code: 'CATALOG_VALIDATION_FAILED',
370
+ message: `Entity "${entity.key}" field "${field.key}": relationship target entityKey "${targetKey}" is not a declared entity`,
371
+ });
372
+ }
373
+ }
374
+ }
375
+ entityFieldsByKey.set(entity.key, fieldMap);
376
+ cataloguedEntities.push({
377
+ key: entity.key,
378
+ apiSlug: entity.apiSlug,
379
+ singular: entity.singular,
380
+ plural: entity.plural,
381
+ description: entity.description,
382
+ icon: entity.icon,
383
+ color: entity.color,
384
+ primaryDisplayField: entity.primaryDisplayField,
385
+ secondaryDisplayField: entity.secondaryDisplayField,
386
+ avatarField: entity.avatarField,
387
+ fields: (entity.fields ?? []).map(projectFieldDecl),
388
+ });
389
+ }
390
+ for (const field of fieldsArr) {
391
+ if (field.type !== 'RELATIONSHIP' || !field.relationship)
392
+ continue;
393
+ if (!('entityKey' in field.relationship.target))
394
+ continue;
395
+ const targetKey = field.relationship.target.entityKey;
396
+ if (!entityKeys.has(targetKey)) {
397
+ return errored({
398
+ code: 'CATALOG_VALIDATION_FAILED',
399
+ message: `Field "${field.key}": relationship target entityKey "${targetKey}" is not a declared entity`,
400
+ });
401
+ }
402
+ }
322
403
  const cataloguedDataConnectors = [];
323
404
  const seenConnectorIds = new Set();
324
405
  for (const connector of dataConnectorsArr) {
@@ -355,60 +436,95 @@ export async function compileAndExtractCatalog() {
355
436
  });
356
437
  }
357
438
  }
439
+ const streams = [];
358
440
  for (const stream of connector.streams ?? []) {
359
- for (const mapping of stream.defaultMappings ?? []) {
360
- if (mapping.target.mode !== 'contributing')
441
+ const mappings = [];
442
+ for (const mapping of stream.mappings ?? []) {
443
+ const context = `Connector "${connector.id}" stream "${stream.key}" mapping "${mapping.rootPath}"`;
444
+ if ('entityKey' in mapping.target) {
445
+ const entityKey = mapping.target.entityKey;
446
+ const fieldMap = entityFieldsByKey.get(entityKey);
447
+ if (!fieldMap) {
448
+ return errored({
449
+ code: 'CATALOG_VALIDATION_FAILED',
450
+ message: `${context}: unknown entityKey "${entityKey}" — not a declared entity`,
451
+ });
452
+ }
453
+ const normalizedFields = [];
454
+ const ownedFields = (mapping.fields ?? []);
455
+ for (const field of ownedFields) {
456
+ const entityField = fieldMap.get(field.key);
457
+ if (!entityField) {
458
+ return errored({
459
+ code: 'CATALOG_VALIDATION_FAILED',
460
+ message: `${context}: owned field key "${field.key}" is not declared on entity "${entityKey}"`,
461
+ });
462
+ }
463
+ normalizedFields.push({
464
+ ...projectFieldDecl(entityField),
465
+ sourcePath: field.sourcePath,
466
+ });
467
+ }
468
+ mappings.push({
469
+ rootPath: mapping.rootPath,
470
+ parentRootPath: mapping.parentRootPath,
471
+ linkMode: mapping.linkMode,
472
+ relationshipFieldKey: mapping.relationshipFieldKey,
473
+ target: { entityKey },
474
+ ...(mapping.fields ? { fields: normalizedFields } : {}),
475
+ });
361
476
  continue;
362
- const { entityKind, fieldBindings, connectionAppFields } = mapping.target;
363
- const fieldByKey = new Map(cataloguedFields
364
- .filter((f) => f.targetEntity === entityKind)
365
- .map((f) => [f.appFieldKey, f]));
366
- for (const binding of fieldBindings ?? []) {
367
- if (!binding.targetAppField)
368
- continue;
369
- if (!fieldByKey.has(binding.targetAppField)) {
477
+ }
478
+ const entityKind = mapping.target.entityKind;
479
+ const fieldByKey = new Map(cataloguedFields.filter((f) => f.targetEntity === entityKind).map((f) => [f.key, f]));
480
+ const contributingFields = (mapping.fields ?? []);
481
+ for (const field of contributingFields) {
482
+ if (field.target && RESERVED_SYSTEM_ATTRIBUTES.has(field.target)) {
370
483
  return errored({
371
484
  code: 'CATALOG_VALIDATION_FAILED',
372
- message: `Connector "${connector.id}" stream "${stream.key}": targetAppField "${binding.targetAppField}" is not a declared field on "${entityKind}"`,
485
+ message: `${context}: target "${field.target}" is a reserved system attribute and cannot be bound by a contributing field`,
486
+ });
487
+ }
488
+ if (field.appField && !fieldByKey.has(field.appField)) {
489
+ return errored({
490
+ code: 'CATALOG_VALIDATION_FAILED',
491
+ message: `${context}: appField "${field.appField}" is not a declared field on "${entityKind}"`,
373
492
  });
374
493
  }
375
494
  }
376
- for (const conn of connectionAppFields ?? []) {
377
- const field = fieldByKey.get(conn.appFieldKey);
495
+ for (const conn of mapping.connectionFields ?? []) {
496
+ const field = fieldByKey.get(conn.appField);
378
497
  if (!field) {
379
498
  return errored({
380
499
  code: 'CATALOG_VALIDATION_FAILED',
381
- message: `Connector "${connector.id}" stream "${stream.key}": connectionAppFields "${conn.appFieldKey}" is not a declared field on "${entityKind}"`,
500
+ message: `${context}: connectionFields "${conn.appField}" is not a declared field on "${entityKind}"`,
382
501
  });
383
502
  }
384
503
  if (field.identity) {
385
504
  return errored({
386
505
  code: 'CATALOG_VALIDATION_FAILED',
387
- message: `Connector "${connector.id}" stream "${stream.key}": connectionAppFields "${conn.appFieldKey}" targets an identity field — connection metadata cannot fill an identity field`,
506
+ message: `${context}: connectionFields "${conn.appField}" targets an identity field — connection metadata cannot fill an identity field`,
388
507
  });
389
508
  }
390
509
  }
510
+ mappings.push({
511
+ rootPath: mapping.rootPath,
512
+ parentRootPath: mapping.parentRootPath,
513
+ linkMode: mapping.linkMode,
514
+ relationshipFieldKey: mapping.relationshipFieldKey,
515
+ target: { entityKind },
516
+ fields: mapping.fields,
517
+ connectionFields: mapping.connectionFields,
518
+ });
391
519
  }
520
+ streams.push({
521
+ key: stream.key,
522
+ syncMode: stream.syncMode,
523
+ mappings,
524
+ exampleRecord: stream.exampleRecord,
525
+ webhookTrigger: stream.webhookTrigger,
526
+ });
392
527
  }
393
- const streams = (connector.streams ?? []).map((stream) => ({
394
- key: stream.key,
395
- displayFieldKey: stream.displayFieldKey,
396
- syncMode: stream.syncMode,
397
- fields: Object.entries(stream.fields ?? {}).map(([fieldKey, decl]) => ({
398
- fieldKey,
399
- sourcePath: decl.sourcePath,
400
- type: decl.type,
401
- name: decl.name,
402
- pii: decl.pii,
403
- capabilities: decl.capabilities,
404
- options: decl.options,
405
- addressComponents: decl.addressComponents,
406
- isExternalId: decl.isExternalId,
407
- })),
408
- defaultMappings: stream.defaultMappings,
409
- exampleRecord: stream.exampleRecord,
410
- webhookTrigger: stream.webhookTrigger,
411
- }));
412
528
  cataloguedDataConnectors.push({
413
529
  id: connector.id,
414
530
  label: connector.label,
@@ -441,6 +557,7 @@ export async function compileAndExtractCatalog() {
441
557
  },
442
558
  actions: cataloguedActions,
443
559
  fields: cataloguedFields,
560
+ entities: cataloguedEntities,
444
561
  dataConnectors: cataloguedDataConnectors,
445
562
  events: eventIds,
446
563
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@auxx/sdk",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "CLI tool and SDK for creating Auxx apps",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,6 +46,10 @@
46
46
  "types": "./lib/root/fields/index.d.ts",
47
47
  "import": "./lib/root/fields/index.js"
48
48
  },
49
+ "./entities": {
50
+ "types": "./lib/root/entities/index.d.ts",
51
+ "import": "./lib/root/entities/index.js"
52
+ },
49
53
  "./data-connectors": {
50
54
  "types": "./lib/root/data-connectors/index.d.ts",
51
55
  "import": "./lib/root/data-connectors/index.js"