@kombo-api/sdk 0.2.0 → 0.2.2

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.
Files changed (66) hide show
  1. package/esm/funcs/generalSendPassthroughRequest.d.ts +3 -0
  2. package/esm/funcs/generalSendPassthroughRequest.d.ts.map +1 -1
  3. package/esm/funcs/generalSendPassthroughRequest.js +3 -0
  4. package/esm/funcs/generalSendPassthroughRequest.js.map +1 -1
  5. package/esm/lib/config.d.ts +3 -3
  6. package/esm/lib/config.js +3 -3
  7. package/esm/models/deletehrisabsencesabsenceidpositiveresponse.d.ts.map +1 -1
  8. package/esm/models/deletehrisabsencesabsenceidpositiveresponse.js +2 -6
  9. package/esm/models/deletehrisabsencesabsenceidpositiveresponse.js.map +1 -1
  10. package/esm/models/getatsjobspositiveresponse.d.ts.map +1 -1
  11. package/esm/models/getatsjobspositiveresponse.js +6 -26
  12. package/esm/models/getatsjobspositiveresponse.js.map +1 -1
  13. package/esm/models/gethrisabsencespositiveresponse.d.ts.map +1 -1
  14. package/esm/models/gethrisabsencespositiveresponse.js +2 -6
  15. package/esm/models/gethrisabsencespositiveresponse.js.map +1 -1
  16. package/esm/models/gethrisemployeespositiveresponse.d.ts +4 -0
  17. package/esm/models/gethrisemployeespositiveresponse.d.ts.map +1 -1
  18. package/esm/models/gethrisemployeespositiveresponse.js +11 -46
  19. package/esm/models/gethrisemployeespositiveresponse.js.map +1 -1
  20. package/esm/models/gethrisemploymentspositiveresponse.d.ts.map +1 -1
  21. package/esm/models/gethrisemploymentspositiveresponse.js +4 -16
  22. package/esm/models/gethrisemploymentspositiveresponse.js.map +1 -1
  23. package/esm/models/postconnectcreatelinkrequestbody.d.ts +2 -0
  24. package/esm/models/postconnectcreatelinkrequestbody.d.ts.map +1 -1
  25. package/esm/models/postconnectcreatelinkrequestbody.js +2 -0
  26. package/esm/models/postconnectcreatelinkrequestbody.js.map +1 -1
  27. package/esm/models/posthrisabsencespositiveresponse.d.ts.map +1 -1
  28. package/esm/models/posthrisabsencespositiveresponse.js +2 -6
  29. package/esm/models/posthrisabsencespositiveresponse.js.map +1 -1
  30. package/esm/models/posthrisemployeesformpositiveresponse.d.ts +8 -0
  31. package/esm/models/posthrisemployeesformpositiveresponse.d.ts.map +1 -1
  32. package/esm/models/posthrisemployeesformpositiveresponse.js +2 -0
  33. package/esm/models/posthrisemployeesformpositiveresponse.js.map +1 -1
  34. package/esm/sdk/general.d.ts +3 -0
  35. package/esm/sdk/general.d.ts.map +1 -1
  36. package/esm/sdk/general.js +3 -0
  37. package/esm/sdk/general.js.map +1 -1
  38. package/esm/types/enums.d.ts +10 -6
  39. package/esm/types/enums.d.ts.map +1 -1
  40. package/esm/types/enums.js +38 -1
  41. package/esm/types/enums.js.map +1 -1
  42. package/esm/types/index.d.ts +0 -1
  43. package/esm/types/index.d.ts.map +1 -1
  44. package/esm/types/index.js +0 -1
  45. package/esm/types/index.js.map +1 -1
  46. package/examples/package-lock.json +4 -2
  47. package/jsr.json +1 -1
  48. package/package.json +6 -3
  49. package/src/funcs/generalSendPassthroughRequest.ts +3 -0
  50. package/src/lib/config.ts +3 -3
  51. package/src/models/deletehrisabsencesabsenceidpositiveresponse.ts +5 -6
  52. package/src/models/getatsjobspositiveresponse.ts +7 -26
  53. package/src/models/gethrisabsencespositiveresponse.ts +3 -6
  54. package/src/models/gethrisemployeespositiveresponse.ts +16 -46
  55. package/src/models/gethrisemploymentspositiveresponse.ts +5 -16
  56. package/src/models/postconnectcreatelinkrequestbody.ts +2 -0
  57. package/src/models/posthrisabsencespositiveresponse.ts +3 -6
  58. package/src/models/posthrisemployeesformpositiveresponse.ts +10 -0
  59. package/src/sdk/general.ts +3 -0
  60. package/src/types/enums.ts +55 -6
  61. package/src/types/index.ts +0 -1
  62. package/tests/basic-behavior.spec.ts +162 -0
  63. package/tests/error-handling.spec.ts +604 -0
  64. package/tests/helpers/test-context.ts +147 -0
  65. package/tests/job-board.spec.ts +32 -0
  66. package/vitest.config.ts +8 -0
@@ -0,0 +1,147 @@
1
+ import { describe, beforeAll, afterAll } from "vitest";
2
+ import nock from "nock";
3
+ import { Kombo } from "../../src/index";
4
+
5
+ export interface CapturedRequest {
6
+ method: string;
7
+ path: string;
8
+ headers: Record<string, string>;
9
+ body?: unknown;
10
+ }
11
+
12
+ export interface TestContextOptions {
13
+ apiKey?: string;
14
+ integrationId?: string | undefined;
15
+ }
16
+
17
+ export class TestContext {
18
+ readonly kombo: Kombo;
19
+ #capturedRequests: CapturedRequest[] = [];
20
+
21
+ constructor(options?: TestContextOptions) {
22
+ const apiKey = options?.apiKey ?? "test-api-key";
23
+ const integrationId =
24
+ options && "integrationId" in options
25
+ ? options.integrationId
26
+ : "test-integration-id";
27
+
28
+ this.kombo = new Kombo({
29
+ api_key: apiKey,
30
+ integration_id: integrationId,
31
+ });
32
+ }
33
+
34
+ mockEndpoint(config: {
35
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
36
+ path: string;
37
+ response: {
38
+ body: unknown;
39
+ statusCode?: number;
40
+ headers?: Record<string, string>;
41
+ };
42
+ delayResponseMs?: number;
43
+ }): void {
44
+ const { method, path, response } = config;
45
+ const statusCode = response.statusCode ?? 200;
46
+
47
+ const nockInstance = nock("https://api.kombo.dev");
48
+
49
+ // Set up the appropriate HTTP method
50
+ let interceptor;
51
+ switch (method) {
52
+ case "GET":
53
+ interceptor = nockInstance.get(path);
54
+ break;
55
+ case "POST":
56
+ interceptor = nockInstance.post(path);
57
+ break;
58
+ case "PUT":
59
+ interceptor = nockInstance.put(path);
60
+ break;
61
+ case "DELETE":
62
+ interceptor = nockInstance.delete(path);
63
+ break;
64
+ case "PATCH":
65
+ interceptor = nockInstance.patch(path);
66
+ break;
67
+ }
68
+
69
+ // Accept any query parameters for GET requests
70
+ if (method === "GET") {
71
+ interceptor = interceptor.query(true);
72
+ }
73
+
74
+ // Add connection delay if specified
75
+ if (config.delayResponseMs !== undefined) {
76
+ interceptor = interceptor.delay(config.delayResponseMs);
77
+ }
78
+
79
+ // Set up the reply handler to capture request details
80
+ const capturedRequests = this.#capturedRequests;
81
+ interceptor.reply(function (_uri: string, requestBody: unknown) {
82
+ const req = (this as any).req;
83
+
84
+ const captured: CapturedRequest = {
85
+ method: req.method || method,
86
+ path: req.path || "",
87
+ headers: req.headers as Record<string, string>,
88
+ };
89
+
90
+ // Capture body for non-GET requests
91
+ if (method !== "GET" && requestBody) {
92
+ captured.body = requestBody;
93
+ }
94
+
95
+ capturedRequests.push(captured);
96
+
97
+ // Set Content-Type header for JSON responses (unless overridden)
98
+ const headers: Record<string, string> = {};
99
+ if (
100
+ typeof response.body === "object" &&
101
+ !response.headers?.["Content-Type"]
102
+ ) {
103
+ headers["Content-Type"] = "application/json";
104
+ }
105
+
106
+ // Merge any provided headers
107
+ if (response.headers) {
108
+ Object.assign(headers, response.headers);
109
+ }
110
+
111
+ return [statusCode, response.body, headers];
112
+ });
113
+ }
114
+
115
+ getRequests(): CapturedRequest[] {
116
+ return [...this.#capturedRequests];
117
+ }
118
+
119
+ getLastRequest(): CapturedRequest {
120
+ const request = this.#capturedRequests[this.#capturedRequests.length - 1];
121
+ if (!request) {
122
+ throw new Error("No requests captured!");
123
+ }
124
+
125
+ return request;
126
+ }
127
+
128
+ clear(): void {
129
+ this.#capturedRequests.length = 0;
130
+ nock.cleanAll();
131
+ }
132
+ }
133
+
134
+ export function describeSdkSuite(name: string, fn: () => void) {
135
+ describe(name, () => {
136
+ beforeAll(() => {
137
+ nock.disableNetConnect();
138
+ });
139
+
140
+ afterAll(() => {
141
+ nock.cleanAll();
142
+ nock.enableNetConnect();
143
+ });
144
+
145
+ fn();
146
+ });
147
+ }
@@ -0,0 +1,32 @@
1
+ import { it, expect } from "vitest";
2
+ import { TestContext, describeSdkSuite } from "./helpers/test-context";
3
+
4
+ describeSdkSuite("Kombo ATS Jobs API", () => {
5
+ it("should make correct HTTP request for getJobs", async () => {
6
+ const ctx = new TestContext();
7
+
8
+ // Mock the API endpoint
9
+ ctx.mockEndpoint({
10
+ method: "GET",
11
+ path: "/v1/ats/jobs",
12
+ response: {
13
+ body: {
14
+ status: "success",
15
+ data: {
16
+ results: [],
17
+ next: null,
18
+ },
19
+ },
20
+ },
21
+ });
22
+
23
+ // Make the API call
24
+ const _jobs = await ctx.kombo.ats.getJobs({});
25
+
26
+ // Verify and snapshot the request details
27
+ const request = ctx.getLastRequest();
28
+ expect(request.path).toMatchInlineSnapshot(
29
+ `"/v1/ats/jobs?include_deleted=false&page_size=100"`
30
+ );
31
+ });
32
+ });
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from "vitest/config";
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ environment: "node",
6
+ include: ["tests/**/*.spec.ts"],
7
+ },
8
+ });