@ofocus/sdk 0.1.0
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/README.md +80 -0
- package/api-report/ofocus-sdk.api.md +564 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/applescript.d.ts +30 -0
- package/dist/applescript.d.ts.map +1 -0
- package/dist/applescript.js +142 -0
- package/dist/applescript.js.map +1 -0
- package/dist/commands/batch.d.ts +23 -0
- package/dist/commands/batch.d.ts.map +1 -0
- package/dist/commands/batch.js +324 -0
- package/dist/commands/batch.js.map +1 -0
- package/dist/commands/complete.d.ts +14 -0
- package/dist/commands/complete.d.ts.map +1 -0
- package/dist/commands/complete.js +37 -0
- package/dist/commands/complete.js.map +1 -0
- package/dist/commands/create-project.d.ts +6 -0
- package/dist/commands/create-project.d.ts.map +1 -0
- package/dist/commands/create-project.js +124 -0
- package/dist/commands/create-project.js.map +1 -0
- package/dist/commands/drop.d.ts +26 -0
- package/dist/commands/drop.d.ts.map +1 -0
- package/dist/commands/drop.js +62 -0
- package/dist/commands/drop.js.map +1 -0
- package/dist/commands/folders.d.ts +10 -0
- package/dist/commands/folders.d.ts.map +1 -0
- package/dist/commands/folders.js +150 -0
- package/dist/commands/folders.js.map +1 -0
- package/dist/commands/inbox.d.ts +6 -0
- package/dist/commands/inbox.d.ts.map +1 -0
- package/dist/commands/inbox.js +124 -0
- package/dist/commands/inbox.js.map +1 -0
- package/dist/commands/perspectives.d.ts +20 -0
- package/dist/commands/perspectives.d.ts.map +1 -0
- package/dist/commands/perspectives.js +166 -0
- package/dist/commands/perspectives.js.map +1 -0
- package/dist/commands/projects.d.ts +6 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +113 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/repetition.d.ts +17 -0
- package/dist/commands/repetition.d.ts.map +1 -0
- package/dist/commands/repetition.js +59 -0
- package/dist/commands/repetition.js.map +1 -0
- package/dist/commands/review.d.ts +10 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +132 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/search.d.ts +6 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +150 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/subtasks.d.ts +14 -0
- package/dist/commands/subtasks.d.ts.map +1 -0
- package/dist/commands/subtasks.js +370 -0
- package/dist/commands/subtasks.js.map +1 -0
- package/dist/commands/tags-crud.d.ts +22 -0
- package/dist/commands/tags-crud.d.ts.map +1 -0
- package/dist/commands/tags-crud.js +187 -0
- package/dist/commands/tags-crud.js.map +1 -0
- package/dist/commands/tags.d.ts +6 -0
- package/dist/commands/tags.d.ts.map +1 -0
- package/dist/commands/tags.js +61 -0
- package/dist/commands/tags.js.map +1 -0
- package/dist/commands/tasks.d.ts +6 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +160 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +179 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/errors.d.ts +38 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +77 -0
- package/dist/errors.js.map +1 -0
- package/dist/escape.d.ts +6 -0
- package/dist/escape.d.ts.map +1 -0
- package/dist/escape.js +8 -0
- package/dist/escape.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/ofocus-sdk.d.ts +608 -0
- package/dist/result.d.ts +15 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +29 -0
- package/dist/result.js.map +1 -0
- package/dist/types.d.ts +228 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +57 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +172 -0
- package/dist/validation.js.map +1 -0
- package/docs/index.md +30 -0
- package/docs/sdk.addtoinbox.md +68 -0
- package/docs/sdk.applescriptresult.data.md +11 -0
- package/docs/sdk.applescriptresult.error.md +11 -0
- package/docs/sdk.applescriptresult.md +92 -0
- package/docs/sdk.applescriptresult.success.md +11 -0
- package/docs/sdk.clierror.code.md +11 -0
- package/docs/sdk.clierror.details.md +11 -0
- package/docs/sdk.clierror.md +92 -0
- package/docs/sdk.clierror.message.md +11 -0
- package/docs/sdk.clioutput.data.md +11 -0
- package/docs/sdk.clioutput.error.md +11 -0
- package/docs/sdk.clioutput.md +90 -0
- package/docs/sdk.clioutput.success.md +11 -0
- package/docs/sdk.commandinfo.description.md +11 -0
- package/docs/sdk.commandinfo.md +90 -0
- package/docs/sdk.commandinfo.name.md +11 -0
- package/docs/sdk.commandinfo.usage.md +11 -0
- package/docs/sdk.completeresult.completed.md +11 -0
- package/docs/sdk.completeresult.md +90 -0
- package/docs/sdk.completeresult.taskid.md +11 -0
- package/docs/sdk.completeresult.taskname.md +11 -0
- package/docs/sdk.completetask.md +52 -0
- package/docs/sdk.createerror.md +82 -0
- package/docs/sdk.errorcode.md +24 -0
- package/docs/sdk.escapeapplescript.md +52 -0
- package/docs/sdk.failure.md +52 -0
- package/docs/sdk.failuremessage.md +52 -0
- package/docs/sdk.inboxoptions.defer.md +11 -0
- package/docs/sdk.inboxoptions.due.md +11 -0
- package/docs/sdk.inboxoptions.flag.md +11 -0
- package/docs/sdk.inboxoptions.md +134 -0
- package/docs/sdk.inboxoptions.note.md +11 -0
- package/docs/sdk.inboxoptions.tags.md +11 -0
- package/docs/sdk.jsonhelpers.md +13 -0
- package/docs/sdk.md +471 -0
- package/docs/sdk.ofperspective.id.md +11 -0
- package/docs/sdk.ofperspective.md +73 -0
- package/docs/sdk.ofperspective.name.md +11 -0
- package/docs/sdk.ofproject.folderid.md +11 -0
- package/docs/sdk.ofproject.foldername.md +11 -0
- package/docs/sdk.ofproject.id.md +11 -0
- package/docs/sdk.ofproject.md +192 -0
- package/docs/sdk.ofproject.name.md +11 -0
- package/docs/sdk.ofproject.note.md +11 -0
- package/docs/sdk.ofproject.remainingtaskcount.md +11 -0
- package/docs/sdk.ofproject.sequential.md +11 -0
- package/docs/sdk.ofproject.status.md +11 -0
- package/docs/sdk.ofproject.taskcount.md +11 -0
- package/docs/sdk.oftag.availabletaskcount.md +11 -0
- package/docs/sdk.oftag.id.md +11 -0
- package/docs/sdk.oftag.md +124 -0
- package/docs/sdk.oftag.name.md +11 -0
- package/docs/sdk.oftag.parentid.md +11 -0
- package/docs/sdk.oftag.parentname.md +11 -0
- package/docs/sdk.oftask.completed.md +11 -0
- package/docs/sdk.oftask.completiondate.md +11 -0
- package/docs/sdk.oftask.deferdate.md +11 -0
- package/docs/sdk.oftask.duedate.md +11 -0
- package/docs/sdk.oftask.flagged.md +11 -0
- package/docs/sdk.oftask.id.md +11 -0
- package/docs/sdk.oftask.md +226 -0
- package/docs/sdk.oftask.name.md +11 -0
- package/docs/sdk.oftask.note.md +11 -0
- package/docs/sdk.oftask.projectid.md +11 -0
- package/docs/sdk.oftask.projectname.md +11 -0
- package/docs/sdk.oftask.tags.md +11 -0
- package/docs/sdk.omnifocusscript.md +52 -0
- package/docs/sdk.omnifocusscriptwithhelpers.md +52 -0
- package/docs/sdk.parseapplescripterror.md +52 -0
- package/docs/sdk.projectqueryoptions.folder.md +11 -0
- package/docs/sdk.projectqueryoptions.md +96 -0
- package/docs/sdk.projectqueryoptions.sequential.md +11 -0
- package/docs/sdk.projectqueryoptions.status.md +11 -0
- package/docs/sdk.queryprojects.md +54 -0
- package/docs/sdk.querytags.md +54 -0
- package/docs/sdk.querytasks.md +54 -0
- package/docs/sdk.runapplescript.md +52 -0
- package/docs/sdk.runapplescriptfile.md +68 -0
- package/docs/sdk.success.md +52 -0
- package/docs/sdk.tagqueryoptions.md +58 -0
- package/docs/sdk.tagqueryoptions.parent.md +11 -0
- package/docs/sdk.taskqueryoptions.available.md +11 -0
- package/docs/sdk.taskqueryoptions.completed.md +11 -0
- package/docs/sdk.taskqueryoptions.dueafter.md +11 -0
- package/docs/sdk.taskqueryoptions.duebefore.md +11 -0
- package/docs/sdk.taskqueryoptions.flagged.md +11 -0
- package/docs/sdk.taskqueryoptions.md +172 -0
- package/docs/sdk.taskqueryoptions.project.md +11 -0
- package/docs/sdk.taskqueryoptions.tag.md +11 -0
- package/docs/sdk.taskupdateoptions.defer.md +11 -0
- package/docs/sdk.taskupdateoptions.due.md +11 -0
- package/docs/sdk.taskupdateoptions.flag.md +11 -0
- package/docs/sdk.taskupdateoptions.md +172 -0
- package/docs/sdk.taskupdateoptions.note.md +11 -0
- package/docs/sdk.taskupdateoptions.project.md +11 -0
- package/docs/sdk.taskupdateoptions.tags.md +11 -0
- package/docs/sdk.taskupdateoptions.title.md +11 -0
- package/docs/sdk.updatetask.md +66 -0
- package/docs/sdk.validatedatestring.md +54 -0
- package/docs/sdk.validateid.md +66 -0
- package/docs/sdk.validateprojectname.md +52 -0
- package/docs/sdk.validatetags.md +52 -0
- package/package.json +51 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import type { CliError } from "./errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* Standard CLI output format for all commands.
|
|
4
|
+
*/
|
|
5
|
+
export interface CliOutput<T> {
|
|
6
|
+
success: boolean;
|
|
7
|
+
data: T | null;
|
|
8
|
+
error: CliError | null;
|
|
9
|
+
}
|
|
10
|
+
export type { CliError } from "./errors.js";
|
|
11
|
+
/**
|
|
12
|
+
* Metadata about a CLI command for semantic activation by AI agents.
|
|
13
|
+
*/
|
|
14
|
+
export interface CommandInfo {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
usage: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* OmniFocus task representation.
|
|
21
|
+
*/
|
|
22
|
+
export interface OFTask {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
note: string | null;
|
|
26
|
+
flagged: boolean;
|
|
27
|
+
completed: boolean;
|
|
28
|
+
dueDate: string | null;
|
|
29
|
+
deferDate: string | null;
|
|
30
|
+
completionDate: string | null;
|
|
31
|
+
projectId: string | null;
|
|
32
|
+
projectName: string | null;
|
|
33
|
+
tags: string[];
|
|
34
|
+
estimatedMinutes: number | null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* OmniFocus project representation.
|
|
38
|
+
*/
|
|
39
|
+
export interface OFProject {
|
|
40
|
+
id: string;
|
|
41
|
+
name: string;
|
|
42
|
+
note: string | null;
|
|
43
|
+
status: "active" | "on-hold" | "completed" | "dropped";
|
|
44
|
+
sequential: boolean;
|
|
45
|
+
folderId: string | null;
|
|
46
|
+
folderName: string | null;
|
|
47
|
+
taskCount: number;
|
|
48
|
+
remainingTaskCount: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* OmniFocus tag representation.
|
|
52
|
+
*/
|
|
53
|
+
export interface OFTag {
|
|
54
|
+
id: string;
|
|
55
|
+
name: string;
|
|
56
|
+
parentId: string | null;
|
|
57
|
+
parentName: string | null;
|
|
58
|
+
availableTaskCount: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* OmniFocus perspective representation.
|
|
62
|
+
*/
|
|
63
|
+
export interface OFPerspective {
|
|
64
|
+
id: string;
|
|
65
|
+
name: string;
|
|
66
|
+
custom: boolean;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Options for adding a task to the inbox.
|
|
70
|
+
*/
|
|
71
|
+
export interface InboxOptions {
|
|
72
|
+
note?: string | undefined;
|
|
73
|
+
due?: string | undefined;
|
|
74
|
+
defer?: string | undefined;
|
|
75
|
+
flag?: boolean | undefined;
|
|
76
|
+
tags?: string[] | undefined;
|
|
77
|
+
estimatedMinutes?: number | undefined;
|
|
78
|
+
repeat?: RepetitionRule | undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Options for querying tasks.
|
|
82
|
+
*/
|
|
83
|
+
export interface TaskQueryOptions {
|
|
84
|
+
project?: string | undefined;
|
|
85
|
+
tag?: string | undefined;
|
|
86
|
+
dueBefore?: string | undefined;
|
|
87
|
+
dueAfter?: string | undefined;
|
|
88
|
+
flagged?: boolean | undefined;
|
|
89
|
+
completed?: boolean | undefined;
|
|
90
|
+
available?: boolean | undefined;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Options for querying projects.
|
|
94
|
+
*/
|
|
95
|
+
export interface ProjectQueryOptions {
|
|
96
|
+
folder?: string | undefined;
|
|
97
|
+
status?: "active" | "on-hold" | "completed" | "dropped" | undefined;
|
|
98
|
+
sequential?: boolean | undefined;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Options for querying tags.
|
|
102
|
+
*/
|
|
103
|
+
export interface TagQueryOptions {
|
|
104
|
+
parent?: string | undefined;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Options for updating a task.
|
|
108
|
+
*/
|
|
109
|
+
export interface TaskUpdateOptions {
|
|
110
|
+
title?: string | undefined;
|
|
111
|
+
note?: string | undefined;
|
|
112
|
+
due?: string | undefined;
|
|
113
|
+
defer?: string | undefined;
|
|
114
|
+
flag?: boolean | undefined;
|
|
115
|
+
project?: string | undefined;
|
|
116
|
+
tags?: string[] | undefined;
|
|
117
|
+
estimatedMinutes?: number | undefined;
|
|
118
|
+
clearEstimate?: boolean | undefined;
|
|
119
|
+
repeat?: RepetitionRule | undefined;
|
|
120
|
+
clearRepeat?: boolean | undefined;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* OmniFocus folder representation.
|
|
124
|
+
*/
|
|
125
|
+
export interface OFFolder {
|
|
126
|
+
id: string;
|
|
127
|
+
name: string;
|
|
128
|
+
parentId: string | null;
|
|
129
|
+
parentName: string | null;
|
|
130
|
+
projectCount: number;
|
|
131
|
+
folderCount: number;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Options for creating a project.
|
|
135
|
+
*/
|
|
136
|
+
export interface CreateProjectOptions {
|
|
137
|
+
note?: string | undefined;
|
|
138
|
+
folderId?: string | undefined;
|
|
139
|
+
folderName?: string | undefined;
|
|
140
|
+
sequential?: boolean | undefined;
|
|
141
|
+
status?: "active" | "on-hold" | undefined;
|
|
142
|
+
dueDate?: string | undefined;
|
|
143
|
+
deferDate?: string | undefined;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Options for creating a folder.
|
|
147
|
+
*/
|
|
148
|
+
export interface CreateFolderOptions {
|
|
149
|
+
parentFolderId?: string | undefined;
|
|
150
|
+
parentFolderName?: string | undefined;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Options for querying folders.
|
|
154
|
+
*/
|
|
155
|
+
export interface FolderQueryOptions {
|
|
156
|
+
parent?: string | undefined;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Options for creating a tag.
|
|
160
|
+
*/
|
|
161
|
+
export interface CreateTagOptions {
|
|
162
|
+
parentTagId?: string | undefined;
|
|
163
|
+
parentTagName?: string | undefined;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Options for updating a tag.
|
|
167
|
+
*/
|
|
168
|
+
export interface UpdateTagOptions {
|
|
169
|
+
name?: string | undefined;
|
|
170
|
+
parentTagId?: string | undefined;
|
|
171
|
+
parentTagName?: string | undefined;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* OmniFocus task with hierarchy information.
|
|
175
|
+
*/
|
|
176
|
+
export interface OFTaskWithChildren extends OFTask {
|
|
177
|
+
parentTaskId: string | null;
|
|
178
|
+
parentTaskName: string | null;
|
|
179
|
+
childTaskCount: number;
|
|
180
|
+
isActionGroup: boolean;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Options for querying subtasks.
|
|
184
|
+
*/
|
|
185
|
+
export interface SubtaskQueryOptions {
|
|
186
|
+
completed?: boolean | undefined;
|
|
187
|
+
flagged?: boolean | undefined;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Result from a batch operation.
|
|
191
|
+
*/
|
|
192
|
+
export interface BatchResult<T> {
|
|
193
|
+
succeeded: T[];
|
|
194
|
+
failed: {
|
|
195
|
+
id: string;
|
|
196
|
+
error: string;
|
|
197
|
+
}[];
|
|
198
|
+
totalSucceeded: number;
|
|
199
|
+
totalFailed: number;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Repetition rule for recurring tasks.
|
|
203
|
+
*/
|
|
204
|
+
export interface RepetitionRule {
|
|
205
|
+
frequency: "daily" | "weekly" | "monthly" | "yearly";
|
|
206
|
+
interval: number;
|
|
207
|
+
repeatMethod: "due-again" | "defer-another";
|
|
208
|
+
daysOfWeek?: number[] | undefined;
|
|
209
|
+
dayOfMonth?: number | undefined;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Options for searching tasks.
|
|
213
|
+
*/
|
|
214
|
+
export interface SearchOptions {
|
|
215
|
+
scope?: "name" | "note" | "both" | undefined;
|
|
216
|
+
limit?: number | undefined;
|
|
217
|
+
includeCompleted?: boolean | undefined;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Result from a review operation.
|
|
221
|
+
*/
|
|
222
|
+
export interface ReviewResult {
|
|
223
|
+
projectId: string;
|
|
224
|
+
projectName: string;
|
|
225
|
+
lastReviewed: string;
|
|
226
|
+
nextReviewDate: string | null;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type CliError } from "./errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* Validate an OmniFocus ID string.
|
|
4
|
+
* IDs are alphanumeric with possible dashes/underscores.
|
|
5
|
+
* Returns null if valid, or a CliError if invalid.
|
|
6
|
+
*/
|
|
7
|
+
export declare function validateId(id: string, type: "task" | "project" | "tag"): CliError | null;
|
|
8
|
+
/**
|
|
9
|
+
* Validate a date string for use with AppleScript.
|
|
10
|
+
* Returns null if valid (or empty), or a CliError if invalid.
|
|
11
|
+
*
|
|
12
|
+
* Note: We do basic validation here; the actual date parsing
|
|
13
|
+
* is done by AppleScript and more detailed errors come from there.
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateDateString(dateStr: string): CliError | null;
|
|
16
|
+
/**
|
|
17
|
+
* Validate a list of tag names.
|
|
18
|
+
* Returns null if valid, or a CliError if any tag is invalid.
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateTags(tags: string[] | undefined): CliError | null;
|
|
21
|
+
/**
|
|
22
|
+
* Validate a project name.
|
|
23
|
+
* Returns null if valid (or empty), or a CliError if invalid.
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateProjectName(name: string | undefined): CliError | null;
|
|
26
|
+
/**
|
|
27
|
+
* Validate a folder name.
|
|
28
|
+
* Returns null if valid (or empty), or a CliError if invalid.
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateFolderName(name: string | undefined): CliError | null;
|
|
31
|
+
/**
|
|
32
|
+
* Validate a tag name for creation/update.
|
|
33
|
+
* Returns null if valid, or a CliError if invalid.
|
|
34
|
+
*/
|
|
35
|
+
export declare function validateTagName(name: string): CliError | null;
|
|
36
|
+
/**
|
|
37
|
+
* Validate a repetition rule.
|
|
38
|
+
* Returns null if valid (or undefined), or a CliError if invalid.
|
|
39
|
+
*/
|
|
40
|
+
export declare function validateRepetitionRule(rule: {
|
|
41
|
+
frequency: string;
|
|
42
|
+
interval: number;
|
|
43
|
+
repeatMethod: string;
|
|
44
|
+
daysOfWeek?: number[] | undefined;
|
|
45
|
+
dayOfMonth?: number | undefined;
|
|
46
|
+
} | undefined): CliError | null;
|
|
47
|
+
/**
|
|
48
|
+
* Validate an estimated minutes value.
|
|
49
|
+
* Returns null if valid (or undefined), or a CliError if invalid.
|
|
50
|
+
*/
|
|
51
|
+
export declare function validateEstimatedMinutes(minutes: number | undefined): CliError | null;
|
|
52
|
+
/**
|
|
53
|
+
* Validate a search query.
|
|
54
|
+
* Returns null if valid, or a CliError if invalid.
|
|
55
|
+
*/
|
|
56
|
+
export declare function validateSearchQuery(query: string): CliError | null;
|
|
57
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAA0B,MAAM,aAAa,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAC/B,QAAQ,GAAG,IAAI,CAoBjB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CA4BnE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAwBxE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAe7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAe5E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAkB7D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,GAClJ,QAAQ,GAAG,IAAI,CA4DjB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,QAAQ,GAAG,IAAI,CAcjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAkBlE"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { ErrorCode, createError } from "./errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* Validate an OmniFocus ID string.
|
|
4
|
+
* IDs are alphanumeric with possible dashes/underscores.
|
|
5
|
+
* Returns null if valid, or a CliError if invalid.
|
|
6
|
+
*/
|
|
7
|
+
export function validateId(id, type) {
|
|
8
|
+
if (!id || id.trim() === "") {
|
|
9
|
+
return createError(ErrorCode.INVALID_ID_FORMAT, `${capitalize(type)} ID cannot be empty`);
|
|
10
|
+
}
|
|
11
|
+
// OmniFocus IDs are typically alphanumeric with possible dashes/underscores
|
|
12
|
+
// They should not contain special characters that could be used for injection
|
|
13
|
+
const idPattern = /^[a-zA-Z0-9_-]+$/;
|
|
14
|
+
if (!idPattern.test(id)) {
|
|
15
|
+
return createError(ErrorCode.INVALID_ID_FORMAT, `Invalid ${type} ID format: ${id}`, "IDs must contain only alphanumeric characters, dashes, and underscores");
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Validate a date string for use with AppleScript.
|
|
21
|
+
* Returns null if valid (or empty), or a CliError if invalid.
|
|
22
|
+
*
|
|
23
|
+
* Note: We do basic validation here; the actual date parsing
|
|
24
|
+
* is done by AppleScript and more detailed errors come from there.
|
|
25
|
+
*/
|
|
26
|
+
export function validateDateString(dateStr) {
|
|
27
|
+
// Empty dates are valid (used to clear a date)
|
|
28
|
+
if (!dateStr || dateStr.trim() === "") {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
// Check for obvious injection attempts
|
|
32
|
+
// AppleScript date strings should not contain quotes or backslashes
|
|
33
|
+
if (dateStr.includes('"') || dateStr.includes("\\")) {
|
|
34
|
+
return createError(ErrorCode.INVALID_DATE_FORMAT, "Invalid characters in date string", "Date strings cannot contain quotes or backslashes");
|
|
35
|
+
}
|
|
36
|
+
// Basic format check - should look like a date
|
|
37
|
+
// AppleScript accepts various formats like "January 1, 2024" or "1/1/2024 5:00 PM"
|
|
38
|
+
// We allow letters, numbers, spaces, slashes, colons, commas, and dashes
|
|
39
|
+
const datePattern = /^[a-zA-Z0-9\s/:,.-]+$/;
|
|
40
|
+
if (!datePattern.test(dateStr)) {
|
|
41
|
+
return createError(ErrorCode.INVALID_DATE_FORMAT, `Invalid date format: ${dateStr}`);
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate a list of tag names.
|
|
47
|
+
* Returns null if valid, or a CliError if any tag is invalid.
|
|
48
|
+
*/
|
|
49
|
+
export function validateTags(tags) {
|
|
50
|
+
if (!tags || tags.length === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
for (const tag of tags) {
|
|
54
|
+
if (!tag || tag.trim() === "") {
|
|
55
|
+
return createError(ErrorCode.VALIDATION_ERROR, "Tag name cannot be empty");
|
|
56
|
+
}
|
|
57
|
+
// Tag names should not contain characters that could cause injection
|
|
58
|
+
if (tag.includes('"') || tag.includes("\\")) {
|
|
59
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid characters in tag name: ${tag}`, "Tag names cannot contain quotes or backslashes");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate a project name.
|
|
66
|
+
* Returns null if valid (or empty), or a CliError if invalid.
|
|
67
|
+
*/
|
|
68
|
+
export function validateProjectName(name) {
|
|
69
|
+
if (!name || name.trim() === "") {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
// Project names should not contain characters that could cause injection
|
|
73
|
+
if (name.includes('"') || name.includes("\\")) {
|
|
74
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid characters in project name: ${name}`, "Project names cannot contain quotes or backslashes");
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Validate a folder name.
|
|
80
|
+
* Returns null if valid (or empty), or a CliError if invalid.
|
|
81
|
+
*/
|
|
82
|
+
export function validateFolderName(name) {
|
|
83
|
+
if (!name || name.trim() === "") {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
// Folder names should not contain characters that could cause injection
|
|
87
|
+
if (name.includes('"') || name.includes("\\")) {
|
|
88
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid characters in folder name: ${name}`, "Folder names cannot contain quotes or backslashes");
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Validate a tag name for creation/update.
|
|
94
|
+
* Returns null if valid, or a CliError if invalid.
|
|
95
|
+
*/
|
|
96
|
+
export function validateTagName(name) {
|
|
97
|
+
if (!name || name.trim() === "") {
|
|
98
|
+
return createError(ErrorCode.VALIDATION_ERROR, "Tag name cannot be empty");
|
|
99
|
+
}
|
|
100
|
+
// Tag names should not contain characters that could cause injection
|
|
101
|
+
if (name.includes('"') || name.includes("\\")) {
|
|
102
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid characters in tag name: ${name}`, "Tag names cannot contain quotes or backslashes");
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validate a repetition rule.
|
|
108
|
+
* Returns null if valid (or undefined), or a CliError if invalid.
|
|
109
|
+
*/
|
|
110
|
+
export function validateRepetitionRule(rule) {
|
|
111
|
+
if (!rule) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
const validFrequencies = ["daily", "weekly", "monthly", "yearly"];
|
|
115
|
+
if (!validFrequencies.includes(rule.frequency)) {
|
|
116
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid repetition frequency: ${rule.frequency}`, "Valid frequencies are: daily, weekly, monthly, yearly");
|
|
117
|
+
}
|
|
118
|
+
if (rule.interval < 1 || !Number.isInteger(rule.interval)) {
|
|
119
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid repetition interval: ${String(rule.interval)}`, "Interval must be a positive integer");
|
|
120
|
+
}
|
|
121
|
+
const validMethods = ["due-again", "defer-another"];
|
|
122
|
+
if (!validMethods.includes(rule.repeatMethod)) {
|
|
123
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid repeat method: ${rule.repeatMethod}`, "Valid methods are: due-again, defer-another");
|
|
124
|
+
}
|
|
125
|
+
if (rule.daysOfWeek !== undefined) {
|
|
126
|
+
if (!Array.isArray(rule.daysOfWeek) || rule.daysOfWeek.length === 0) {
|
|
127
|
+
return createError(ErrorCode.VALIDATION_ERROR, "daysOfWeek must be a non-empty array");
|
|
128
|
+
}
|
|
129
|
+
for (const day of rule.daysOfWeek) {
|
|
130
|
+
if (day < 0 || day > 6 || !Number.isInteger(day)) {
|
|
131
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid day of week: ${String(day)}`, "Days of week must be integers 0-6 (Sunday=0, Saturday=6)");
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (rule.dayOfMonth !== undefined) {
|
|
136
|
+
if (rule.dayOfMonth < 1 || rule.dayOfMonth > 31 || !Number.isInteger(rule.dayOfMonth)) {
|
|
137
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid day of month: ${String(rule.dayOfMonth)}`, "Day of month must be an integer 1-31");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Validate an estimated minutes value.
|
|
144
|
+
* Returns null if valid (or undefined), or a CliError if invalid.
|
|
145
|
+
*/
|
|
146
|
+
export function validateEstimatedMinutes(minutes) {
|
|
147
|
+
if (minutes === undefined) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
if (!Number.isInteger(minutes) || minutes < 0) {
|
|
151
|
+
return createError(ErrorCode.VALIDATION_ERROR, `Invalid estimated minutes: ${String(minutes)}`, "Estimated minutes must be a non-negative integer");
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Validate a search query.
|
|
157
|
+
* Returns null if valid, or a CliError if invalid.
|
|
158
|
+
*/
|
|
159
|
+
export function validateSearchQuery(query) {
|
|
160
|
+
if (!query || query.trim() === "") {
|
|
161
|
+
return createError(ErrorCode.VALIDATION_ERROR, "Search query cannot be empty");
|
|
162
|
+
}
|
|
163
|
+
// Search queries should not contain characters that could cause injection
|
|
164
|
+
if (query.includes('"') || query.includes("\\")) {
|
|
165
|
+
return createError(ErrorCode.VALIDATION_ERROR, "Invalid characters in search query", "Search queries cannot contain quotes or backslashes");
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
function capitalize(str) {
|
|
170
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
package/docs/index.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md)
|
|
4
|
+
|
|
5
|
+
## API Reference
|
|
6
|
+
|
|
7
|
+
## Packages
|
|
8
|
+
|
|
9
|
+
<table><thead><tr><th>
|
|
10
|
+
|
|
11
|
+
Package
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
</th><th>
|
|
15
|
+
|
|
16
|
+
Description
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
</th></tr></thead>
|
|
20
|
+
<tbody><tr><td>
|
|
21
|
+
|
|
22
|
+
[@ofocus/sdk](./sdk.md)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
</td><td>
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
</td></tr>
|
|
29
|
+
</tbody></table>
|
|
30
|
+
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@ofocus/sdk](./sdk.md) > [addToInbox](./sdk.addtoinbox.md)
|
|
4
|
+
|
|
5
|
+
## addToInbox() function
|
|
6
|
+
|
|
7
|
+
Add a task to the OmniFocus inbox.
|
|
8
|
+
|
|
9
|
+
**Signature:**
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
export declare function addToInbox(title: string, options?: InboxOptions): Promise<CliOutput<OFTask>>;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Parameters
|
|
16
|
+
|
|
17
|
+
<table><thead><tr><th>
|
|
18
|
+
|
|
19
|
+
Parameter
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
</th><th>
|
|
23
|
+
|
|
24
|
+
Type
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
</th><th>
|
|
28
|
+
|
|
29
|
+
Description
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
</th></tr></thead>
|
|
33
|
+
<tbody><tr><td>
|
|
34
|
+
|
|
35
|
+
title
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
</td><td>
|
|
39
|
+
|
|
40
|
+
string
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
</td><td>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
</td></tr>
|
|
47
|
+
<tr><td>
|
|
48
|
+
|
|
49
|
+
options
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
</td><td>
|
|
53
|
+
|
|
54
|
+
[InboxOptions](./sdk.inboxoptions.md)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
</td><td>
|
|
58
|
+
|
|
59
|
+
_(Optional)_
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
</td></tr>
|
|
63
|
+
</tbody></table>
|
|
64
|
+
|
|
65
|
+
**Returns:**
|
|
66
|
+
|
|
67
|
+
Promise<[CliOutput](./sdk.clioutput.md)<!-- --><[OFTask](./sdk.oftask.md)<!-- -->>>
|
|
68
|
+
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@ofocus/sdk](./sdk.md) > [AppleScriptResult](./sdk.applescriptresult.md) > [data](./sdk.applescriptresult.data.md)
|
|
4
|
+
|
|
5
|
+
## AppleScriptResult.data property
|
|
6
|
+
|
|
7
|
+
**Signature:**
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
data?: T;
|
|
11
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@ofocus/sdk](./sdk.md) > [AppleScriptResult](./sdk.applescriptresult.md) > [error](./sdk.applescriptresult.error.md)
|
|
4
|
+
|
|
5
|
+
## AppleScriptResult.error property
|
|
6
|
+
|
|
7
|
+
**Signature:**
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
error?: CliError;
|
|
11
|
+
```
|