@project-ajax/sdk 0.0.32 → 0.0.34

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
@@ -1,12 +1,75 @@
1
1
  import type { TextValue } from "./types.js";
2
+ /**
3
+ * Creates a rich text value.
4
+ */
2
5
  export declare function richText(content: string): TextValue;
6
+ /**
7
+ * Creates a URL value.
8
+ */
3
9
  export declare function url(url: string): TextValue;
10
+ /**
11
+ * Creates a title value.
12
+ */
4
13
  export declare function title(content: string): TextValue;
14
+ /**
15
+ * Creates a text value.
16
+ */
5
17
  export declare function text(content: string): TextValue;
6
18
  /**
7
- * Creates a link with custom display text
19
+ * Creates an email value.
20
+ */
21
+ export declare function email(email: string): TextValue;
22
+ /**
23
+ * Creates a phone number value.
24
+ */
25
+ export declare function phoneNumber(phone: string): TextValue;
26
+ /**
27
+ * Creates a checkbox value.
28
+ */
29
+ export declare function checkbox(checked: boolean): TextValue;
30
+ /**
31
+ * Creates a file URL value.
32
+ * @param fileUrl - The URL of the file
33
+ * @param fileName - Optional display name for the file (defaults to URL)
34
+ */
35
+ export declare function file(fileUrl: string, fileName?: string): TextValue;
36
+ /**
37
+ * Creates a number value.
38
+ */
39
+ export declare function number(value: number): TextValue;
40
+ /**
41
+ * Creates a date value from a date string (YYYY-MM-DD).
42
+ */
43
+ export declare function date(dateString: string): TextValue;
44
+ /**
45
+ * Creates a datetime value from a Date object.
46
+ */
47
+ export declare function dateTime(date: Date, timeZone?: string): TextValue;
48
+ /**
49
+ * Creates a date range value from date strings.
50
+ */
51
+ export declare function dateRange(startDate: string, endDate: string): TextValue;
52
+ /**
53
+ * Creates a datetime range value from Date objects.
54
+ */
55
+ export declare function dateTimeRange(startDate: Date, endDate: Date, timeZone?: string): TextValue;
56
+ /**
57
+ * Creates a link with custom display text.
8
58
  * @param displayText - The text to display
9
59
  * @param url - The URL to link to
10
60
  */
11
61
  export declare function link(displayText: string, url: string): TextValue;
62
+ /**
63
+ * Creates a select value from a single option.
64
+ */
65
+ export declare function select(value: string): TextValue;
66
+ /**
67
+ * Creates a multi-select value from multiple options.
68
+ * @param values - Array of option names to select
69
+ */
70
+ export declare function multiSelect(...values: string[]): TextValue;
71
+ /**
72
+ * Creates a status value from a status option name.
73
+ */
74
+ export declare function status(value: string): TextValue;
12
75
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEnD;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAE1C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEhD;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAEhE"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvD;;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"}
package/dist/builder.js CHANGED
@@ -10,12 +10,121 @@ function title(content) {
10
10
  function text(content) {
11
11
  return [[content]];
12
12
  }
13
+ function email(email2) {
14
+ return [[email2]];
15
+ }
16
+ function phoneNumber(phone) {
17
+ return [[phone]];
18
+ }
19
+ function checkbox(checked) {
20
+ return checked ? [["Yes"]] : [["No"]];
21
+ }
22
+ function file(fileUrl, fileName) {
23
+ return [[fileName ?? fileUrl, [["a", fileUrl]]]];
24
+ }
25
+ function number(value) {
26
+ if (Number.isNaN(value)) {
27
+ return [];
28
+ }
29
+ return [[value.toString()]];
30
+ }
31
+ function date(dateString) {
32
+ validateDateString(dateString);
33
+ const dateValue = {
34
+ type: "date",
35
+ start_date: dateString
36
+ };
37
+ return createDateToken(dateValue);
38
+ }
39
+ function dateTime(date2, timeZone) {
40
+ const dateValue = {
41
+ type: "datetime",
42
+ start_date: formatDate(date2),
43
+ start_time: formatTime(date2)
44
+ };
45
+ if (timeZone) {
46
+ dateValue.time_zone = timeZone;
47
+ }
48
+ return createDateToken(dateValue);
49
+ }
50
+ function dateRange(startDate, endDate) {
51
+ validateDateString(startDate);
52
+ validateDateString(endDate);
53
+ const dateValue = {
54
+ type: "daterange",
55
+ start_date: startDate,
56
+ end_date: endDate
57
+ };
58
+ return createDateToken(dateValue);
59
+ }
60
+ function dateTimeRange(startDate, endDate, timeZone) {
61
+ const dateValue = {
62
+ type: "datetimerange",
63
+ start_date: formatDate(startDate),
64
+ start_time: formatTime(startDate),
65
+ end_date: formatDate(endDate),
66
+ end_time: formatTime(endDate)
67
+ };
68
+ if (timeZone) {
69
+ dateValue.time_zone = timeZone;
70
+ }
71
+ return createDateToken(dateValue);
72
+ }
13
73
  function link(displayText, url2) {
14
74
  return [[displayText, [["a", url2]]]];
15
75
  }
76
+ function select(value) {
77
+ return [[value]];
78
+ }
79
+ function multiSelect(...values) {
80
+ if (values.length === 0) {
81
+ return [];
82
+ }
83
+ return [[values.join(",")]];
84
+ }
85
+ function status(value) {
86
+ return [[value]];
87
+ }
88
+ function validateDateString(dateString) {
89
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(dateString)) {
90
+ throw new Error(
91
+ `Invalid date format: ${dateString}. Expected YYYY-MM-DD format.`
92
+ );
93
+ }
94
+ const date2 = new Date(dateString);
95
+ if (Number.isNaN(date2.getTime())) {
96
+ throw new Error(`Invalid date: ${dateString}`);
97
+ }
98
+ }
99
+ function createDateToken(dateValue) {
100
+ return [["\u2023", [["d", dateValue]]]];
101
+ }
102
+ function formatDate(date2) {
103
+ const year = date2.getFullYear();
104
+ const month = String(date2.getMonth() + 1).padStart(2, "0");
105
+ const day = String(date2.getDate()).padStart(2, "0");
106
+ return `${year}-${month}-${day}`;
107
+ }
108
+ function formatTime(date2) {
109
+ const hours = String(date2.getHours()).padStart(2, "0");
110
+ const minutes = String(date2.getMinutes()).padStart(2, "0");
111
+ return `${hours}:${minutes}`;
112
+ }
16
113
  export {
114
+ checkbox,
115
+ date,
116
+ dateRange,
117
+ dateTime,
118
+ dateTimeRange,
119
+ email,
120
+ file,
17
121
  link,
122
+ multiSelect,
123
+ number,
124
+ phoneNumber,
18
125
  richText,
126
+ select,
127
+ status,
19
128
  text,
20
129
  title,
21
130
  url
@@ -13,18 +13,30 @@ export interface ToolConfiguration<I extends JSONValue, O extends JSONValue = JS
13
13
  */
14
14
  export declare class InvalidToolInputError extends Error {
15
15
  constructor(message: string);
16
+ toJSON(): {
17
+ name: string;
18
+ message: string;
19
+ };
16
20
  }
17
21
  /**
18
22
  * An error returned when the output from a tool doesn't match the output schema.
19
23
  */
20
24
  export declare class InvalidToolOutputError extends Error {
21
25
  constructor(message: string);
26
+ toJSON(): {
27
+ name: string;
28
+ message: string;
29
+ };
22
30
  }
23
31
  /**
24
32
  * An error returned when the tool execution fails.
25
33
  */
26
34
  export declare class ToolExecutionError extends Error {
27
35
  constructor(message: string);
36
+ toJSON(): {
37
+ name: string;
38
+ message: string;
39
+ };
28
40
  }
29
41
  /**
30
42
  * Creates a capability definition for a tool to be used by an agent.
@@ -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;AAE/C,KAAK,SAAS,GACX,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEhC,MAAM,WAAW,iBAAiB,CACjC,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,GAAG,SAAS;IAE/B,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,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI3B;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI3B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI3B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,GAAG,SAAS,EACxE,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;;;;;;;mBAeT,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;EA4CF"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/capabilities/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAE/C,KAAK,SAAS,GACX,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEhC,MAAM,WAAW,iBAAiB,CACjC,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,GAAG,SAAS;IAE/B,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,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACtC;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;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,GAAG,SAAS,EACxE,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;;;;;;;mBAeT,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;EA0DF"}
@@ -4,18 +4,36 @@ class InvalidToolInputError extends Error {
4
4
  super(message);
5
5
  this.name = "InvalidToolInputError";
6
6
  }
7
+ toJSON() {
8
+ return {
9
+ name: this.name,
10
+ message: this.message
11
+ };
12
+ }
7
13
  }
8
14
  class InvalidToolOutputError extends Error {
9
15
  constructor(message) {
10
16
  super(message);
11
17
  this.name = "InvalidToolOutputError";
12
18
  }
19
+ toJSON() {
20
+ return {
21
+ name: this.name,
22
+ message: this.message
23
+ };
24
+ }
13
25
  }
14
26
  class ToolExecutionError extends Error {
15
27
  constructor(message) {
16
28
  super(message);
17
29
  this.name = "ToolExecutionError";
18
30
  }
31
+ toJSON() {
32
+ return {
33
+ name: this.name,
34
+ message: this.message
35
+ };
36
+ }
19
37
  }
20
38
  function tool(config) {
21
39
  const ajv = new Ajv();
@@ -35,22 +53,32 @@ function tool(config) {
35
53
  "Unexpected: No validation errors after failed validation"
36
54
  );
37
55
  }
38
- return {
56
+ const result = {
39
57
  _tag: "error",
40
58
  error: new InvalidToolInputError(
41
59
  JSON.stringify(validateInput.errors, null, 2)
42
60
  )
43
61
  };
62
+ process.stdout.write(`
63
+ <output>${JSON.stringify(result)}</output>
64
+ `);
65
+ return result;
44
66
  }
45
67
  try {
46
68
  const result = await config.execute(input);
47
69
  if (validateOutput && !validateOutput(result)) {
48
- return {
70
+ const result2 = {
49
71
  _tag: "error",
50
72
  error: new InvalidToolOutputError(
51
73
  JSON.stringify(validateOutput.errors, null, 2)
52
74
  )
53
75
  };
76
+ process.stdout.write(
77
+ `
78
+ <output>${JSON.stringify(result2)}</output>
79
+ `
80
+ );
81
+ return result2;
54
82
  }
55
83
  process.stdout.write(`
56
84
  <output>${JSON.stringify(result)}</output>
@@ -60,12 +88,16 @@ function tool(config) {
60
88
  value: result
61
89
  };
62
90
  } catch (err) {
63
- return {
91
+ const result = {
64
92
  _tag: "error",
65
93
  error: new ToolExecutionError(
66
94
  err instanceof Error ? err.message : String(err)
67
95
  )
68
96
  };
97
+ process.stdout.write(`
98
+ <output>${JSON.stringify(result)}</output>
99
+ `);
100
+ return result;
69
101
  }
70
102
  }
71
103
  };
package/dist/schema.d.ts CHANGED
@@ -1,7 +1,8 @@
1
+ import type { DateFormat, NumberFormat, SelectOption, StatusGroup } from "./types.js";
1
2
  /**
2
3
  * Supported property types for sync schemas.
3
4
  */
4
- export type PropertyType = "title" | "rich_text" | "url";
5
+ export type PropertyType = "title" | "rich_text" | "url" | "email" | "phone_number" | "checkbox" | "file" | "number" | "date" | "select" | "multi_select" | "status";
5
6
  /**
6
7
  * Definition of a single property in a sync schema.
7
8
  */
@@ -17,6 +18,29 @@ export type PropertyConfiguration = {
17
18
  type: "text";
18
19
  } | {
19
20
  type: "url";
21
+ } | {
22
+ type: "email";
23
+ } | {
24
+ type: "phone_number";
25
+ } | {
26
+ type: "checkbox";
27
+ } | {
28
+ type: "file";
29
+ } | {
30
+ type: "number";
31
+ format?: NumberFormat;
32
+ } | {
33
+ type: "date";
34
+ date_format?: DateFormat;
35
+ } | {
36
+ type: "select";
37
+ options: SelectOption[];
38
+ } | {
39
+ type: "multi_select";
40
+ options: SelectOption[];
41
+ } | {
42
+ type: "status";
43
+ groups: StatusGroup[];
20
44
  };
21
45
  export type Schema<PK extends string> = {
22
46
  dataSourceTitle: string;
@@ -42,4 +66,42 @@ export declare function richText(): PropertyConfiguration;
42
66
  * Creates a URL property definition.
43
67
  */
44
68
  export declare function url(): PropertyConfiguration;
69
+ /**
70
+ * Creates an email property definition.
71
+ */
72
+ export declare function email(): PropertyConfiguration;
73
+ /**
74
+ * Creates a phone number property definition.
75
+ */
76
+ export declare function phoneNumber(): PropertyConfiguration;
77
+ /**
78
+ * Creates a checkbox property definition.
79
+ */
80
+ export declare function checkbox(): PropertyConfiguration;
81
+ /**
82
+ * Creates a file property definition.
83
+ */
84
+ export declare function file(): PropertyConfiguration;
85
+ /**
86
+ * Creates a number property definition with optional formatting.
87
+ */
88
+ export declare function number(format?: NumberFormat): PropertyConfiguration;
89
+ /**
90
+ * Creates a date property definition with optional formatting.
91
+ */
92
+ export declare function date(date_format?: DateFormat): PropertyConfiguration;
93
+ /**
94
+ * Creates a select property definition with predefined options.
95
+ */
96
+ export declare function select(options: SelectOption[]): PropertyConfiguration;
97
+ /**
98
+ * Creates a multi-select property definition with predefined options.
99
+ */
100
+ export declare function multiSelect(options: SelectOption[]): PropertyConfiguration;
101
+ /**
102
+ * Creates a status property definition with groups.
103
+ */
104
+ export declare function status(config: {
105
+ groups: StatusGroup[];
106
+ }): PropertyConfiguration;
45
107
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,YAAY,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC;AAEnB,MAAM,MAAM,MAAM,CAAC,EAAE,SAAS,MAAM,IAAI;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,MAAM,IAAI;KAC9C,UAAU,IAAI,EAAE,GAAG,qBAAqB;CACzC,GAAG;IACH,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAAC;CAC9C,CAAC;AAEF;;GAEG;AACH,wBAAgB,KAAK,IAAI,qBAAqB,CAE7C;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,qBAAqB,CAEhD;AAED;;GAEG;AACH,wBAAgB,GAAG,IAAI,qBAAqB,CAE3C"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,YAAY,GACrB,OAAO,GACP,WAAW,GACX,KAAK,GACL,OAAO,GACP,cAAc,GACd,UAAU,GACV,MAAM,GACN,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,cAAc,GACd,QAAQ,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,YAAY,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;CACrB,GACD;IACA,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,UAAU,CAAC;CACxB,GACD;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;CACvB,GACD;IACA,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;CACvB,GACD;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACrB,CAAC;AAEL,MAAM,MAAM,MAAM,CAAC,EAAE,SAAS,MAAM,IAAI;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,MAAM,IAAI;KAC9C,UAAU,IAAI,EAAE,GAAG,qBAAqB;CACzC,GAAG;IACH,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAAC;CAC9C,CAAC;AAEF;;GAEG;AACH,wBAAgB,KAAK,IAAI,qBAAqB,CAE7C;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,qBAAqB,CAEhD;AAED;;GAEG;AACH,wBAAgB,GAAG,IAAI,qBAAqB,CAE3C;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,qBAAqB,CAE7C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,qBAAqB,CAEnD;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,qBAAqB,CAEhD;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,qBAAqB,CAE5C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,qBAAqB,CAEnE;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,qBAAqB,CAEpE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAErE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAE1E;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;CACtB,GAAG,qBAAqB,CAExB"}
package/dist/schema.js CHANGED
@@ -7,8 +7,44 @@ function richText() {
7
7
  function url() {
8
8
  return { type: "url" };
9
9
  }
10
+ function email() {
11
+ return { type: "email" };
12
+ }
13
+ function phoneNumber() {
14
+ return { type: "phone_number" };
15
+ }
16
+ function checkbox() {
17
+ return { type: "checkbox" };
18
+ }
19
+ function file() {
20
+ return { type: "file" };
21
+ }
22
+ function number(format) {
23
+ return format ? { type: "number", format } : { type: "number" };
24
+ }
25
+ function date(date_format) {
26
+ return date_format ? { type: "date", date_format } : { type: "date" };
27
+ }
28
+ function select(options) {
29
+ return { type: "select", options };
30
+ }
31
+ function multiSelect(options) {
32
+ return { type: "multi_select", options };
33
+ }
34
+ function status(config) {
35
+ return { type: "status", groups: config.groups };
36
+ }
10
37
  export {
38
+ checkbox,
39
+ date,
40
+ email,
41
+ file,
42
+ multiSelect,
43
+ number,
44
+ phoneNumber,
11
45
  richText,
46
+ select,
47
+ status,
12
48
  title,
13
49
  url
14
50
  };
package/dist/types.d.ts CHANGED
@@ -7,5 +7,74 @@ type TextToken = [string, ...unknown[]];
7
7
  * A TextValue is an array of text tokens, representing rich text content.
8
8
  */
9
9
  export type TextValue = Array<TextToken>;
10
+ /**
11
+ * Select option color types supported by Notion
12
+ */
13
+ export type SelectColor = "default" | "gray" | "brown" | "orange" | "yellow" | "green" | "blue" | "purple" | "pink" | "red";
14
+ /**
15
+ * A select option with an optional color
16
+ */
17
+ export interface SelectOption {
18
+ name: string;
19
+ color?: SelectColor;
20
+ }
21
+ /**
22
+ * Status group types in Notion
23
+ */
24
+ export type StatusGroupType = "To-do" | "In progress" | "Complete";
25
+ /**
26
+ * Status group configuration
27
+ */
28
+ export interface StatusGroup {
29
+ name: StatusGroupType;
30
+ options: SelectOption[];
31
+ }
32
+ /**
33
+ * Date object representing a single date without time
34
+ */
35
+ export interface NotionDate {
36
+ type: "date";
37
+ start_date: string;
38
+ }
39
+ /**
40
+ * Date object representing a date with time
41
+ */
42
+ export interface NotionDateTime {
43
+ type: "datetime";
44
+ start_date: string;
45
+ start_time: string;
46
+ time_zone?: string;
47
+ }
48
+ /**
49
+ * Date object representing a date range
50
+ */
51
+ export interface DateRange {
52
+ type: "daterange";
53
+ start_date: string;
54
+ end_date: string;
55
+ }
56
+ /**
57
+ * Date object representing a date-time range
58
+ */
59
+ export interface DateTimeRange {
60
+ type: "datetimerange";
61
+ start_date: string;
62
+ start_time: string;
63
+ end_date: string;
64
+ end_time: string;
65
+ time_zone?: string;
66
+ }
67
+ /**
68
+ * All possible date value types
69
+ */
70
+ export type DateValue = NotionDate | NotionDateTime | DateRange | DateTimeRange;
71
+ /**
72
+ * Number format types
73
+ */
74
+ export type NumberFormat = "number" | "number_with_commas" | "percent" | "dollar" | "euro" | "pound" | "yen" | "rupee" | "won" | "yuan";
75
+ /**
76
+ * Date format types
77
+ */
78
+ export type DateFormat = "relative" | "MM/DD/YYYY" | "DD/MM/YYYY" | "YYYY/MM/DD" | "ll" | "MMM d";
10
79
  export {};
11
80
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,KAAK,SAAS,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,KAAK,SAAS,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,WAAW,GACpB,SAAS,GACT,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,MAAM,GACN,QAAQ,GACR,MAAM,GACN,KAAK,CAAC;AAET;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,aAAa,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,YAAY,GACrB,QAAQ,GACR,oBAAoB,GACpB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,KAAK,GACL,MAAM,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,UAAU,GACnB,UAAU,GACV,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,IAAI,GACJ,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@project-ajax/sdk",
3
- "version": "0.0.32",
3
+ "version": "0.0.34",
4
4
  "description": "An SDK for building workers for the Project Ajax platform",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
package/src/builder.ts CHANGED
@@ -1,26 +1,215 @@
1
- import type { TextValue } from "./types.js";
1
+ import type { DateValue, TextValue } from "./types.js";
2
2
 
3
+ /**
4
+ * Creates a rich text value.
5
+ */
3
6
  export function richText(content: string): TextValue {
4
7
  return [[content]];
5
8
  }
6
9
 
10
+ /**
11
+ * Creates a URL value.
12
+ */
7
13
  export function url(url: string): TextValue {
8
14
  return [[url]];
9
15
  }
10
16
 
17
+ /**
18
+ * Creates a title value.
19
+ */
11
20
  export function title(content: string): TextValue {
12
21
  return [[content]];
13
22
  }
14
23
 
24
+ /**
25
+ * Creates a text value.
26
+ */
15
27
  export function text(content: string): TextValue {
16
28
  return [[content]];
17
29
  }
18
30
 
19
31
  /**
20
- * Creates a link with custom display text
32
+ * Creates an email value.
33
+ */
34
+ export function email(email: string): TextValue {
35
+ return [[email]];
36
+ }
37
+
38
+ /**
39
+ * Creates a phone number value.
40
+ */
41
+ export function phoneNumber(phone: string): TextValue {
42
+ return [[phone]];
43
+ }
44
+
45
+ /**
46
+ * Creates a checkbox value.
47
+ */
48
+ export function checkbox(checked: boolean): TextValue {
49
+ return checked ? [["Yes"]] : [["No"]];
50
+ }
51
+
52
+ /**
53
+ * Creates a file URL value.
54
+ * @param fileUrl - The URL of the file
55
+ * @param fileName - Optional display name for the file (defaults to URL)
56
+ */
57
+ export function file(fileUrl: string, fileName?: string): TextValue {
58
+ return [[fileName ?? fileUrl, [["a", fileUrl]]]];
59
+ }
60
+
61
+ /**
62
+ * Creates a number value.
63
+ */
64
+ export function number(value: number): TextValue {
65
+ if (Number.isNaN(value)) {
66
+ return [];
67
+ }
68
+ return [[value.toString()]];
69
+ }
70
+
71
+ /**
72
+ * Creates a date value from a date string (YYYY-MM-DD).
73
+ */
74
+ export function date(dateString: string): TextValue {
75
+ validateDateString(dateString);
76
+
77
+ const dateValue: DateValue = {
78
+ type: "date",
79
+ start_date: dateString,
80
+ };
81
+
82
+ return createDateToken(dateValue);
83
+ }
84
+
85
+ /**
86
+ * Creates a datetime value from a Date object.
87
+ */
88
+ export function dateTime(date: Date, timeZone?: string): TextValue {
89
+ const dateValue: DateValue = {
90
+ type: "datetime",
91
+ start_date: formatDate(date),
92
+ start_time: formatTime(date),
93
+ };
94
+
95
+ if (timeZone) {
96
+ dateValue.time_zone = timeZone;
97
+ }
98
+
99
+ return createDateToken(dateValue);
100
+ }
101
+
102
+ /**
103
+ * Creates a date range value from date strings.
104
+ */
105
+ export function dateRange(startDate: string, endDate: string): TextValue {
106
+ validateDateString(startDate);
107
+ validateDateString(endDate);
108
+
109
+ const dateValue: DateValue = {
110
+ type: "daterange",
111
+ start_date: startDate,
112
+ end_date: endDate,
113
+ };
114
+
115
+ return createDateToken(dateValue);
116
+ }
117
+
118
+ /**
119
+ * Creates a datetime range value from Date objects.
120
+ */
121
+ export function dateTimeRange(
122
+ startDate: Date,
123
+ endDate: Date,
124
+ timeZone?: string,
125
+ ): TextValue {
126
+ const dateValue: DateValue = {
127
+ type: "datetimerange",
128
+ start_date: formatDate(startDate),
129
+ start_time: formatTime(startDate),
130
+ end_date: formatDate(endDate),
131
+ end_time: formatTime(endDate),
132
+ };
133
+
134
+ if (timeZone) {
135
+ dateValue.time_zone = timeZone;
136
+ }
137
+
138
+ return createDateToken(dateValue);
139
+ }
140
+
141
+ /**
142
+ * Creates a link with custom display text.
21
143
  * @param displayText - The text to display
22
144
  * @param url - The URL to link to
23
145
  */
24
146
  export function link(displayText: string, url: string): TextValue {
25
147
  return [[displayText, [["a", url]]]];
26
148
  }
149
+
150
+ /**
151
+ * Creates a select value from a single option.
152
+ */
153
+ export function select(value: string): TextValue {
154
+ return [[value]];
155
+ }
156
+
157
+ /**
158
+ * Creates a multi-select value from multiple options.
159
+ * @param values - Array of option names to select
160
+ */
161
+ export function multiSelect(...values: string[]): TextValue {
162
+ if (values.length === 0) {
163
+ return [];
164
+ }
165
+ return [[values.join(",")]];
166
+ }
167
+
168
+ /**
169
+ * Creates a status value from a status option name.
170
+ */
171
+ export function status(value: string): TextValue {
172
+ return [[value]];
173
+ }
174
+
175
+ /**
176
+ * Validates a date string is in YYYY-MM-DD format and represents a valid date.
177
+ */
178
+ function validateDateString(dateString: string): void {
179
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(dateString)) {
180
+ throw new Error(
181
+ `Invalid date format: ${dateString}. Expected YYYY-MM-DD format.`,
182
+ );
183
+ }
184
+
185
+ const date = new Date(dateString);
186
+ if (Number.isNaN(date.getTime())) {
187
+ throw new Error(`Invalid date: ${dateString}`);
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Internal helper to create a date mention token from a DateValue object.
193
+ */
194
+ function createDateToken(dateValue: DateValue): TextValue {
195
+ return [["\u2023", [["d", dateValue]]]];
196
+ }
197
+
198
+ /**
199
+ * Formats a Date object to YYYY-MM-DD string.
200
+ */
201
+ function formatDate(date: Date): string {
202
+ const year = date.getFullYear();
203
+ const month = String(date.getMonth() + 1).padStart(2, "0");
204
+ const day = String(date.getDate()).padStart(2, "0");
205
+ return `${year}-${month}-${day}`;
206
+ }
207
+
208
+ /**
209
+ * Formats a Date object to HH:mm string.
210
+ */
211
+ function formatTime(date: Date): string {
212
+ const hours = String(date.getHours()).padStart(2, "0");
213
+ const minutes = String(date.getMinutes()).padStart(2, "0");
214
+ return `${hours}:${minutes}`;
215
+ }
@@ -26,6 +26,13 @@ export class InvalidToolInputError extends Error {
26
26
  super(message);
27
27
  this.name = "InvalidToolInputError";
28
28
  }
29
+
30
+ toJSON() {
31
+ return {
32
+ name: this.name,
33
+ message: this.message,
34
+ };
35
+ }
29
36
  }
30
37
 
31
38
  /**
@@ -36,6 +43,13 @@ export class InvalidToolOutputError extends Error {
36
43
  super(message);
37
44
  this.name = "InvalidToolOutputError";
38
45
  }
46
+
47
+ toJSON() {
48
+ return {
49
+ name: this.name,
50
+ message: this.message,
51
+ };
52
+ }
39
53
  }
40
54
 
41
55
  /**
@@ -46,6 +60,13 @@ export class ToolExecutionError extends Error {
46
60
  super(message);
47
61
  this.name = "ToolExecutionError";
48
62
  }
63
+
64
+ toJSON() {
65
+ return {
66
+ name: this.name,
67
+ message: this.message,
68
+ };
69
+ }
49
70
  }
50
71
 
51
72
  /**
@@ -109,23 +130,33 @@ export function tool<I extends JSONValue, O extends JSONValue = JSONValue>(
109
130
  );
110
131
  }
111
132
 
112
- return {
133
+ const result = {
113
134
  _tag: "error" as const,
114
135
  error: new InvalidToolInputError(
115
136
  JSON.stringify(validateInput.errors, null, 2),
116
137
  ),
117
138
  };
139
+
140
+ process.stdout.write(`\n<output>${JSON.stringify(result)}</output>\n`);
141
+
142
+ return result;
118
143
  }
119
144
 
120
145
  try {
121
146
  const result = await config.execute(input);
122
147
  if (validateOutput && !validateOutput(result)) {
123
- return {
148
+ const result = {
124
149
  _tag: "error" as const,
125
150
  error: new InvalidToolOutputError(
126
151
  JSON.stringify(validateOutput.errors, null, 2),
127
152
  ),
128
153
  };
154
+
155
+ process.stdout.write(
156
+ `\n<output>${JSON.stringify(result)}</output>\n`,
157
+ );
158
+
159
+ return result;
129
160
  }
130
161
 
131
162
  process.stdout.write(`\n<output>${JSON.stringify(result)}</output>\n`);
@@ -135,12 +166,16 @@ export function tool<I extends JSONValue, O extends JSONValue = JSONValue>(
135
166
  value: result,
136
167
  };
137
168
  } catch (err) {
138
- return {
169
+ const result = {
139
170
  _tag: "error" as const,
140
171
  error: new ToolExecutionError(
141
172
  err instanceof Error ? err.message : String(err),
142
173
  ),
143
174
  };
175
+
176
+ process.stdout.write(`\n<output>${JSON.stringify(result)}</output>\n`);
177
+
178
+ return result;
144
179
  }
145
180
  },
146
181
  };
package/src/schema.ts CHANGED
@@ -1,7 +1,26 @@
1
+ import type {
2
+ DateFormat,
3
+ NumberFormat,
4
+ SelectOption,
5
+ StatusGroup,
6
+ } from "./types.js";
7
+
1
8
  /**
2
9
  * Supported property types for sync schemas.
3
10
  */
4
- export type PropertyType = "title" | "rich_text" | "url";
11
+ export type PropertyType =
12
+ | "title"
13
+ | "rich_text"
14
+ | "url"
15
+ | "email"
16
+ | "phone_number"
17
+ | "checkbox"
18
+ | "file"
19
+ | "number"
20
+ | "date"
21
+ | "select"
22
+ | "multi_select"
23
+ | "status";
5
24
 
6
25
  /**
7
26
  * Definition of a single property in a sync schema.
@@ -16,7 +35,31 @@ export type PropertyDefinition = {
16
35
  export type PropertyConfiguration =
17
36
  | { type: "title" }
18
37
  | { type: "text" }
19
- | { type: "url" };
38
+ | { type: "url" }
39
+ | { type: "email" }
40
+ | { type: "phone_number" }
41
+ | { type: "checkbox" }
42
+ | { type: "file" }
43
+ | {
44
+ type: "number";
45
+ format?: NumberFormat;
46
+ }
47
+ | {
48
+ type: "date";
49
+ date_format?: DateFormat;
50
+ }
51
+ | {
52
+ type: "select";
53
+ options: SelectOption[];
54
+ }
55
+ | {
56
+ type: "multi_select";
57
+ options: SelectOption[];
58
+ }
59
+ | {
60
+ type: "status";
61
+ groups: StatusGroup[];
62
+ };
20
63
 
21
64
  export type Schema<PK extends string> = {
22
65
  dataSourceTitle: string;
@@ -52,3 +95,68 @@ export function richText(): PropertyConfiguration {
52
95
  export function url(): PropertyConfiguration {
53
96
  return { type: "url" };
54
97
  }
98
+
99
+ /**
100
+ * Creates an email property definition.
101
+ */
102
+ export function email(): PropertyConfiguration {
103
+ return { type: "email" };
104
+ }
105
+
106
+ /**
107
+ * Creates a phone number property definition.
108
+ */
109
+ export function phoneNumber(): PropertyConfiguration {
110
+ return { type: "phone_number" };
111
+ }
112
+
113
+ /**
114
+ * Creates a checkbox property definition.
115
+ */
116
+ export function checkbox(): PropertyConfiguration {
117
+ return { type: "checkbox" };
118
+ }
119
+
120
+ /**
121
+ * Creates a file property definition.
122
+ */
123
+ export function file(): PropertyConfiguration {
124
+ return { type: "file" };
125
+ }
126
+
127
+ /**
128
+ * Creates a number property definition with optional formatting.
129
+ */
130
+ export function number(format?: NumberFormat): PropertyConfiguration {
131
+ return format ? { type: "number", format } : { type: "number" };
132
+ }
133
+
134
+ /**
135
+ * Creates a date property definition with optional formatting.
136
+ */
137
+ export function date(date_format?: DateFormat): PropertyConfiguration {
138
+ return date_format ? { type: "date", date_format } : { type: "date" };
139
+ }
140
+
141
+ /**
142
+ * Creates a select property definition with predefined options.
143
+ */
144
+ export function select(options: SelectOption[]): PropertyConfiguration {
145
+ return { type: "select", options };
146
+ }
147
+
148
+ /**
149
+ * Creates a multi-select property definition with predefined options.
150
+ */
151
+ export function multiSelect(options: SelectOption[]): PropertyConfiguration {
152
+ return { type: "multi_select", options };
153
+ }
154
+
155
+ /**
156
+ * Creates a status property definition with groups.
157
+ */
158
+ export function status(config: {
159
+ groups: StatusGroup[];
160
+ }): PropertyConfiguration {
161
+ return { type: "status", groups: config.groups };
162
+ }
package/src/types.ts CHANGED
@@ -8,3 +8,109 @@ type TextToken = [string, ...unknown[]];
8
8
  * A TextValue is an array of text tokens, representing rich text content.
9
9
  */
10
10
  export type TextValue = Array<TextToken>;
11
+
12
+ /**
13
+ * Select option color types supported by Notion
14
+ */
15
+ export type SelectColor =
16
+ | "default"
17
+ | "gray"
18
+ | "brown"
19
+ | "orange"
20
+ | "yellow"
21
+ | "green"
22
+ | "blue"
23
+ | "purple"
24
+ | "pink"
25
+ | "red";
26
+
27
+ /**
28
+ * A select option with an optional color
29
+ */
30
+ export interface SelectOption {
31
+ name: string;
32
+ color?: SelectColor;
33
+ }
34
+
35
+ /**
36
+ * Status group types in Notion
37
+ */
38
+ export type StatusGroupType = "To-do" | "In progress" | "Complete";
39
+
40
+ /**
41
+ * Status group configuration
42
+ */
43
+ export interface StatusGroup {
44
+ name: StatusGroupType;
45
+ options: SelectOption[];
46
+ }
47
+
48
+ /**
49
+ * Date object representing a single date without time
50
+ */
51
+ export interface NotionDate {
52
+ type: "date";
53
+ start_date: string; // Format: "YYYY-MM-DD"
54
+ }
55
+
56
+ /**
57
+ * Date object representing a date with time
58
+ */
59
+ export interface NotionDateTime {
60
+ type: "datetime";
61
+ start_date: string; // Format: "YYYY-MM-DD"
62
+ start_time: string; // Format: "HH:mm"
63
+ time_zone?: string; // e.g., "America/Los_Angeles"
64
+ }
65
+
66
+ /**
67
+ * Date object representing a date range
68
+ */
69
+ export interface DateRange {
70
+ type: "daterange";
71
+ start_date: string; // Format: "YYYY-MM-DD"
72
+ end_date: string; // Format: "YYYY-MM-DD"
73
+ }
74
+
75
+ /**
76
+ * Date object representing a date-time range
77
+ */
78
+ export interface DateTimeRange {
79
+ type: "datetimerange";
80
+ start_date: string; // Format: "YYYY-MM-DD"
81
+ start_time: string; // Format: "HH:mm"
82
+ end_date: string; // Format: "YYYY-MM-DD"
83
+ end_time: string; // Format: "HH:mm"
84
+ time_zone?: string;
85
+ }
86
+
87
+ /**
88
+ * All possible date value types
89
+ */
90
+ export type DateValue = NotionDate | NotionDateTime | DateRange | DateTimeRange;
91
+
92
+ /**
93
+ * Number format types
94
+ */
95
+ export type NumberFormat =
96
+ | "number"
97
+ | "number_with_commas"
98
+ | "percent"
99
+ | "dollar"
100
+ | "euro"
101
+ | "pound"
102
+ | "yen"
103
+ | "rupee"
104
+ | "won"
105
+ | "yuan";
106
+
107
+ /**
108
+ * Date format types
109
+ */
110
+ export type DateFormat =
111
+ | "relative"
112
+ | "MM/DD/YYYY"
113
+ | "DD/MM/YYYY"
114
+ | "YYYY/MM/DD"
115
+ | "ll"
116
+ | "MMM d";