@project-ajax/sdk 0.0.80 → 0.0.81

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.
@@ -1,3 +1,4 @@
1
+ import type { HandlerOptions } from "../types.js";
1
2
  import type { CapabilityContext } from "./context.js";
2
3
  /**
3
4
  * Event provided to automation execute functions
@@ -83,6 +84,8 @@ export declare function createAutomationCapability(key: string, config: Automati
83
84
  title: string;
84
85
  description: string;
85
86
  };
86
- handler(event: AutomationEvent): Promise<void>;
87
+ handler(event: AutomationEvent, options?: HandlerOptions): Promise<{
88
+ status: "success";
89
+ } | undefined>;
87
90
  };
88
91
  //# sourceMappingURL=automation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"automation.d.ts","sourceRoot":"","sources":["../../src/capabilities/automation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,cAAc,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;OAKG;IACH,OAAO,EAAE,CACR,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,iBAAiB,KACtB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAC5C,OAAO,0BAA0B,CACjC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACzC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,uBAAuB;;;;;;;mBAST,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;EAgBrD"}
1
+ {"version":3,"file":"automation.d.ts","sourceRoot":"","sources":["../../src/capabilities/automation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,cAAc,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;OAKG;IACH,OAAO,EAAE,CACR,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,iBAAiB,KACtB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAC5C,OAAO,0BAA0B,CACjC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACzC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,uBAAuB;;;;;;;mBAUtB,eAAe,YACZ,cAAc,GACtB,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;EAyB9C"}
@@ -8,22 +8,28 @@ function createAutomationCapability(key, config) {
8
8
  title: config.title,
9
9
  description: config.description
10
10
  },
11
- async handler(event) {
11
+ async handler(event, options) {
12
12
  try {
13
13
  const capabilityContext = createCapabilityContext();
14
14
  await config.execute(event, capabilityContext);
15
- process.stdout.write(
16
- `
15
+ if (options?.concreteOutput) {
16
+ return { status: "success" };
17
+ } else {
18
+ process.stdout.write(
19
+ `
17
20
  <output>${JSON.stringify({ status: "success" })}</output>
18
21
  `
19
- );
22
+ );
23
+ }
20
24
  } catch (err) {
21
25
  const error = new ExecutionError(err);
22
- process.stdout.write(
23
- `
26
+ if (!options?.concreteOutput) {
27
+ process.stdout.write(
28
+ `
24
29
  <output>${JSON.stringify({ status: "error", error: { name: error.name, message: error.message } })}</output>
25
30
  `
26
- );
31
+ );
32
+ }
27
33
  throw error;
28
34
  }
29
35
  }
@@ -1,5 +1,5 @@
1
1
  import type { PropertyConfiguration, PropertySchema, Schema } from "../schema.js";
2
- import type { Icon, PeopleValue, PlaceValue, RelationValue, Schedule, SyncSchedule, TextValue } from "../types.js";
2
+ import type { HandlerOptions, Icon, PeopleValue, PlaceValue, RelationValue, Schedule, SyncSchedule, TextValue } from "../types.js";
3
3
  import type { CapabilityContext } from "./context.js";
4
4
  /**
5
5
  * Maps a property configuration to its corresponding value type.
@@ -170,7 +170,7 @@ export declare function createSyncCapability<PK extends string, S extends Schema
170
170
  mode: SyncMode | undefined;
171
171
  schedule: SyncSchedule;
172
172
  };
173
- handler(runtimeContext?: RuntimeContext<Context>): Promise<{
173
+ handler(runtimeContext?: RuntimeContext<Context>, options?: HandlerOptions): Promise<{
174
174
  changes: SyncChange<PK, PropertySchema<PK>>[];
175
175
  hasMore: boolean;
176
176
  nextUserContext: Context | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/capabilities/sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,qBAAqB,EACrB,cAAc,EACd,MAAM,EACN,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACX,IAAI,EACJ,WAAW,EACX,UAAU,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,SAAS,EAET,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD;;GAEG;AACH,KAAK,iBAAiB,CAAC,CAAC,SAAS,qBAAqB,IAAI,CAAC,SAAS;IACnE,IAAI,EAAE,QAAQ,CAAC;CACf,GACE,WAAW,GACX,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B,UAAU,GACV,CAAC,SAAS;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B,aAAa,GACb,SAAS,CAAC;AAEf;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAC3B,EAAE,SAAS,MAAM,EACjB,CAAC,SAAS,cAAc,CAAC,EAAE,CAAC,IACzB;IACH;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;IACf;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,UAAU,EAAE;SACV,QAAQ,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KACrD,CAAC;IACF;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC9B;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;IACf;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,SAAS,cAAc,CAAC,EAAE,CAAC,IACnE,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,GACvB,gBAAgB,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,GAAG,OAAO,IAAI;IACrE;;;OAGG;IACH,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAE9C;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAC5B,EAAE,SAAS,MAAM,EACjB,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,EACpB,KAAK,GAAG,OAAO,IACZ;IACH;;;;OAIG;IACH,kBAAkB,EAAE,EAAE,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC;IAEV;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;;;;;;;;;;;;OAcG;IACH,OAAO,EAAE,CACR,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,OAAO,EAAE,iBAAiB,KACtB,OAAO,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAErE;;GAEG;AACH,KAAK,cAAc,CAAC,WAAW,GAAG,OAAO,IAAI;IAC5C,0EAA0E;IAC1E,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,uDAAuD;IACvD,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CACnC,EAAE,SAAS,MAAM,EACjB,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,EACpB,OAAO,GAAG,OAAO,EAChB,GAAG,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC;;;;;;;;;6BAUlC,cAAc,CAAC,OAAO,CAAC;;;;;EAoBvD"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/capabilities/sync.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ function createSyncCapability(key, syncConfiguration) {
10
10
  mode: syncConfiguration.mode,
11
11
  schedule: parseSchedule(syncConfiguration.schedule)
12
12
  },
13
- async handler(runtimeContext) {
13
+ async handler(runtimeContext, options) {
14
14
  const capabilityContext = createCapabilityContext();
15
15
  const state = runtimeContext?.state ?? runtimeContext?.userContext;
16
16
  const executionResult = await syncConfiguration.execute(state, capabilityContext).catch((err) => {
@@ -21,9 +21,13 @@ function createSyncCapability(key, syncConfiguration) {
21
21
  hasMore: executionResult.hasMore,
22
22
  nextUserContext: executionResult.nextState
23
23
  };
24
- process.stdout.write(`
24
+ if (options?.concreteOutput) {
25
+ return result;
26
+ } else {
27
+ process.stdout.write(`
25
28
  <output>${JSON.stringify(result)}</output>
26
29
  `);
30
+ }
27
31
  return result;
28
32
  }
29
33
  };
@@ -1,11 +1,11 @@
1
- import { type JSONSchemaType } from "ajv";
2
- import type { JSONValue } from "../types.js";
1
+ import type { JSONSchema } from "../json-schema.js";
2
+ import type { HandlerOptions, JSONValue } from "../types.js";
3
3
  import type { CapabilityContext } from "./context.js";
4
4
  export interface ToolConfiguration<I extends JSONValue, O extends JSONValue = JSONValue> {
5
5
  title: string;
6
6
  description: string;
7
- schema: JSONSchemaType<I>;
8
- outputSchema?: JSONSchemaType<O>;
7
+ schema: JSONSchema<I>;
8
+ outputSchema?: JSONSchema<O>;
9
9
  execute: (input: I, context: CapabilityContext) => O | Promise<O>;
10
10
  }
11
11
  /**
@@ -51,15 +51,18 @@ export declare function createToolCapability<I extends JSONValue, O extends JSON
51
51
  config: {
52
52
  title: string;
53
53
  description: string;
54
- schema: JSONSchemaType<I>;
55
- outputSchema: JSONSchemaType<O> | undefined;
54
+ schema: JSONSchema<I>;
55
+ outputSchema: JSONSchema<O> | undefined;
56
+ };
57
+ handler: {
58
+ (input: JSONValue, options: HandlerOptions): Promise<O>;
59
+ (input: JSONValue): Promise<{
60
+ _tag: "success";
61
+ value: O;
62
+ } | {
63
+ _tag: "error";
64
+ error: InvalidToolInputError | InvalidToolOutputError | ToolExecutionError;
65
+ }>;
56
66
  };
57
- handler(input: JSONValue): Promise<{
58
- _tag: "success";
59
- value: O;
60
- } | {
61
- _tag: "error";
62
- error: InvalidToolInputError | InvalidToolOutputError | ToolExecutionError;
63
- }>;
64
67
  };
65
68
  //# sourceMappingURL=tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/capabilities/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,MAAM,WAAW,iBAAiB,CACjC,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,GAAG,SAAS;IAE/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC1B,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;IAK3B,MAAM;;;;CAMN;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;IAK3B,MAAM;;;;CAMN;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;IAK3B,MAAM;;;;CAMN;AAED,MAAM,MAAM,cAAc,CACzB,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,GAAG,SAAS,IAC5B,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,GAAG,SAAS,EAC9B,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;;;;;;;;;mBAgBvB,SAAS,GAAG,OAAO,CACrC;QACA,IAAI,EAAE,SAAS,CAAC;QAChB,KAAK,EAAE,CAAC,CAAC;KACR,GACD;QACA,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EACF,qBAAqB,GACrB,sBAAsB,GACtB,kBAAkB,CAAC;KACrB,CACH;EA2DF"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/capabilities/tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAiEtD,MAAM,WAAW,iBAAiB,CACjC,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,GAAG,SAAS;IAE/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;IAK3B,MAAM;;;;CAMN;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;IAK3B,MAAM;;;;CAMN;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;IAK3B,MAAM;;;;CAMN;AAED,MAAM,MAAM,cAAc,CACzB,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,GAAG,SAAS,IAC5B,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,GAAG,SAAS,EAC9B,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;;;;;;;;;;gBAYf,SAAS,WAAW,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;gBAC/C,SAAS,GAAG,OAAO,CAC9C;YACA,IAAI,EAAE,SAAS,CAAC;YAChB,KAAK,EAAE,CAAC,CAAC;SACR,GACD;YACA,IAAI,EAAE,OAAO,CAAC;YACd,KAAK,EACF,qBAAqB,GACrB,sBAAsB,GACtB,kBAAkB,CAAC;SACrB,CACH;;EA6GD"}
@@ -1,5 +1,45 @@
1
1
  import { Ajv } from "ajv";
2
2
  import { createCapabilityContext } from "./context.js";
3
+ function validateRequiredProperties(schema, path = "") {
4
+ if ("type" in schema && schema.type === "object" && "properties" in schema) {
5
+ const propKeys = Object.keys(schema.properties).sort();
6
+ const required = [...schema.required ?? []].sort();
7
+ const missing = propKeys.filter((k) => !required.includes(k));
8
+ if (missing.length > 0) {
9
+ throw new Error(
10
+ `Invalid schema${path ? ` at ${path}` : ""}: properties [${missing.join(", ")}] must be listed in "required". Both model providers require all properties to be required. Use anyOf with { type: "null" } for optional fields.`
11
+ );
12
+ }
13
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
14
+ validateRequiredProperties(
15
+ propSchema,
16
+ path ? `${path}.properties.${key}` : `properties.${key}`
17
+ );
18
+ }
19
+ if ("$defs" in schema && schema.$defs) {
20
+ for (const [key, defSchema] of Object.entries(schema.$defs)) {
21
+ validateRequiredProperties(
22
+ defSchema,
23
+ path ? `${path}.$defs.${key}` : `$defs.${key}`
24
+ );
25
+ }
26
+ }
27
+ }
28
+ if ("type" in schema && schema.type === "array" && "items" in schema) {
29
+ validateRequiredProperties(
30
+ schema.items,
31
+ path ? `${path}.items` : "items"
32
+ );
33
+ }
34
+ if ("anyOf" in schema && Array.isArray(schema.anyOf)) {
35
+ for (let i = 0; i < schema.anyOf.length; i++) {
36
+ validateRequiredProperties(
37
+ schema.anyOf[i],
38
+ path ? `${path}.anyOf[${i}]` : `anyOf[${i}]`
39
+ );
40
+ }
41
+ }
42
+ }
3
43
  class InvalidToolInputError extends Error {
4
44
  constructor(message) {
5
45
  super(message);
@@ -37,73 +77,93 @@ class ToolExecutionError extends Error {
37
77
  }
38
78
  }
39
79
  function createToolCapability(key, config) {
80
+ validateRequiredProperties(config.schema);
81
+ if (config.outputSchema) {
82
+ validateRequiredProperties(config.outputSchema);
83
+ }
40
84
  const ajv = new Ajv();
41
85
  const validateInput = ajv.compile(config.schema);
42
86
  const validateOutput = config.outputSchema ? ajv.compile(config.outputSchema) : null;
43
- return {
44
- _tag: "tool",
45
- key,
46
- config: {
47
- title: config.title,
48
- description: config.description,
49
- schema: config.schema,
50
- outputSchema: config.outputSchema
51
- },
52
- async handler(input) {
53
- if (!validateInput(input)) {
54
- if (validateInput.errors == null) {
55
- throw new Error(
56
- "Unexpected: No validation errors after failed validation"
57
- );
87
+ async function handler(input, options) {
88
+ if (!validateInput(input)) {
89
+ if (validateInput.errors == null) {
90
+ throw new Error(
91
+ "Unexpected: No validation errors after failed validation"
92
+ );
93
+ }
94
+ const error = new InvalidToolInputError(
95
+ JSON.stringify(validateInput.errors, null, 2)
96
+ );
97
+ if (options?.concreteOutput) {
98
+ throw error;
99
+ }
100
+ const result = {
101
+ _tag: "error",
102
+ error
103
+ };
104
+ process.stdout.write(`
105
+ <output>${JSON.stringify(result)}</output>
106
+ `);
107
+ return result;
108
+ }
109
+ try {
110
+ const capabilityContext = createCapabilityContext();
111
+ const result = await config.execute(input, capabilityContext);
112
+ if (validateOutput && !validateOutput(result)) {
113
+ const error = new InvalidToolOutputError(
114
+ JSON.stringify(validateOutput.errors, null, 2)
115
+ );
116
+ if (options?.concreteOutput) {
117
+ throw error;
58
118
  }
59
- const result = {
119
+ const result2 = {
60
120
  _tag: "error",
61
- error: new InvalidToolInputError(
62
- JSON.stringify(validateInput.errors, null, 2)
121
+ error: new InvalidToolOutputError(
122
+ JSON.stringify(validateOutput.errors, null, 2)
63
123
  )
64
124
  };
65
125
  process.stdout.write(`
66
- <output>${JSON.stringify(result)}</output>
126
+ <output>${JSON.stringify(result2)}</output>
67
127
  `);
128
+ return result2;
129
+ }
130
+ if (options?.concreteOutput) {
68
131
  return result;
69
132
  }
70
- try {
71
- const capabilityContext = createCapabilityContext();
72
- const result = await config.execute(input, capabilityContext);
73
- if (validateOutput && !validateOutput(result)) {
74
- const result2 = {
75
- _tag: "error",
76
- error: new InvalidToolOutputError(
77
- JSON.stringify(validateOutput.errors, null, 2)
78
- )
79
- };
80
- process.stdout.write(
81
- `
82
- <output>${JSON.stringify(result2)}</output>
83
- `
84
- );
85
- return result2;
86
- }
87
- process.stdout.write(`
133
+ process.stdout.write(`
88
134
  <output>${JSON.stringify(result)}</output>
89
135
  `);
90
- return {
91
- _tag: "success",
92
- value: result
93
- };
94
- } catch (err) {
95
- const result = {
96
- _tag: "error",
97
- error: new ToolExecutionError(
98
- err instanceof Error ? err.message : String(err)
99
- )
100
- };
101
- process.stdout.write(`
136
+ return {
137
+ _tag: "success",
138
+ value: result
139
+ };
140
+ } catch (err) {
141
+ const error = new ToolExecutionError(
142
+ err instanceof Error ? err.message : String(err)
143
+ );
144
+ if (options?.concreteOutput) {
145
+ throw error;
146
+ }
147
+ const result = {
148
+ _tag: "error",
149
+ error
150
+ };
151
+ process.stdout.write(`
102
152
  <output>${JSON.stringify(result)}</output>
103
153
  `);
104
- return result;
105
- }
154
+ return result;
106
155
  }
156
+ }
157
+ return {
158
+ _tag: "tool",
159
+ key,
160
+ config: {
161
+ title: config.title,
162
+ description: config.description,
163
+ schema: config.schema,
164
+ outputSchema: config.outputSchema
165
+ },
166
+ handler
107
167
  };
108
168
  }
109
169
  export {
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export type { CapabilityContext } from "./capabilities/context.js";
4
4
  export type { NotionManagedOAuthConfiguration, OAuthCapability, OAuthConfiguration, UserManagedOAuthConfiguration, } from "./capabilities/oauth.js";
5
5
  export type { SyncCapability, SyncChange, SyncChangeDelete, SyncChangeUpsert, SyncConfiguration, SyncExecutionResult, SyncMode, } from "./capabilities/sync.js";
6
6
  export type { ToolCapability, ToolConfiguration } from "./capabilities/tool.js";
7
+ export type { AnyJSONSchema, JSONSchema } from "./json-schema.js";
7
8
  export type { Icon, ImageIcon, NoticonColor, NoticonName, PlaceValue, Schedule, } from "./types.js";
8
9
  export { Worker } from "./worker.js";
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACvE,YAAY,EACX,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,kBAAkB,GAClB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,YAAY,EACX,+BAA+B,EAC/B,eAAe,EACf,kBAAkB,EAClB,6BAA6B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,GACR,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EACX,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,QAAQ,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACvE,YAAY,EACX,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,kBAAkB,GAClB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,YAAY,EACX,+BAA+B,EAC/B,eAAe,EACf,kBAAkB,EAClB,6BAA6B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,GACR,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAClE,YAAY,EACX,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,QAAQ,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * JSON Schema types compatible with both Anthropic and OpenAI structured
3
+ * output APIs.
4
+ *
5
+ * Constraints enforced by this type (intersection of both providers):
6
+ * - Objects must have `additionalProperties: false`
7
+ * - All object properties should be listed in `required`
8
+ * (use `anyOf` with `null` for optional fields)
9
+ * - No recursive schemas
10
+ * - No `allOf`, `not`, `if/then/else`
11
+ * - No string constraints (`minLength`, `maxLength`, `pattern`)
12
+ * - No number constraints (`minimum`, `maximum`, `multipleOf`)
13
+ * - Array `minItems` limited to 0 or 1; no `maxItems`
14
+ * - String `format` limited to: date-time, time, date, duration,
15
+ * email, hostname, ipv4, ipv6, uuid
16
+ * - `$ref` and `$defs` supported (no external refs)
17
+ */
18
+ /**
19
+ * String formats supported by both Anthropic and OpenAI structured outputs.
20
+ */
21
+ export type JSONSchemaStringFormat = "date-time" | "time" | "date" | "duration" | "email" | "hostname" | "ipv4" | "ipv6" | "uuid";
22
+ interface ForbiddenCompositionKeywords {
23
+ anyOf?: never;
24
+ allOf?: never;
25
+ not?: never;
26
+ if?: never;
27
+ then?: never;
28
+ else?: never;
29
+ }
30
+ export interface JSONSchemaStringDef<T extends string = string> extends ForbiddenCompositionKeywords {
31
+ type: "string";
32
+ description?: string;
33
+ format?: JSONSchemaStringFormat;
34
+ enum?: readonly T[];
35
+ }
36
+ export interface JSONSchemaNumberDef<T extends number = number> extends ForbiddenCompositionKeywords {
37
+ type: "number" | "integer";
38
+ description?: string;
39
+ enum?: readonly T[];
40
+ }
41
+ export interface JSONSchemaBooleanDef extends ForbiddenCompositionKeywords {
42
+ type: "boolean";
43
+ description?: string;
44
+ }
45
+ export interface JSONSchemaNullDef extends ForbiddenCompositionKeywords {
46
+ type: "null";
47
+ description?: string;
48
+ }
49
+ export interface JSONSchemaArrayDef<E = unknown> extends ForbiddenCompositionKeywords {
50
+ type: "array";
51
+ description?: string;
52
+ items: JSONSchema<E>;
53
+ minItems?: 0 | 1;
54
+ }
55
+ export interface JSONSchemaObjectDef<T extends Record<string, unknown> = Record<string, unknown>> extends ForbiddenCompositionKeywords {
56
+ type: "object";
57
+ description?: string;
58
+ properties: {
59
+ [K in keyof T]-?: JSONSchema<T[K]>;
60
+ };
61
+ required: readonly (keyof T & string)[];
62
+ additionalProperties: false;
63
+ $defs?: Record<string, AnyJSONSchema>;
64
+ }
65
+ export interface JSONSchemaRefDef extends ForbiddenCompositionKeywords {
66
+ $ref: string;
67
+ description?: string;
68
+ }
69
+ export interface JSONSchemaAnyOfDef<T = unknown> {
70
+ anyOf: readonly JSONSchema<T>[];
71
+ description?: string;
72
+ }
73
+ export type AnyJSONSchema = JSONSchemaStringDef | JSONSchemaNumberDef | JSONSchemaBooleanDef | JSONSchemaNullDef | JSONSchemaArrayDef | JSONSchemaObjectDef | JSONSchemaRefDef | JSONSchemaAnyOfDef;
74
+ /**
75
+ * Maps a TypeScript type T to its corresponding JSON Schema definition.
76
+ *
77
+ * Uses `[T] extends [X]` (non-distributing) so that union types like
78
+ * `string | number` fall through to `AnyJSONSchema` instead of distributing
79
+ * into `JSONSchemaStringDef | JSONSchemaNumberDef`.
80
+ *
81
+ * The `T & X` intersections (e.g. `T & string`) satisfy the generic
82
+ * constraints on each def without widening T.
83
+ *
84
+ * A `$ref` is always valid in any schema position, so `JSONSchemaRefDef`
85
+ * is unioned in at the end.
86
+ */
87
+ type JSONSchemaFor<T> = JSONSchemaRefDef | ([T] extends [string] ? JSONSchemaStringDef<T & string> : [T] extends [number] ? JSONSchemaNumberDef<T & number> : [T] extends [boolean] ? JSONSchemaBooleanDef : [T] extends [readonly (infer E)[]] ? JSONSchemaArrayDef<E> : [T] extends [Record<string, unknown>] ? JSONSchemaObjectDef<T & Record<string, unknown>> : AnyJSONSchema);
88
+ /**
89
+ * Wraps a non-null schema in an `anyOf` with `{ type: "null" }` for
90
+ * nullable types (e.g. `string | null`).
91
+ */
92
+ type JSONSchemaNullable<T> = {
93
+ anyOf: readonly [JSONSchemaFor<T>, JSONSchemaNullDef];
94
+ description?: string;
95
+ };
96
+ /**
97
+ * A JSON Schema definition compatible with both Anthropic and OpenAI
98
+ * structured output APIs.
99
+ *
100
+ * When the generic parameter `T` is provided, the schema structure is
101
+ * constrained at compile time to match `T`:
102
+ *
103
+ * ```ts
104
+ * // Schema is checked against the type:
105
+ * const schema: JSONSchema<{ name: string }> = {
106
+ * type: "object",
107
+ * properties: { name: { type: "string" } },
108
+ * required: ["name"],
109
+ * additionalProperties: false,
110
+ * };
111
+ * ```
112
+ *
113
+ * @template T - The TypeScript type the schema should describe.
114
+ */
115
+ export type JSONSchema<T = unknown> = unknown extends T ? AnyJSONSchema : null extends T ? JSONSchemaNullable<NonNullable<T>> : JSONSchemaFor<T>;
116
+ export {};
117
+ //# sourceMappingURL=json-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=json-schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.test.d.ts","sourceRoot":"","sources":["../src/json-schema.test.ts"],"names":[],"mappings":""}
package/dist/types.d.ts CHANGED
@@ -200,4 +200,7 @@ export type SyncSchedule = {
200
200
  type: "interval";
201
201
  intervalMs: number;
202
202
  };
203
+ export type HandlerOptions = {
204
+ concreteOutput?: true;
205
+ };
203
206
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/worker.d.ts CHANGED
@@ -4,7 +4,7 @@ import type { NotionManagedOAuthConfiguration, OAuthCapability, OAuthConfigurati
4
4
  import type { SyncCapability, SyncConfiguration } from "./capabilities/sync.js";
5
5
  import type { ToolCapability, ToolConfiguration } from "./capabilities/tool.js";
6
6
  import type { Schema } from "./schema.js";
7
- import type { JSONValue } from "./types.js";
7
+ import type { HandlerOptions, JSONValue } from "./types.js";
8
8
  export type { AutomationConfiguration, AutomationEvent, CapabilityContext, OAuthConfiguration, NotionManagedOAuthConfiguration, UserManagedOAuthConfiguration, SyncConfiguration, ToolConfiguration, };
9
9
  type Capability = SyncCapability | ToolCapability<any, any> | AutomationCapability | OAuthCapability;
10
10
  export declare class Worker {
@@ -169,8 +169,9 @@ export declare class Worker {
169
169
  *
170
170
  * @param key - The key of the capability to execute.
171
171
  * @param context - The context to pass to the capability.
172
+ * @param options - Additional options for execution (e.g. for testing).
172
173
  * @returns The result of the capability execution.
173
174
  */
174
- run(key: string, context: unknown): Promise<unknown>;
175
+ run(key: string, context: unknown, options?: HandlerOptions): Promise<unknown>;
175
176
  }
176
177
  //# sourceMappingURL=worker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EACX,+BAA+B,EAC/B,eAAe,EACf,kBAAkB,EAClB,6BAA6B,EAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,YAAY,EACX,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAC/B,6BAA6B,EAC7B,iBAAiB,EACjB,iBAAiB,GACjB,CAAC;AAMF,KAAK,UAAU,GACZ,cAAc,GAEd,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,GACxB,oBAAoB,GACpB,eAAe,CAAC;AAMnB,qBAAa,MAAM;;IAGlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8CG;IACH,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,EAC9D,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GACvC,cAAc;IAOjB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,GAAG,SAAS,EACxD,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC7B,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAQvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,UAAU,CACT,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,uBAAuB,GAC7B,oBAAoB;IAOvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,eAAe;IAO/D;;OAEG;IACH,IAAI,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC,EAAE,CAMhE;IAED;;;;;;OAMG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAyB1D"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EACX,+BAA+B,EAC/B,eAAe,EACf,kBAAkB,EAClB,6BAA6B,EAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5D,YAAY,EACX,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAC/B,6BAA6B,EAC7B,iBAAiB,EACjB,iBAAiB,GACjB,CAAC;AAMF,KAAK,UAAU,GACZ,cAAc,GAEd,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,GACxB,oBAAoB,GACpB,eAAe,CAAC;AAMnB,qBAAa,MAAM;;IAGlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8CG;IACH,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,EAC9D,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GACvC,cAAc;IAOjB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,GAAG,SAAS,EACxD,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC7B,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAQvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,UAAU,CACT,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,uBAAuB,GAC7B,oBAAoB;IAOvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,eAAe;IAO/D;;OAEG;IACH,IAAI,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC,EAAE,CAMhE;IAED;;;;;;;OAOG;IACG,GAAG,CACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,cAAmB,GAC1B,OAAO,CAAC,OAAO,CAAC;CAyBnB"}
package/dist/worker.js CHANGED
@@ -190,9 +190,10 @@ class Worker {
190
190
  *
191
191
  * @param key - The key of the capability to execute.
192
192
  * @param context - The context to pass to the capability.
193
+ * @param options - Additional options for execution (e.g. for testing).
193
194
  * @returns The result of the capability execution.
194
195
  */
195
- async run(key, context) {
196
+ async run(key, context, options = {}) {
196
197
  const capability = this.#capabilities.get(key);
197
198
  if (!capability) {
198
199
  throw new Error(`Capability "${key}" not found`);
@@ -202,7 +203,7 @@ class Worker {
202
203
  `Cannot run OAuth capability "${key}" - OAuth capabilities only provide configuration`
203
204
  );
204
205
  }
205
- return capability.handler(context);
206
+ return capability.handler(context, options);
206
207
  }
207
208
  #validateUniqueKey(key) {
208
209
  if (!key || typeof key !== "string") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@project-ajax/sdk",
3
- "version": "0.0.80",
3
+ "version": "0.0.81",
4
4
  "description": "An SDK for building workers for the Notion Workers platform",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -1,4 +1,5 @@
1
1
  import { ExecutionError } from "../error.js";
2
+ import type { HandlerOptions } from "../types.js";
2
3
  import type { CapabilityContext } from "./context.js";
3
4
  import { createCapabilityContext } from "./context.js";
4
5
 
@@ -98,18 +99,30 @@ export function createAutomationCapability(
98
99
  title: config.title,
99
100
  description: config.description,
100
101
  },
101
- async handler(event: AutomationEvent): Promise<void> {
102
+ async handler(
103
+ event: AutomationEvent,
104
+ options?: HandlerOptions,
105
+ ): Promise<{ status: "success" } | undefined> {
102
106
  try {
103
107
  const capabilityContext = createCapabilityContext();
104
108
  await config.execute(event, capabilityContext);
105
- process.stdout.write(
106
- `\n<output>${JSON.stringify({ status: "success" })}</output>\n`,
107
- );
109
+
110
+ if (options?.concreteOutput) {
111
+ return { status: "success" };
112
+ } else {
113
+ process.stdout.write(
114
+ `\n<output>${JSON.stringify({ status: "success" })}</output>\n`,
115
+ );
116
+ }
108
117
  } catch (err) {
109
118
  const error = new ExecutionError(err);
110
- process.stdout.write(
111
- `\n<output>${JSON.stringify({ status: "error", error: { name: error.name, message: error.message } })}</output>\n`,
112
- );
119
+
120
+ if (!options?.concreteOutput) {
121
+ process.stdout.write(
122
+ `\n<output>${JSON.stringify({ status: "error", error: { name: error.name, message: error.message } })}</output>\n`,
123
+ );
124
+ }
125
+
113
126
  throw error;
114
127
  }
115
128
  },