@md2do/todoist 0.2.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.
@@ -0,0 +1,694 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for client.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="prettify.css" />
9
+ <link rel="stylesheet" href="base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="index.html">All files</a> client.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/203</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/1</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/1</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/203</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
270
+ <span class="cline-any cline-no">&nbsp;</span>
271
+ <span class="cline-any cline-no">&nbsp;</span>
272
+ <span class="cline-any cline-no">&nbsp;</span>
273
+ <span class="cline-any cline-no">&nbsp;</span>
274
+ <span class="cline-any cline-no">&nbsp;</span>
275
+ <span class="cline-any cline-no">&nbsp;</span>
276
+ <span class="cline-any cline-no">&nbsp;</span>
277
+ <span class="cline-any cline-no">&nbsp;</span>
278
+ <span class="cline-any cline-no">&nbsp;</span>
279
+ <span class="cline-any cline-no">&nbsp;</span>
280
+ <span class="cline-any cline-no">&nbsp;</span>
281
+ <span class="cline-any cline-no">&nbsp;</span>
282
+ <span class="cline-any cline-no">&nbsp;</span>
283
+ <span class="cline-any cline-no">&nbsp;</span>
284
+ <span class="cline-any cline-no">&nbsp;</span>
285
+ <span class="cline-any cline-no">&nbsp;</span>
286
+ <span class="cline-any cline-no">&nbsp;</span>
287
+ <span class="cline-any cline-no">&nbsp;</span>
288
+ <span class="cline-any cline-no">&nbsp;</span>
289
+ <span class="cline-any cline-no">&nbsp;</span>
290
+ <span class="cline-any cline-no">&nbsp;</span>
291
+ <span class="cline-any cline-no">&nbsp;</span>
292
+ <span class="cline-any cline-no">&nbsp;</span>
293
+ <span class="cline-any cline-no">&nbsp;</span>
294
+ <span class="cline-any cline-no">&nbsp;</span>
295
+ <span class="cline-any cline-no">&nbsp;</span>
296
+ <span class="cline-any cline-no">&nbsp;</span>
297
+ <span class="cline-any cline-no">&nbsp;</span>
298
+ <span class="cline-any cline-no">&nbsp;</span>
299
+ <span class="cline-any cline-no">&nbsp;</span>
300
+ <span class="cline-any cline-no">&nbsp;</span>
301
+ <span class="cline-any cline-no">&nbsp;</span>
302
+ <span class="cline-any cline-no">&nbsp;</span>
303
+ <span class="cline-any cline-no">&nbsp;</span>
304
+ <span class="cline-any cline-no">&nbsp;</span>
305
+ <span class="cline-any cline-no">&nbsp;</span>
306
+ <span class="cline-any cline-no">&nbsp;</span>
307
+ <span class="cline-any cline-no">&nbsp;</span>
308
+ <span class="cline-any cline-no">&nbsp;</span>
309
+ <span class="cline-any cline-no">&nbsp;</span>
310
+ <span class="cline-any cline-no">&nbsp;</span>
311
+ <span class="cline-any cline-no">&nbsp;</span>
312
+ <span class="cline-any cline-no">&nbsp;</span>
313
+ <span class="cline-any cline-no">&nbsp;</span>
314
+ <span class="cline-any cline-no">&nbsp;</span>
315
+ <span class="cline-any cline-no">&nbsp;</span>
316
+ <span class="cline-any cline-no">&nbsp;</span>
317
+ <span class="cline-any cline-no">&nbsp;</span>
318
+ <span class="cline-any cline-no">&nbsp;</span>
319
+ <span class="cline-any cline-no">&nbsp;</span>
320
+ <span class="cline-any cline-no">&nbsp;</span>
321
+ <span class="cline-any cline-no">&nbsp;</span>
322
+ <span class="cline-any cline-no">&nbsp;</span>
323
+ <span class="cline-any cline-no">&nbsp;</span>
324
+ <span class="cline-any cline-no">&nbsp;</span>
325
+ <span class="cline-any cline-no">&nbsp;</span>
326
+ <span class="cline-any cline-no">&nbsp;</span>
327
+ <span class="cline-any cline-no">&nbsp;</span>
328
+ <span class="cline-any cline-no">&nbsp;</span>
329
+ <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-no">&nbsp;</span>
331
+ <span class="cline-any cline-no">&nbsp;</span>
332
+ <span class="cline-any cline-no">&nbsp;</span>
333
+ <span class="cline-any cline-no">&nbsp;</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-no">&nbsp;</span>
336
+ <span class="cline-any cline-no">&nbsp;</span>
337
+ <span class="cline-any cline-no">&nbsp;</span>
338
+ <span class="cline-any cline-no">&nbsp;</span>
339
+ <span class="cline-any cline-no">&nbsp;</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
341
+ <span class="cline-any cline-no">&nbsp;</span>
342
+ <span class="cline-any cline-no">&nbsp;</span>
343
+ <span class="cline-any cline-no">&nbsp;</span>
344
+ <span class="cline-any cline-no">&nbsp;</span>
345
+ <span class="cline-any cline-no">&nbsp;</span>
346
+ <span class="cline-any cline-no">&nbsp;</span>
347
+ <span class="cline-any cline-no">&nbsp;</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-no">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-no">&nbsp;</span>
363
+ <span class="cline-any cline-no">&nbsp;</span>
364
+ <span class="cline-any cline-no">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
367
+ <span class="cline-any cline-no">&nbsp;</span>
368
+ <span class="cline-any cline-no">&nbsp;</span>
369
+ <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-no">&nbsp;</span>
372
+ <span class="cline-any cline-no">&nbsp;</span>
373
+ <span class="cline-any cline-no">&nbsp;</span>
374
+ <span class="cline-any cline-no">&nbsp;</span>
375
+ <span class="cline-any cline-no">&nbsp;</span>
376
+ <span class="cline-any cline-no">&nbsp;</span>
377
+ <span class="cline-any cline-no">&nbsp;</span>
378
+ <span class="cline-any cline-no">&nbsp;</span>
379
+ <span class="cline-any cline-no">&nbsp;</span>
380
+ <span class="cline-any cline-no">&nbsp;</span>
381
+ <span class="cline-any cline-no">&nbsp;</span>
382
+ <span class="cline-any cline-no">&nbsp;</span>
383
+ <span class="cline-any cline-no">&nbsp;</span>
384
+ <span class="cline-any cline-no">&nbsp;</span>
385
+ <span class="cline-any cline-no">&nbsp;</span>
386
+ <span class="cline-any cline-no">&nbsp;</span>
387
+ <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-no">&nbsp;</span>
390
+ <span class="cline-any cline-no">&nbsp;</span>
391
+ <span class="cline-any cline-no">&nbsp;</span>
392
+ <span class="cline-any cline-no">&nbsp;</span>
393
+ <span class="cline-any cline-no">&nbsp;</span>
394
+ <span class="cline-any cline-no">&nbsp;</span>
395
+ <span class="cline-any cline-no">&nbsp;</span>
396
+ <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-no">&nbsp;</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-no">&nbsp;</span>
401
+ <span class="cline-any cline-no">&nbsp;</span>
402
+ <span class="cline-any cline-no">&nbsp;</span>
403
+ <span class="cline-any cline-no">&nbsp;</span>
404
+ <span class="cline-any cline-no">&nbsp;</span>
405
+ <span class="cline-any cline-no">&nbsp;</span>
406
+ <span class="cline-any cline-no">&nbsp;</span>
407
+ <span class="cline-any cline-no">&nbsp;</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-no">&nbsp;</span>
410
+ <span class="cline-any cline-no">&nbsp;</span>
411
+ <span class="cline-any cline-no">&nbsp;</span>
412
+ <span class="cline-any cline-no">&nbsp;</span>
413
+ <span class="cline-any cline-no">&nbsp;</span>
414
+ <span class="cline-any cline-no">&nbsp;</span>
415
+ <span class="cline-any cline-no">&nbsp;</span>
416
+ <span class="cline-any cline-no">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-no">&nbsp;</span>
419
+ <span class="cline-any cline-no">&nbsp;</span>
420
+ <span class="cline-any cline-no">&nbsp;</span>
421
+ <span class="cline-any cline-no">&nbsp;</span>
422
+ <span class="cline-any cline-no">&nbsp;</span>
423
+ <span class="cline-any cline-no">&nbsp;</span>
424
+ <span class="cline-any cline-no">&nbsp;</span>
425
+ <span class="cline-any cline-no">&nbsp;</span>
426
+ <span class="cline-any cline-no">&nbsp;</span>
427
+ <span class="cline-any cline-no">&nbsp;</span>
428
+ <span class="cline-any cline-no">&nbsp;</span>
429
+ <span class="cline-any cline-no">&nbsp;</span>
430
+ <span class="cline-any cline-no">&nbsp;</span>
431
+ <span class="cline-any cline-no">&nbsp;</span>
432
+ <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-no">&nbsp;</span>
434
+ <span class="cline-any cline-no">&nbsp;</span>
435
+ <span class="cline-any cline-no">&nbsp;</span>
436
+ <span class="cline-any cline-no">&nbsp;</span>
437
+ <span class="cline-any cline-no">&nbsp;</span>
438
+ <span class="cline-any cline-no">&nbsp;</span>
439
+ <span class="cline-any cline-no">&nbsp;</span>
440
+ <span class="cline-any cline-no">&nbsp;</span>
441
+ <span class="cline-any cline-no">&nbsp;</span>
442
+ <span class="cline-any cline-no">&nbsp;</span>
443
+ <span class="cline-any cline-no">&nbsp;</span>
444
+ <span class="cline-any cline-no">&nbsp;</span>
445
+ <span class="cline-any cline-no">&nbsp;</span>
446
+ <span class="cline-any cline-no">&nbsp;</span>
447
+ <span class="cline-any cline-no">&nbsp;</span>
448
+ <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-no">&nbsp;</span>
450
+ <span class="cline-any cline-no">&nbsp;</span>
451
+ <span class="cline-any cline-no">&nbsp;</span>
452
+ <span class="cline-any cline-no">&nbsp;</span>
453
+ <span class="cline-any cline-no">&nbsp;</span>
454
+ <span class="cline-any cline-no">&nbsp;</span>
455
+ <span class="cline-any cline-no">&nbsp;</span>
456
+ <span class="cline-any cline-no">&nbsp;</span>
457
+ <span class="cline-any cline-no">&nbsp;</span>
458
+ <span class="cline-any cline-no">&nbsp;</span>
459
+ <span class="cline-any cline-no">&nbsp;</span>
460
+ <span class="cline-any cline-no">&nbsp;</span>
461
+ <span class="cline-any cline-no">&nbsp;</span>
462
+ <span class="cline-any cline-no">&nbsp;</span>
463
+ <span class="cline-any cline-no">&nbsp;</span>
464
+ <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
466
+ <span class="cline-any cline-no">&nbsp;</span>
467
+ <span class="cline-any cline-no">&nbsp;</span>
468
+ <span class="cline-any cline-no">&nbsp;</span>
469
+ <span class="cline-any cline-no">&nbsp;</span>
470
+ <span class="cline-any cline-no">&nbsp;</span>
471
+ <span class="cline-any cline-no">&nbsp;</span>
472
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import { TodoistApi } from '@doist/todoist-api-typescript';<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
473
+ <span class="cstat-no" title="statement not covered" >import type { Task, Project, Label } from '@doist/todoist-api-typescript';</span>
474
+ <span class="cstat-no" title="statement not covered" >import type { TodoistTaskParams } from './mapper.js';</span>
475
+ <span class="cstat-no" title="statement not covered" ></span>
476
+ <span class="cstat-no" title="statement not covered" >/**</span>
477
+ <span class="cstat-no" title="statement not covered" > * Configuration for Todoist client</span>
478
+ <span class="cstat-no" title="statement not covered" > */</span>
479
+ <span class="cstat-no" title="statement not covered" >export interface TodoistClientConfig {</span>
480
+ <span class="cstat-no" title="statement not covered" > apiToken: string;</span>
481
+ <span class="cstat-no" title="statement not covered" >}</span>
482
+ <span class="cstat-no" title="statement not covered" ></span>
483
+ <span class="cstat-no" title="statement not covered" >/**</span>
484
+ <span class="cstat-no" title="statement not covered" > * Wrapper around Todoist API with error handling and convenience methods</span>
485
+ <span class="cstat-no" title="statement not covered" > */</span>
486
+ <span class="cstat-no" title="statement not covered" >export class TodoistClient {</span>
487
+ <span class="cstat-no" title="statement not covered" > private api: TodoistApi;</span>
488
+ <span class="cstat-no" title="statement not covered" ></span>
489
+ <span class="cstat-no" title="statement not covered" > constructor(config: TodoistClientConfig) {</span>
490
+ <span class="cstat-no" title="statement not covered" > this.api = new TodoistApi(config.apiToken);</span>
491
+ <span class="cstat-no" title="statement not covered" > }</span>
492
+ <span class="cstat-no" title="statement not covered" ></span>
493
+ <span class="cstat-no" title="statement not covered" > /**</span>
494
+ <span class="cstat-no" title="statement not covered" > * Get all active tasks</span>
495
+ <span class="cstat-no" title="statement not covered" > */</span>
496
+ <span class="cstat-no" title="statement not covered" > async getTasks(options?: {</span>
497
+ <span class="cstat-no" title="statement not covered" > projectId?: string;</span>
498
+ <span class="cstat-no" title="statement not covered" > labelId?: string;</span>
499
+ <span class="cstat-no" title="statement not covered" > }): Promise&lt;Task[]&gt; {</span>
500
+ <span class="cstat-no" title="statement not covered" > try {</span>
501
+ <span class="cstat-no" title="statement not covered" > return await this.api.getTasks(options);</span>
502
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
503
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
504
+ <span class="cstat-no" title="statement not covered" > `Failed to get tasks: ${error instanceof Error ? error.message : String(error)}`,</span>
505
+ <span class="cstat-no" title="statement not covered" > );</span>
506
+ <span class="cstat-no" title="statement not covered" > }</span>
507
+ <span class="cstat-no" title="statement not covered" > }</span>
508
+ <span class="cstat-no" title="statement not covered" ></span>
509
+ <span class="cstat-no" title="statement not covered" > /**</span>
510
+ <span class="cstat-no" title="statement not covered" > * Get a specific task by ID</span>
511
+ <span class="cstat-no" title="statement not covered" > */</span>
512
+ <span class="cstat-no" title="statement not covered" > async getTask(taskId: string): Promise&lt;Task&gt; {</span>
513
+ <span class="cstat-no" title="statement not covered" > try {</span>
514
+ <span class="cstat-no" title="statement not covered" > return await this.api.getTask(taskId);</span>
515
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
516
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
517
+ <span class="cstat-no" title="statement not covered" > `Failed to get task ${taskId}: ${error instanceof Error ? error.message : String(error)}`,</span>
518
+ <span class="cstat-no" title="statement not covered" > );</span>
519
+ <span class="cstat-no" title="statement not covered" > }</span>
520
+ <span class="cstat-no" title="statement not covered" > }</span>
521
+ <span class="cstat-no" title="statement not covered" ></span>
522
+ <span class="cstat-no" title="statement not covered" > /**</span>
523
+ <span class="cstat-no" title="statement not covered" > * Create a new task</span>
524
+ <span class="cstat-no" title="statement not covered" > */</span>
525
+ <span class="cstat-no" title="statement not covered" > async createTask(</span>
526
+ <span class="cstat-no" title="statement not covered" > params: TodoistTaskParams | Record&lt;string, unknown&gt;,</span>
527
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;Task&gt; {</span>
528
+ <span class="cstat-no" title="statement not covered" > try {</span>
529
+ <span class="cstat-no" title="statement not covered" > return await this.api.addTask(params as TodoistTaskParams);</span>
530
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
531
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
532
+ <span class="cstat-no" title="statement not covered" > `Failed to create task: ${error instanceof Error ? error.message : String(error)}`,</span>
533
+ <span class="cstat-no" title="statement not covered" > );</span>
534
+ <span class="cstat-no" title="statement not covered" > }</span>
535
+ <span class="cstat-no" title="statement not covered" > }</span>
536
+ <span class="cstat-no" title="statement not covered" ></span>
537
+ <span class="cstat-no" title="statement not covered" > /**</span>
538
+ <span class="cstat-no" title="statement not covered" > * Update an existing task</span>
539
+ <span class="cstat-no" title="statement not covered" > */</span>
540
+ <span class="cstat-no" title="statement not covered" > async updateTask(</span>
541
+ <span class="cstat-no" title="statement not covered" > taskId: string,</span>
542
+ <span class="cstat-no" title="statement not covered" > params: Partial&lt;TodoistTaskParams&gt;,</span>
543
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;Task&gt; {</span>
544
+ <span class="cstat-no" title="statement not covered" > try {</span>
545
+ <span class="cstat-no" title="statement not covered" > return await this.api.updateTask(taskId, params);</span>
546
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
547
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
548
+ <span class="cstat-no" title="statement not covered" > `Failed to update task ${taskId}: ${error instanceof Error ? error.message : String(error)}`,</span>
549
+ <span class="cstat-no" title="statement not covered" > );</span>
550
+ <span class="cstat-no" title="statement not covered" > }</span>
551
+ <span class="cstat-no" title="statement not covered" > }</span>
552
+ <span class="cstat-no" title="statement not covered" ></span>
553
+ <span class="cstat-no" title="statement not covered" > /**</span>
554
+ <span class="cstat-no" title="statement not covered" > * Complete a task</span>
555
+ <span class="cstat-no" title="statement not covered" > */</span>
556
+ <span class="cstat-no" title="statement not covered" > async completeTask(taskId: string): Promise&lt;boolean&gt; {</span>
557
+ <span class="cstat-no" title="statement not covered" > try {</span>
558
+ <span class="cstat-no" title="statement not covered" > return await this.api.closeTask(taskId);</span>
559
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
560
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
561
+ <span class="cstat-no" title="statement not covered" > `Failed to complete task ${taskId}: ${error instanceof Error ? error.message : String(error)}`,</span>
562
+ <span class="cstat-no" title="statement not covered" > );</span>
563
+ <span class="cstat-no" title="statement not covered" > }</span>
564
+ <span class="cstat-no" title="statement not covered" > }</span>
565
+ <span class="cstat-no" title="statement not covered" ></span>
566
+ <span class="cstat-no" title="statement not covered" > /**</span>
567
+ <span class="cstat-no" title="statement not covered" > * Reopen a completed task</span>
568
+ <span class="cstat-no" title="statement not covered" > */</span>
569
+ <span class="cstat-no" title="statement not covered" > async reopenTask(taskId: string): Promise&lt;boolean&gt; {</span>
570
+ <span class="cstat-no" title="statement not covered" > try {</span>
571
+ <span class="cstat-no" title="statement not covered" > return await this.api.reopenTask(taskId);</span>
572
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
573
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
574
+ <span class="cstat-no" title="statement not covered" > `Failed to reopen task ${taskId}: ${error instanceof Error ? error.message : String(error)}`,</span>
575
+ <span class="cstat-no" title="statement not covered" > );</span>
576
+ <span class="cstat-no" title="statement not covered" > }</span>
577
+ <span class="cstat-no" title="statement not covered" > }</span>
578
+ <span class="cstat-no" title="statement not covered" ></span>
579
+ <span class="cstat-no" title="statement not covered" > /**</span>
580
+ <span class="cstat-no" title="statement not covered" > * Delete a task</span>
581
+ <span class="cstat-no" title="statement not covered" > */</span>
582
+ <span class="cstat-no" title="statement not covered" > async deleteTask(taskId: string): Promise&lt;boolean&gt; {</span>
583
+ <span class="cstat-no" title="statement not covered" > try {</span>
584
+ <span class="cstat-no" title="statement not covered" > return await this.api.deleteTask(taskId);</span>
585
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
586
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
587
+ <span class="cstat-no" title="statement not covered" > `Failed to delete task ${taskId}: ${error instanceof Error ? error.message : String(error)}`,</span>
588
+ <span class="cstat-no" title="statement not covered" > );</span>
589
+ <span class="cstat-no" title="statement not covered" > }</span>
590
+ <span class="cstat-no" title="statement not covered" > }</span>
591
+ <span class="cstat-no" title="statement not covered" ></span>
592
+ <span class="cstat-no" title="statement not covered" > /**</span>
593
+ <span class="cstat-no" title="statement not covered" > * Get all projects</span>
594
+ <span class="cstat-no" title="statement not covered" > */</span>
595
+ <span class="cstat-no" title="statement not covered" > async getProjects(): Promise&lt;Project[]&gt; {</span>
596
+ <span class="cstat-no" title="statement not covered" > try {</span>
597
+ <span class="cstat-no" title="statement not covered" > return await this.api.getProjects();</span>
598
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
599
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
600
+ <span class="cstat-no" title="statement not covered" > `Failed to get projects: ${error instanceof Error ? error.message : String(error)}`,</span>
601
+ <span class="cstat-no" title="statement not covered" > );</span>
602
+ <span class="cstat-no" title="statement not covered" > }</span>
603
+ <span class="cstat-no" title="statement not covered" > }</span>
604
+ <span class="cstat-no" title="statement not covered" ></span>
605
+ <span class="cstat-no" title="statement not covered" > /**</span>
606
+ <span class="cstat-no" title="statement not covered" > * Get a specific project by ID</span>
607
+ <span class="cstat-no" title="statement not covered" > */</span>
608
+ <span class="cstat-no" title="statement not covered" > async getProject(projectId: string): Promise&lt;Project&gt; {</span>
609
+ <span class="cstat-no" title="statement not covered" > try {</span>
610
+ <span class="cstat-no" title="statement not covered" > return await this.api.getProject(projectId);</span>
611
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
612
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
613
+ <span class="cstat-no" title="statement not covered" > `Failed to get project ${projectId}: ${error instanceof Error ? error.message : String(error)}`,</span>
614
+ <span class="cstat-no" title="statement not covered" > );</span>
615
+ <span class="cstat-no" title="statement not covered" > }</span>
616
+ <span class="cstat-no" title="statement not covered" > }</span>
617
+ <span class="cstat-no" title="statement not covered" ></span>
618
+ <span class="cstat-no" title="statement not covered" > /**</span>
619
+ <span class="cstat-no" title="statement not covered" > * Find project by name</span>
620
+ <span class="cstat-no" title="statement not covered" > */</span>
621
+ <span class="cstat-no" title="statement not covered" > async findProjectByName(name: string): Promise&lt;Project | null&gt; {</span>
622
+ <span class="cstat-no" title="statement not covered" > const projects = await this.getProjects();</span>
623
+ <span class="cstat-no" title="statement not covered" > return (</span>
624
+ <span class="cstat-no" title="statement not covered" > projects.find((p) =&gt; p.name.toLowerCase() === name.toLowerCase()) ?? null</span>
625
+ <span class="cstat-no" title="statement not covered" > );</span>
626
+ <span class="cstat-no" title="statement not covered" > }</span>
627
+ <span class="cstat-no" title="statement not covered" ></span>
628
+ <span class="cstat-no" title="statement not covered" > /**</span>
629
+ <span class="cstat-no" title="statement not covered" > * Get all labels</span>
630
+ <span class="cstat-no" title="statement not covered" > */</span>
631
+ <span class="cstat-no" title="statement not covered" > async getLabels(): Promise&lt;Label[]&gt; {</span>
632
+ <span class="cstat-no" title="statement not covered" > try {</span>
633
+ <span class="cstat-no" title="statement not covered" > return await this.api.getLabels();</span>
634
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
635
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
636
+ <span class="cstat-no" title="statement not covered" > `Failed to get labels: ${error instanceof Error ? error.message : String(error)}`,</span>
637
+ <span class="cstat-no" title="statement not covered" > );</span>
638
+ <span class="cstat-no" title="statement not covered" > }</span>
639
+ <span class="cstat-no" title="statement not covered" > }</span>
640
+ <span class="cstat-no" title="statement not covered" ></span>
641
+ <span class="cstat-no" title="statement not covered" > /**</span>
642
+ <span class="cstat-no" title="statement not covered" > * Create a label if it doesn't exist</span>
643
+ <span class="cstat-no" title="statement not covered" > */</span>
644
+ <span class="cstat-no" title="statement not covered" > async ensureLabel(name: string): Promise&lt;Label&gt; {</span>
645
+ <span class="cstat-no" title="statement not covered" > const labels = await this.getLabels();</span>
646
+ <span class="cstat-no" title="statement not covered" > const existing = labels.find(</span>
647
+ <span class="cstat-no" title="statement not covered" > (l) =&gt; l.name.toLowerCase() === name.toLowerCase(),</span>
648
+ <span class="cstat-no" title="statement not covered" > );</span>
649
+ <span class="cstat-no" title="statement not covered" ></span>
650
+ <span class="cstat-no" title="statement not covered" > if (existing) {</span>
651
+ <span class="cstat-no" title="statement not covered" > return existing;</span>
652
+ <span class="cstat-no" title="statement not covered" > }</span>
653
+ <span class="cstat-no" title="statement not covered" ></span>
654
+ <span class="cstat-no" title="statement not covered" > try {</span>
655
+ <span class="cstat-no" title="statement not covered" > return await this.api.addLabel({ name });</span>
656
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
657
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
658
+ <span class="cstat-no" title="statement not covered" > `Failed to create label ${name}: ${error instanceof Error ? error.message : String(error)}`,</span>
659
+ <span class="cstat-no" title="statement not covered" > );</span>
660
+ <span class="cstat-no" title="statement not covered" > }</span>
661
+ <span class="cstat-no" title="statement not covered" > }</span>
662
+ <span class="cstat-no" title="statement not covered" ></span>
663
+ <span class="cstat-no" title="statement not covered" > /**</span>
664
+ <span class="cstat-no" title="statement not covered" > * Test the API connection</span>
665
+ <span class="cstat-no" title="statement not covered" > */</span>
666
+ <span class="cstat-no" title="statement not covered" > async test(): Promise&lt;boolean&gt; {</span>
667
+ <span class="cstat-no" title="statement not covered" > try {</span>
668
+ <span class="cstat-no" title="statement not covered" > await this.getProjects();</span>
669
+ <span class="cstat-no" title="statement not covered" > return true;</span>
670
+ <span class="cstat-no" title="statement not covered" > } catch {</span>
671
+ <span class="cstat-no" title="statement not covered" > return false;</span>
672
+ <span class="cstat-no" title="statement not covered" > }</span>
673
+ <span class="cstat-no" title="statement not covered" > }</span>
674
+ <span class="cstat-no" title="statement not covered" >}</span>
675
+ &nbsp;</pre></td></tr></table></pre>
676
+
677
+ <div class='push'></div><!-- for sticky footer -->
678
+ </div><!-- /wrapper -->
679
+ <div class='footer quiet pad2 space-top1 center small'>
680
+ Code coverage generated by
681
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
682
+ at 2026-01-22T01:16:23.009Z
683
+ </div>
684
+ <script src="prettify.js"></script>
685
+ <script>
686
+ window.onload = function () {
687
+ prettyPrint();
688
+ };
689
+ </script>
690
+ <script src="sorter.js"></script>
691
+ <script src="block-navigation.js"></script>
692
+ </body>
693
+ </html>
694
+