n8n-nodes-ticktick 1.1.1 → 1.2.1
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 +49 -31
- package/dist/credentials/TickTickApi.credentials.d.ts +9 -0
- package/dist/credentials/TickTickApi.credentials.js +43 -0
- package/dist/credentials/TickTickApi.credentials.js.map +1 -0
- package/dist/credentials/TickTickTokenApi.credentials.d.ts +9 -0
- package/dist/credentials/TickTickTokenApi.credentials.js +37 -0
- package/dist/credentials/TickTickTokenApi.credentials.js.map +1 -0
- package/dist/nodes/TickTick/GenericFunctions.d.ts +2 -1
- package/dist/nodes/TickTick/GenericFunctions.js +75 -26
- package/dist/nodes/TickTick/GenericFunctions.js.map +1 -1
- package/dist/nodes/TickTick/TickTick.node.d.ts +1 -1
- package/dist/nodes/TickTick/TickTick.node.js +169 -88
- package/dist/nodes/TickTick/TickTick.node.js.map +1 -1
- package/dist/nodes/TickTick/TickTick.node.json +1 -1
- package/dist/nodes/TickTick/descriptions/ProjectDescription.d.ts +1 -1
- package/dist/nodes/TickTick/descriptions/ProjectDescription.js +137 -134
- package/dist/nodes/TickTick/descriptions/ProjectDescription.js.map +1 -1
- package/dist/nodes/TickTick/descriptions/TaskDescription.d.ts +1 -1
- package/dist/nodes/TickTick/descriptions/TaskDescription.js +202 -202
- package/dist/nodes/TickTick/descriptions/TaskDescription.js.map +1 -1
- package/dist/package.json +3 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@ This is an n8n community node. It lets you use TickTick in your n8n workflows.
|
|
|
6
6
|
|
|
7
7
|
TickTick is a comprehensive productivity app designed to help individuals and teams manage tasks, deadlines, and projects more efficiently. With its intuitive interface, TickTick allows users to easily create, organize, and prioritize tasks, set reminders, and track progress through various views such as lists, kanban boards, and calendars.
|
|
8
8
|
|
|
9
|
+
---
|
|
10
|
+
|
|
9
11
|
[Installation](#installation)
|
|
10
12
|
[Task Operations](#task-operations)
|
|
11
13
|
[Project Operations](#projectoperations)
|
|
@@ -15,7 +17,7 @@ TickTick is a comprehensive productivity app designed to help individuals and te
|
|
|
15
17
|
[Resources](#resources)
|
|
16
18
|
[Version history](#version-history)
|
|
17
19
|
|
|
18
|
-
## Installation
|
|
20
|
+
## 📦 Installation
|
|
19
21
|
|
|
20
22
|
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
21
23
|
|
|
@@ -35,7 +37,34 @@ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes
|
|
|
35
37
|
5. Agree to the risks of using community nodes: select I understand the risks of installing unverified code from a public source.
|
|
36
38
|
6. Select Install. n8n installs the node, and returns to the Community Nodes list in Settings.
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 🔑 Credentials
|
|
43
|
+
|
|
44
|
+
This node supports **two authentication types**:
|
|
45
|
+
|
|
46
|
+
### 1️⃣ TickTick API Token (recommended)
|
|
47
|
+
|
|
48
|
+
Steps:
|
|
49
|
+
1. In TickTick: Account Settings → API Token → "Manage"
|
|
50
|
+
2. Copy token
|
|
51
|
+
3. Create credential in n8n → **TickTick API Token**
|
|
52
|
+
4. Paste token → Save
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### 2️⃣ TickTick OAuth2
|
|
56
|
+
|
|
57
|
+
Steps:
|
|
58
|
+
1. Add credential in your n8n instance and select **TickTick OAuth2 API**
|
|
59
|
+
2. Visit: [TickTick Developer](https://developer.ticktick.com/)
|
|
60
|
+
3. Go to Manage Apps → New App
|
|
61
|
+
4. Copy **Client ID** & **Client Secret**
|
|
62
|
+
5. In n8n, create credential **TickTick OAuth2 API**
|
|
63
|
+
6. Paste credentials & connect
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 🧩 Task Operations
|
|
39
68
|
|
|
40
69
|
### 1. Create a Task
|
|
41
70
|
|
|
@@ -87,7 +116,9 @@ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes
|
|
|
87
116
|
- Task identifier (required)
|
|
88
117
|
- Project identifier (required)
|
|
89
118
|
|
|
90
|
-
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 📁 Project Operations
|
|
91
122
|
|
|
92
123
|
### 1. Create a Project
|
|
93
124
|
|
|
@@ -134,38 +165,20 @@ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes
|
|
|
134
165
|
|
|
135
166
|
- Project identifier (required)
|
|
136
167
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
1. Add credential in your n8n instance and select **TickTick OAuth2 API**
|
|
140
|
-
2. Visit: [TickTick Developer](https://developer.ticktick.com/)
|
|
141
|
-
3. Manage Apps > New App
|
|
142
|
-
4. Copy **Client ID** and **Client Secret** > Paste in n8n credential
|
|
143
|
-
5. Allow connection
|
|
144
|
-
6. Account connected
|
|
168
|
+
---
|
|
145
169
|
|
|
146
|
-
## Compatibility
|
|
170
|
+
## 🧰 Compatibility
|
|
147
171
|
|
|
148
|
-
|
|
172
|
+
Tested successfully on 2025-12-01 with:
|
|
149
173
|
|
|
150
|
-
- n8n Version: 1.
|
|
151
|
-
- Node Version: 22.
|
|
174
|
+
- n8n Version: 1.121.3
|
|
175
|
+
- Node Version: 22.11.0
|
|
152
176
|
- pnpm Version: 9.1.4
|
|
153
|
-
- No extra packages required
|
|
177
|
+
- No extra packages required (Luxon is bundled)
|
|
154
178
|
|
|
155
|
-
|
|
179
|
+
---
|
|
156
180
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
Both parameters will be implemented correctly in the next release.
|
|
160
|
-
Until then, please refer to the TickTick API documentation for the correct input:
|
|
161
|
-
|
|
162
|
-
startDate Parameter:
|
|
163
|
-
Subtask start date time in "yyyy-MM-dd'T'HH:mm:ssZ"
|
|
164
|
-
Example : "2019-11-13T03:00:00+0000"
|
|
165
|
-
|
|
166
|
-
dueDate Parameter:
|
|
167
|
-
Task due date time in "yyyy-MM-dd'T'HH:mm:ssZ"
|
|
168
|
-
Example : "2019-11-13T03:00:00+0000"
|
|
181
|
+
## ⚠ Known Issues & Notes
|
|
169
182
|
|
|
170
183
|
### TickTick API Response for Certain Requests
|
|
171
184
|
|
|
@@ -181,7 +194,9 @@ This project's implementation takes these API characteristics into account, aimi
|
|
|
181
194
|
|
|
182
195
|
Future updates to the TickTick API may address these issues, and subsequent versions of this project will aim to incorporate any changes to enhance functionality and user experience.
|
|
183
196
|
|
|
184
|
-
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 🔗 Resources
|
|
185
200
|
|
|
186
201
|
- [n8n Website](https://n8n.io/)
|
|
187
202
|
- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
|
|
@@ -189,7 +204,10 @@ Future updates to the TickTick API may address these issues, and subsequent vers
|
|
|
189
204
|
- [TickTick Open API documentation](https://developer.ticktick.com/docs#/openapi)
|
|
190
205
|
- [GitHub Repository](https://github.com/hansdoebel/n8n-nodes-ticktick.git)
|
|
191
206
|
|
|
192
|
-
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 📜 Version History
|
|
193
210
|
|
|
211
|
+
- `1.2.1` – Inbox support, API Token credential, improved task/project operations, success messages
|
|
194
212
|
- `1.1.1` – Added Luxon for date formatting (thank you [mrozekadam](https://github.com/mrozekadam))
|
|
195
213
|
- `1.0.0` – Initial release
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from "n8n-workflow";
|
|
2
|
+
export declare class TickTickApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
properties: INodeProperties[];
|
|
7
|
+
authenticate: IAuthenticateGeneric;
|
|
8
|
+
test: ICredentialTestRequest;
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TickTickApi = void 0;
|
|
4
|
+
class TickTickApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = "tickTickApi";
|
|
7
|
+
this.displayName = "TickTick API";
|
|
8
|
+
this.documentationUrl = "https://developer.ticktick.com/docs#/openapi";
|
|
9
|
+
this.properties = [
|
|
10
|
+
{
|
|
11
|
+
displayName: "API Key",
|
|
12
|
+
name: "key",
|
|
13
|
+
type: "string",
|
|
14
|
+
default: "",
|
|
15
|
+
typeOptions: {
|
|
16
|
+
password: true,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
displayName: "API Base URL",
|
|
21
|
+
name: "baseUrl",
|
|
22
|
+
type: "string",
|
|
23
|
+
default: "https://api.ticktick.com/open/v1",
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
this.authenticate = {
|
|
27
|
+
type: "generic",
|
|
28
|
+
properties: {
|
|
29
|
+
headers: {
|
|
30
|
+
Authorization: '={{"Bearer " + $credentials.key}}',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
this.test = {
|
|
35
|
+
request: {
|
|
36
|
+
baseURL: "={{$credentials?.baseUrl}}",
|
|
37
|
+
url: "/user",
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.TickTickApi = TickTickApi;
|
|
43
|
+
//# sourceMappingURL=TickTickApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TickTickApi.credentials.js","sourceRoot":"","sources":["../../credentials/TickTickApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,WAAW;IAAxB;QACC,SAAI,GAAG,aAAa,CAAC;QACrB,gBAAW,GAAG,cAAc,CAAC;QAC7B,qBAAgB,GAAG,8CAA8C,CAAC;QAClE,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;aACD;YACD;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,kCAAkC;aAC3C;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,mCAAmC;iBAClD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,4BAA4B;gBACrC,GAAG,EAAE,OAAO;aACZ;SACD,CAAC;IACH,CAAC;CAAA;AArCD,kCAqCC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from "n8n-workflow";
|
|
2
|
+
export declare class TickTickTokenApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
properties: INodeProperties[];
|
|
7
|
+
authenticate: IAuthenticateGeneric;
|
|
8
|
+
test: ICredentialTestRequest;
|
|
9
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TickTickTokenApi = void 0;
|
|
4
|
+
class TickTickTokenApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = "tickTickTokenApi";
|
|
7
|
+
this.displayName = "TickTick API";
|
|
8
|
+
this.documentationUrl = "https://developer.ticktick.com/docs#/openapi";
|
|
9
|
+
this.properties = [
|
|
10
|
+
{
|
|
11
|
+
displayName: "API Token",
|
|
12
|
+
name: "token",
|
|
13
|
+
type: "string",
|
|
14
|
+
default: "",
|
|
15
|
+
typeOptions: {
|
|
16
|
+
password: true,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
this.authenticate = {
|
|
21
|
+
type: "generic",
|
|
22
|
+
properties: {
|
|
23
|
+
headers: {
|
|
24
|
+
Authorization: '={{"Bearer " + $credentials.token}}',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
this.test = {
|
|
29
|
+
request: {
|
|
30
|
+
baseURL: "https://ticktick.com",
|
|
31
|
+
url: "/open/v1/project",
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.TickTickTokenApi = TickTickTokenApi;
|
|
37
|
+
//# sourceMappingURL=TickTickTokenApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TickTickTokenApi.credentials.js","sourceRoot":"","sources":["../../credentials/TickTickTokenApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,gBAAgB;IAA7B;QACC,SAAI,GAAG,kBAAkB,CAAC;QAC1B,gBAAW,GAAG,cAAc,CAAC;QAC7B,qBAAgB,GAAG,8CAA8C,CAAC;QAClE,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;aACD;SACD,CAAC;QACF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,qCAAqC;iBACpD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,sBAAsB;gBAC/B,GAAG,EAAE,kBAAkB;aACvB;SACD,CAAC;IACH,CAAC;CAAA;AA9BD,4CA8BC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { IExecuteFunctions, IHookFunctions,
|
|
1
|
+
import type { IDataObject, IExecuteFunctions, IHookFunctions, IHttpRequestMethods, ILoadOptionsFunctions } from "n8n-workflow";
|
|
2
|
+
export declare function getInboxProjectId(this: IExecuteFunctions | IHookFunctions | ILoadOptionsFunctions): Promise<string>;
|
|
2
3
|
export declare function getProjects(this: ILoadOptionsFunctions): Promise<{
|
|
3
4
|
name: string;
|
|
4
5
|
value: string;
|
|
@@ -1,20 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TimeZones = void 0;
|
|
4
|
+
exports.getInboxProjectId = getInboxProjectId;
|
|
4
5
|
exports.getProjects = getProjects;
|
|
5
6
|
exports.getTasks = getTasks;
|
|
6
7
|
exports.tickTickApiRequest = tickTickApiRequest;
|
|
7
8
|
exports.formatTickTickDate = formatTickTickDate;
|
|
8
9
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
9
10
|
const luxon_1 = require("luxon");
|
|
11
|
+
async function getInboxProjectId() {
|
|
12
|
+
const endpoint = "/open/v1/project/inbox/data";
|
|
13
|
+
try {
|
|
14
|
+
const responseData = (await tickTickApiRequest.call(this, "GET", endpoint));
|
|
15
|
+
const tasks = responseData.tasks || [];
|
|
16
|
+
const columns = responseData.columns || [];
|
|
17
|
+
if (tasks.length > 0 && typeof tasks[0].projectId === "string") {
|
|
18
|
+
return tasks[0].projectId;
|
|
19
|
+
}
|
|
20
|
+
if (columns.length > 0 && typeof columns[0].projectId === "string") {
|
|
21
|
+
return columns[0].projectId;
|
|
22
|
+
}
|
|
23
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), {
|
|
24
|
+
message: "Could not determine Inbox project ID from /open/v1/project/inbox/data response.",
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
10
31
|
async function getProjects() {
|
|
11
|
-
const endpoint =
|
|
32
|
+
const endpoint = "/open/v1/project";
|
|
12
33
|
try {
|
|
13
|
-
const responseData = await tickTickApiRequest.call(this,
|
|
14
|
-
|
|
34
|
+
const responseData = await tickTickApiRequest.call(this, "GET", endpoint);
|
|
35
|
+
const options = responseData.map((project) => ({
|
|
15
36
|
name: project.name,
|
|
16
37
|
value: project.id,
|
|
17
38
|
}));
|
|
39
|
+
const resource = this.getCurrentNodeParameter("resource");
|
|
40
|
+
const operation = this.getCurrentNodeParameter("operation");
|
|
41
|
+
if (resource === "task") {
|
|
42
|
+
options.unshift({
|
|
43
|
+
name: "Inbox",
|
|
44
|
+
value: "",
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else if (resource === "project" && operation === "get") {
|
|
48
|
+
options.unshift({
|
|
49
|
+
name: "Inbox",
|
|
50
|
+
value: "inbox",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return options;
|
|
18
54
|
}
|
|
19
55
|
catch (error) {
|
|
20
56
|
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
|
|
@@ -22,11 +58,11 @@ async function getProjects() {
|
|
|
22
58
|
}
|
|
23
59
|
async function getTasks(projectId) {
|
|
24
60
|
if (!projectId) {
|
|
25
|
-
|
|
61
|
+
projectId = "inbox";
|
|
26
62
|
}
|
|
27
63
|
const endpoint = `/open/v1/project/${projectId}/data`;
|
|
28
64
|
try {
|
|
29
|
-
const responseData = (await tickTickApiRequest.call(this,
|
|
65
|
+
const responseData = (await tickTickApiRequest.call(this, "GET", endpoint));
|
|
30
66
|
const tasks = responseData.tasks;
|
|
31
67
|
return tasks.map((task) => ({
|
|
32
68
|
name: task.title,
|
|
@@ -38,17 +74,30 @@ async function getTasks(projectId) {
|
|
|
38
74
|
}
|
|
39
75
|
}
|
|
40
76
|
async function tickTickApiRequest(method, endpoint, body = {}, qs = {}) {
|
|
41
|
-
|
|
42
|
-
const baseUrl =
|
|
77
|
+
const authentication = this.getNodeParameter("authentication", 0);
|
|
78
|
+
const baseUrl = "https://ticktick.com";
|
|
43
79
|
const options = {
|
|
44
80
|
method,
|
|
45
|
-
body,
|
|
46
81
|
qs,
|
|
47
82
|
url: `${baseUrl}${endpoint}`,
|
|
48
83
|
json: true,
|
|
49
84
|
};
|
|
85
|
+
if (Object.keys(body).length) {
|
|
86
|
+
options.body = body;
|
|
87
|
+
}
|
|
50
88
|
try {
|
|
51
|
-
|
|
89
|
+
let responseData;
|
|
90
|
+
if (authentication === "tickTickOAuth2Api") {
|
|
91
|
+
responseData = await this.helpers.requestOAuth2.call(this, "tickTickOAuth2Api", options);
|
|
92
|
+
}
|
|
93
|
+
else if (authentication === "tickTickTokenApi") {
|
|
94
|
+
responseData = await this.helpers.requestWithAuthentication.call(this, "tickTickTokenApi", options);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), {
|
|
98
|
+
message: `Unknown authentication method: ${authentication}`,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
52
101
|
return responseData;
|
|
53
102
|
}
|
|
54
103
|
catch (error) {
|
|
@@ -56,20 +105,20 @@ async function tickTickApiRequest(method, endpoint, body = {}, qs = {}) {
|
|
|
56
105
|
}
|
|
57
106
|
}
|
|
58
107
|
exports.TimeZones = [
|
|
59
|
-
{ name:
|
|
60
|
-
{ name:
|
|
61
|
-
{ name:
|
|
62
|
-
{ name:
|
|
63
|
-
{ name:
|
|
64
|
-
{ name:
|
|
65
|
-
{ name:
|
|
66
|
-
{ name:
|
|
67
|
-
{ name:
|
|
68
|
-
{ name:
|
|
69
|
-
{ name:
|
|
70
|
-
{ name:
|
|
71
|
-
{ name:
|
|
72
|
-
{ name:
|
|
108
|
+
{ name: "UTC", value: "UTC" },
|
|
109
|
+
{ name: "Europe/London", value: "Europe/London" },
|
|
110
|
+
{ name: "Europe/Berlin", value: "Europe/Berlin" },
|
|
111
|
+
{ name: "Europe/Moscow", value: "Europe/Moscow" },
|
|
112
|
+
{ name: "Asia/Kolkata", value: "Asia/Kolkata" },
|
|
113
|
+
{ name: "Asia/Shanghai", value: "Asia/Shanghai" },
|
|
114
|
+
{ name: "Asia/Tokyo", value: "Asia/Tokyo" },
|
|
115
|
+
{ name: "America/New_York", value: "America/New_York" },
|
|
116
|
+
{ name: "America/Chicago", value: "America/Chicago" },
|
|
117
|
+
{ name: "America/Denver", value: "America/Denver" },
|
|
118
|
+
{ name: "America/Los_Angeles", value: "America/Los_Angeles" },
|
|
119
|
+
{ name: "America/Sao_Paulo", value: "America/Sao_Paulo" },
|
|
120
|
+
{ name: "Australia/Sydney", value: "Australia/Sydney" },
|
|
121
|
+
{ name: "Pacific/Auckland", value: "Pacific/Auckland" },
|
|
73
122
|
];
|
|
74
123
|
function formatTickTickDate(dateString) {
|
|
75
124
|
if (!dateString) {
|
|
@@ -77,9 +126,9 @@ function formatTickTickDate(dateString) {
|
|
|
77
126
|
}
|
|
78
127
|
const date = luxon_1.DateTime.fromISO(dateString);
|
|
79
128
|
const dateTimePart = date.toFormat("yyyy-MM-dd'T'HH:mm:ss");
|
|
80
|
-
const offsetSign = date.offset >= 0 ?
|
|
81
|
-
const offsetHours = String(Math.floor(Math.abs(date.offset) / 60)).padStart(2,
|
|
82
|
-
const offsetMinutes = String(Math.abs(date.offset) % 60).padStart(2,
|
|
129
|
+
const offsetSign = date.offset >= 0 ? "+" : "-";
|
|
130
|
+
const offsetHours = String(Math.floor(Math.abs(date.offset) / 60)).padStart(2, "0");
|
|
131
|
+
const offsetMinutes = String(Math.abs(date.offset) % 60).padStart(2, "0");
|
|
83
132
|
const timezonePart = `${offsetSign}${offsetHours}${offsetMinutes}`;
|
|
84
133
|
return `${dateTimePart}${timezonePart}`;
|
|
85
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/TickTick/GenericFunctions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/TickTick/GenericFunctions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription
|
|
1
|
+
import { IExecuteFunctions, ILoadOptionsFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from "n8n-workflow";
|
|
2
2
|
export declare class TickTick implements INodeType {
|
|
3
3
|
methods: {
|
|
4
4
|
loadOptions: {
|