@auxx/sdk 0.0.15 → 0.0.17
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 +80 -0
- package/lib/root/data-connectors/types.d.ts.map +1 -0
- package/lib/root/data-connectors/types.js +1 -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 +15 -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 +70 -1
- 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, 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,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { defineDataConnector } from './define-data-connector.js';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { z } from 'zod/v4';
|
|
2
|
+
import type { FieldType } from '../fields/field-types.js';
|
|
3
|
+
export interface ConnectorRecord {
|
|
4
|
+
streamKey: string;
|
|
5
|
+
externalId: string;
|
|
6
|
+
displayName: string;
|
|
7
|
+
fields: Record<string, unknown>;
|
|
8
|
+
deleted?: boolean;
|
|
9
|
+
contentHash?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ConnectorStreamState {
|
|
12
|
+
cursor?: unknown;
|
|
13
|
+
updatedSince?: string;
|
|
14
|
+
backfillComplete?: boolean;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface ConnectorFetchResult {
|
|
18
|
+
records: ConnectorRecord[] | AsyncIterable<ConnectorRecord>;
|
|
19
|
+
nextState: ConnectorStreamState;
|
|
20
|
+
}
|
|
21
|
+
export interface ConnectorFieldCapabilities {
|
|
22
|
+
hidden?: boolean;
|
|
23
|
+
filterable?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface ConnectorFieldDecl {
|
|
26
|
+
sourcePath: string;
|
|
27
|
+
type: FieldType;
|
|
28
|
+
name: string;
|
|
29
|
+
pii?: boolean;
|
|
30
|
+
capabilities?: ConnectorFieldCapabilities;
|
|
31
|
+
}
|
|
32
|
+
export interface ConnectorEntityDecl {
|
|
33
|
+
apiSlug: string;
|
|
34
|
+
singular: string;
|
|
35
|
+
plural: string;
|
|
36
|
+
primaryDisplayField?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ConnectorDefaultMapping {
|
|
39
|
+
rootPath: string;
|
|
40
|
+
linkMode?: 'upsert' | 'reference';
|
|
41
|
+
relationshipFieldKey?: string;
|
|
42
|
+
target: {
|
|
43
|
+
mode: 'owned';
|
|
44
|
+
entity: ConnectorEntityDecl;
|
|
45
|
+
} | {
|
|
46
|
+
mode: 'contributing';
|
|
47
|
+
entityKind: string;
|
|
48
|
+
matchFieldKeys?: string[];
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export interface ConnectorStreamDecl {
|
|
52
|
+
key: string;
|
|
53
|
+
displayFieldKey: string;
|
|
54
|
+
fields: Record<string, ConnectorFieldDecl>;
|
|
55
|
+
defaultMappings?: ConnectorDefaultMapping[];
|
|
56
|
+
exampleRecord?: Record<string, unknown>;
|
|
57
|
+
}
|
|
58
|
+
export interface ConnectorExecuteArgs<TConfig = Record<string, unknown>> {
|
|
59
|
+
streamKey: string;
|
|
60
|
+
mode: 'snapshot' | 'incremental';
|
|
61
|
+
state: ConnectorStreamState;
|
|
62
|
+
connection: ConnectorConnection | null;
|
|
63
|
+
config: TConfig;
|
|
64
|
+
}
|
|
65
|
+
export interface ConnectorConnection {
|
|
66
|
+
value: string;
|
|
67
|
+
fields?: Record<string, string>;
|
|
68
|
+
metadata?: Record<string, unknown>;
|
|
69
|
+
}
|
|
70
|
+
export type ConnectorExecute<TConfig = Record<string, unknown>> = (args: ConnectorExecuteArgs<TConfig>) => Promise<ConnectorFetchResult>;
|
|
71
|
+
export interface DataConnectorDefinition<TConfigSchema extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
72
|
+
id: string;
|
|
73
|
+
label: string;
|
|
74
|
+
requiresConnection: boolean;
|
|
75
|
+
config: TConfigSchema;
|
|
76
|
+
streams: ConnectorStreamDecl[];
|
|
77
|
+
iconKey?: string;
|
|
78
|
+
execute: ConnectorExecute<z.output<TConfigSchema>>;
|
|
79
|
+
}
|
|
80
|
+
//# 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 {};
|
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, 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,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
|
@@ -58,6 +58,21 @@ export interface ToolActionSurface {
|
|
|
58
58
|
readonly confirmationMessage?: string;
|
|
59
59
|
readonly shouldShow?: (ctx: ToolActionContext) => boolean;
|
|
60
60
|
readonly getDefaults?: (ctx: ToolActionContext) => Record<string, unknown>;
|
|
61
|
+
readonly inputs?: Record<string, ActionInputHint>;
|
|
62
|
+
}
|
|
63
|
+
export type ActionInputHint = {
|
|
64
|
+
kind: 'dynamic-select';
|
|
65
|
+
dynamicSelect: DynamicSelectHint;
|
|
66
|
+
};
|
|
67
|
+
export interface DynamicSelectHint {
|
|
68
|
+
readonly optionsFrom: string;
|
|
69
|
+
readonly bindArgsFrom?: Record<string, string>;
|
|
70
|
+
readonly args?: Record<string, unknown>;
|
|
71
|
+
readonly valuePath: string;
|
|
72
|
+
readonly itemsPath?: string;
|
|
73
|
+
readonly labelTemplate: string;
|
|
74
|
+
readonly sublabelTemplate?: string;
|
|
75
|
+
readonly emptyHint?: string;
|
|
61
76
|
}
|
|
62
77
|
export interface ToolDefinition<TInput extends z.ZodTypeAny = z.ZodTypeAny, TOutput extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
63
78
|
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":"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"}
|
|
@@ -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');
|
|
@@ -193,9 +198,30 @@ export async function compileAndExtractCatalog() {
|
|
|
193
198
|
surface: tool.action.surface,
|
|
194
199
|
requiresConfirmation: tool.action.requiresConfirmation,
|
|
195
200
|
confirmationMessage: tool.action.confirmationMessage,
|
|
201
|
+
...(tool.action.inputs ? { inputHints: tool.action.inputs } : {}),
|
|
196
202
|
});
|
|
197
203
|
}
|
|
198
204
|
}
|
|
205
|
+
const toolIds = new Set(cataloguedTools.map((t) => t.id));
|
|
206
|
+
for (const action of cataloguedActions) {
|
|
207
|
+
for (const [fieldKey, hint] of Object.entries(action.inputHints ?? {})) {
|
|
208
|
+
if (hint.kind !== 'dynamic-select')
|
|
209
|
+
continue;
|
|
210
|
+
const ds = hint.dynamicSelect;
|
|
211
|
+
if (!toolIds.has(ds.optionsFrom)) {
|
|
212
|
+
return errored({
|
|
213
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
214
|
+
message: `Action "${action.toolId}" input "${fieldKey}": optionsFrom "${ds.optionsFrom}" is not a tool in this app`,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (!ds.valuePath || !ds.labelTemplate) {
|
|
218
|
+
return errored({
|
|
219
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
220
|
+
message: `Action "${action.toolId}" input "${fieldKey}": dynamic-select requires valuePath and labelTemplate`,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
199
225
|
const cataloguedTriggers = [];
|
|
200
226
|
const cataloguedWorkflowTriggers = [];
|
|
201
227
|
const cataloguedAgentTriggers = [];
|
|
@@ -279,6 +305,48 @@ export async function compileAndExtractCatalog() {
|
|
|
279
305
|
capabilities: field.capabilities,
|
|
280
306
|
});
|
|
281
307
|
}
|
|
308
|
+
const cataloguedDataConnectors = [];
|
|
309
|
+
const seenConnectorIds = new Set();
|
|
310
|
+
for (const connector of dataConnectorsArr) {
|
|
311
|
+
if (!connector?.id) {
|
|
312
|
+
return errored({
|
|
313
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
314
|
+
message: 'Data connector is missing an id',
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
if (seenConnectorIds.has(connector.id)) {
|
|
318
|
+
return errored({
|
|
319
|
+
code: 'CATALOG_VALIDATION_FAILED',
|
|
320
|
+
message: `Duplicate data connector id "${connector.id}"`,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
seenConnectorIds.add(connector.id);
|
|
324
|
+
const configJsonSchema = connector.config
|
|
325
|
+
? zodToProviderToolSchema(connector.config).jsonSchema
|
|
326
|
+
: {};
|
|
327
|
+
const streams = (connector.streams ?? []).map((stream) => ({
|
|
328
|
+
key: stream.key,
|
|
329
|
+
displayFieldKey: stream.displayFieldKey,
|
|
330
|
+
fields: Object.entries(stream.fields ?? {}).map(([fieldKey, decl]) => ({
|
|
331
|
+
fieldKey,
|
|
332
|
+
sourcePath: decl.sourcePath,
|
|
333
|
+
type: decl.type,
|
|
334
|
+
name: decl.name,
|
|
335
|
+
pii: decl.pii,
|
|
336
|
+
capabilities: decl.capabilities,
|
|
337
|
+
})),
|
|
338
|
+
defaultMappings: stream.defaultMappings,
|
|
339
|
+
exampleRecord: stream.exampleRecord,
|
|
340
|
+
}));
|
|
341
|
+
cataloguedDataConnectors.push({
|
|
342
|
+
id: connector.id,
|
|
343
|
+
label: connector.label,
|
|
344
|
+
requiresConnection: Boolean(connector.requiresConnection),
|
|
345
|
+
iconKey: connector.iconKey ?? null,
|
|
346
|
+
configJsonSchema,
|
|
347
|
+
streams,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
282
350
|
const catalog = {
|
|
283
351
|
tools: cataloguedTools,
|
|
284
352
|
triggers: cataloguedTriggers,
|
|
@@ -294,6 +362,7 @@ export async function compileAndExtractCatalog() {
|
|
|
294
362
|
},
|
|
295
363
|
actions: cataloguedActions,
|
|
296
364
|
fields: cataloguedFields,
|
|
365
|
+
dataConnectors: cataloguedDataConnectors,
|
|
297
366
|
};
|
|
298
367
|
try {
|
|
299
368
|
JSON.stringify(catalog);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@auxx/sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.17",
|
|
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"
|