@knpkv/clockify-api-client 1.0.3 → 1.1.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/CHANGELOG.md +16 -0
- package/dist/ClockifyApiClient.d.ts +2 -2
- package/dist/ClockifyApiClient.d.ts.map +1 -1
- package/dist/ClockifyApiClient.js +6 -6
- package/dist/ClockifyApiClient.js.map +1 -1
- package/dist/ClockifyApiConfig.d.ts +2 -2
- package/dist/ClockifyApiConfig.d.ts.map +1 -1
- package/dist/ClockifyApiConfig.js.map +1 -1
- package/dist/generated/ClockifyApi.d.ts.map +1 -1
- package/dist/generated/ClockifyApi.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/src/ClockifyApiClient.ts +8 -8
- package/src/ClockifyApiConfig.ts +2 -2
- package/src/index.ts +2 -2
- package/test/ClockifyApiClient.test.ts +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @packageDocumentation
|
|
5
5
|
*/
|
|
6
|
-
export { ClockifyApiClient, type
|
|
6
|
+
export { ClockifyApiClient, type ClockifyApiClientContract, type ClockifyClientError, layer, make } from "./ClockifyApiClient.js";
|
|
7
7
|
export type { AuthenticatedClockifyApi, CreateTimeEntryParams, GetTimeEntriesParams, GetTimeEntryParams, Project, StopTimeEntryParams, Tag, TimeEntry, TimeInterval, UpdateTimeEntryParams, User, Workspace, WorkspaceUser } from "./ClockifyApiClient.js";
|
|
8
|
-
export { ClockifyApiConfig, type
|
|
8
|
+
export { ClockifyApiConfig, type ClockifyApiConfigContract } from "./ClockifyApiConfig.js";
|
|
9
9
|
export * as ClockifyApi from "./generated/ClockifyApi.js";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,EACL,IAAI,EACL,MAAM,wBAAwB,CAAA;AAE/B,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,GAAG,EACH,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,IAAI,EACJ,SAAS,EACT,aAAa,EACd,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,iBAAiB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAE1F,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAA"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EAGjB,KAAK,EACL,IAAI,EACL,MAAM,wBAAwB,CAAA;AAkB/B,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EAGjB,KAAK,EACL,IAAI,EACL,MAAM,wBAAwB,CAAA;AAkB/B,OAAO,EAAE,iBAAiB,EAAkC,MAAM,wBAAwB,CAAA;AAE1F,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knpkv/clockify-api-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Effect-based Clockify REST API client",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "knpkv",
|
|
@@ -35,17 +35,17 @@
|
|
|
35
35
|
"access": "public"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"effect": "4.0.0-
|
|
38
|
+
"effect": "4.0.0-rc.109"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@effect/openapi-generator": "4.0.0-
|
|
42
|
-
"@effect/platform-node": "4.0.0-
|
|
43
|
-
"@effect/vitest": "4.0.0-
|
|
41
|
+
"@effect/openapi-generator": "4.0.0-rc.109",
|
|
42
|
+
"@effect/platform-node": "4.0.0-rc.109",
|
|
43
|
+
"@effect/vitest": "4.0.0-rc.109",
|
|
44
44
|
"@types/node": "latest",
|
|
45
|
-
"effect": "4.0.0-
|
|
46
|
-
"prettier": "^3.9.
|
|
47
|
-
"tsx": "^4.23.
|
|
48
|
-
"typescript": "
|
|
45
|
+
"effect": "4.0.0-rc.109",
|
|
46
|
+
"prettier": "^3.9.6",
|
|
47
|
+
"tsx": "^4.23.12",
|
|
48
|
+
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
49
49
|
"vitest": "^4.1.10"
|
|
50
50
|
},
|
|
51
51
|
"keywords": [
|
package/src/ClockifyApiClient.ts
CHANGED
|
@@ -49,7 +49,7 @@ export interface GetTimeEntryParams {
|
|
|
49
49
|
readonly hydrated?: boolean | undefined
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
export interface
|
|
52
|
+
export interface ClockifyApiClientContract {
|
|
53
53
|
readonly getUser: () => Effect.Effect<User, ClockifyClientError>
|
|
54
54
|
readonly getWorkspaceUsers?: (
|
|
55
55
|
workspaceId: string
|
|
@@ -127,7 +127,7 @@ export const make = (
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
export class ClockifyApiClient extends Context.Service<ClockifyApiClient,
|
|
130
|
+
export class ClockifyApiClient extends Context.Service<ClockifyApiClient, ClockifyApiClientContract>()(
|
|
131
131
|
"@knpkv/clockify-api-client/ClockifyApiClient"
|
|
132
132
|
) {
|
|
133
133
|
static readonly layer: Layer.Layer<ClockifyApiClient, never, ClockifyApiConfig | HttpClient.HttpClient> = Layer
|
|
@@ -187,11 +187,11 @@ export class ClockifyApiClient extends Context.Service<ClockifyApiClient, Clocki
|
|
|
187
187
|
getTimeEntries: (workspaceId, userId, params) =>
|
|
188
188
|
api.getTimeEntries(workspaceId, userId, {
|
|
189
189
|
params: {
|
|
190
|
-
...(params?.start !== undefined
|
|
191
|
-
...(params?.end !== undefined
|
|
192
|
-
...(params?.hydrated === undefined
|
|
193
|
-
...(params?.page !== undefined
|
|
194
|
-
...(params?.pageSize !== undefined
|
|
190
|
+
...((params?.start !== undefined) && { start: params.start }),
|
|
191
|
+
...((params?.end !== undefined) && { end: params.end }),
|
|
192
|
+
...(!(params?.hydrated === undefined) && { hydrated: params.hydrated }),
|
|
193
|
+
...((params?.page !== undefined) && { page: params.page }),
|
|
194
|
+
...((params?.pageSize !== undefined) && { "page-size": params.pageSize })
|
|
195
195
|
}
|
|
196
196
|
}),
|
|
197
197
|
getRunningTimer: (workspaceId, userId) =>
|
|
@@ -212,7 +212,7 @@ export class ClockifyApiClient extends Context.Service<ClockifyApiClient, Clocki
|
|
|
212
212
|
getTimeEntry: (workspaceId, timeEntryId, params) =>
|
|
213
213
|
api.getTimeEntry(workspaceId, timeEntryId, {
|
|
214
214
|
params: {
|
|
215
|
-
...(params?.hydrated === undefined
|
|
215
|
+
...(!(params?.hydrated === undefined) && { hydrated: params.hydrated })
|
|
216
216
|
}
|
|
217
217
|
}),
|
|
218
218
|
deleteTimeEntry: (workspaceId, timeEntryId) => api.deleteTimeEntry(workspaceId, timeEntryId, undefined),
|
package/src/ClockifyApiConfig.ts
CHANGED
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
import * as Context from "effect/Context"
|
|
14
14
|
import type * as Redacted from "effect/Redacted"
|
|
15
15
|
|
|
16
|
-
export interface
|
|
16
|
+
export interface ClockifyApiConfigContract {
|
|
17
17
|
readonly apiKey: Redacted.Redacted<string>
|
|
18
18
|
readonly workspaceId: string
|
|
19
19
|
readonly userId: string
|
|
20
20
|
readonly baseUrl: string
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export class ClockifyApiConfig extends Context.Service<ClockifyApiConfig,
|
|
23
|
+
export class ClockifyApiConfig extends Context.Service<ClockifyApiConfig, ClockifyApiConfigContract>()(
|
|
24
24
|
"@knpkv/clockify-api-client/ClockifyApiConfig"
|
|
25
25
|
) {}
|
package/src/index.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
export {
|
|
8
8
|
ClockifyApiClient,
|
|
9
|
-
type
|
|
9
|
+
type ClockifyApiClientContract,
|
|
10
10
|
type ClockifyClientError,
|
|
11
11
|
layer,
|
|
12
12
|
make
|
|
@@ -28,6 +28,6 @@ export type {
|
|
|
28
28
|
WorkspaceUser
|
|
29
29
|
} from "./ClockifyApiClient.js"
|
|
30
30
|
|
|
31
|
-
export { ClockifyApiConfig, type
|
|
31
|
+
export { ClockifyApiConfig, type ClockifyApiConfigContract } from "./ClockifyApiConfig.js"
|
|
32
32
|
|
|
33
33
|
export * as ClockifyApi from "./generated/ClockifyApi.js"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { describe, expect, it } from "@effect/vitest"
|
|
2
2
|
import * as Effect from "effect/Effect"
|
|
3
3
|
import * as Layer from "effect/Layer"
|
|
4
|
+
import * as Predicate from "effect/Predicate"
|
|
4
5
|
import * as Redacted from "effect/Redacted"
|
|
5
6
|
import * as HttpClient from "effect/unstable/http/HttpClient"
|
|
6
7
|
import type * as HttpClientRequest from "effect/unstable/http/HttpClientRequest"
|
|
@@ -273,8 +274,7 @@ describe("ClockifyApiClient", () => {
|
|
|
273
274
|
if (requests[0]?.body._tag !== "FormData") throw new Error("Expected a FormData request body")
|
|
274
275
|
const file = requests[0].body.formData.get("file")
|
|
275
276
|
expect(requests[0].body.formData).toBeInstanceOf(FormData)
|
|
276
|
-
|
|
277
|
-
if (file === null || typeof file === "string") throw new Error("Expected a file field")
|
|
277
|
+
if (file === null || Predicate.isString(file)) throw new Error("Expected a file field")
|
|
278
278
|
expect(yield* Effect.promise(() => file.text())).toBe("avatar bytes")
|
|
279
279
|
expect(requests[0]?.headers["x-api-key"]).toBe("secret")
|
|
280
280
|
})
|