patchwork-os 0.2.0-alpha.33 → 0.2.0-alpha.35
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 +248 -48
- package/deploy/bootstrap-new-vps.sh +12 -12
- package/deploy/bootstrap-vps.sh +6 -3
- package/deploy/deploy-landing.sh +59 -2
- package/dist/bridge.js +35 -1
- package/dist/bridge.js.map +1 -1
- package/dist/commands/recipe.d.ts +11 -0
- package/dist/commands/recipe.js +32 -3
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipeInstall.d.ts +79 -1
- package/dist/commands/recipeInstall.js +241 -13
- package/dist/commands/recipeInstall.js.map +1 -1
- package/dist/connectors/asana.d.ts +198 -0
- package/dist/connectors/asana.js +680 -0
- package/dist/connectors/asana.js.map +1 -0
- package/dist/connectors/baseConnector.d.ts +16 -0
- package/dist/connectors/baseConnector.js +107 -25
- package/dist/connectors/baseConnector.js.map +1 -1
- package/dist/connectors/discord.d.ts +150 -0
- package/dist/connectors/discord.js +544 -0
- package/dist/connectors/discord.js.map +1 -0
- package/dist/connectors/github.js +15 -7
- package/dist/connectors/github.js.map +1 -1
- package/dist/connectors/gitlab.d.ts +180 -0
- package/dist/connectors/gitlab.js +582 -0
- package/dist/connectors/gitlab.js.map +1 -0
- package/dist/connectors/gmail.js +45 -0
- package/dist/connectors/gmail.js.map +1 -1
- package/dist/connectors/googleDrive.d.ts +34 -0
- package/dist/connectors/googleDrive.js +305 -0
- package/dist/connectors/googleDrive.js.map +1 -0
- package/dist/connectors/htmlEscape.d.ts +5 -0
- package/dist/connectors/htmlEscape.js +13 -0
- package/dist/connectors/htmlEscape.js.map +1 -0
- package/dist/connectors/linear.js +26 -6
- package/dist/connectors/linear.js.map +1 -1
- package/dist/connectors/mcpOAuth.d.ts +2 -0
- package/dist/connectors/mcpOAuth.js +8 -4
- package/dist/connectors/mcpOAuth.js.map +1 -1
- package/dist/connectors/pagerduty.d.ts +160 -0
- package/dist/connectors/pagerduty.js +464 -0
- package/dist/connectors/pagerduty.js.map +1 -0
- package/dist/connectors/sentry.js +3 -2
- package/dist/connectors/sentry.js.map +1 -1
- package/dist/connectors/slack.d.ts +1 -1
- package/dist/connectors/slack.js +7 -4
- package/dist/connectors/slack.js.map +1 -1
- package/dist/featureFlags.d.ts +17 -11
- package/dist/featureFlags.js +52 -47
- package/dist/featureFlags.js.map +1 -1
- package/dist/index.js +262 -129
- package/dist/index.js.map +1 -1
- package/dist/oauth.js +3 -2
- package/dist/oauth.js.map +1 -1
- package/dist/recipeOrchestration.d.ts +7 -0
- package/dist/recipeOrchestration.js +154 -28
- package/dist/recipeOrchestration.js.map +1 -1
- package/dist/recipes/agentExecutor.d.ts +1 -0
- package/dist/recipes/agentExecutor.js +7 -0
- package/dist/recipes/agentExecutor.js.map +1 -1
- package/dist/recipes/captureForRunlog.d.ts +27 -0
- package/dist/recipes/captureForRunlog.js +128 -0
- package/dist/recipes/captureForRunlog.js.map +1 -0
- package/dist/recipes/chainedRunner.d.ts +39 -3
- package/dist/recipes/chainedRunner.js +183 -28
- package/dist/recipes/chainedRunner.js.map +1 -1
- package/dist/recipes/detectSilentFail.d.ts +34 -0
- package/dist/recipes/detectSilentFail.js +105 -0
- package/dist/recipes/detectSilentFail.js.map +1 -0
- package/dist/recipes/legacyRecipeCompat.d.ts +8 -0
- package/dist/recipes/legacyRecipeCompat.js +20 -1
- package/dist/recipes/legacyRecipeCompat.js.map +1 -1
- package/dist/recipes/manifest.js +21 -6
- package/dist/recipes/manifest.js.map +1 -1
- package/dist/recipes/migrations/index.d.ts +24 -0
- package/dist/recipes/migrations/index.js +55 -0
- package/dist/recipes/migrations/index.js.map +1 -0
- package/dist/recipes/migrations/types.d.ts +28 -0
- package/dist/recipes/migrations/types.js +2 -0
- package/dist/recipes/migrations/types.js.map +1 -0
- package/dist/recipes/migrations/v1.d.ts +11 -0
- package/dist/recipes/migrations/v1.js +18 -0
- package/dist/recipes/migrations/v1.js.map +1 -0
- package/dist/recipes/replayRun.d.ts +62 -0
- package/dist/recipes/replayRun.js +97 -0
- package/dist/recipes/replayRun.js.map +1 -0
- package/dist/recipes/scheduler.js +102 -11
- package/dist/recipes/scheduler.js.map +1 -1
- package/dist/recipes/schemaGenerator.js +3 -3
- package/dist/recipes/schemaGenerator.js.map +1 -1
- package/dist/recipes/templateEngine.js +8 -1
- package/dist/recipes/templateEngine.js.map +1 -1
- package/dist/recipes/toolRegistry.d.ts +5 -0
- package/dist/recipes/toolRegistry.js +9 -0
- package/dist/recipes/toolRegistry.js.map +1 -1
- package/dist/recipes/tools/asana.d.ts +16 -0
- package/dist/recipes/tools/asana.js +524 -0
- package/dist/recipes/tools/asana.js.map +1 -0
- package/dist/recipes/tools/discord.d.ts +18 -0
- package/dist/recipes/tools/discord.js +254 -0
- package/dist/recipes/tools/discord.js.map +1 -0
- package/dist/recipes/tools/github.js +29 -4
- package/dist/recipes/tools/github.js.map +1 -1
- package/dist/recipes/tools/gitlab.d.ts +11 -0
- package/dist/recipes/tools/gitlab.js +285 -0
- package/dist/recipes/tools/gitlab.js.map +1 -0
- package/dist/recipes/tools/gmail.d.ts +1 -1
- package/dist/recipes/tools/gmail.js +230 -6
- package/dist/recipes/tools/gmail.js.map +1 -1
- package/dist/recipes/tools/googleDrive.d.ts +1 -0
- package/dist/recipes/tools/googleDrive.js +55 -0
- package/dist/recipes/tools/googleDrive.js.map +1 -0
- package/dist/recipes/tools/index.d.ts +6 -0
- package/dist/recipes/tools/index.js +6 -0
- package/dist/recipes/tools/index.js.map +1 -1
- package/dist/recipes/tools/linear.d.ts +2 -1
- package/dist/recipes/tools/linear.js +222 -1
- package/dist/recipes/tools/linear.js.map +1 -1
- package/dist/recipes/tools/meetingNotes.d.ts +21 -0
- package/dist/recipes/tools/meetingNotes.js +701 -0
- package/dist/recipes/tools/meetingNotes.js.map +1 -0
- package/dist/recipes/tools/pagerduty.d.ts +15 -0
- package/dist/recipes/tools/pagerduty.js +451 -0
- package/dist/recipes/tools/pagerduty.js.map +1 -0
- package/dist/recipes/tools/slack.js +8 -2
- package/dist/recipes/tools/slack.js.map +1 -1
- package/dist/recipes/validation.js +54 -15
- package/dist/recipes/validation.js.map +1 -1
- package/dist/recipes/yamlRunner.d.ts +23 -2
- package/dist/recipes/yamlRunner.js +265 -60
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/recipesHttp.d.ts +60 -0
- package/dist/recipesHttp.js +418 -3
- package/dist/recipesHttp.js.map +1 -1
- package/dist/runLog.d.ts +64 -2
- package/dist/runLog.js +116 -2
- package/dist/runLog.js.map +1 -1
- package/dist/server.d.ts +21 -0
- package/dist/server.js +387 -8
- package/dist/server.js.map +1 -1
- package/dist/streamableHttp.d.ts +31 -1
- package/dist/streamableHttp.js +20 -2
- package/dist/streamableHttp.js.map +1 -1
- package/dist/tools/activityLog.d.ts +2 -0
- package/dist/tools/addLinearComment.d.ts +1 -0
- package/dist/tools/batchLsp.d.ts +3 -0
- package/dist/tools/bridgeDoctor.d.ts +1 -0
- package/dist/tools/bridgeStatus.d.ts +1 -0
- package/dist/tools/cancelClaudeTask.d.ts +1 -0
- package/dist/tools/checkDocumentDirty.d.ts +1 -0
- package/dist/tools/clipboard.d.ts +2 -0
- package/dist/tools/closeTabs.d.ts +2 -0
- package/dist/tools/codeLens.d.ts +1 -0
- package/dist/tools/contextBundle.d.ts +1 -0
- package/dist/tools/createIssueFromAIComment.d.ts +1 -0
- package/dist/tools/createLinearIssue.d.ts +1 -0
- package/dist/tools/ctxGetTaskContext.d.ts +1 -0
- package/dist/tools/ctxQueryTraces.d.ts +1 -0
- package/dist/tools/ctxSaveTrace.d.ts +1 -0
- package/dist/tools/debug.d.ts +4 -0
- package/dist/tools/decorations.d.ts +2 -0
- package/dist/tools/documentLinks.d.ts +1 -0
- package/dist/tools/editText.d.ts +1 -0
- package/dist/tools/enrichCommit.d.ts +1 -0
- package/dist/tools/enrichStackTrace.d.ts +1 -0
- package/dist/tools/explainDiagnostic.d.ts +1 -0
- package/dist/tools/explainSymbol.d.ts +1 -0
- package/dist/tools/fetchCalendarEvents.d.ts +1 -0
- package/dist/tools/fetchGithubIssue.d.ts +1 -0
- package/dist/tools/fetchGithubPR.d.ts +1 -0
- package/dist/tools/fetchLinearIssue.d.ts +1 -0
- package/dist/tools/fetchSentryIssue.d.ts +1 -0
- package/dist/tools/fetchSlackProfile.d.ts +1 -0
- package/dist/tools/fileOperations.d.ts +3 -0
- package/dist/tools/fileWatcher.d.ts +2 -0
- package/dist/tools/findFiles.d.ts +1 -0
- package/dist/tools/findRelatedTests.d.ts +1 -0
- package/dist/tools/fixAllLintErrors.d.ts +1 -0
- package/dist/tools/foldingRanges.d.ts +1 -0
- package/dist/tools/formatDocument.d.ts +1 -0
- package/dist/tools/generateTests.d.ts +1 -0
- package/dist/tools/getAIComments.d.ts +1 -0
- package/dist/tools/getAnalyticsReport.d.ts +1 -0
- package/dist/tools/getArchitectureContext.d.ts +1 -0
- package/dist/tools/getBufferContent.d.ts +1 -0
- package/dist/tools/getChangeImpact.d.ts +1 -0
- package/dist/tools/getClaudeTaskStatus.d.ts +1 -0
- package/dist/tools/getCodeCoverage.d.ts +1 -0
- package/dist/tools/getCommitsForIssue.d.ts +1 -0
- package/dist/tools/getConnectorStatus.d.ts +1 -0
- package/dist/tools/getCurrentSelection.d.ts +2 -0
- package/dist/tools/getDebugState.d.ts +1 -0
- package/dist/tools/getDependencyTree.d.ts +1 -0
- package/dist/tools/getDiagnostics.d.ts +1 -0
- package/dist/tools/getDiffFromHandoff.d.ts +1 -0
- package/dist/tools/getDocumentSymbols.d.ts +1 -0
- package/dist/tools/getFileTree.d.ts +1 -0
- package/dist/tools/getGitDiff.d.ts +1 -0
- package/dist/tools/getGitHotspots.d.ts +1 -0
- package/dist/tools/getGitLog.d.ts +1 -0
- package/dist/tools/getGitStatus.d.ts +1 -0
- package/dist/tools/getImportTree.d.ts +1 -0
- package/dist/tools/getImportedSignatures.d.ts +1 -0
- package/dist/tools/getOpenEditors.d.ts +1 -0
- package/dist/tools/getPRTemplate.d.ts +1 -0
- package/dist/tools/getProjectContext.d.ts +1 -0
- package/dist/tools/getProjectInfo.d.ts +1 -0
- package/dist/tools/getSecurityAdvisories.d.ts +1 -0
- package/dist/tools/getSessionUsage.d.ts +1 -0
- package/dist/tools/getSymbolHistory.d.ts +1 -0
- package/dist/tools/getToolCapabilities.d.ts +1 -0
- package/dist/tools/getTypeSignature.d.ts +1 -0
- package/dist/tools/getWorkspaceFolders.d.ts +1 -0
- package/dist/tools/getWorkspaceSettings.d.ts +1 -0
- package/dist/tools/gitHistory.d.ts +2 -0
- package/dist/tools/gitWrite.d.ts +11 -0
- package/dist/tools/github/actions.d.ts +2 -0
- package/dist/tools/github/composite.d.ts +3 -0
- package/dist/tools/github/issues.d.ts +4 -0
- package/dist/tools/github/pr.d.ts +7 -0
- package/dist/tools/handoffNote.d.ts +2 -0
- package/dist/tools/hoverAtCursor.d.ts +1 -0
- package/dist/tools/httpClient.d.ts +2 -0
- package/dist/tools/inlayHints.d.ts +1 -0
- package/dist/tools/launchQuickTask.d.ts +1 -0
- package/dist/tools/listClaudeTasks.d.ts +1 -0
- package/dist/tools/listTerminals.d.ts +1 -0
- package/dist/tools/lsp.d.ts +14 -0
- package/dist/tools/navigateToSymbolByName.d.ts +1 -0
- package/dist/tools/openDiff.d.ts +1 -0
- package/dist/tools/openFile.d.ts +1 -0
- package/dist/tools/openInBrowser.d.ts +1 -0
- package/dist/tools/organizeImports.d.ts +1 -0
- package/dist/tools/performanceReport.d.ts +1 -0
- package/dist/tools/planPersistence.d.ts +5 -0
- package/dist/tools/previewEdit.d.ts +1 -0
- package/dist/tools/refactorAnalyze.d.ts +1 -0
- package/dist/tools/refactorPreview.d.ts +1 -0
- package/dist/tools/replaceBlock.d.ts +1 -0
- package/dist/tools/resumeClaudeTask.d.ts +1 -0
- package/dist/tools/runClaudeTask.d.ts +1 -0
- package/dist/tools/runCommand.d.ts +1 -0
- package/dist/tools/runTests.d.ts +1 -0
- package/dist/tools/saveDocument.d.ts +1 -0
- package/dist/tools/screenshotAndAnnotate.d.ts +1 -0
- package/dist/tools/searchAndReplace.d.ts +1 -0
- package/dist/tools/searchTools.d.ts +1 -0
- package/dist/tools/searchWorkspace.d.ts +1 -0
- package/dist/tools/selectionRanges.d.ts +1 -0
- package/dist/tools/semanticTokens.d.ts +1 -0
- package/dist/tools/setActiveWorkspaceFolder.d.ts +1 -0
- package/dist/tools/signatureHelp.d.ts +1 -0
- package/dist/tools/slackListChannels.d.ts +1 -0
- package/dist/tools/slackPostMessage.d.ts +1 -0
- package/dist/tools/slackPostMessage.js +1 -1
- package/dist/tools/slackPostMessage.js.map +1 -1
- package/dist/tools/terminal.d.ts +6 -0
- package/dist/tools/testTraceToSource.d.ts +1 -0
- package/dist/tools/transaction.d.ts +4 -0
- package/dist/tools/typeHierarchy.d.ts +1 -0
- package/dist/tools/updateLinearIssue.d.ts +1 -0
- package/dist/tools/utils.d.ts +2 -0
- package/dist/tools/utils.js.map +1 -1
- package/dist/tools/vscodeCommands.d.ts +2 -0
- package/dist/tools/vscodeTasks.d.ts +2 -0
- package/dist/tools/workspaceSettings.d.ts +1 -0
- package/package.json +20 -4
- package/templates/recipes/project-health-check.yaml +1 -1
- package/dist/schemas/dry-run-plan.v1.json +0 -139
- package/dist/schemas/recipe.v1.json +0 -684
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asana connector — read workspaces, projects, tasks, and current user, plus
|
|
3
|
+
* writes (createTask, updateTask, completeTask, addTaskComment).
|
|
4
|
+
*
|
|
5
|
+
* OAuth 2.0 Authorization Code Grant. Asana is a confidential client (bridge
|
|
6
|
+
* holds client secret), so PKCE is not used. Refresh tokens are issued; access
|
|
7
|
+
* tokens expire after 1 hour (3600s).
|
|
8
|
+
*
|
|
9
|
+
* Auth: standard OAuth 2.0 with `client_id` + `client_secret` + `redirect_uri`.
|
|
10
|
+
* - Env vars: ASANA_CLIENT_ID, ASANA_CLIENT_SECRET (mirrors discord/slack)
|
|
11
|
+
* - Stored: getSecretJsonSync("asana") → AsanaTokens
|
|
12
|
+
* - Header: Authorization: Bearer <access_token>
|
|
13
|
+
*
|
|
14
|
+
* Scope note: Asana's only OAuth scope is `default`, which grants read+write
|
|
15
|
+
* combined — there is no read-only-only scope. Defense lives at the recipe-tool
|
|
16
|
+
* layer where each tool declares `isWrite: true|false`. Newer Asana accounts
|
|
17
|
+
* may also expose granular scopes; we set `default` for compatibility.
|
|
18
|
+
*
|
|
19
|
+
* Read tools: getCurrentUser, listWorkspaces, listProjects, listTasks, getTask.
|
|
20
|
+
* Write tools: createTask, updateTask, completeTask, addTaskComment.
|
|
21
|
+
*
|
|
22
|
+
* Idempotency: Asana doesn't honor an Idempotency-Key header. Writes simply
|
|
23
|
+
* throw on error — callers must dedupe via app-level checks if needed.
|
|
24
|
+
*
|
|
25
|
+
* HTTP routes (wired in src/server.ts):
|
|
26
|
+
* GET /connections/asana/auth — redirect to Asana consent
|
|
27
|
+
* GET /connections/asana/callback — exchange code for tokens
|
|
28
|
+
* POST /connections/asana/test — ping Asana API
|
|
29
|
+
* DELETE /connections/asana — clear stored tokens
|
|
30
|
+
*
|
|
31
|
+
* Asana wraps every API response in `{ data: ... }`. We unwrap consistently
|
|
32
|
+
* inside this class so recipe-tool wrappers see clean arrays/objects.
|
|
33
|
+
*
|
|
34
|
+
* Extends BaseConnector for unified auth, retry, rate-limit, error handling.
|
|
35
|
+
* Token refresh is delegated to BaseConnector.refreshToken() via apiCall.
|
|
36
|
+
*/
|
|
37
|
+
import { type AuthContext, BaseConnector, type ConnectorError, type ConnectorStatus, type OAuthConfig } from "./baseConnector.js";
|
|
38
|
+
export interface AsanaTokens {
|
|
39
|
+
access_token: string;
|
|
40
|
+
refresh_token?: string;
|
|
41
|
+
/** ms since epoch; absolute, not relative */
|
|
42
|
+
expires_at?: number;
|
|
43
|
+
scope?: string;
|
|
44
|
+
token_type?: string;
|
|
45
|
+
/** stored at auth time so refresh works even if env vars are absent */
|
|
46
|
+
_client_id?: string;
|
|
47
|
+
_client_secret?: string;
|
|
48
|
+
username?: string;
|
|
49
|
+
user_gid?: string;
|
|
50
|
+
email?: string;
|
|
51
|
+
connected_at: string;
|
|
52
|
+
}
|
|
53
|
+
export interface AsanaUser {
|
|
54
|
+
gid: string;
|
|
55
|
+
name: string;
|
|
56
|
+
email?: string;
|
|
57
|
+
resource_type?: string;
|
|
58
|
+
photo?: {
|
|
59
|
+
image_60x60?: string;
|
|
60
|
+
} | null;
|
|
61
|
+
}
|
|
62
|
+
export interface AsanaWorkspace {
|
|
63
|
+
gid: string;
|
|
64
|
+
name: string;
|
|
65
|
+
resource_type?: string;
|
|
66
|
+
is_organization?: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface AsanaProject {
|
|
69
|
+
gid: string;
|
|
70
|
+
name: string;
|
|
71
|
+
resource_type?: string;
|
|
72
|
+
archived?: boolean;
|
|
73
|
+
}
|
|
74
|
+
export interface AsanaTask {
|
|
75
|
+
gid: string;
|
|
76
|
+
name: string;
|
|
77
|
+
resource_type?: string;
|
|
78
|
+
completed?: boolean;
|
|
79
|
+
assignee?: {
|
|
80
|
+
gid: string;
|
|
81
|
+
name?: string;
|
|
82
|
+
} | null;
|
|
83
|
+
due_on?: string | null;
|
|
84
|
+
notes?: string;
|
|
85
|
+
}
|
|
86
|
+
export interface AsanaStory {
|
|
87
|
+
gid: string;
|
|
88
|
+
resource_type?: string;
|
|
89
|
+
type?: string;
|
|
90
|
+
text?: string;
|
|
91
|
+
created_at?: string;
|
|
92
|
+
created_by?: {
|
|
93
|
+
gid: string;
|
|
94
|
+
name?: string;
|
|
95
|
+
} | null;
|
|
96
|
+
}
|
|
97
|
+
export interface CreateTaskParams {
|
|
98
|
+
workspaceGid: string;
|
|
99
|
+
name: string;
|
|
100
|
+
projectGid?: string;
|
|
101
|
+
notes?: string;
|
|
102
|
+
assigneeGid?: string;
|
|
103
|
+
/** ISO date YYYY-MM-DD */
|
|
104
|
+
dueOn?: string;
|
|
105
|
+
parentTaskGid?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface UpdateTaskParams {
|
|
108
|
+
name?: string;
|
|
109
|
+
notes?: string;
|
|
110
|
+
completed?: boolean;
|
|
111
|
+
assigneeGid?: string;
|
|
112
|
+
/** ISO date YYYY-MM-DD */
|
|
113
|
+
dueOn?: string;
|
|
114
|
+
}
|
|
115
|
+
export declare function loadTokens(): AsanaTokens | null;
|
|
116
|
+
export declare function saveTokens(tokens: AsanaTokens): void;
|
|
117
|
+
export declare function clearTokens(): void;
|
|
118
|
+
export declare function isConnected(): boolean;
|
|
119
|
+
export declare class AsanaConnector extends BaseConnector {
|
|
120
|
+
readonly providerName = "asana";
|
|
121
|
+
protected getOAuthConfig(): OAuthConfig | null;
|
|
122
|
+
authenticate(): Promise<AuthContext>;
|
|
123
|
+
/**
|
|
124
|
+
* Persist refreshed tokens after BaseConnector.refreshToken() updates
|
|
125
|
+
* `this.auth`. BaseConnector calls `saveTokens()` (its own method on the
|
|
126
|
+
* tokenStorage StoredToken shape); we additionally mirror to our
|
|
127
|
+
* Asana-specific JSON so loadTokens() keeps working for HTTP probes.
|
|
128
|
+
*/
|
|
129
|
+
saveTokens(): Promise<void>;
|
|
130
|
+
healthCheck(): Promise<{
|
|
131
|
+
ok: boolean;
|
|
132
|
+
error?: ConnectorError;
|
|
133
|
+
}>;
|
|
134
|
+
normalizeError(error: unknown): ConnectorError;
|
|
135
|
+
getStatus(): ConnectorStatus;
|
|
136
|
+
getCurrentUser(): Promise<AsanaUser>;
|
|
137
|
+
listWorkspaces(params?: {
|
|
138
|
+
limit?: number;
|
|
139
|
+
}): Promise<AsanaWorkspace[]>;
|
|
140
|
+
listProjects(params: {
|
|
141
|
+
workspaceGid: string;
|
|
142
|
+
limit?: number;
|
|
143
|
+
}): Promise<AsanaProject[]>;
|
|
144
|
+
listTasks(params?: {
|
|
145
|
+
projectGid?: string;
|
|
146
|
+
assignee?: string;
|
|
147
|
+
workspaceGid?: string;
|
|
148
|
+
limit?: number;
|
|
149
|
+
}): Promise<AsanaTask[]>;
|
|
150
|
+
getTask(taskGid: string): Promise<AsanaTask>;
|
|
151
|
+
createTask(params: CreateTaskParams): Promise<AsanaTask>;
|
|
152
|
+
updateTask(taskGid: string, updates: UpdateTaskParams): Promise<AsanaTask>;
|
|
153
|
+
/**
|
|
154
|
+
* Convenience wrapper around updateTask that flips `completed: true`. Lower
|
|
155
|
+
* risk than other updates since it's a single, well-known state transition.
|
|
156
|
+
*/
|
|
157
|
+
completeTask(taskGid: string): Promise<AsanaTask>;
|
|
158
|
+
addTaskComment(taskGid: string, options: {
|
|
159
|
+
text: string;
|
|
160
|
+
}): Promise<AsanaStory>;
|
|
161
|
+
private buildHeaders;
|
|
162
|
+
private captureRateLimit;
|
|
163
|
+
/**
|
|
164
|
+
* Read the response body once and stash the first Asana `errors[].message`
|
|
165
|
+
* onto a sidecar property so normalizeError can include it without a second
|
|
166
|
+
* read. Returns the same Response for `throw` to consume.
|
|
167
|
+
*/
|
|
168
|
+
private attachErrorDetail;
|
|
169
|
+
}
|
|
170
|
+
export declare function getAsanaConnector(): AsanaConnector;
|
|
171
|
+
export { getAsanaConnector as asana };
|
|
172
|
+
export interface ConnectorHandlerResult {
|
|
173
|
+
status: number;
|
|
174
|
+
body: string;
|
|
175
|
+
contentType?: string;
|
|
176
|
+
redirect?: string;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* GET /connections/asana/auth — redirect to Asana consent screen.
|
|
180
|
+
*/
|
|
181
|
+
export declare function handleAsanaAuthorize(): ConnectorHandlerResult;
|
|
182
|
+
/**
|
|
183
|
+
* GET /connections/asana/callback — exchange code for tokens.
|
|
184
|
+
*/
|
|
185
|
+
export declare function handleAsanaCallback(code: string | null, state: string | null, error: string | null): Promise<ConnectorHandlerResult>;
|
|
186
|
+
/**
|
|
187
|
+
* POST /connections/asana/test — verify stored token works.
|
|
188
|
+
*/
|
|
189
|
+
export declare function handleAsanaTest(): Promise<ConnectorHandlerResult>;
|
|
190
|
+
/**
|
|
191
|
+
* DELETE /connections/asana — clear stored tokens.
|
|
192
|
+
*
|
|
193
|
+
* Asana does not expose a public OAuth revocation endpoint, so we just drop
|
|
194
|
+
* local credentials. The token remains valid at Asana until it naturally
|
|
195
|
+
* expires (1h) or the user revokes the integration in their Asana account
|
|
196
|
+
* settings.
|
|
197
|
+
*/
|
|
198
|
+
export declare function handleAsanaDisconnect(): Promise<ConnectorHandlerResult>;
|