@auxx/sdk 0.0.16 → 0.0.18
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/lib/build/server/find-tool-server-modules.js +49 -0
- package/lib/build/server/generate-server-entry.js +46 -1
- package/lib/client/forms/index.d.ts +4 -0
- package/lib/client/forms/index.d.ts.map +1 -1
- package/lib/client/forms/types/picker.d.ts +21 -0
- package/lib/client/forms/types/picker.d.ts.map +1 -0
- package/lib/client/forms/types/picker.js +3 -0
- package/lib/client/forms/types.d.ts +15 -0
- package/lib/client/forms/types.d.ts.map +1 -1
- package/lib/client/hooks/index.d.ts +4 -3
- package/lib/client/hooks/index.d.ts.map +1 -1
- package/lib/commands/dev/prepare-build-context.js +7 -2
- package/lib/commands/dev/server-builder.js +2 -1
- package/lib/root/app.d.ts +2 -0
- package/lib/root/app.d.ts.map +1 -1
- package/lib/root/data-connectors/define-data-connector.d.ts +4 -0
- package/lib/root/data-connectors/define-data-connector.d.ts.map +1 -0
- package/lib/root/data-connectors/define-data-connector.js +33 -0
- package/lib/root/data-connectors/index.d.ts +3 -0
- package/lib/root/data-connectors/index.d.ts.map +1 -0
- package/lib/root/data-connectors/index.js +1 -0
- package/lib/root/data-connectors/types.d.ts +113 -0
- package/lib/root/data-connectors/types.d.ts.map +1 -0
- package/lib/root/data-connectors/types.js +1 -0
- package/lib/root/fields/define-field.d.ts +1 -0
- package/lib/root/fields/define-field.d.ts.map +1 -1
- package/lib/root/fields/define-field.js +20 -0
- package/lib/root/index.d.ts +2 -0
- package/lib/root/index.d.ts.map +1 -1
- package/lib/root/index.js +1 -0
- package/lib/root/tools/types.d.ts +1 -0
- package/lib/root/tools/types.d.ts.map +1 -1
- package/lib/runtime/reconciler/tags/form-tag.d.ts +2 -0
- package/lib/runtime/reconciler/tags/form-tag.d.ts.map +1 -1
- package/lib/runtime/reconciler/tags/form-tag.js +31 -0
- package/lib/util/compile-and-extract-catalog.js +119 -3
- package/package.json +5 -1
|
@@ -277,3 +277,52 @@ export async function findToolModules(srcDirAbsolute) {
|
|
|
277
277
|
modules: new Map(),
|
|
278
278
|
});
|
|
279
279
|
}
|
|
280
|
+
export function findDataConnectorModulesFromSource(source, currPath, helpers) {
|
|
281
|
+
const result = new Map();
|
|
282
|
+
try {
|
|
283
|
+
const ast = parse(source, { range: true, jsx: true });
|
|
284
|
+
const scopeManager = analyze(ast, { sourceType: 'module' });
|
|
285
|
+
const moduleScope = scopeManager.acquire(ast, true);
|
|
286
|
+
if (moduleScope === null) {
|
|
287
|
+
throw new Error('Expected to be able to acquire module scope');
|
|
288
|
+
}
|
|
289
|
+
;
|
|
290
|
+
walk(ast, null, {
|
|
291
|
+
ExportNamedDeclaration(node) {
|
|
292
|
+
if (!node.declaration || node.declaration.type !== 'VariableDeclaration')
|
|
293
|
+
return;
|
|
294
|
+
if (node.declaration.declarations.length !== 1)
|
|
295
|
+
return;
|
|
296
|
+
const declaration = node.declaration.declarations[0];
|
|
297
|
+
if (declaration.id.type !== 'Identifier' || declaration.id.name !== 'app')
|
|
298
|
+
return;
|
|
299
|
+
const appValue = declaration.init;
|
|
300
|
+
if (!appValue || appValue.type !== 'ObjectExpression')
|
|
301
|
+
return;
|
|
302
|
+
const connectors = findProperty(appValue, 'dataConnectors', moduleScope);
|
|
303
|
+
if (connectors?.type !== 'ArrayExpression')
|
|
304
|
+
return;
|
|
305
|
+
for (const element of connectors.elements) {
|
|
306
|
+
if (element)
|
|
307
|
+
visitTool(element, moduleScope, result, currPath, helpers);
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
314
|
+
return errored({ code: 'DATA_CONNECTOR_RESOLUTION_FAILED', message });
|
|
315
|
+
}
|
|
316
|
+
return complete(result);
|
|
317
|
+
}
|
|
318
|
+
export async function findDataConnectorModules(srcDirAbsolute) {
|
|
319
|
+
const appEntryPoint = await getAppEntryPoint(srcDirAbsolute);
|
|
320
|
+
if (!appEntryPoint) {
|
|
321
|
+
return complete(new Map());
|
|
322
|
+
}
|
|
323
|
+
return findDataConnectorModulesFromSource(appEntryPoint.content, appEntryPoint.path, {
|
|
324
|
+
getModuleSource: (p) => fs.readFileSync(p, 'utf-8'),
|
|
325
|
+
doesModuleExist: (p) => fs.existsSync(p),
|
|
326
|
+
modules: new Map(),
|
|
327
|
+
});
|
|
328
|
+
}
|
|
@@ -16,7 +16,7 @@ async function findServerFunctionModules(cwd, pattern) {
|
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
export async function generateServerEntry({ appDirAbsolute, srcDirAbsolute, webhooksDirAbsolute, eventDirAbsolute, workflowBlockModules, toolModules = new Map(), log, }) {
|
|
19
|
+
export async function generateServerEntry({ appDirAbsolute, srcDirAbsolute, webhooksDirAbsolute, eventDirAbsolute, workflowBlockModules, toolModules = new Map(), dataConnectorModules = new Map(), log, }) {
|
|
20
20
|
const pathsResult = await combineAsync({
|
|
21
21
|
serverFunctionConcretePaths: findServerFunctionModules(srcDirAbsolute, 'server'),
|
|
22
22
|
webhookConcretePaths: findServerFunctionModules(webhooksDirAbsolute, 'webhook'),
|
|
@@ -150,6 +150,51 @@ export async function generateServerEntry({ appDirAbsolute, srcDirAbsolute, webh
|
|
|
150
150
|
};
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
// Data connector module registry
|
|
154
|
+
const dataConnectorModulesMap = new Map()
|
|
155
|
+
|
|
156
|
+
${[...dataConnectorModules.entries()]
|
|
157
|
+
.map(([connectorId, handlers]) => `dataConnectorModulesMap.set(
|
|
158
|
+
${JSON.stringify(connectorId)},
|
|
159
|
+
{
|
|
160
|
+
${[...Object.entries(handlers)]
|
|
161
|
+
.map(([handler, data]) => data
|
|
162
|
+
? `${JSON.stringify(handler)}: {
|
|
163
|
+
module: () => import(${JSON.stringify(path.join(appDirAbsolute, data.path))}),
|
|
164
|
+
export: ${JSON.stringify(data.export)}
|
|
165
|
+
},`
|
|
166
|
+
: '')
|
|
167
|
+
.join('\n')}
|
|
168
|
+
}
|
|
169
|
+
)`)
|
|
170
|
+
.join('\n')}
|
|
171
|
+
|
|
172
|
+
// Build __AUXX_DATA_CONNECTORS__ — the connector registry read by the
|
|
173
|
+
// lambda data-connector-executor. Mirrors __AUXX_TOOLS__: the executor
|
|
174
|
+
// reads execute({ streamKey, mode, state, connection, config }) off this
|
|
175
|
+
// global. See plans/data-connectors/claude/03-connectors-and-sources.md §4.
|
|
176
|
+
const __AUXX_DATA_CONNECTORS__ = {};
|
|
177
|
+
|
|
178
|
+
for (const [connectorId, handlers] of dataConnectorModulesMap.entries()) {
|
|
179
|
+
__AUXX_DATA_CONNECTORS__[connectorId] = {
|
|
180
|
+
execute: async (...args) => {
|
|
181
|
+
const executeHandler = handlers.execute;
|
|
182
|
+
if (!executeHandler) {
|
|
183
|
+
throw new Error(\`No execute handler for data connector \${connectorId}\`);
|
|
184
|
+
}
|
|
185
|
+
const module = await executeHandler.module();
|
|
186
|
+
const func = module[executeHandler.export];
|
|
187
|
+
if (!func) {
|
|
188
|
+
throw new Error(\`Execute export not found in data connector \${connectorId}\`);
|
|
189
|
+
}
|
|
190
|
+
if (typeof func !== "function") {
|
|
191
|
+
throw new Error(\`Execute export in data connector \${connectorId} is not a function\`);
|
|
192
|
+
}
|
|
193
|
+
return await func(...args);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
153
198
|
var stdin_default;
|
|
154
199
|
var stdin_webhooks_default;
|
|
155
200
|
var stdin_events_default;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { FormBoolean } from './types/boolean.js';
|
|
2
2
|
import { FormNumber } from './types/number.js';
|
|
3
|
+
import { FormPicker } from './types/picker.js';
|
|
3
4
|
import { FormSelect } from './types/select.js';
|
|
4
5
|
import { FormString } from './types/string.js';
|
|
5
6
|
import type { SelectOption } from './types.js';
|
|
6
7
|
export * from './base.js';
|
|
7
8
|
export { FormBoolean } from './types/boolean.js';
|
|
8
9
|
export { FormNumber } from './types/number.js';
|
|
10
|
+
export { FormPicker, type PickerConfig } from './types/picker.js';
|
|
9
11
|
export { FormSelect } from './types/select.js';
|
|
10
12
|
export { FormString } from './types/string.js';
|
|
11
13
|
export * from './types.js';
|
|
@@ -16,11 +18,13 @@ export declare const Forms: {
|
|
|
16
18
|
number: () => FormNumber;
|
|
17
19
|
boolean: () => FormBoolean;
|
|
18
20
|
select: <T extends string>(options: SelectOption<T>[]) => FormSelect<T>;
|
|
21
|
+
picker: typeof FormPicker.create;
|
|
19
22
|
};
|
|
20
23
|
export declare const Settings: {
|
|
21
24
|
string: () => FormString;
|
|
22
25
|
number: () => FormNumber;
|
|
23
26
|
boolean: () => FormBoolean;
|
|
24
27
|
select: <T extends string>(options: SelectOption<T>[]) => FormSelect<T>;
|
|
28
|
+
picker: typeof FormPicker.create;
|
|
25
29
|
};
|
|
26
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/forms/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AAgBrC,eAAO,MAAM,KAAK;;;;aAIP,CAAC,SAAS,MAAM,WAAW,YAAY,CAAC,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/forms/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAqB,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AAgBrC,eAAO,MAAM,KAAK;;;;aAIP,CAAC,SAAS,MAAM,WAAW,YAAY,CAAC,CAAC,CAAC,EAAE;YACoB,OAAO,UAAU,CAAC,MAAM;CAClG,CAAA;AAeD,eAAO,MAAM,QAAQ;;;;aAjBV,CAAC,SAAS,MAAM,WAAW,YAAY,CAAC,CAAC,CAAC,EAAE;YACoB,OAAO,UAAU,CAAC,MAAM;CAgBtE,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { FormValue } from '../base.js';
|
|
2
|
+
import type { FormPickerMetadata, PickerLoadOptions, SelectOption, SerializedFormValue } from '../types.js';
|
|
3
|
+
export interface PickerConfig {
|
|
4
|
+
loadOptions?: PickerLoadOptions;
|
|
5
|
+
options?: SelectOption[];
|
|
6
|
+
multi?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class FormPicker<V extends string | string[] = string> extends FormValue<V> {
|
|
9
|
+
readonly _metadata: FormPickerMetadata;
|
|
10
|
+
private constructor();
|
|
11
|
+
static create(config: PickerConfig & {
|
|
12
|
+
multi: true;
|
|
13
|
+
}): FormPicker<string[]>;
|
|
14
|
+
static create(config?: PickerConfig): FormPicker<string>;
|
|
15
|
+
static is(value: unknown): value is FormPicker;
|
|
16
|
+
get type(): 'picker';
|
|
17
|
+
optional(): FormPicker<V>;
|
|
18
|
+
placeholder(text: string): FormPicker<V>;
|
|
19
|
+
toJSON(): SerializedFormValue;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../../../src/client/forms/types/picker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACpB,MAAM,aAAa,CAAA;AAMpB,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAcD,qBAAa,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAChF,SAAgB,SAAS,EAAE,kBAAkB,CAAA;IAE7C,OAAO;IAKP,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IAC3E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;IAYxD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU;IAI9C,IAAI,IAAI,IAAI,QAAQ,CAEnB;IAED,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC;IAIzB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAIxC,MAAM,IAAI,mBAAmB;CAS9B"}
|
|
@@ -10,6 +10,9 @@ export type SerializedFormValue = {
|
|
|
10
10
|
} | {
|
|
11
11
|
type: 'select';
|
|
12
12
|
metadata: FormSelectMetadata;
|
|
13
|
+
} | {
|
|
14
|
+
type: 'picker';
|
|
15
|
+
metadata: FormPickerMetadata;
|
|
13
16
|
};
|
|
14
17
|
export interface FormStringMetadata {
|
|
15
18
|
optional?: boolean;
|
|
@@ -61,6 +64,18 @@ export interface FormSelectMetadata<T extends string = string> {
|
|
|
61
64
|
required?: string;
|
|
62
65
|
};
|
|
63
66
|
}
|
|
67
|
+
export type PickerLoadOptions = (query: string) => Promise<SelectOption[]>;
|
|
68
|
+
export interface FormPickerMetadata {
|
|
69
|
+
loadOptions?: PickerLoadOptions;
|
|
70
|
+
hasLoadOptions?: boolean;
|
|
71
|
+
options?: SelectOption[];
|
|
72
|
+
multi?: boolean;
|
|
73
|
+
optional?: boolean;
|
|
74
|
+
placeholder?: string;
|
|
75
|
+
errorMessages?: {
|
|
76
|
+
required?: string;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
64
79
|
export type FormSchema = Record<string, FormValue<any>>;
|
|
65
80
|
export type InferFormValues<S extends FormSchema> = {
|
|
66
81
|
[K in keyof S]: S[K] extends FormValue<infer T> ? S[K]['_metadata']['optional'] extends true ? T | undefined : T : never;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/forms/types.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,CAAA;AAKpD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,aAAa,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAKD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAKD,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAKD,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACrD,KAAK,EAAE,CAAC,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAKD,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC3D,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,CAAC,CAAA;IAChB,aAAa,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAKD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;AAKvD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,UAAU,IAAI;KACjD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,GAC3C,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,SAAS,IAAI,GACxC,CAAC,GAAG,SAAS,GACb,CAAC,GACH,KAAK;CACV,CAAA;AAGD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/forms/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,10 @@ export { type AsyncCacheConfig, type AsyncFunction, useAsyncCache } from './use-
|
|
|
2
2
|
export interface AuxxRecord {
|
|
3
3
|
id: string;
|
|
4
4
|
type: string;
|
|
5
|
+
displayName?: string;
|
|
5
6
|
data: Record<string, any>;
|
|
6
|
-
createdAt
|
|
7
|
-
updatedAt
|
|
7
|
+
createdAt?: string | Date;
|
|
8
|
+
updatedAt?: string | Date;
|
|
8
9
|
}
|
|
9
10
|
export interface Query {
|
|
10
11
|
type: string;
|
|
@@ -21,7 +22,7 @@ export interface User {
|
|
|
21
22
|
export interface AppSettings {
|
|
22
23
|
[key: string]: any;
|
|
23
24
|
}
|
|
24
|
-
export declare function useRecord(
|
|
25
|
+
export declare function useRecord(recordId: string): AuxxRecord;
|
|
25
26
|
export declare function useRecords(_query: Query): AuxxRecord[];
|
|
26
27
|
export declare function useCurrentUser(): User;
|
|
27
28
|
export declare function useSettings(): AppSettings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/hooks/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/hooks/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAS/F,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAKD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAKD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAKD,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AA4BD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAKtD;AAkBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,GAAG,UAAU,EAAE,CAEtD;AAiBD,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAiBD,wBAAgB,WAAW,IAAI,WAAW,CAEzC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import { findToolModules } from '../../build/server/find-tool-server-modules.js';
|
|
3
|
+
import { findDataConnectorModules, findToolModules, } from '../../build/server/find-tool-server-modules.js';
|
|
4
4
|
import { findWorkflowBlockModules } from '../../build/server/find-workflow-block-server-modules.js';
|
|
5
5
|
import { combine, combineAsync, complete, isComplete, isErrored, map, } from '../../errors.js';
|
|
6
6
|
import { ClientBuilder } from './client-builder.js';
|
|
@@ -46,11 +46,16 @@ export async function prepareBuildContext(mode) {
|
|
|
46
46
|
if (isErrored(toolModulesResult)) {
|
|
47
47
|
return toolModulesResult;
|
|
48
48
|
}
|
|
49
|
+
const dataConnectorModulesResult = await findDataConnectorModules(srcDir);
|
|
50
|
+
if (isErrored(dataConnectorModulesResult)) {
|
|
51
|
+
return dataConnectorModulesResult;
|
|
52
|
+
}
|
|
49
53
|
const { blocks: workflowBlockModules } = workflowBlockModulesResult.value;
|
|
50
54
|
const toolModules = toolModulesResult.value;
|
|
55
|
+
const dataConnectorModules = dataConnectorModulesResult.value;
|
|
51
56
|
return combineAsync({
|
|
52
57
|
client: client.rebuild({ workflowBlockModules }),
|
|
53
|
-
server: server.rebuild({ workflowBlockModules, toolModules }),
|
|
58
|
+
server: server.rebuild({ workflowBlockModules, toolModules, dataConnectorModules }),
|
|
54
59
|
});
|
|
55
60
|
},
|
|
56
61
|
dispose: async (timeoutMs) => {
|
|
@@ -42,7 +42,7 @@ export class ServerBuilder {
|
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
async rebuild({ workflowBlockModules, toolModules, }) {
|
|
45
|
+
async rebuild({ workflowBlockModules, toolModules, dataConnectorModules, }) {
|
|
46
46
|
const jsResult = await generateServerEntry({
|
|
47
47
|
appDirAbsolute: path.resolve(this._directories.app),
|
|
48
48
|
srcDirAbsolute: path.resolve(this._directories.src),
|
|
@@ -50,6 +50,7 @@ export class ServerBuilder {
|
|
|
50
50
|
eventDirAbsolute: path.resolve(this._directories.events),
|
|
51
51
|
workflowBlockModules,
|
|
52
52
|
toolModules: toolModules ?? new Map(),
|
|
53
|
+
dataConnectorModules: dataConnectorModules ?? new Map(),
|
|
53
54
|
log: console.log,
|
|
54
55
|
});
|
|
55
56
|
if (isErrored(jsResult)) {
|
package/lib/root/app.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BulkRecordAction, RecordAction, RecordWidget } from '../client/record-actions.js';
|
|
2
|
+
import type { DataConnectorDefinition } from './data-connectors/types.js';
|
|
2
3
|
import type { AppFieldDefinition } from './fields/index.js';
|
|
3
4
|
import type { ScopedSettingsSchema } from './settings/settings-schema.js';
|
|
4
5
|
import type { ToolDefinition, Toolset } from './tools/types.js';
|
|
@@ -50,6 +51,7 @@ export interface App {
|
|
|
50
51
|
readonly tools?: ReadonlyArray<ToolDefinition>;
|
|
51
52
|
readonly toolsets?: ReadonlyArray<Toolset>;
|
|
52
53
|
readonly fields?: ReadonlyArray<AppFieldDefinition>;
|
|
54
|
+
readonly dataConnectors?: ReadonlyArray<DataConnectorDefinition>;
|
|
53
55
|
readonly settings?: {
|
|
54
56
|
readonly organization?: ScopedSettingsSchema;
|
|
55
57
|
};
|
package/lib/root/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/root/app.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAIjE,MAAM,WAAW,UAAU;IAEzB,QAAQ,EAAE,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAA;IAE/D,OAAO,EAAE,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAA;IAExC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAKD,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,MAAM,CAAA;IAEZ,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAE1B,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAuBD,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,UAAU,MAAM,CAAC;QACf,KAAK,MAAM,GAAG,YAAY,CAAA;QAC1B,KAAK,UAAU,GAAG,gBAAgB,CAAA;QAClC,KAAK,MAAM,GAAG,YAAY,CAAA;KAC3B;IACD,UAAU,QAAQ,CAAC,GAAE;IACrB,UAAU,QAAQ,CAAC,GAAE;CACtB;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KAC5C,CAAA;IAED,QAAQ,CAAC,aAAa,CAAC,EAAE;QACvB,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;SACpC,CAAA;QACD,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjB,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;SACrC,CAAA;QACD,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;SACpC,CAAA;KACF,CAAA;IAED,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAElB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAA;QAEjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;KAC9B,CAAA;IAOD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAK9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAQ1C,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/root/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { z } from 'zod/v4';
|
|
2
|
+
import type { DataConnectorDefinition } from './types.js';
|
|
3
|
+
export declare function defineDataConnector<TConfigSchema extends z.ZodTypeAny>(connector: DataConnectorDefinition<TConfigSchema>): DataConnectorDefinition<TConfigSchema>;
|
|
4
|
+
//# sourceMappingURL=define-data-connector.d.ts.map
|
|
@@ -0,0 +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;AAwDzD,wBAAgB,mBAAmB,CAAC,aAAa,SAAS,CAAC,CAAC,UAAU,EACpE,SAAS,EAAE,uBAAuB,CAAC,aAAa,CAAC,GAChD,uBAAuB,CAAC,aAAa,CAAC,CA6CxC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const CONNECTOR_ID_RE = /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)*$/;
|
|
2
|
+
export function defineDataConnector(connector) {
|
|
3
|
+
if (!CONNECTOR_ID_RE.test(connector.id)) {
|
|
4
|
+
throw new Error(`defineDataConnector: invalid id "${connector.id}" — must match ${CONNECTOR_ID_RE.source}`);
|
|
5
|
+
}
|
|
6
|
+
if (!connector.streams.length) {
|
|
7
|
+
throw new Error(`defineDataConnector: connector "${connector.id}" declares no streams`);
|
|
8
|
+
}
|
|
9
|
+
const seenStreamKeys = new Set();
|
|
10
|
+
for (const stream of connector.streams) {
|
|
11
|
+
if (!stream.key) {
|
|
12
|
+
throw new Error(`defineDataConnector: connector "${connector.id}" has a stream with no key`);
|
|
13
|
+
}
|
|
14
|
+
if (seenStreamKeys.has(stream.key)) {
|
|
15
|
+
throw new Error(`defineDataConnector: connector "${connector.id}" has duplicate stream key "${stream.key}"`);
|
|
16
|
+
}
|
|
17
|
+
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`);
|
|
20
|
+
}
|
|
21
|
+
if (stream.exampleRecord !== undefined) {
|
|
22
|
+
try {
|
|
23
|
+
if (JSON.stringify(stream.exampleRecord) === undefined) {
|
|
24
|
+
throw new Error('serializes to undefined');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
throw new Error(`defineDataConnector: stream "${stream.key}" exampleRecord is not JSON-serializable — ${err instanceof Error ? err.message : String(err)}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return connector;
|
|
33
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
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';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { defineDataConnector } from './define-data-connector.js';
|
|
@@ -0,0 +1,113 @@
|
|
|
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';
|
|
4
|
+
export interface ConnectorRecord {
|
|
5
|
+
streamKey: string;
|
|
6
|
+
externalId: string;
|
|
7
|
+
displayName: string;
|
|
8
|
+
fields: Record<string, unknown>;
|
|
9
|
+
deleted?: boolean;
|
|
10
|
+
contentHash?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ConnectorStreamState {
|
|
13
|
+
cursor?: unknown;
|
|
14
|
+
updatedSince?: string;
|
|
15
|
+
backfillComplete?: boolean;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
export interface ConnectorFetchResult {
|
|
19
|
+
records: ConnectorRecord[] | AsyncIterable<ConnectorRecord>;
|
|
20
|
+
nextState: ConnectorStreamState;
|
|
21
|
+
rateLimited?: {
|
|
22
|
+
retryAfterMs?: number;
|
|
23
|
+
};
|
|
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
|
+
linkMode?: 'upsert' | 'reference';
|
|
62
|
+
relationshipFieldKey?: string;
|
|
63
|
+
relationship?: ConnectorRelationshipDecl;
|
|
64
|
+
target: {
|
|
65
|
+
mode: 'owned';
|
|
66
|
+
entity: ConnectorEntityDecl;
|
|
67
|
+
} | {
|
|
68
|
+
mode: 'contributing';
|
|
69
|
+
entityKind: string;
|
|
70
|
+
matchFieldKeys?: string[];
|
|
71
|
+
fieldBindings?: {
|
|
72
|
+
sourceFieldKey: string;
|
|
73
|
+
targetKey?: string;
|
|
74
|
+
targetAppField?: string;
|
|
75
|
+
}[];
|
|
76
|
+
connectionAppFields?: {
|
|
77
|
+
appFieldKey: string;
|
|
78
|
+
from: string;
|
|
79
|
+
}[];
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export interface ConnectorStreamDecl {
|
|
83
|
+
key: string;
|
|
84
|
+
displayFieldKey: string;
|
|
85
|
+
syncMode?: 'snapshot' | 'incremental';
|
|
86
|
+
fields: Record<string, ConnectorFieldDecl>;
|
|
87
|
+
defaultMappings?: ConnectorDefaultMapping[];
|
|
88
|
+
exampleRecord?: Record<string, unknown>;
|
|
89
|
+
}
|
|
90
|
+
export interface ConnectorExecuteArgs<TConfig = Record<string, unknown>> {
|
|
91
|
+
streamKey: string;
|
|
92
|
+
mode: 'snapshot' | 'incremental';
|
|
93
|
+
state: ConnectorStreamState;
|
|
94
|
+
connection: ConnectorConnection | null;
|
|
95
|
+
config: TConfig;
|
|
96
|
+
}
|
|
97
|
+
export interface ConnectorConnection {
|
|
98
|
+
value: string;
|
|
99
|
+
fields?: Record<string, string>;
|
|
100
|
+
metadata?: Record<string, unknown>;
|
|
101
|
+
}
|
|
102
|
+
export type ConnectorExecute<TConfig = Record<string, unknown>> = (args: ConnectorExecuteArgs<TConfig>) => Promise<ConnectorFetchResult>;
|
|
103
|
+
export interface DataConnectorDefinition<TConfigSchema extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
104
|
+
id: string;
|
|
105
|
+
label: string;
|
|
106
|
+
requiresConnection: boolean;
|
|
107
|
+
config: TConfigSchema;
|
|
108
|
+
configOptions?: Record<string, ActionInputHint>;
|
|
109
|
+
streams: ConnectorStreamDecl[];
|
|
110
|
+
iconKey?: string;
|
|
111
|
+
execute: ConnectorExecute<z.output<TConfigSchema>>;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/root/data-connectors/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -9,6 +9,7 @@ interface BaseAppFieldDefinition {
|
|
|
9
9
|
readonly name: string;
|
|
10
10
|
readonly description?: string;
|
|
11
11
|
readonly capabilities?: FieldCapabilities;
|
|
12
|
+
readonly identity?: boolean;
|
|
12
13
|
}
|
|
13
14
|
interface ScalarAppFieldDefinition extends BaseAppFieldDefinition {
|
|
14
15
|
readonly type: ScalarFieldType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-field.d.ts","sourceRoot":"","sources":["../../../src/root/fields/define-field.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAMnG,KAAK,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,MAAM,CAAA;AAGhE,KAAK,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,eAAe,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAO9F,UAAU,sBAAsB;IAE9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAE5B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAA;IAEpC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAE1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"define-field.d.ts","sourceRoot":"","sources":["../../../src/root/fields/define-field.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAMnG,KAAK,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,MAAM,CAAA;AAGhE,KAAK,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,eAAe,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAO9F,UAAU,sBAAsB;IAE9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAE5B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAA;IAEpC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAE1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAA;IASzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B;AAGD,UAAU,wBAAyB,SAAQ,sBAAsB;IAC/D,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAA;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CACtB;AAGD,UAAU,wBAAyB,SAAQ,sBAAsB;IAC/D,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC9C,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CACtB;AAGD,UAAU,8BAA+B,SAAQ,sBAAsB;IACrE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE;QACrB,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAA;QACpC,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM,CAAA;KACrC,CAAA;IACD,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CACtB;AAGD,UAAU,sBAAuB,SAAQ,sBAAsB;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAA;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAA;CAC9B;AAQD,MAAM,MAAM,kBAAkB,GAC1B,wBAAwB,GACxB,wBAAwB,GACxB,8BAA8B,GAC9B,sBAAsB,CAAA;AAkC1B,wBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,kBAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQ3E;AAOD,wBAAgB,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAkBxF;AAGD,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;CAAE,GAC9D,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1B,CAAC,GACD,MAAM,GACR,MAAM,CAAA;AAQV,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,kBAAkB,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GAC1F,YAAY,CAAC,CAAC,CAAC,GACf,CAAC,SAAS;IAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAAA;CAAE,GACzC,YAAY,CAAC,CAAC,CAAC,EAAE,GACjB,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAA;CAAE,GACvC,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAC5B,OAAO,GACP,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,GACP,CAAC,SAAS;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GAChC,MAAM,GACN,MAAM,CAAA;AAMpB,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,kBAAkB,EAAE,IAAI;KACnE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;CACxD,CAAA"}
|
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
const APP_FIELD_KEY_RE = /^[a-zA-Z][a-zA-Z0-9_]{0,63}$/;
|
|
2
|
+
const NON_IDENTITY_FIELD_TYPES = new Set([
|
|
3
|
+
'RELATIONSHIP',
|
|
4
|
+
'CALC',
|
|
5
|
+
'SINGLE_SELECT',
|
|
6
|
+
'MULTI_SELECT',
|
|
7
|
+
'TAGS',
|
|
8
|
+
'FILE',
|
|
9
|
+
'JSON',
|
|
10
|
+
'ACTOR',
|
|
11
|
+
]);
|
|
12
|
+
function assertValidIdentityField(field) {
|
|
13
|
+
if (!field.identity)
|
|
14
|
+
return;
|
|
15
|
+
if (NON_IDENTITY_FIELD_TYPES.has(field.type)) {
|
|
16
|
+
throw new Error(`defineField: "${field.appFieldKey}" cannot be identity: true with type "${field.type}" — ` +
|
|
17
|
+
'identity fields must be a scalar single-value type (TEXT unless another scalar is needed)');
|
|
18
|
+
}
|
|
19
|
+
}
|
|
2
20
|
export function defineField(field) {
|
|
3
21
|
if (!APP_FIELD_KEY_RE.test(field.appFieldKey)) {
|
|
4
22
|
throw new Error(`defineField: invalid appFieldKey "${field.appFieldKey}" — must match ${APP_FIELD_KEY_RE.source}`);
|
|
5
23
|
}
|
|
24
|
+
assertValidIdentityField(field);
|
|
6
25
|
return field;
|
|
7
26
|
}
|
|
8
27
|
export function defineFields(fields) {
|
|
@@ -16,6 +35,7 @@ export function defineFields(fields) {
|
|
|
16
35
|
throw new Error(`defineFields: duplicate appFieldKey "${field.appFieldKey}" on entity "${field.targetEntity}"`);
|
|
17
36
|
}
|
|
18
37
|
seen.add(dedupeKey);
|
|
38
|
+
assertValidIdentityField(field);
|
|
19
39
|
}
|
|
20
40
|
return fields;
|
|
21
41
|
}
|
package/lib/root/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export type { BulkRecordAction, RecordAction, RecordActionContext, } from '../client/record-actions.js';
|
|
2
2
|
export type { TriggerContext, WorkflowContext, WorkflowInput, WorkflowOutput, } from '../server/workflow/index.js';
|
|
3
3
|
export type { App, AppSettings, Permission } from './app.js';
|
|
4
|
+
export type { ConnectorConnection, ConnectorDefaultMapping, ConnectorEntityDecl, ConnectorExecute, ConnectorExecuteArgs, ConnectorFetchResult, ConnectorFieldCapabilities, ConnectorFieldDecl, ConnectorRecord, ConnectorRelationshipDecl, ConnectorRelationshipTargetRef, ConnectorStreamDecl, ConnectorStreamState, DataConnectorDefinition, } from './data-connectors/index.js';
|
|
5
|
+
export { defineDataConnector } from './data-connectors/index.js';
|
|
4
6
|
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';
|
|
5
7
|
export { Settings } from './settings/index.js';
|
|
6
8
|
export type { BaseSettingOptions, BooleanSettingOptions, NumberSettingOptions, SelectSettingOptions, SettingsBooleanNode, SettingsNode, SettingsNumberNode, SettingsSchema, SettingsSelectNode, SettingsStringNode, SettingsStructNode, StringSettingOptions, StructSettingOptions, } from './settings/settings-schema.js';
|
package/lib/root/index.d.ts.map
CHANGED
|
@@ -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;AACpC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,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;AACpC,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"}
|
package/lib/root/index.js
CHANGED
|
@@ -73,6 +73,7 @@ export interface DynamicSelectHint {
|
|
|
73
73
|
readonly labelTemplate: string;
|
|
74
74
|
readonly sublabelTemplate?: string;
|
|
75
75
|
readonly emptyHint?: string;
|
|
76
|
+
readonly allowCustom?: boolean;
|
|
76
77
|
}
|
|
77
78
|
export interface ToolDefinition<TInput extends z.ZodTypeAny = z.ZodTypeAny, TOutput extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
78
79
|
readonly id: string;
|
|
@@ -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;AAOD,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,SAAS,GACT,MAAM,GACN,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,QAAQ,CAAA;AAKZ,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"}
|
|
@@ -2,6 +2,8 @@ import { BaseTag } from './base-tag.js';
|
|
|
2
2
|
export declare class FormTag extends BaseTag {
|
|
3
3
|
private internalRef;
|
|
4
4
|
constructor(props: Record<string, any>);
|
|
5
|
+
private pickerResolvers;
|
|
6
|
+
private registerPickerLoadOptions;
|
|
5
7
|
getTagName(): string;
|
|
6
8
|
getComponentName(): string;
|
|
7
9
|
getAttributes(props: Record<string, any>): Record<string, any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-tag.d.ts","sourceRoot":"","sources":["../../../../src/runtime/reconciler/tags/form-tag.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"form-tag.d.ts","sourceRoot":"","sources":["../../../../src/runtime/reconciler/tags/form-tag.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AASvC,qBAAa,OAAQ,SAAQ,OAAO;IAClC,OAAO,CAAC,WAAW,CAAK;gBAEZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAqBtC,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,yBAAyB;IAsBjC,UAAU,IAAI,MAAM;IAIpB,gBAAgB,IAAI,MAAM;IAI1B,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA8C9D,mBAAmB;CA8BpB"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { serializeSchema } from '../../../client/forms/utils/serialize.js';
|
|
2
2
|
import { validateFormFields } from '../../../client/forms/utils/validation.js';
|
|
3
|
+
import { eventBus } from '../../event-bus.js';
|
|
3
4
|
import { registerEventHandler } from '../../register-event-handler.js';
|
|
5
|
+
import { wrapEventHandler } from '../../wrap-event-handler.js';
|
|
4
6
|
import { BaseTag } from './base-tag.js';
|
|
7
|
+
const LOAD_OPTIONS_PREFIX = 'loadOptions:';
|
|
5
8
|
export class FormTag extends BaseTag {
|
|
6
9
|
internalRef;
|
|
7
10
|
constructor(props) {
|
|
@@ -10,8 +13,36 @@ export class FormTag extends BaseTag {
|
|
|
10
13
|
registerEventHandler(this, 'onChange');
|
|
11
14
|
registerEventHandler(this, 'onError');
|
|
12
15
|
registerEventHandler(this, 'onValidationError');
|
|
16
|
+
this.registerPickerLoadOptions(props.schema);
|
|
13
17
|
this.internalRef = props.__internalRef;
|
|
14
18
|
}
|
|
19
|
+
pickerResolvers(schema) {
|
|
20
|
+
if (!schema || typeof schema !== 'object')
|
|
21
|
+
return [];
|
|
22
|
+
const out = [];
|
|
23
|
+
for (const [name, field] of Object.entries(schema)) {
|
|
24
|
+
if (field?.type === 'picker' && typeof field._metadata?.loadOptions === 'function') {
|
|
25
|
+
out.push({ name, loadOptions: field._metadata.loadOptions });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
registerPickerLoadOptions(schema) {
|
|
31
|
+
const resolvers = this.pickerResolvers(schema);
|
|
32
|
+
if (resolvers.length === 0)
|
|
33
|
+
return;
|
|
34
|
+
this.mounted.addListener(({ instance }) => {
|
|
35
|
+
for (const { name, loadOptions } of resolvers) {
|
|
36
|
+
const eventName = `${LOAD_OPTIONS_PREFIX}${name}`;
|
|
37
|
+
eventBus.setTagEventListener(eventName, instance.instance_id, wrapEventHandler((query) => loadOptions(query ?? ''), { eventName }));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
this.destroyed.addListener(({ instance }) => {
|
|
41
|
+
for (const { name } of resolvers) {
|
|
42
|
+
eventBus.clearTagEventListener(`${LOAD_OPTIONS_PREFIX}${name}`, instance.instance_id);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
15
46
|
getTagName() {
|
|
16
47
|
return 'form';
|
|
17
48
|
}
|
|
@@ -44,6 +44,7 @@ export async function compileAndExtractCatalog() {
|
|
|
44
44
|
const SDK_REAL_TOOLS = path.join(SDK_ROOT, 'lib', 'root', 'tools', 'index.js');
|
|
45
45
|
const SDK_REAL_WORKFLOW = path.join(SDK_ROOT, 'lib', 'root', 'workflow', 'index.js');
|
|
46
46
|
const SDK_REAL_FIELDS = path.join(SDK_ROOT, 'lib', 'root', 'fields', 'index.js');
|
|
47
|
+
const SDK_REAL_DATA_CONNECTORS = path.join(SDK_ROOT, 'lib', 'root', 'data-connectors', 'index.js');
|
|
47
48
|
const stubSdkSubpaths = {
|
|
48
49
|
name: 'auxx-stub-sdk-subpaths',
|
|
49
50
|
setup(build) {
|
|
@@ -56,6 +57,8 @@ export async function compileAndExtractCatalog() {
|
|
|
56
57
|
return { path: SDK_REAL_WORKFLOW };
|
|
57
58
|
if (args.path === '@auxx/sdk/fields')
|
|
58
59
|
return { path: SDK_REAL_FIELDS };
|
|
60
|
+
if (args.path === '@auxx/sdk/data-connectors')
|
|
61
|
+
return { path: SDK_REAL_DATA_CONNECTORS };
|
|
59
62
|
return { path: args.path, namespace: 'auxx-sdk-stub' };
|
|
60
63
|
});
|
|
61
64
|
build.onLoad({ filter: /.*/, namespace: 'auxx-sdk-stub' }, () => ({
|
|
@@ -120,11 +123,13 @@ export async function compileAndExtractCatalog() {
|
|
|
120
123
|
const workflowBlocksArr = (app.workflow?.blocks ?? []);
|
|
121
124
|
const workflowTriggersArr = (app.workflow?.triggers ?? []);
|
|
122
125
|
const fieldsArr = (app.fields ?? []);
|
|
126
|
+
const dataConnectorsArr = (app.dataConnectors ?? []);
|
|
123
127
|
if (!toolsArr.length &&
|
|
124
128
|
!toolsetsArr.length &&
|
|
125
129
|
!workflowBlocksArr.length &&
|
|
126
130
|
!workflowTriggersArr.length &&
|
|
127
|
-
!fieldsArr.length
|
|
131
|
+
!fieldsArr.length &&
|
|
132
|
+
!dataConnectorsArr.length) {
|
|
128
133
|
return complete(undefined);
|
|
129
134
|
}
|
|
130
135
|
const { zodToProviderToolSchema } = await import('../build/server/zod-to-provider-tool-schema.js');
|
|
@@ -225,6 +230,7 @@ export async function compileAndExtractCatalog() {
|
|
|
225
230
|
return errored({ code: 'CATALOG_VALIDATION_FAILED', message: 'Trigger is missing an id' });
|
|
226
231
|
}
|
|
227
232
|
const triggerInputs = serializeWorkflowSchemaInputs(trigger.schema);
|
|
233
|
+
const triggerOutputs = serializeWorkflowSchemaOutputs(trigger.schema);
|
|
228
234
|
cataloguedTriggers.push({
|
|
229
235
|
id: trigger.id,
|
|
230
236
|
label: trigger.label,
|
|
@@ -232,6 +238,7 @@ export async function compileAndExtractCatalog() {
|
|
|
232
238
|
iconKey: null,
|
|
233
239
|
color: trigger.color,
|
|
234
240
|
inputsJsonSchema: triggerInputs,
|
|
241
|
+
outputsJsonSchema: triggerOutputs,
|
|
235
242
|
refs: [],
|
|
236
243
|
});
|
|
237
244
|
if (trigger.workflow) {
|
|
@@ -242,6 +249,7 @@ export async function compileAndExtractCatalog() {
|
|
|
242
249
|
iconKey: null,
|
|
243
250
|
color: trigger.color,
|
|
244
251
|
inputsJsonSchema: triggerInputs,
|
|
252
|
+
outputsJsonSchema: triggerOutputs,
|
|
245
253
|
refs: [],
|
|
246
254
|
});
|
|
247
255
|
}
|
|
@@ -253,6 +261,7 @@ export async function compileAndExtractCatalog() {
|
|
|
253
261
|
iconKey: null,
|
|
254
262
|
color: trigger.color,
|
|
255
263
|
inputsJsonSchema: triggerInputs,
|
|
264
|
+
outputsJsonSchema: triggerOutputs,
|
|
256
265
|
refs: [],
|
|
257
266
|
});
|
|
258
267
|
}
|
|
@@ -298,6 +307,106 @@ export async function compileAndExtractCatalog() {
|
|
|
298
307
|
relationship: field.relationship,
|
|
299
308
|
calc: field.calc,
|
|
300
309
|
capabilities: field.capabilities,
|
|
310
|
+
identity: field.identity,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
const cataloguedDataConnectors = [];
|
|
314
|
+
const seenConnectorIds = new Set();
|
|
315
|
+
for (const connector of dataConnectorsArr) {
|
|
316
|
+
if (!connector?.id) {
|
|
317
|
+
return errored({
|
|
318
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
319
|
+
message: 'Data connector is missing an id',
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
if (seenConnectorIds.has(connector.id)) {
|
|
323
|
+
return errored({
|
|
324
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
325
|
+
message: `Duplicate data connector id "${connector.id}"`,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
seenConnectorIds.add(connector.id);
|
|
329
|
+
const configJsonSchema = connector.config
|
|
330
|
+
? zodToProviderToolSchema(connector.config).jsonSchema
|
|
331
|
+
: {};
|
|
332
|
+
for (const [fieldKey, hint] of Object.entries(connector.configOptions ?? {})) {
|
|
333
|
+
if (hint.kind !== 'dynamic-select')
|
|
334
|
+
continue;
|
|
335
|
+
const ds = hint.dynamicSelect;
|
|
336
|
+
if (!toolIds.has(ds.optionsFrom)) {
|
|
337
|
+
return errored({
|
|
338
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
339
|
+
message: `Connector "${connector.id}" config "${fieldKey}": optionsFrom "${ds.optionsFrom}" is not a tool in this app`,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
if (!ds.valuePath || !ds.labelTemplate) {
|
|
343
|
+
return errored({
|
|
344
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
345
|
+
message: `Connector "${connector.id}" config "${fieldKey}": dynamic-select requires valuePath and labelTemplate`,
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
for (const stream of connector.streams ?? []) {
|
|
350
|
+
for (const mapping of stream.defaultMappings ?? []) {
|
|
351
|
+
if (mapping.target.mode !== 'contributing')
|
|
352
|
+
continue;
|
|
353
|
+
const { entityKind, fieldBindings, connectionAppFields } = mapping.target;
|
|
354
|
+
const fieldByKey = new Map(cataloguedFields
|
|
355
|
+
.filter((f) => f.targetEntity === entityKind)
|
|
356
|
+
.map((f) => [f.appFieldKey, f]));
|
|
357
|
+
for (const binding of fieldBindings ?? []) {
|
|
358
|
+
if (!binding.targetAppField)
|
|
359
|
+
continue;
|
|
360
|
+
if (!fieldByKey.has(binding.targetAppField)) {
|
|
361
|
+
return errored({
|
|
362
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
363
|
+
message: `Connector "${connector.id}" stream "${stream.key}": targetAppField "${binding.targetAppField}" is not a declared field on "${entityKind}"`,
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
for (const conn of connectionAppFields ?? []) {
|
|
368
|
+
const field = fieldByKey.get(conn.appFieldKey);
|
|
369
|
+
if (!field) {
|
|
370
|
+
return errored({
|
|
371
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
372
|
+
message: `Connector "${connector.id}" stream "${stream.key}": connectionAppFields "${conn.appFieldKey}" is not a declared field on "${entityKind}"`,
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
if (field.identity) {
|
|
376
|
+
return errored({
|
|
377
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
378
|
+
message: `Connector "${connector.id}" stream "${stream.key}": connectionAppFields "${conn.appFieldKey}" targets an identity field — connection metadata cannot fill an identity field`,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
const streams = (connector.streams ?? []).map((stream) => ({
|
|
385
|
+
key: stream.key,
|
|
386
|
+
displayFieldKey: stream.displayFieldKey,
|
|
387
|
+
syncMode: stream.syncMode,
|
|
388
|
+
fields: Object.entries(stream.fields ?? {}).map(([fieldKey, decl]) => ({
|
|
389
|
+
fieldKey,
|
|
390
|
+
sourcePath: decl.sourcePath,
|
|
391
|
+
type: decl.type,
|
|
392
|
+
name: decl.name,
|
|
393
|
+
pii: decl.pii,
|
|
394
|
+
capabilities: decl.capabilities,
|
|
395
|
+
options: decl.options,
|
|
396
|
+
addressComponents: decl.addressComponents,
|
|
397
|
+
isExternalId: decl.isExternalId,
|
|
398
|
+
})),
|
|
399
|
+
defaultMappings: stream.defaultMappings,
|
|
400
|
+
exampleRecord: stream.exampleRecord,
|
|
401
|
+
}));
|
|
402
|
+
cataloguedDataConnectors.push({
|
|
403
|
+
id: connector.id,
|
|
404
|
+
label: connector.label,
|
|
405
|
+
requiresConnection: Boolean(connector.requiresConnection),
|
|
406
|
+
iconKey: connector.iconKey ?? null,
|
|
407
|
+
configJsonSchema,
|
|
408
|
+
...(connector.configOptions ? { configOptionHints: connector.configOptions } : {}),
|
|
409
|
+
streams,
|
|
301
410
|
});
|
|
302
411
|
}
|
|
303
412
|
const catalog = {
|
|
@@ -315,6 +424,7 @@ export async function compileAndExtractCatalog() {
|
|
|
315
424
|
},
|
|
316
425
|
actions: cataloguedActions,
|
|
317
426
|
fields: cataloguedFields,
|
|
427
|
+
dataConnectors: cataloguedDataConnectors,
|
|
318
428
|
};
|
|
319
429
|
try {
|
|
320
430
|
JSON.stringify(catalog);
|
|
@@ -328,10 +438,16 @@ export async function compileAndExtractCatalog() {
|
|
|
328
438
|
return complete(catalog);
|
|
329
439
|
}
|
|
330
440
|
function serializeWorkflowSchemaInputs(schema) {
|
|
331
|
-
|
|
441
|
+
return serializeWorkflowSchemaFields(schema?.inputs);
|
|
442
|
+
}
|
|
443
|
+
function serializeWorkflowSchemaOutputs(schema) {
|
|
444
|
+
return serializeWorkflowSchemaFields(schema?.outputs);
|
|
445
|
+
}
|
|
446
|
+
function serializeWorkflowSchemaFields(fields) {
|
|
447
|
+
if (!fields || typeof fields !== 'object')
|
|
332
448
|
return {};
|
|
333
449
|
const out = {};
|
|
334
|
-
for (const [key, field] of Object.entries(
|
|
450
|
+
for (const [key, field] of Object.entries(fields)) {
|
|
335
451
|
const fieldNode = field;
|
|
336
452
|
out[key] = typeof fieldNode?.toJSON === 'function' ? fieldNode.toJSON() : field;
|
|
337
453
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@auxx/sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.18",
|
|
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
|
+
"./data-connectors": {
|
|
50
|
+
"types": "./lib/root/data-connectors/index.d.ts",
|
|
51
|
+
"import": "./lib/root/data-connectors/index.js"
|
|
52
|
+
},
|
|
49
53
|
"./shared": {
|
|
50
54
|
"types": "./lib/shared/index.d.ts",
|
|
51
55
|
"import": "./lib/shared/index.js"
|