@notionhq/workers 0.0.85 → 0.0.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/builder.d.ts CHANGED
@@ -43,17 +43,22 @@ export declare function number(value: number): TextValue;
43
43
  */
44
44
  export declare function date(dateString: string): TextValue;
45
45
  /**
46
- * Creates a datetime value from a Date object.
46
+ * Creates a datetime value from an ISO 8601 datetime string.
47
+ * @param isoString - An ISO 8601 datetime string (e.g., "2024-01-15T10:30", "2024-01-15T10:30:00Z")
48
+ * @param timeZone - Optional IANA timezone name (e.g., "America/New_York")
47
49
  */
48
- export declare function dateTime(date: Date, timeZone?: string): TextValue;
50
+ export declare function dateTime(isoString: string, timeZone?: string): TextValue;
49
51
  /**
50
52
  * Creates a date range value from date strings.
51
53
  */
52
54
  export declare function dateRange(startDate: string, endDate: string): TextValue;
53
55
  /**
54
- * Creates a datetime range value from Date objects.
56
+ * Creates a datetime range value from ISO 8601 datetime strings.
57
+ * @param startDateTime - An ISO 8601 datetime string for the range start
58
+ * @param endDateTime - An ISO 8601 datetime string for the range end
59
+ * @param timeZone - Optional IANA timezone name (e.g., "America/New_York")
55
60
  */
56
- export declare function dateTimeRange(startDate: Date, endDate: Date, timeZone?: string): TextValue;
61
+ export declare function dateTimeRange(startDateTime: string, endDateTime: string, timeZone?: string): TextValue;
57
62
  /**
58
63
  * Creates a link with custom display text.
59
64
  * @param displayText - The text to display
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAEX,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEnD;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAE1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEhD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAK/C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CASlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAYjE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAWvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,EACb,QAAQ,CAAC,EAAE,MAAM,GACf,SAAS,CAcX;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAK1D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAEvD;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAKnD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAE9D;AA4CD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACzB,IAAI,EAAE,WAAW,EACjB,KAAK,GAAE,YAAqB,GAC1B,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAK3C"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAEX,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEnD;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAE1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEhD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAK/C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CASlD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAcxE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAWvE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC5B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GACf,SAAS,CAiBX;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAK1D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAEvD;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAKnD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAE9D;AA+CD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACzB,IAAI,EAAE,WAAW,EACjB,KAAK,GAAE,YAAqB,GAC1B,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAK3C"}
package/dist/builder.js CHANGED
@@ -36,11 +36,12 @@ function date(dateString) {
36
36
  };
37
37
  return createDateToken(dateValue);
38
38
  }
39
- function dateTime(date2, timeZone) {
39
+ function dateTime(isoString, timeZone) {
40
+ const { date: date2, time } = parseISODateTime(isoString);
40
41
  const dateValue = {
41
42
  type: "datetime",
42
- start_date: formatDate(date2),
43
- start_time: formatTime(date2)
43
+ start_date: date2,
44
+ start_time: time
44
45
  };
45
46
  if (timeZone) {
46
47
  dateValue.time_zone = timeZone;
@@ -57,13 +58,15 @@ function dateRange(startDate, endDate) {
57
58
  };
58
59
  return createDateToken(dateValue);
59
60
  }
60
- function dateTimeRange(startDate, endDate, timeZone) {
61
+ function dateTimeRange(startDateTime, endDateTime, timeZone) {
62
+ const start = parseISODateTime(startDateTime);
63
+ const end = parseISODateTime(endDateTime);
61
64
  const dateValue = {
62
65
  type: "datetimerange",
63
- start_date: formatDate(startDate),
64
- start_time: formatTime(startDate),
65
- end_date: formatDate(endDate),
66
- end_time: formatTime(endDate)
66
+ start_date: start.date,
67
+ start_time: start.time,
68
+ end_date: end.date,
69
+ end_time: end.time
67
70
  };
68
71
  if (timeZone) {
69
72
  dateValue.time_zone = timeZone;
@@ -111,16 +114,18 @@ function validateDateString(dateString) {
111
114
  function createDateToken(dateValue) {
112
115
  return [["\u2023", [["d", dateValue]]]];
113
116
  }
114
- function formatDate(date2) {
115
- const year = date2.getFullYear();
116
- const month = String(date2.getMonth() + 1).padStart(2, "0");
117
- const day = String(date2.getDate()).padStart(2, "0");
118
- return `${year}-${month}-${day}`;
119
- }
120
- function formatTime(date2) {
121
- const hours = String(date2.getHours()).padStart(2, "0");
122
- const minutes = String(date2.getMinutes()).padStart(2, "0");
123
- return `${hours}:${minutes}`;
117
+ function parseISODateTime(isoString) {
118
+ if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/.test(isoString)) {
119
+ throw new Error(
120
+ `Invalid ISO 8601 datetime: ${isoString}. Expected format like 2024-01-15T10:30 or 2024-01-15T10:30:00Z`
121
+ );
122
+ }
123
+ const date2 = isoString.slice(0, 10);
124
+ const time = isoString.slice(11, 16);
125
+ if (Number.isNaN(new Date(isoString).getTime())) {
126
+ throw new Error(`Invalid datetime: ${isoString}`);
127
+ }
128
+ return { date: date2, time };
124
129
  }
125
130
  function emojiIcon(emoji) {
126
131
  return {
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=builder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.test.d.ts","sourceRoot":"","sources":["../src/builder.test.ts"],"names":[],"mappings":""}
@@ -17,7 +17,7 @@ function createAutomationCapability(key, config) {
17
17
  } else {
18
18
  process.stdout.write(
19
19
  `
20
- <output>${JSON.stringify({ status: "success" })}</output>
20
+ <output>${JSON.stringify({ _tag: "success", value: { status: "success" } })}</output>
21
21
  `
22
22
  );
23
23
  }
@@ -26,7 +26,7 @@ function createAutomationCapability(key, config) {
26
26
  if (!options?.concreteOutput) {
27
27
  process.stdout.write(
28
28
  `
29
- <output>${JSON.stringify({ status: "error", error: { name: error.name, message: error.message } })}</output>
29
+ <output>${JSON.stringify({ _tag: "error", error: { name: error.name, message: error.message, trace: error.stack } })}</output>
30
30
  `
31
31
  );
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/capabilities/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/capabilities/sync.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,23 @@ function createSyncCapability(key, syncConfiguration) {
13
13
  async handler(runtimeContext, options) {
14
14
  const capabilityContext = createCapabilityContext();
15
15
  const state = runtimeContext?.state ?? runtimeContext?.userContext;
16
- const executionResult = await syncConfiguration.execute(state, capabilityContext).catch((err) => {
17
- throw new ExecutionError(err);
18
- });
16
+ let executionResult;
17
+ try {
18
+ executionResult = await syncConfiguration.execute(
19
+ state,
20
+ capabilityContext
21
+ );
22
+ } catch (err) {
23
+ const error = new ExecutionError(err);
24
+ if (!options?.concreteOutput) {
25
+ process.stdout.write(
26
+ `
27
+ <output>${JSON.stringify({ _tag: "error", error: { name: error.name, message: error.message } })}</output>
28
+ `
29
+ );
30
+ }
31
+ throw error;
32
+ }
19
33
  const result = {
20
34
  changes: executionResult.changes,
21
35
  hasMore: executionResult.hasMore,
@@ -24,9 +38,11 @@ function createSyncCapability(key, syncConfiguration) {
24
38
  if (options?.concreteOutput) {
25
39
  return result;
26
40
  } else {
27
- process.stdout.write(`
28
- <output>${JSON.stringify(result)}</output>
29
- `);
41
+ process.stdout.write(
42
+ `
43
+ <output>${JSON.stringify({ _tag: "success", value: result })}</output>
44
+ `
45
+ );
30
46
  }
31
47
  return result;
32
48
  }
@@ -1,11 +1,11 @@
1
- import type { JSONSchema } from "../json-schema.js";
1
+ import type { SchemaBuilder } from "../schema-builder.js";
2
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: JSONSchema<I>;
8
- outputSchema?: JSONSchema<O>;
7
+ schema: SchemaBuilder<I>;
8
+ outputSchema?: SchemaBuilder<O>;
9
9
  execute: (input: I, context: CapabilityContext) => O | Promise<O>;
10
10
  }
11
11
  /**
@@ -16,6 +16,7 @@ export declare class InvalidToolInputError extends Error {
16
16
  toJSON(): {
17
17
  name: string;
18
18
  message: string;
19
+ trace: string | undefined;
19
20
  };
20
21
  }
21
22
  /**
@@ -26,6 +27,7 @@ export declare class InvalidToolOutputError extends Error {
26
27
  toJSON(): {
27
28
  name: string;
28
29
  message: string;
30
+ trace: string | undefined;
29
31
  };
30
32
  }
31
33
  /**
@@ -36,6 +38,7 @@ export declare class ToolExecutionError extends Error {
36
38
  toJSON(): {
37
39
  name: string;
38
40
  message: string;
41
+ trace: string | undefined;
39
42
  };
40
43
  }
41
44
  export type ToolCapability<I extends JSONValue, O extends JSONValue = JSONValue> = ReturnType<typeof createToolCapability<I, O>>;
@@ -51,8 +54,8 @@ export declare function createToolCapability<I extends JSONValue, O extends JSON
51
54
  config: {
52
55
  title: string;
53
56
  description: string;
54
- schema: JSONSchema<I>;
55
- outputSchema: JSONSchema<O> | undefined;
57
+ schema: import("../json-schema.js").JSONSchema<I>;
58
+ outputSchema: import("../json-schema.js").JSONSchema<O> | undefined;
56
59
  };
57
60
  handler: {
58
61
  (input: JSONValue, options: HandlerOptions): Promise<O>;
@@ -61,7 +64,11 @@ export declare function createToolCapability<I extends JSONValue, O extends JSON
61
64
  value: O;
62
65
  } | {
63
66
  _tag: "error";
64
- error: InvalidToolInputError | InvalidToolOutputError | ToolExecutionError;
67
+ error: {
68
+ name: string;
69
+ message: string;
70
+ trace: string | undefined;
71
+ };
65
72
  }>;
66
73
  };
67
74
  };
@@ -1 +1 @@
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
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/capabilities/tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,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,aAAa,CAAC,CAAC,CAAC,CAAC;IACzB,YAAY,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAChC,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;;;;;CAON;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;IAK3B,MAAM;;;;;CAON;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;IAK3B,MAAM;;;;;CAON;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;;;;;;;;;;gBAgBf,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,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;aAAE,CAAC;SACnE,CACH;;EA8GD"}
@@ -1,4 +1,5 @@
1
1
  import { Ajv } from "ajv";
2
+ import { getSchema } from "../schema-builder.js";
2
3
  import { createCapabilityContext } from "./context.js";
3
4
  function validateRequiredProperties(schema, path = "") {
4
5
  if ("type" in schema && schema.type === "object" && "properties" in schema) {
@@ -48,7 +49,8 @@ class InvalidToolInputError extends Error {
48
49
  toJSON() {
49
50
  return {
50
51
  name: this.name,
51
- message: this.message
52
+ message: this.message,
53
+ trace: this.stack
52
54
  };
53
55
  }
54
56
  }
@@ -60,7 +62,8 @@ class InvalidToolOutputError extends Error {
60
62
  toJSON() {
61
63
  return {
62
64
  name: this.name,
63
- message: this.message
65
+ message: this.message,
66
+ trace: this.stack
64
67
  };
65
68
  }
66
69
  }
@@ -72,18 +75,21 @@ class ToolExecutionError extends Error {
72
75
  toJSON() {
73
76
  return {
74
77
  name: this.name,
75
- message: this.message
78
+ message: this.message,
79
+ trace: this.stack
76
80
  };
77
81
  }
78
82
  }
79
83
  function createToolCapability(key, config) {
80
- validateRequiredProperties(config.schema);
81
- if (config.outputSchema) {
82
- validateRequiredProperties(config.outputSchema);
84
+ const inputSchema = getSchema(config.schema);
85
+ validateRequiredProperties(inputSchema);
86
+ const outputSchema = config.outputSchema ? getSchema(config.outputSchema) : void 0;
87
+ if (outputSchema) {
88
+ validateRequiredProperties(outputSchema);
83
89
  }
84
90
  const ajv = new Ajv();
85
- const validateInput = ajv.compile(config.schema);
86
- const validateOutput = config.outputSchema ? ajv.compile(config.outputSchema) : null;
91
+ const validateInput = ajv.compile(inputSchema);
92
+ const validateOutput = outputSchema ? ajv.compile(outputSchema) : null;
87
93
  async function handler(input, options) {
88
94
  if (!validateInput(input)) {
89
95
  if (validateInput.errors == null) {
@@ -99,7 +105,7 @@ function createToolCapability(key, config) {
99
105
  }
100
106
  const result = {
101
107
  _tag: "error",
102
- error
108
+ error: { name: error.name, message: error.message, trace: error.stack }
103
109
  };
104
110
  process.stdout.write(`
105
111
  <output>${JSON.stringify(result)}</output>
@@ -118,9 +124,11 @@ function createToolCapability(key, config) {
118
124
  }
119
125
  const result2 = {
120
126
  _tag: "error",
121
- error: new InvalidToolOutputError(
122
- JSON.stringify(validateOutput.errors, null, 2)
123
- )
127
+ error: {
128
+ name: error.name,
129
+ message: error.message,
130
+ trace: error.stack
131
+ }
124
132
  };
125
133
  process.stdout.write(`
126
134
  <output>${JSON.stringify(result2)}</output>
@@ -130,9 +138,11 @@ function createToolCapability(key, config) {
130
138
  if (options?.concreteOutput) {
131
139
  return result;
132
140
  }
133
- process.stdout.write(`
134
- <output>${JSON.stringify(result)}</output>
135
- `);
141
+ process.stdout.write(
142
+ `
143
+ <output>${JSON.stringify({ _tag: "success", value: result })}</output>
144
+ `
145
+ );
136
146
  return {
137
147
  _tag: "success",
138
148
  value: result
@@ -146,7 +156,7 @@ function createToolCapability(key, config) {
146
156
  }
147
157
  const result = {
148
158
  _tag: "error",
149
- error
159
+ error: { name: error.name, message: error.message, trace: error.stack }
150
160
  };
151
161
  process.stdout.write(`
152
162
  <output>${JSON.stringify(result)}</output>
@@ -160,8 +170,8 @@ function createToolCapability(key, config) {
160
170
  config: {
161
171
  title: config.title,
162
172
  description: config.description,
163
- schema: config.schema,
164
- outputSchema: config.outputSchema
173
+ schema: inputSchema,
174
+ outputSchema
165
175
  },
166
176
  handler
167
177
  };
package/dist/index.d.ts CHANGED
@@ -5,6 +5,8 @@ export type { NotionManagedOAuthConfiguration, OAuthCapability, OAuthConfigurati
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
7
  export type { AnyJSONSchema, JSONSchema } from "./json-schema.js";
8
+ export type { Infer, SchemaBuilder } from "./schema-builder.js";
9
+ export { getSchema, j } from "./schema-builder.js";
8
10
  export type { Icon, ImageIcon, NoticonColor, NoticonName, PlaceValue, Schedule, } from "./types.js";
9
11
  export { Worker } from "./worker.js";
10
12
  //# 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,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"}
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,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AACnD,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"}
package/dist/index.js CHANGED
@@ -1,9 +1,12 @@
1
1
  import { emojiIcon, imageIcon, notionIcon, place } from "./builder.js";
2
+ import { getSchema, j } from "./schema-builder.js";
2
3
  import { Worker } from "./worker.js";
3
4
  export {
4
5
  Worker,
5
6
  emojiIcon,
7
+ getSchema,
6
8
  imageIcon,
9
+ j,
7
10
  notionIcon,
8
11
  place
9
12
  };
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Zod-like builder for JSONSchema objects.
3
+ *
4
+ * Guarantees output always complies with the model provider constraints
5
+ * enforced by `json-schema.ts` — all object properties in `required`,
6
+ * `additionalProperties: false`, no forbidden composition keywords, etc.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { j } from "@notionhq/workers/schema-builder";
11
+ *
12
+ * const schema = j.object({
13
+ * foo: j.enum("a", "b", "c").describe("The foo field"),
14
+ * bar: j.string(),
15
+ * count: j.number(),
16
+ * tags: j.array(j.string()),
17
+ * nickname: j.string().nullable(),
18
+ * createdAt: j.datetime(),
19
+ * });
20
+ * ```
21
+ */
22
+ import type { AnyJSONSchema, JSONSchema } from "./json-schema.js";
23
+ declare const SCHEMA: unique symbol;
24
+ export interface SchemaBuilder<T> {
25
+ readonly [SCHEMA]: AnyJSONSchema;
26
+ /** Set the JSONSchema description field. Chainable. */
27
+ describe(text: string): SchemaBuilder<T>;
28
+ /** Wrap in anyOf with null. Chainable. */
29
+ nullable(): SchemaBuilder<T | null>;
30
+ }
31
+ /** Extracts `T` from `SchemaBuilder<T>` (type-level only). */
32
+ export type Infer<S> = S extends SchemaBuilder<infer T> ? T : never;
33
+ /** Extract the plain JSONSchema from a builder. */
34
+ export declare function getSchema<T>(builder: SchemaBuilder<T>): JSONSchema<T>;
35
+ export declare function string(): SchemaBuilder<string>;
36
+ export declare function number(): SchemaBuilder<number>;
37
+ export declare function integer(): SchemaBuilder<number>;
38
+ export declare function boolean(): SchemaBuilder<boolean>;
39
+ declare function enumBuilder<T extends string>(...values: readonly T[]): SchemaBuilder<T>;
40
+ declare function enumBuilder<T extends number>(...values: readonly T[]): SchemaBuilder<T>;
41
+ export { enumBuilder as enum };
42
+ export declare function datetime(): SchemaBuilder<string>;
43
+ export declare function date(): SchemaBuilder<string>;
44
+ export declare function time(): SchemaBuilder<string>;
45
+ export declare function duration(): SchemaBuilder<string>;
46
+ export declare function email(): SchemaBuilder<string>;
47
+ export declare function hostname(): SchemaBuilder<string>;
48
+ export declare function ipv4(): SchemaBuilder<string>;
49
+ export declare function ipv6(): SchemaBuilder<string>;
50
+ export declare function uuid(): SchemaBuilder<string>;
51
+ export declare function array<T>(items: SchemaBuilder<T>, options?: {
52
+ minItems?: 0 | 1;
53
+ }): SchemaBuilder<T[]>;
54
+ export declare function object<P extends Record<string, SchemaBuilder<unknown>>>(properties: P): SchemaBuilder<{
55
+ [K in keyof P]: Infer<P[K]>;
56
+ }>;
57
+ export declare function anyOf<S extends SchemaBuilder<unknown>[]>(...schemas: S): SchemaBuilder<Infer<S[number]>>;
58
+ export declare function ref(path: string): SchemaBuilder<unknown>;
59
+ export declare const j: {
60
+ string: typeof string;
61
+ number: typeof number;
62
+ integer: typeof integer;
63
+ boolean: typeof boolean;
64
+ enum: typeof enumBuilder;
65
+ datetime: typeof datetime;
66
+ date: typeof date;
67
+ time: typeof time;
68
+ duration: typeof duration;
69
+ email: typeof email;
70
+ hostname: typeof hostname;
71
+ ipv4: typeof ipv4;
72
+ ipv6: typeof ipv6;
73
+ uuid: typeof uuid;
74
+ array: typeof array;
75
+ object: typeof object;
76
+ anyOf: typeof anyOf;
77
+ ref: typeof ref;
78
+ };
79
+ //# sourceMappingURL=schema-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.d.ts","sourceRoot":"","sources":["../src/schema-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ const SCHEMA = /* @__PURE__ */ Symbol("schema");
2
+ function getSchema(builder) {
3
+ return builder[SCHEMA];
4
+ }
5
+ function makeBuilder(schema) {
6
+ return {
7
+ [SCHEMA]: schema,
8
+ describe(text) {
9
+ return makeBuilder({ ...schema, description: text });
10
+ },
11
+ nullable() {
12
+ const { description: desc, ...rest } = schema;
13
+ const inner = desc !== void 0 ? rest : schema;
14
+ const wrapper = {
15
+ anyOf: [inner, { type: "null" }]
16
+ };
17
+ if (desc !== void 0) wrapper.description = desc;
18
+ return makeBuilder(wrapper);
19
+ }
20
+ };
21
+ }
22
+ function string() {
23
+ return makeBuilder({ type: "string" });
24
+ }
25
+ function number() {
26
+ return makeBuilder({ type: "number" });
27
+ }
28
+ function integer() {
29
+ return makeBuilder({ type: "integer" });
30
+ }
31
+ function boolean() {
32
+ return makeBuilder({ type: "boolean" });
33
+ }
34
+ function enumBuilder(...values) {
35
+ const type = typeof values[0] === "string" ? "string" : "number";
36
+ return makeBuilder({ type, enum: values });
37
+ }
38
+ function datetime() {
39
+ return makeBuilder({ type: "string", format: "date-time" });
40
+ }
41
+ function date() {
42
+ return makeBuilder({ type: "string", format: "date" });
43
+ }
44
+ function time() {
45
+ return makeBuilder({ type: "string", format: "time" });
46
+ }
47
+ function duration() {
48
+ return makeBuilder({ type: "string", format: "duration" });
49
+ }
50
+ function email() {
51
+ return makeBuilder({ type: "string", format: "email" });
52
+ }
53
+ function hostname() {
54
+ return makeBuilder({ type: "string", format: "hostname" });
55
+ }
56
+ function ipv4() {
57
+ return makeBuilder({ type: "string", format: "ipv4" });
58
+ }
59
+ function ipv6() {
60
+ return makeBuilder({ type: "string", format: "ipv6" });
61
+ }
62
+ function uuid() {
63
+ return makeBuilder({ type: "string", format: "uuid" });
64
+ }
65
+ function array(items, options) {
66
+ const schema = {
67
+ type: "array",
68
+ items: getSchema(items)
69
+ };
70
+ if (options?.minItems !== void 0) schema.minItems = options.minItems;
71
+ return makeBuilder(schema);
72
+ }
73
+ function object(properties) {
74
+ const schemaProps = {};
75
+ const keys = Object.keys(properties);
76
+ for (const key of keys) {
77
+ schemaProps[key] = getSchema(properties[key]);
78
+ }
79
+ return makeBuilder({
80
+ type: "object",
81
+ properties: schemaProps,
82
+ required: keys,
83
+ additionalProperties: false
84
+ });
85
+ }
86
+ function anyOf(...schemas) {
87
+ return makeBuilder({
88
+ anyOf: schemas.map(getSchema)
89
+ });
90
+ }
91
+ function ref(path) {
92
+ return makeBuilder({ $ref: path });
93
+ }
94
+ const j = {
95
+ string,
96
+ number,
97
+ integer,
98
+ boolean,
99
+ enum: enumBuilder,
100
+ datetime,
101
+ date,
102
+ time,
103
+ duration,
104
+ email,
105
+ hostname,
106
+ ipv4,
107
+ ipv6,
108
+ uuid,
109
+ array,
110
+ object,
111
+ anyOf,
112
+ ref
113
+ };
114
+ export {
115
+ anyOf,
116
+ array,
117
+ boolean,
118
+ date,
119
+ datetime,
120
+ duration,
121
+ email,
122
+ enumBuilder as enum,
123
+ getSchema,
124
+ hostname,
125
+ integer,
126
+ ipv4,
127
+ ipv6,
128
+ j,
129
+ number,
130
+ object,
131
+ ref,
132
+ string,
133
+ time,
134
+ uuid
135
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema-builder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.test.d.ts","sourceRoot":"","sources":["../src/schema-builder.test.ts"],"names":[],"mappings":""}
package/dist/worker.d.ts CHANGED
@@ -63,23 +63,18 @@ export declare class Worker {
63
63
  * Example:
64
64
  *
65
65
  * ```ts
66
+ * import { j } from "@notionhq/workers/schema-builder";
67
+ *
66
68
  * worker.tool<{ name: string }, string>("sayHello", {
67
69
  * title: "Say Hello",
68
70
  * description: "Say hello to the user",
69
- * schema: {
70
- * type: "object",
71
- * properties: {
72
- * name: { type: "string" },
73
- * },
74
- * required: ["name"],
75
- * },
71
+ * schema: j.object({ name: j.string() }),
76
72
  * execute: ({ name }, { notion }) => {
77
73
  * return `Hello, ${name}!`;
78
74
  * },
79
75
  * })
80
76
  * ```
81
77
  *
82
- *
83
78
  * @param key - The unique key for this capability.
84
79
  * @param config - The tool configuration.
85
80
  * @returns The capability object.