@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/dist/index.d.ts CHANGED
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @packageDocumentation
5
5
  */
6
- export { ClockifyApiClient, type ClockifyApiClientShape, type ClockifyClientError, layer, make } from "./ClockifyApiClient.js";
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 ClockifyApiConfigShape } from "./ClockifyApiConfig.js";
8
+ export { ClockifyApiConfig, type ClockifyApiConfigContract } from "./ClockifyApiConfig.js";
9
9
  export * as ClockifyApi from "./generated/ClockifyApi.js";
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,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,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAEvF,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAA"}
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,EAA+B,MAAM,wBAAwB,CAAA;AAEvF,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAA"}
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.0.3",
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-beta.98"
38
+ "effect": "4.0.0-rc.109"
39
39
  },
40
40
  "devDependencies": {
41
- "@effect/openapi-generator": "4.0.0-beta.98",
42
- "@effect/platform-node": "4.0.0-beta.98",
43
- "@effect/vitest": "4.0.0-beta.98",
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-beta.98",
46
- "prettier": "^3.9.5",
47
- "tsx": "^4.23.0",
48
- "typescript": "~6.0.3",
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": [
@@ -49,7 +49,7 @@ export interface GetTimeEntryParams {
49
49
  readonly hydrated?: boolean | undefined
50
50
  }
51
51
 
52
- export interface ClockifyApiClientShape {
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, ClockifyApiClientShape>()(
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 ? { 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 } : {})
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 ? {} : { hydrated: params.hydrated })
215
+ ...(!(params?.hydrated === undefined) && { hydrated: params.hydrated })
216
216
  }
217
217
  }),
218
218
  deleteTimeEntry: (workspaceId, timeEntryId) => api.deleteTimeEntry(workspaceId, timeEntryId, undefined),
@@ -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 ClockifyApiConfigShape {
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, ClockifyApiConfigShape>()(
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 ClockifyApiClientShape,
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 ClockifyApiConfigShape } from "./ClockifyApiConfig.js"
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
- expect(typeof file).not.toBe("string")
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
  })