@kulkan/kulterra-api-client 1.3.1 → 1.3.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.
package/README.md CHANGED
@@ -1,181 +1,236 @@
1
1
  # `@kulkan/kulterra-api-client`
2
2
 
3
- Typed HTTP client for the Truffa API. Consumed by web and mobile apps. **No baked-in base URL:** pass a preconfigured HTTP layer (typically an [Axios](https://axios-http.com/) instance with `baseURL` set). Request and response shapes come from [`@kulkan/kulterra-contracts`](https://www.npmjs.com/package/@kulkan/contracts).
3
+ Typed HTTP client for the Kulterra API. It is intended for web, mobile, and other TypeScript consumers.
4
+
5
+ The package does not bake in a base URL. Pass a preconfigured HTTP layer through `createApiClient({ http })`. Request and response contracts come from `@kulkan/kulterra-contracts`.
4
6
 
5
7
  ## Requirements
6
8
 
7
9
  - **Node.js** ≥ 18.18
8
- - **Peer dependency:** `@kulkan/kulterra-contracts` **≥ 1.1.0** (auth types and shared envelopes)
10
+ - **Peer dependency:** `@kulkan/kulterra-contracts` (see `package.json` for the exact supported version range)
9
11
 
10
12
  ## Installation
11
13
 
12
14
  ```bash
13
15
  pnpm add @kulkan/kulterra-api-client @kulkan/kulterra-contracts
16
+
14
17
  # or
15
18
  npm install @kulkan/kulterra-api-client @kulkan/kulterra-contracts
16
19
  ```
17
20
 
18
21
  ## What ships today
19
22
 
20
- | Export | Description |
21
- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
22
- | `createApiClient(options)` | Factory returning `healthCheck` + **`auth`** namespace |
23
- | `ApiClient` / `CreateApiClientOptions` | Typed client and `{ http: HttpClient }` options |
24
- | `HttpClient` | **`get`** and **`post`** (minimal surface compatible with Axios) |
25
- | `HttpGet` / `HttpPost` / `HttpPatch` | Method signatures |
26
- | Named auth helpers | `postRegister`, `postLogin`, `getGoogleOAuthStart`, `postGoogleOAuthCallback`, `postRefresh`, `postLogout`, `getMe` (see `src/endpoints/auth.ts`) |
27
- | Named user helpers | `getUsers`, `getUserById`, `patchUpdateMe`, `patchUpdateRoleUserByAdmin`, `patchUpdateUserBySAdmin` (see `src/endpoints/user.ts`) |
28
- | Named company helpers | `getCompanies`, `getCompanyById`, `getMyCompany`, `patchUpdateCompanyBySAdmin`, `patchUpdateMyCompany`, `postCreateCompany` (see `src/endpoints/company.ts`) |
29
- | Named project helpers |
30
- | `getMyProjectBySlug`, `getMyProjects`, `getProjectByCompanyAndSlug`, `getProjectsByCompany`, `getProjects`, `patchUpdateProjectByAdmin`, `patchUpdateProjectBySAdmin`, `postCreateProjectByAdmin`, `postCreateProjectBySAdmin` (see `src/endpoints/project.ts`) |
31
- | Named property helpers |
32
-
33
- `getMyProperties`,
34
- `getMyPropertyById`,
35
- `getProperties`,
36
- `getPropertiesByAdmin`,
37
- `getPropertiesByProject`, `getPropertiesByProjectByAdmin`, `getPropertyByProjectAndCode`, `getPropertyByProjectAndCodeByAdmin`, `patchUpdatePropertyByAdmin`, `patchUpdatePropertyBySAdmin`, `postCreatePropertyByAdmin`, `postCreatePropertyBySAdmin` (see `src/endpoints/property.ts`) |
38
-
39
- ### Endpoints implemented
40
-
41
- | HTTP | Path | Client |
23
+ | Export | Description |
24
+ | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
25
+ | `createApiClient(options)` | Factory that wires the provided `HttpClient` into the API namespaces and `healthCheck()` |
26
+ | `ApiClient` / `CreateApiClientOptions` | Typed client and `{ http: HttpClient }` options |
27
+ | `HttpClient` | HTTP abstraction used by the package |
28
+ | `HttpGet` / `HttpPost` / `HttpPatch` | Supported HTTP method signatures |
29
+ | Auth helpers | `postRegister`, `postLogin`, `getGoogleOAuthStart`, `postGoogleOAuthCallback`, `postRefresh`, `postLogout`, `getMe` |
30
+ | User helpers | `getUsers`, `getUserById`, `patchUpdateMe`, `patchUpdateUserRoleByAdmin`, `patchUpdateUserBySAdmin` |
31
+ | Company helpers | `getCompanies`, `getCompanyBySlug`, `getMyCompany`, `postCreateCompany`, `patchUpdateMyCompany`, `patchUpdateCompanyBySAdmin` |
32
+ | Project helpers | `getProjects`, `getMyProjects`, `getMyProjectById`, `getProjectByCompanyAndSlug`, `getProjectsByCompany`, `postCreateProject`, `patchUpdateProject` |
33
+ | Property helpers | `getProperties`, `getMyProperties`, `getMyPropertyById`, `getPropertiesByProject`, `getPropertyByProjectAndCode`, `postCreateProperty`, `patchUpdateProperty` |
34
+
35
+ ## Endpoints implemented
36
+
37
+ All resource endpoints below require `Authorization: Bearer <accessToken>` unless noted otherwise.
38
+
39
+ ### Health
40
+
41
+ | HTTP | Path | Helper |
42
42
  | ----- | ---------------------- | ---------------------- |
43
43
  | `GET` | `/api/v1/health-check` | `client.healthCheck()` |
44
44
 
45
- `USER ROUTES`
46
- | `GET` | `/api/v1/users/` | `client.user.users(userQuery, accessToken)` or `getUsers(http, userQuery, accessToken)` |
47
- | `GET` | `/api/v1/users/:userId` | `client.user.userById(accessToken, { userId })` or `getUserById(http, accessToken, { userId })` |
48
- | `PATCH` | `/api/v1/users/me` | `client.users.updateMe(accessToken, patch)` or `patchUpdateMe(http, accessToken, patch)` |
49
- | `PATCH` | `/api/v1/users/:id/role` | `client.user.updateRoleUserByAdmin({ id }, accessToken, body)` or `patchUpdateRoleUserByAdmin(http, accessToken, { id }, body)` |
50
- | `PATCH` | `/api/v1/users/:userId` | `client.users.updateUserBySAdmin({ userId }, accessToken, patch)` or `patchUpdateUserBySAdmin(http, { userId }, accessToken, patch)` |
51
-
52
- `COMPANY ROUTES`
53
- | `GET` | `/api/v1/companies/` | `client.company.companies(userQuery, accessToken)` or `getCompanies(http, accessToken, companyQuery)` |
54
- | `GET` | `/api/v1/companies/my` | `client.company.myCompany({ userId }, accessToken)` or `getMyCompany(http, accessToken)` |
55
- | `GET` | `/api/v1/companies/:companyId` | `client.company.companyById(patch, accessToken)` or `getCompanyById(http, accessToken, { companyId })` |
56
- | `POST` | `/api/v1/companies` | `client.company.createCompany({ userId }, patch, accessToken)` or `postCreateCompany(http, accessToken, newCompanyRequest)` |
57
- | `PATCH` | `/api/v1/companies/my` | `client.company.updateMyCompany({ userId }, patch, accessToken)` or `patchUpdateMyCompany(http, accessToken, patch)` |
58
- | `PATCH` | `/api/v1/companies/:id` | `client.company.updateCompanyBySAdmin({ userId }, patch, accessToken)` or `patchUpdateCompanyBySAdmin(http, accessToken, { companyId }, patch)` |
59
-
60
- `PROJECT ROUTES`
61
- | `GET` | `/api/v1/companies/projects` | `client.project.projects(accessToken, projectQuery)` or `getProjects(http, accessToken, projectQuery)` |
62
- | `GET` | `/api/v1/companies/my/projects` | `client.project.myProjects(accessToken, projectQuery)` or `getMyProjects(http, accessToken, projectQuery)` |
63
- | `GET` | `/api/v1/companies/my/projects/:projectSlug` | `client.project.myProjectBySlug(accessToken, { projectSlug })` or `getMyProjectBySlug(http, accessToken, { projectSlug })` |
64
- | `GET` | `/api/v1/companies/:companySlug/projects/:projectSlug` | `client.project.projectByCompanyAndSlug(accessToken, { companySlug, projectSlug })` or `getProjectByCompanyAndSlug(http, accessToken, { companySlug, projectSlug })` |
65
- | `GET` | `/api/v1/companies/:companySlug/projects` | `client.project.projectsByCompany(accessToken, { companySlug }, projectQuery)` or `getProjectsByCompany(http, accessToken, { companySlug }, projectQuery)` |
66
- | `POST` | `/api/v1/companies/my/projects` | `client.project.createProjectByAdmin(accessToken, newProjectRequest)` or `postCreateProjectByAdmin(http, accessToken, newProjectRequest)` |
67
- | `POST` | `/api/v1/companies/:companySlug/projects` | `client.project.createProjectBySAdmin(accessToken, { companySlug }, newProjectRequest)` or `postCreateProjectBySAdmin(http, accessToken, { companySlug }, newProjectRequest)` |
68
- | `PATCH` | `/api/v1/companies/my/projects/:projectSlug` | `client.project.updateProjectByAdmin(accessToken, { projectSlug }, patch)` or `patchUpdateProjectByAdmin(http, accessToken, { projectSlug }, patch)` |
69
- | `PATCH` | `/api/v1/companies/:companySlug/projects/:projectSlug` | `client.project.updateProjectBySAdmin(accessToken, { companySlug, projectSlug }, patch)` or `patchUpdateProjectBySAdmin(http, accessToken, { companySlug, projectSlug }, patch)` |
70
-
71
- `PROPERTY ROUTES`
72
- | `GET` | `/api/v1/properties` | `client.property.properties(accessToken, propertyQuery)` or `getProperties(http, accessToken, propertyQuery)` |
73
- | `GET` | `/api/v1/properties/my` | `client.property.myProperties(accessToken, propertyQuery)` or `getMyProperties(http, accessToken, propertyQuery)` |
74
- | `GET` | `/api/v1/properties/my/:propertyId` | `client.property.myPropertyById(accessToken, { propertyId })` or `getMyPropertyById(http, accessToken, { propertyId })` |
75
- | `GET` | `/api/v1/companies/my/projects/properties` | `client.property.propertiesByAdmin(accessToken, propertyQuery)` or `getPropertiesByAdmin(http, accessToken, propertyQuery)` |
76
- | `GET` | `/api/v1/companies/my/projects/:projectSlug/properties` | `client.property.propertiesByProjectByAdmin: (accessToken, { projectSlug }, propertyQuery)` or `getPropertiesByProjectByAdmin(http, accessToken, { projectSlug }, propertyQuery)` |
77
- | `GET` | `/api/v1/companies/my/projects/:projectSlug/properties/:propertyCode` | `client.property.propertyByProjectAndCodeByAdmin: (accessToken, { projectSlug, propertyCode })` or `getPropertyByProjectAndCodeByAdmin(http, accessToken, { projectSlug, propertyCode })` |
78
- | `GET` | `/api/v1/companies/:companySlug/projects/:projectSlug/properties` | `client.property.propertiesByProject: (accessToken, { companySlug, projectSlug }, propertyQuery)` or `getPropertiesByProject(http, accessToken, { companySlug, projectSlug }, propertyQuery)` |
79
- | `GET` | `/api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode` | `client.property.propertyByProjectAndCode: (accessToken, { companySlug, projectSlug, propertyCode })` or `getPropertyByProjectAndCode(http, accessToken, { companySlug, projectSlug, propertyCode })` |
80
- | `POST` | `/api/v1/companies/my/projects/:projectSlug/properties` | `client.property.createPropertyByAdmin: (accessToken, { projectSlug }, newPropertyRequest)` or `postCreatePropertyByAdmin(http, accessToken, { projectSlug }, newPropertyRequest)` |
81
- | `POST` | `/api/v1/companies/:companySlug/projects/:projectSlug/properties` | `client.property.createPropertyBySAdmin: (accessToken, { companySlug, projectSlug }, newPropertyRequest)` or `postCreatePropertyBySAdmin(http, accessToken, { companySlug, projectSlug }, newPropertyRequest)` |
82
- | `PATCH` | `/api/v1/companies/my/projects/:projectSlug/properties/:propertyCode` | `client.property.updatePropertyByAdmin: (accessToken, { projectSlug, propertyCode }, patch)` or `patchUpdatePropertyByAdmin(http, accessToken, { projectSlug, propertyCode }, patch)` |
83
- | `PATCH` | `/api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode` | `client.property.updatePropertyBySAdmin: (accessToken, { companySlug, projectSlug, propertyCode }, patch)` or `patchUpdatePropertyBySAdmin(http, accessToken, { companySlug, projectSlug, propertyCode }, patch)` |
84
-
85
- `AUTH ROUTES`
86
- | `GET` | `/api/v1/auth/oauth/google/start?redirectUri=...` | `client.auth.getGoogleOAuthStart(redirectUri)` or `getGoogleOAuthStart(http, redirectUri)` |
87
- | `GET` | `/api/v1/auth/me` | `client.auth.me(accessToken)` or `getMe(http, accessToken)` |
88
- | `POST` | `/api/v1/auth/register` | `client.auth.register(body)` or `postRegister(http, body)` |
89
- | `POST` | `/api/v1/auth/login` | `client.auth.login(body)` or `postLogin(http, body)` |
90
- | `POST` | `/api/v1/auth/oauth/google/callback` | `client.auth.postGoogleOAuthCallback(body)` or `postGoogleOAuthCallback(http, body)` |
91
- | `POST` | `/api/v1/auth/refresh` | `client.auth.refresh(body)` or `postRefresh(http, body)` |
92
- | `POST` | `/api/v1/auth/logout` | `client.auth.logout(body)` or `postLogout(http, body)` |
93
-
94
- Responses follow **`IApiResponse<T>`** from contracts (`success`, `data`, etc.). Auth session payloads are **`AuthSessionResponse`** (`TokenPair` + `user`). **`logout`** returns **204** with no JSON body.
95
- User session payloads are **`IPaginatedByTokenResponse<T>`, `ToAdminUsersResponse`, `ToSAdminUsersResponse` **`updateRoleUserByAdmin`, `updateUserBySAdmin`** returns **204\*\* with no JSON body.
96
- Company session payloads are **`IPaginatedByTokenResponse<T>`, `PublicCompanyResponse`, `SAdminCompanyResponse`, `AdminCompanyResponse` **`updateMyCompany`, `updateCompanyBySAdmin`** returns **204\*\* with no JSON body.
97
- Project session payloads are **`IPaginatedByTokenResponse<T>`, `ProjectResponse`, `PublicProjectResponse`, `OwnerProjectResponse` **`updateProjectByAdmin`, `updateProjectBySAdmin`** returns **204\*\* with no JSON body.
98
- Property session payloads are **`IPaginatedByTokenResponse<T>`, `PropertyResponse`, `PublicPropertyResponse`, `BuyerPropertyResponse` **`updatePropertyByAdmin`, `updatePropertyBySAdmin`** returns **204\*\* with no JSON body.
99
-
100
- ### Usage example (Axios)
101
-
102
- Paths are **relative to `baseURL`** (e.g. `https://api.example.com`).
103
-
104
- ```typescript
45
+ ### Auth routes
46
+
47
+ | HTTP | Path | Helper |
48
+ | ------ | ------------------------------------------------- | ---------------------------------------- |
49
+ | `POST` | `/api/v1/auth/register` | `postRegister(http, body)` |
50
+ | `POST` | `/api/v1/auth/login` | `postLogin(http, body)` |
51
+ | `GET` | `/api/v1/auth/oauth/google/start?redirectUri=...` | `getGoogleOAuthStart(http, redirectUri)` |
52
+ | `POST` | `/api/v1/auth/oauth/google/callback` | `postGoogleOAuthCallback(http, body)` |
53
+ | `POST` | `/api/v1/auth/refresh` | `postRefresh(http, body)` |
54
+ | `POST` | `/api/v1/auth/logout` | `postLogout(http, body)` |
55
+ | `GET` | `/api/v1/auth/me` | `getMe(http, accessToken)` |
56
+
57
+ `register`, `login`, Google OAuth start/callback, and `refresh` do not require an access token. `me` does.
58
+
59
+ ### User routes
60
+
61
+ | HTTP | Path | Helper |
62
+ | ------- | ------------------------ | --------------------------------- |
63
+ | `GET` | `/api/v1/users` | `getUsers(...)` |
64
+ | `GET` | `/api/v1/users/:userId` | `getUserById(...)` |
65
+ | `PATCH` | `/api/v1/users/me` | `patchUpdateMe(...)` |
66
+ | `PATCH` | `/api/v1/users/:id/role` | `patchUpdateUserRoleByAdmin(...)` |
67
+ | `PATCH` | `/api/v1/users/:userId` | `patchUpdateUserBySAdmin(...)` |
68
+
69
+ ### Company routes
70
+
71
+ | HTTP | Path | Helper |
72
+ | ------- | -------------------------------- | ------------------------------------------------------ |
73
+ | `GET` | `/api/v1/companies` | `getCompanies(http, accessToken, companyQuery)` |
74
+ | `GET` | `/api/v1/me/company` | `getMyCompany(http, accessToken)` |
75
+ | `GET` | `/api/v1/companies/:companySlug` | `getCompanyBySlug(http, accessToken, { companySlug })` |
76
+ | `POST` | `/api/v1/companies` | `postCreateCompany(...)` |
77
+ | `PATCH` | `/api/v1/me/company` | `patchUpdateMyCompany(...)` |
78
+ | `PATCH` | `/api/v1/companies/:companyId` | `patchUpdateCompanyBySAdmin(...)` |
79
+
80
+ ### Project routes
81
+
82
+ | HTTP | Path | Helper |
83
+ | ------- | ------------------------------------------------------ | ----------------------------------------------------------------------------- |
84
+ | `GET` | `/api/v1/projects` | `getProjects(http, accessToken, projectQuery)` |
85
+ | `GET` | `/api/v1/me/projects` | `getMyProjects(http, accessToken, projectQuery)` |
86
+ | `GET` | `/api/v1/me/projects/:projectId` | `getMyProjectById(http, accessToken, { projectId })` |
87
+ | `GET` | `/api/v1/companies/:companySlug/projects` | `getProjectsByCompany(http, accessToken, { companySlug }, projectQuery)` |
88
+ | `GET` | `/api/v1/companies/:companySlug/projects/:projectSlug` | `getProjectByCompanyAndSlug(http, accessToken, { companySlug, projectSlug })` |
89
+ | `POST` | `/api/v1/companies/:companySlug/projects` | `postCreateProject(http, accessToken, { companySlug }, newProjectRequest)` |
90
+ | `PATCH` | `/api/v1/companies/:companySlug/projects/:projectSlug` | `patchUpdateProject(http, accessToken, { companySlug, projectSlug }, patch)` |
91
+
92
+ `getProjects()` targets **`GET /api/v1/projects`**.
93
+ `getProjectsByCompany()` targets **`GET /api/v1/companies/:companySlug/projects`**.
94
+
95
+ These are intentionally different endpoints.
96
+
97
+ ### Property routes
98
+
99
+ | HTTP | Path | Helper |
100
+ | ------- | ------------------------------------------------------------------------------- | ------------------------------------------------------ |
101
+ | `GET` | `/api/v1/properties` | `getProperties(http, accessToken, propertyQuery)` |
102
+ | `GET` | `/api/v1/me/properties` | `getMyProperties(http, accessToken, propertyQuery)` |
103
+ | `GET` | `/api/v1/me/properties/:propertyId` | `getMyPropertyById(http, accessToken, { propertyId })` |
104
+ | `GET` | `/api/v1/companies/:companySlug/projects/:projectSlug/properties` | `getPropertiesByProject(...)` |
105
+ | `GET` | `/api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode` | `getPropertyByProjectAndCode(...)` |
106
+ | `POST` | `/api/v1/companies/:companySlug/projects/:projectSlug/properties` | `postCreateProperty(...)` |
107
+ | `PATCH` | `/api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode` | `patchUpdateProperty(...)` |
108
+
109
+ ## Response shapes
110
+
111
+ Responses use `IApiResponse<T>` from `@kulkan/kulterra-contracts`.
112
+
113
+ Common payloads include:
114
+
115
+ - `AuthSessionResponse`
116
+ - `PublicCompanyResponse`
117
+ - `SAdminCompanyResponse`
118
+ - `ProjectResponse`
119
+ - `PublicProjectResponse`
120
+ - `OwnerProjectResponse`
121
+ - `PropertyResponse`
122
+ - `PublicPropertyResponse`
123
+ - `BuyerPropertyResponse`
124
+ - `IPaginatedResponse<T>`
125
+ - `IPaginatedByTokenResponse<T>`
126
+
127
+ Write endpoints that are defined as `204 No Content` return no JSON body.
128
+
129
+ ## Usage example
130
+
131
+ Paths are relative to the base URL configured in the provided HTTP client.
132
+
133
+ ```ts
105
134
  import axios from 'axios';
106
135
  import { createApiClient } from '@kulkan/kulterra-api-client';
107
136
 
108
137
  const http = axios.create({
109
138
  baseURL: process.env.API_BASE_URL,
110
139
  timeout: 30_000,
111
- headers: { 'Content-Type': 'application/json' },
140
+ headers: {
141
+ 'Content-Type': 'application/json',
142
+ },
112
143
  });
113
144
 
114
145
  const api = createApiClient({ http });
115
146
 
116
147
  const health = await api.healthCheck();
117
- const session = await api.auth.login({ email: 'user@example.com', password: '********' });
118
- // session.data — IApiResponse<AuthSessionResponse>; use session.data?.data for the inner payload when using Axios default response shape
119
- ```
120
148
 
121
- Axios returns `{ data: body }` where `body` is the full JSON from the server. For `IApiResponse<AuthSessionResponse>`, the **envelope** is in `response.data`; the **`AuthSessionResponse`** is typically `response.data.data` (depending on your typings).
149
+ const session = await api.auth.login({
150
+ email: 'user@example.com',
151
+ password: '********',
152
+ });
153
+ ```
122
154
 
123
- ### OAuth (mobile / web)
155
+ When using Axios, the package expects an HTTP layer with the `{ data: T }` response shape.
124
156
 
125
- 1. Call **`getGoogleOAuthStart`** with the same **`redirectUri`** you registered in Auth0 and in the API’s `OAUTH_ALLOWED_REDIRECT_URIS`.
126
- 2. Open **`authorizationUrl`** in a browser / `ASWebAuthenticationSession`.
127
- 3. After redirect, **`POST`** the **`code`**, **`state`**, and **`redirectUri`** to **`postGoogleOAuthCallback`**.
157
+ ## OAuth (mobile / web)
128
158
 
129
- ### Why a factory?
159
+ 1. Call `getGoogleOAuthStart` with the same `redirectUri` registered in Auth0 and allowed by the API.
160
+ 2. Open the returned `authorizationUrl`.
161
+ 3. After the redirect, send `code`, `state`, and `redirectUri` to `postGoogleOAuthCallback`.
130
162
 
131
- `createApiClient({ http })` keeps env and transport out of this package, supports multiple backends in one app, and makes tests easy with a mock `http` object.
163
+ ## Why a factory?
132
164
 
133
- ---
165
+ `createApiClient({ http })` keeps transport and environment configuration outside the package, supports different consumers, and makes the client straightforward to test with a fake `HttpClient`.
134
166
 
135
167
  ## Architecture
136
168
 
137
- 1. **`HttpClient`** — abstraction over GET/POST (`{ data: T }` shape, Axios-compatible).
138
- 2. **`src/endpoints/*.ts`** — thin functions: `(http, …args) => Promise<…>`.
139
- 3. **`createApiClient`** — wires `http` into endpoints.
140
- 4. **`@kulkan/kulterra-contracts`** — DTOs (`RegisterRequest`, `AuthSessionResponse`, …).
169
+ 1. **`HttpClient`** — abstraction over `GET`, `POST`, and `PATCH`.
170
+ 2. **`src/endpoints/*.ts`** — thin endpoint functions.
171
+ 3. **`createApiClient`** — wires the HTTP implementation into the endpoint namespaces.
172
+ 4. **`@kulkan/kulterra-contracts`** — shared DTOs, request types, response types, enums, and envelopes.
141
173
 
142
174
  ### Extending further
143
175
 
144
- If you add PUT/DELETE, extend **`HttpClient`** in `src/http-client.ts` and add endpoint modules. For request config (query params, headers), align types with your adapter (Axios uses a second `config` argument on `get`/`post`).
176
+ If PUT or DELETE support is added later, extend `HttpClient` in `src/http-client.ts` and add the corresponding endpoint helpers.
145
177
 
146
- ---
178
+ For query params and headers, keep the adapter compatible with the request config expected by the package.
147
179
 
148
180
  ## Testing
149
181
 
150
- Inject a fake **`HttpClient`** with **`get`** and **`post`** mocks and assert URLs and payloads.
182
+ Inject a fake `HttpClient` and assert the generated URL, params, headers, and body.
151
183
 
152
- ```typescript
184
+ ```ts
153
185
  import type { HttpClient } from '@kulkan/kulterra-api-client';
154
186
  import { createApiClient } from '@kulkan/kulterra-api-client';
155
187
 
156
188
  const http: HttpClient = {
157
- get: jest.fn().mockResolvedValue({ data: { success: true, data: {} } }),
158
- post: jest.fn().mockResolvedValue({ data: { success: true, data: {} } }),
189
+ get: jest.fn().mockResolvedValue({
190
+ data: { success: true, data: {} },
191
+ }),
192
+ post: jest.fn().mockResolvedValue({
193
+ data: { success: true, data: {} },
194
+ }),
195
+ patch: jest.fn().mockResolvedValue({
196
+ data: undefined,
197
+ }),
159
198
  };
160
199
 
161
200
  const api = createApiClient({ http });
201
+
162
202
  await api.healthCheck();
203
+
163
204
  expect(http.get).toHaveBeenCalledWith('/api/v1/health-check', undefined);
164
205
  ```
165
206
 
166
- ---
207
+ For project endpoint tests, explicitly assert that:
208
+
209
+ ```ts
210
+ await api.project.projects(accessToken, projectQuery);
211
+ ```
212
+
213
+ requests:
167
214
 
168
- ## Development (this repository)
215
+ ```text
216
+ /api/v1/projects
217
+ ```
218
+
219
+ and not:
220
+
221
+ ```text
222
+ /api/v1/companies/projects
223
+ ```
169
224
 
170
- | Script | Purpose |
171
- | ------------------------- | ------------------------------------ |
172
- | `pnpm run build` | `tsup` → `dist/` (CJS, ESM, `.d.ts`) |
173
- | `pnpm run typecheck` | `tsc --noEmit` |
174
- | `pnpm run lint` | ESLint |
175
- | `pnpm run validate` | typecheck + lint + Prettier check |
176
- | `pnpm run prepublishOnly` | validate + build before publish |
225
+ ## Development
177
226
 
178
- ---
227
+ | Script | Purpose |
228
+ | ------------------------- | --------------------------------- |
229
+ | `pnpm run build` | `tsup` → `dist/` |
230
+ | `pnpm run typecheck` | `tsc --noEmit` |
231
+ | `pnpm run lint` | ESLint |
232
+ | `pnpm run validate` | Typecheck + lint + Prettier check |
233
+ | `pnpm run prepublishOnly` | Validate + build before publish |
179
234
 
180
235
  ## Changelog
181
236
 
package/dist/index.js CHANGED
@@ -136,7 +136,7 @@ async function patchUpdateCompanyBySAdmin(http, accessToken, { companyId }, patc
136
136
  var API_BASE3 = "/api/v1";
137
137
  var COMPANY_BASE2 = `${API_BASE3}/companies`;
138
138
  async function getProjects(http, accessToken, projectQuery) {
139
- const { data } = await http.get(`${COMPANY_BASE2}/projects`, {
139
+ const { data } = await http.get(`${API_BASE3}/projects`, {
140
140
  params: projectQuery,
141
141
  headers: { Authorization: `Bearer ${accessToken}` }
142
142
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/endpoints/health-check.ts","../src/endpoints/auth.ts","../src/endpoints/user.ts","../src/endpoints/company.ts","../src/endpoints/project.ts","../src/endpoints/property.ts","../src/create-api-client.ts"],"names":["API_BASE","COMPANY_BASE"],"mappings":"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","file":"index.js","sourcesContent":["import type { IApiResponse, HealthCheck } from '@kulkan/kulterra-contracts';\nimport type { HttpClient } from '../http-client';\n\n/** Same path as `/api/${v1}/health-check` on the server when `v1` is the string `'v1'`. */\nconst HEALTH_CHECK_PATH = '/api/v1/health-check' as const;\n\n/**\n * GET /api/v1/health-check — server liveness.\n *\n * Returns the full JSON the server sends (`IApiResponse<HealthCheck>`).\n *\n * **Why not `data.data` here?** Adapters like Axios wrap the HTTP body in a property also\n * called `data`. That outer `data` is the entire `res.json(...)` object. The inner\n * `IApiResponse.data` is the `HealthCheck` payload — use `.data` on the **returned** value,\n * e.g. `(await fetchHealthCheck(http)).data`.\n */\nexport async function fetchHealthCheck(http: HttpClient): Promise<IApiResponse<HealthCheck>> {\n const { data: body } = await http.get<IApiResponse<HealthCheck>>(HEALTH_CHECK_PATH);\n\n return body;\n}\n","import type {\n AuthSessionResponse,\n AuthUserResponse,\n IApiResponse,\n LoginRequest,\n LogoutRequest,\n OAuthGoogleCallbackRequest,\n OAuthGoogleStartResponse,\n RefreshRequest,\n RegisterRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst AUTH_BASE = '/api/v1/auth' as const;\n\n/**\n * POST /api/v1/auth/register\n */\nexport async function postRegister(\n http: HttpClient,\n body: RegisterRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, RegisterRequest>(\n `${AUTH_BASE}/register`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/login\n */\nexport async function postLogin(\n http: HttpClient,\n body: LoginRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, LoginRequest>(\n `${AUTH_BASE}/login`,\n body,\n );\n return data;\n}\n\n/**\n * GET /api/v1/auth/oauth/google/start?redirectUri=...\n */\nexport async function getGoogleOAuthStart(\n http: HttpClient,\n redirectUri: string,\n): Promise<IApiResponse<OAuthGoogleStartResponse>> {\n const q = new URLSearchParams({ redirectUri });\n const { data } = await http.get<IApiResponse<OAuthGoogleStartResponse>>(\n `${AUTH_BASE}/oauth/google/start?${q.toString()}`,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/oauth/google/callback\n */\nexport async function postGoogleOAuthCallback(\n http: HttpClient,\n body: OAuthGoogleCallbackRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, OAuthGoogleCallbackRequest>(\n `${AUTH_BASE}/oauth/google/callback`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/refresh\n */\nexport async function postRefresh(\n http: HttpClient,\n body: RefreshRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, RefreshRequest>(\n `${AUTH_BASE}/refresh`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/logout — 204 No Content (no JSON body).\n */\nexport async function postLogout(http: HttpClient, body: LogoutRequest): Promise<void> {\n await http.post<undefined, LogoutRequest>(`${AUTH_BASE}/logout`, body);\n}\n\n/**\n * GET /api/v1/auth/me — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMe(\n http: HttpClient,\n accessToken: string,\n): Promise<IApiResponse<AuthUserResponse>> {\n const { data } = await http.get<IApiResponse<AuthUserResponse>>(`${AUTH_BASE}/me`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n","import type {\n GetUsersQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n ToAdminUsersResponse,\n ToSAdminUsersResponse,\n UpdateUserBySAdminRequest,\n UpdateUserByUserRequest,\n UpdateUserRoleByAdminRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst USER_BASE = `${API_BASE}/users` as const;\n\n// GET\n\n/**\n * GET /api/v1/users — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getUsers(\n http: HttpClient,\n accessToken: string,\n userQuery: GetUsersQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ToAdminUsersResponse | ToSAdminUsersResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ToAdminUsersResponse | ToSAdminUsersResponse>>\n >(USER_BASE, {\n params: userQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/users/:userId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getUserById(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n): Promise<IApiResponse<ToSAdminUsersResponse>> {\n const { data } = await http.get<IApiResponse<ToSAdminUsersResponse>>(`${USER_BASE}/${userId}`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/me — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateMe(\n http: HttpClient,\n accessToken: string,\n patch: UpdateUserByUserRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserByUserRequest>(`${API_BASE}/me`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/users/:userId/role — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateUserRoleByAdmin(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n body: UpdateUserRoleByAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserRoleByAdminRequest>(`${USER_BASE}/${userId}/role`, body, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/users/:userId — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateUserBySAdmin(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n patch: UpdateUserBySAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserBySAdminRequest>(`${USER_BASE}/${userId}`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n","import type {\n AdminCompanyResponse,\n CreateCompanyRequest,\n GetCompaniesQueryRequest,\n IApiResponse,\n IPaginatedResponse,\n PublicCompanyResponse,\n SAdminCompanyResponse,\n UpdateCompanyByAdminRequest,\n UpdateCompanyBySAdminRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/companies — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getCompanies(\n http: HttpClient,\n accessToken: string,\n companyQuery: GetCompaniesQueryRequest,\n): Promise<IApiResponse<IPaginatedResponse<PublicCompanyResponse | SAdminCompanyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedResponse<PublicCompanyResponse | SAdminCompanyResponse>>\n >(COMPANY_BASE, {\n params: companyQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/company — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyCompany(\n http: HttpClient,\n accessToken: string,\n): Promise<IApiResponse<AdminCompanyResponse>> {\n const { data } = await http.get<IApiResponse<AdminCompanyResponse>>(`${API_BASE}/me/company`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getCompanyBySlug(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n): Promise<IApiResponse<PublicCompanyResponse | SAdminCompanyResponse>> {\n const { data } = await http.get<IApiResponse<PublicCompanyResponse | SAdminCompanyResponse>>(\n `${COMPANY_BASE}/${companySlug}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateCompany(\n http: HttpClient,\n accessToken: string,\n newCompanyRequest: CreateCompanyRequest,\n): Promise<IApiResponse<SAdminCompanyResponse>> {\n const { data } = await http.post<IApiResponse<SAdminCompanyResponse>>(\n COMPANY_BASE,\n newCompanyRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/me/company — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateMyCompany(\n http: HttpClient,\n accessToken: string,\n patch: UpdateCompanyByAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateCompanyByAdminRequest>(`${API_BASE}/me/company`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/companies/:companyId — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateCompanyBySAdmin(\n http: HttpClient,\n accessToken: string,\n { companyId }: { companyId: string },\n patch: UpdateCompanyBySAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateCompanyBySAdminRequest>(`${COMPANY_BASE}/${companyId}`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n","import type {\n CreateProjectRequest,\n GetProjectsQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n OwnerProjectResponse,\n ProjectResponse,\n PublicProjectResponse,\n UpdateProjectRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/companies/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjects(\n http: HttpClient,\n accessToken: string,\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>\n >(`${COMPANY_BASE}/projects`, {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProjects(\n http: HttpClient,\n accessToken: string,\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<OwnerProjectResponse>>> {\n const { data } = await http.get<IApiResponse<IPaginatedByTokenResponse<OwnerProjectResponse>>>(\n `${API_BASE}/me/projects`,\n {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/me/projects/:projectId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProjectById(\n http: HttpClient,\n accessToken: string,\n { projectId }: { projectId: string },\n): Promise<IApiResponse<OwnerProjectResponse>> {\n const { data } = await http.get<IApiResponse<OwnerProjectResponse>>(\n `${API_BASE}/me/projects/${projectId}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjectByCompanyAndSlug(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n): Promise<IApiResponse<ProjectResponse | PublicProjectResponse>> {\n const { data } = await http.get<IApiResponse<ProjectResponse | PublicProjectResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjectsByCompany(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>\n >(`${COMPANY_BASE}/${companySlug}/projects`, {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies/:companySlug/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateProject(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n newProjectRequest: CreateProjectRequest,\n): Promise<IApiResponse<ProjectResponse>> {\n const { data } = await http.post<IApiResponse<ProjectResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects`,\n newProjectRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/companies/:companySlug/projects/:projectSlug — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateProject(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n patch: UpdateProjectRequest,\n): Promise<void> {\n await http.patch<void, UpdateProjectRequest>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}`,\n patch,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n}\n","import type {\n BuyerPropertyResponse,\n CreatePropertyRequest,\n GetPropertiesQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n PropertyResponse,\n PublicPropertyResponse,\n UpdatePropertyRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProperties(\n http: HttpClient,\n accessToken: string,\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>\n >(`${API_BASE}/properties`, {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProperties(\n http: HttpClient,\n accessToken: string,\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<BuyerPropertyResponse>>> {\n const { data } = await http.get<IApiResponse<IPaginatedByTokenResponse<BuyerPropertyResponse>>>(\n `${API_BASE}/me/properties`,\n {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/me/properties/:propertyId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyPropertyById(\n http: HttpClient,\n accessToken: string,\n { propertyId }: { propertyId: string },\n): Promise<IApiResponse<BuyerPropertyResponse>> {\n const { data } = await http.get<IApiResponse<BuyerPropertyResponse>>(\n `${API_BASE}/me/properties/${propertyId}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getPropertiesByProject(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>\n >(`${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties`, {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getPropertyByProjectAndCode(\n http: HttpClient,\n accessToken: string,\n {\n companySlug,\n projectSlug,\n propertyCode,\n }: { companySlug: string; projectSlug: string; propertyCode: string },\n): Promise<IApiResponse<PropertyResponse | PublicPropertyResponse>> {\n const { data } = await http.get<IApiResponse<PropertyResponse | PublicPropertyResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties/${propertyCode}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies/:companySlug/projects/:projectSlug/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateProperty(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n newPropertyRequest: CreatePropertyRequest,\n): Promise<IApiResponse<PropertyResponse>> {\n const { data } = await http.post<IApiResponse<PropertyResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties`,\n newPropertyRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateProperty(\n http: HttpClient,\n accessToken: string,\n {\n companySlug,\n projectSlug,\n propertyCode,\n }: { companySlug: string; projectSlug: string; propertyCode: string },\n patch: UpdatePropertyRequest,\n): Promise<void> {\n await http.patch<void, UpdatePropertyRequest>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties/${propertyCode}`,\n patch,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n}\n","import { fetchHealthCheck } from './endpoints/health-check';\nimport type { HttpClient } from './http-client';\nimport {\n getGoogleOAuthStart,\n getMe,\n postGoogleOAuthCallback,\n postLogin,\n postLogout,\n postRefresh,\n postRegister,\n} from './endpoints/auth';\nimport {\n getUserById,\n getUsers,\n patchUpdateMe,\n patchUpdateUserBySAdmin,\n patchUpdateUserRoleByAdmin,\n} from './endpoints/user';\nimport {\n getCompanies,\n getCompanyBySlug,\n getMyCompany,\n patchUpdateCompanyBySAdmin,\n patchUpdateMyCompany,\n postCreateCompany,\n} from './endpoints/company';\nimport {\n getMyProjectById,\n getMyProjects,\n getProjectByCompanyAndSlug,\n getProjects,\n getProjectsByCompany,\n patchUpdateProject,\n postCreateProject,\n} from './endpoints/project';\nimport {\n getMyProperties,\n getMyPropertyById,\n getProperties,\n getPropertiesByProject,\n getPropertyByProjectAndCode,\n patchUpdateProperty,\n postCreateProperty,\n} from './endpoints/property';\n\nexport interface CreateApiClientOptions {\n /**\n * Preconfigured HTTP client (e.g. Axios instance with `baseURL` set).\n * Paths in this library are relative to that base (e.g. `/api/v1/...`).\n * The HTTP implementation must support the methods used by this client,\n * including GET, POST, and PATCH.\n */\n readonly http: HttpClient;\n}\n\nexport interface ApiClient {\n readonly healthCheck: () => ReturnType<typeof fetchHealthCheck>;\n readonly auth: {\n readonly register: (\n body: Parameters<typeof postRegister>[1],\n ) => ReturnType<typeof postRegister>;\n readonly login: (body: Parameters<typeof postLogin>[1]) => ReturnType<typeof postLogin>;\n readonly getGoogleOAuthStart: (redirectUri: string) => ReturnType<typeof getGoogleOAuthStart>;\n readonly postGoogleOAuthCallback: (\n body: Parameters<typeof postGoogleOAuthCallback>[1],\n ) => ReturnType<typeof postGoogleOAuthCallback>;\n readonly refresh: (body: Parameters<typeof postRefresh>[1]) => ReturnType<typeof postRefresh>;\n readonly logout: (body: Parameters<typeof postLogout>[1]) => ReturnType<typeof postLogout>;\n readonly me: (accessToken: string) => ReturnType<typeof getMe>;\n };\n readonly user: {\n readonly users: (\n accessToken: string,\n userQuery: Parameters<typeof getUsers>[2],\n ) => ReturnType<typeof getUsers>;\n readonly userById: (\n accessToken: Parameters<typeof getUserById>[1],\n { userId }: Parameters<typeof getUserById>[2],\n ) => ReturnType<typeof getUserById>;\n readonly updateMe: (\n accessToken: Parameters<typeof patchUpdateMe>[1],\n patch: Parameters<typeof patchUpdateMe>[2],\n ) => ReturnType<typeof patchUpdateMe>;\n readonly updateUserRoleByAdmin: (\n accessToken: Parameters<typeof patchUpdateUserRoleByAdmin>[1],\n { userId }: Parameters<typeof patchUpdateUserRoleByAdmin>[2],\n body: Parameters<typeof patchUpdateUserRoleByAdmin>[3],\n ) => ReturnType<typeof patchUpdateUserRoleByAdmin>;\n readonly updateUserBySAdmin: (\n accessToken: Parameters<typeof patchUpdateUserBySAdmin>[1],\n { userId }: Parameters<typeof patchUpdateUserBySAdmin>[2],\n patch: Parameters<typeof patchUpdateUserBySAdmin>[3],\n ) => ReturnType<typeof patchUpdateUserBySAdmin>;\n };\n readonly company: {\n readonly companies: (\n accessToken: Parameters<typeof getCompanies>[1],\n companyQuery: Parameters<typeof getCompanies>[2],\n ) => ReturnType<typeof getCompanies>;\n readonly myCompany: (\n accessToken: Parameters<typeof getMyCompany>[1],\n ) => ReturnType<typeof getMyCompany>;\n readonly companyBySlug: (\n accessToken: Parameters<typeof getCompanyBySlug>[1],\n { companySlug }: Parameters<typeof getCompanyBySlug>[2],\n ) => ReturnType<typeof getCompanyBySlug>;\n readonly createCompany: (\n accessToken: Parameters<typeof postCreateCompany>[1],\n newCompanyRequest: Parameters<typeof postCreateCompany>[2],\n ) => ReturnType<typeof postCreateCompany>;\n readonly updateMyCompany: (\n accessToken: Parameters<typeof patchUpdateMyCompany>[1],\n patch: Parameters<typeof patchUpdateMyCompany>[2],\n ) => ReturnType<typeof patchUpdateMyCompany>;\n readonly updateCompanyBySAdmin: (\n accessToken: Parameters<typeof patchUpdateCompanyBySAdmin>[1],\n { companyId }: Parameters<typeof patchUpdateCompanyBySAdmin>[2],\n patch: Parameters<typeof patchUpdateCompanyBySAdmin>[3],\n ) => ReturnType<typeof patchUpdateCompanyBySAdmin>;\n };\n readonly project: {\n readonly projects: (\n accessToken: Parameters<typeof getProjects>[1],\n projectQuery: Parameters<typeof getProjects>[2],\n ) => ReturnType<typeof getProjects>;\n readonly myProjects: (\n accessToken: Parameters<typeof getMyProjects>[1],\n projectQuery: Parameters<typeof getMyProjects>[2],\n ) => ReturnType<typeof getMyProjects>;\n readonly myProjectById: (\n accessToken: Parameters<typeof getMyProjectById>[1],\n { projectId }: Parameters<typeof getMyProjectById>[2],\n ) => ReturnType<typeof getMyProjectById>;\n readonly projectByCompanyAndSlug: (\n accessToken: Parameters<typeof getProjectByCompanyAndSlug>[1],\n { companySlug, projectSlug }: Parameters<typeof getProjectByCompanyAndSlug>[2],\n ) => ReturnType<typeof getProjectByCompanyAndSlug>;\n readonly projectsByCompany: (\n accessToken: Parameters<typeof getProjectsByCompany>[1],\n { companySlug }: Parameters<typeof getProjectsByCompany>[2],\n projectQuery: Parameters<typeof getProjectsByCompany>[3],\n ) => ReturnType<typeof getProjectsByCompany>;\n readonly createProject: (\n accessToken: Parameters<typeof postCreateProject>[1],\n { companySlug }: Parameters<typeof postCreateProject>[2],\n newProjectRequest: Parameters<typeof postCreateProject>[3],\n ) => ReturnType<typeof postCreateProject>;\n readonly updateProject: (\n accessToken: Parameters<typeof patchUpdateProject>[1],\n { companySlug, projectSlug }: Parameters<typeof patchUpdateProject>[2],\n patch: Parameters<typeof patchUpdateProject>[3],\n ) => ReturnType<typeof patchUpdateProject>;\n };\n readonly property: {\n readonly properties: (\n accessToken: Parameters<typeof getProperties>[1],\n propertyQuery: Parameters<typeof getProperties>[2],\n ) => ReturnType<typeof getProperties>;\n readonly myProperties: (\n accessToken: Parameters<typeof getMyProperties>[1],\n propertyQuery: Parameters<typeof getMyProperties>[2],\n ) => ReturnType<typeof getMyProperties>;\n readonly myPropertyById: (\n accessToken: Parameters<typeof getMyPropertyById>[1],\n { propertyId }: Parameters<typeof getMyPropertyById>[2],\n ) => ReturnType<typeof getMyPropertyById>;\n readonly propertiesByProject: (\n accessToken: Parameters<typeof getPropertiesByProject>[1],\n { companySlug, projectSlug }: Parameters<typeof getPropertiesByProject>[2],\n propertyQuery: Parameters<typeof getPropertiesByProject>[3],\n ) => ReturnType<typeof getPropertiesByProject>;\n readonly propertyByProjectAndCode: (\n accessToken: Parameters<typeof getPropertyByProjectAndCode>[1],\n { companySlug, projectSlug, propertyCode }: Parameters<typeof getPropertyByProjectAndCode>[2],\n ) => ReturnType<typeof getPropertyByProjectAndCode>;\n readonly createProperty: (\n accessToken: Parameters<typeof postCreateProperty>[1],\n { companySlug, projectSlug }: Parameters<typeof postCreateProperty>[2],\n newPropertyRequest: Parameters<typeof postCreateProperty>[3],\n ) => ReturnType<typeof postCreateProperty>;\n readonly updateProperty: (\n accessToken: Parameters<typeof patchUpdateProperty>[1],\n { companySlug, projectSlug, propertyCode }: Parameters<typeof patchUpdateProperty>[2],\n patch: Parameters<typeof patchUpdateProperty>[3],\n ) => ReturnType<typeof patchUpdateProperty>;\n };\n}\n\n/**\n * Creates a typed API client backed by the provided HTTP implementation.\n */\nexport function createApiClient(options: CreateApiClientOptions): ApiClient {\n const { http } = options;\n\n return {\n healthCheck: () => fetchHealthCheck(http),\n auth: {\n register: (body) => postRegister(http, body),\n login: (body) => postLogin(http, body),\n getGoogleOAuthStart: (redirectUri) => getGoogleOAuthStart(http, redirectUri),\n postGoogleOAuthCallback: (body) => postGoogleOAuthCallback(http, body),\n refresh: (body) => postRefresh(http, body),\n logout: (body) => postLogout(http, body),\n me: (accessToken) => getMe(http, accessToken),\n },\n user: {\n users: (accessToken, userQuery) => getUsers(http, accessToken, userQuery),\n userById: (accessToken, { userId }) => getUserById(http, accessToken, { userId }),\n updateMe: (accessToken, patch) => patchUpdateMe(http, accessToken, patch),\n updateUserRoleByAdmin: (accessToken, { userId }, body) =>\n patchUpdateUserRoleByAdmin(http, accessToken, { userId }, body),\n updateUserBySAdmin: (accessToken, { userId }, patch) =>\n patchUpdateUserBySAdmin(http, accessToken, { userId }, patch),\n },\n company: {\n companies: (accessToken, companyQuery) => getCompanies(http, accessToken, companyQuery),\n myCompany: (accessToken) => getMyCompany(http, accessToken),\n companyBySlug: (accessToken, { companySlug }) =>\n getCompanyBySlug(http, accessToken, { companySlug }),\n createCompany: (accessToken, newCompanyRequest) =>\n postCreateCompany(http, accessToken, newCompanyRequest),\n updateMyCompany: (accessToken, patch) => patchUpdateMyCompany(http, accessToken, patch),\n updateCompanyBySAdmin: (accessToken, { companyId }, patch) =>\n patchUpdateCompanyBySAdmin(http, accessToken, { companyId }, patch),\n },\n project: {\n projects: (accessToken, projectQuery) => getProjects(http, accessToken, projectQuery),\n myProjects: (accessToken, projectQuery) => getMyProjects(http, accessToken, projectQuery),\n myProjectById: (accessToken, { projectId }) =>\n getMyProjectById(http, accessToken, { projectId }),\n projectByCompanyAndSlug: (accessToken, { companySlug, projectSlug }) =>\n getProjectByCompanyAndSlug(http, accessToken, { companySlug, projectSlug }),\n projectsByCompany: (accessToken, { companySlug }, projectQuery) =>\n getProjectsByCompany(http, accessToken, { companySlug }, projectQuery),\n createProject: (accessToken, { companySlug }, newProjectRequest) =>\n postCreateProject(http, accessToken, { companySlug }, newProjectRequest),\n updateProject: (accessToken, { companySlug, projectSlug }, patch) =>\n patchUpdateProject(http, accessToken, { companySlug, projectSlug }, patch),\n },\n property: {\n properties: (accessToken, propertyQuery) => getProperties(http, accessToken, propertyQuery),\n myProperties: (accessToken, propertyQuery) =>\n getMyProperties(http, accessToken, propertyQuery),\n myPropertyById: (accessToken, { propertyId }) =>\n getMyPropertyById(http, accessToken, { propertyId }),\n propertiesByProject: (accessToken, { companySlug, projectSlug }, propertyQuery) =>\n getPropertiesByProject(http, accessToken, { companySlug, projectSlug }, propertyQuery),\n propertyByProjectAndCode: (accessToken, { companySlug, projectSlug, propertyCode }) =>\n getPropertyByProjectAndCode(http, accessToken, { companySlug, projectSlug, propertyCode }),\n createProperty: (accessToken, { companySlug, projectSlug }, newPropertyRequest) =>\n postCreateProperty(http, accessToken, { companySlug, projectSlug }, newPropertyRequest),\n updateProperty: (accessToken, { companySlug, projectSlug, propertyCode }, patch) =>\n patchUpdateProperty(http, accessToken, { companySlug, projectSlug, propertyCode }, patch),\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/endpoints/health-check.ts","../src/endpoints/auth.ts","../src/endpoints/user.ts","../src/endpoints/company.ts","../src/endpoints/project.ts","../src/endpoints/property.ts","../src/create-api-client.ts"],"names":["API_BASE","COMPANY_BASE"],"mappings":"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","file":"index.js","sourcesContent":["import type { IApiResponse, HealthCheck } from '@kulkan/kulterra-contracts';\nimport type { HttpClient } from '../http-client';\n\n/** Same path as `/api/${v1}/health-check` on the server when `v1` is the string `'v1'`. */\nconst HEALTH_CHECK_PATH = '/api/v1/health-check' as const;\n\n/**\n * GET /api/v1/health-check — server liveness.\n *\n * Returns the full JSON the server sends (`IApiResponse<HealthCheck>`).\n *\n * **Why not `data.data` here?** Adapters like Axios wrap the HTTP body in a property also\n * called `data`. That outer `data` is the entire `res.json(...)` object. The inner\n * `IApiResponse.data` is the `HealthCheck` payload — use `.data` on the **returned** value,\n * e.g. `(await fetchHealthCheck(http)).data`.\n */\nexport async function fetchHealthCheck(http: HttpClient): Promise<IApiResponse<HealthCheck>> {\n const { data: body } = await http.get<IApiResponse<HealthCheck>>(HEALTH_CHECK_PATH);\n\n return body;\n}\n","import type {\n AuthSessionResponse,\n AuthUserResponse,\n IApiResponse,\n LoginRequest,\n LogoutRequest,\n OAuthGoogleCallbackRequest,\n OAuthGoogleStartResponse,\n RefreshRequest,\n RegisterRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst AUTH_BASE = '/api/v1/auth' as const;\n\n/**\n * POST /api/v1/auth/register\n */\nexport async function postRegister(\n http: HttpClient,\n body: RegisterRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, RegisterRequest>(\n `${AUTH_BASE}/register`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/login\n */\nexport async function postLogin(\n http: HttpClient,\n body: LoginRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, LoginRequest>(\n `${AUTH_BASE}/login`,\n body,\n );\n return data;\n}\n\n/**\n * GET /api/v1/auth/oauth/google/start?redirectUri=...\n */\nexport async function getGoogleOAuthStart(\n http: HttpClient,\n redirectUri: string,\n): Promise<IApiResponse<OAuthGoogleStartResponse>> {\n const q = new URLSearchParams({ redirectUri });\n const { data } = await http.get<IApiResponse<OAuthGoogleStartResponse>>(\n `${AUTH_BASE}/oauth/google/start?${q.toString()}`,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/oauth/google/callback\n */\nexport async function postGoogleOAuthCallback(\n http: HttpClient,\n body: OAuthGoogleCallbackRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, OAuthGoogleCallbackRequest>(\n `${AUTH_BASE}/oauth/google/callback`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/refresh\n */\nexport async function postRefresh(\n http: HttpClient,\n body: RefreshRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, RefreshRequest>(\n `${AUTH_BASE}/refresh`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/logout — 204 No Content (no JSON body).\n */\nexport async function postLogout(http: HttpClient, body: LogoutRequest): Promise<void> {\n await http.post<undefined, LogoutRequest>(`${AUTH_BASE}/logout`, body);\n}\n\n/**\n * GET /api/v1/auth/me — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMe(\n http: HttpClient,\n accessToken: string,\n): Promise<IApiResponse<AuthUserResponse>> {\n const { data } = await http.get<IApiResponse<AuthUserResponse>>(`${AUTH_BASE}/me`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n","import type {\n GetUsersQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n ToAdminUsersResponse,\n ToSAdminUsersResponse,\n UpdateUserBySAdminRequest,\n UpdateUserByUserRequest,\n UpdateUserRoleByAdminRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst USER_BASE = `${API_BASE}/users` as const;\n\n// GET\n\n/**\n * GET /api/v1/users — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getUsers(\n http: HttpClient,\n accessToken: string,\n userQuery: GetUsersQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ToAdminUsersResponse | ToSAdminUsersResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ToAdminUsersResponse | ToSAdminUsersResponse>>\n >(USER_BASE, {\n params: userQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/users/:userId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getUserById(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n): Promise<IApiResponse<ToSAdminUsersResponse>> {\n const { data } = await http.get<IApiResponse<ToSAdminUsersResponse>>(`${USER_BASE}/${userId}`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/me — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateMe(\n http: HttpClient,\n accessToken: string,\n patch: UpdateUserByUserRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserByUserRequest>(`${API_BASE}/me`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/users/:userId/role — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateUserRoleByAdmin(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n body: UpdateUserRoleByAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserRoleByAdminRequest>(`${USER_BASE}/${userId}/role`, body, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/users/:userId — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateUserBySAdmin(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n patch: UpdateUserBySAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserBySAdminRequest>(`${USER_BASE}/${userId}`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n","import type {\n AdminCompanyResponse,\n CreateCompanyRequest,\n GetCompaniesQueryRequest,\n IApiResponse,\n IPaginatedResponse,\n PublicCompanyResponse,\n SAdminCompanyResponse,\n UpdateCompanyByAdminRequest,\n UpdateCompanyBySAdminRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/companies — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getCompanies(\n http: HttpClient,\n accessToken: string,\n companyQuery: GetCompaniesQueryRequest,\n): Promise<IApiResponse<IPaginatedResponse<PublicCompanyResponse | SAdminCompanyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedResponse<PublicCompanyResponse | SAdminCompanyResponse>>\n >(COMPANY_BASE, {\n params: companyQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/company — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyCompany(\n http: HttpClient,\n accessToken: string,\n): Promise<IApiResponse<AdminCompanyResponse>> {\n const { data } = await http.get<IApiResponse<AdminCompanyResponse>>(`${API_BASE}/me/company`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getCompanyBySlug(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n): Promise<IApiResponse<PublicCompanyResponse | SAdminCompanyResponse>> {\n const { data } = await http.get<IApiResponse<PublicCompanyResponse | SAdminCompanyResponse>>(\n `${COMPANY_BASE}/${companySlug}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateCompany(\n http: HttpClient,\n accessToken: string,\n newCompanyRequest: CreateCompanyRequest,\n): Promise<IApiResponse<SAdminCompanyResponse>> {\n const { data } = await http.post<IApiResponse<SAdminCompanyResponse>>(\n COMPANY_BASE,\n newCompanyRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/me/company — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateMyCompany(\n http: HttpClient,\n accessToken: string,\n patch: UpdateCompanyByAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateCompanyByAdminRequest>(`${API_BASE}/me/company`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/companies/:companyId — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateCompanyBySAdmin(\n http: HttpClient,\n accessToken: string,\n { companyId }: { companyId: string },\n patch: UpdateCompanyBySAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateCompanyBySAdminRequest>(`${COMPANY_BASE}/${companyId}`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n","import type {\n CreateProjectRequest,\n GetProjectsQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n OwnerProjectResponse,\n ProjectResponse,\n PublicProjectResponse,\n UpdateProjectRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/companies/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjects(\n http: HttpClient,\n accessToken: string,\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>\n >(`${API_BASE}/projects`, {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProjects(\n http: HttpClient,\n accessToken: string,\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<OwnerProjectResponse>>> {\n const { data } = await http.get<IApiResponse<IPaginatedByTokenResponse<OwnerProjectResponse>>>(\n `${API_BASE}/me/projects`,\n {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/me/projects/:projectId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProjectById(\n http: HttpClient,\n accessToken: string,\n { projectId }: { projectId: string },\n): Promise<IApiResponse<OwnerProjectResponse>> {\n const { data } = await http.get<IApiResponse<OwnerProjectResponse>>(\n `${API_BASE}/me/projects/${projectId}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjectByCompanyAndSlug(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n): Promise<IApiResponse<ProjectResponse | PublicProjectResponse>> {\n const { data } = await http.get<IApiResponse<ProjectResponse | PublicProjectResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjectsByCompany(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>\n >(`${COMPANY_BASE}/${companySlug}/projects`, {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies/:companySlug/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateProject(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n newProjectRequest: CreateProjectRequest,\n): Promise<IApiResponse<ProjectResponse>> {\n const { data } = await http.post<IApiResponse<ProjectResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects`,\n newProjectRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/companies/:companySlug/projects/:projectSlug — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateProject(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n patch: UpdateProjectRequest,\n): Promise<void> {\n await http.patch<void, UpdateProjectRequest>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}`,\n patch,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n}\n","import type {\n BuyerPropertyResponse,\n CreatePropertyRequest,\n GetPropertiesQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n PropertyResponse,\n PublicPropertyResponse,\n UpdatePropertyRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProperties(\n http: HttpClient,\n accessToken: string,\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>\n >(`${API_BASE}/properties`, {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProperties(\n http: HttpClient,\n accessToken: string,\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<BuyerPropertyResponse>>> {\n const { data } = await http.get<IApiResponse<IPaginatedByTokenResponse<BuyerPropertyResponse>>>(\n `${API_BASE}/me/properties`,\n {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/me/properties/:propertyId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyPropertyById(\n http: HttpClient,\n accessToken: string,\n { propertyId }: { propertyId: string },\n): Promise<IApiResponse<BuyerPropertyResponse>> {\n const { data } = await http.get<IApiResponse<BuyerPropertyResponse>>(\n `${API_BASE}/me/properties/${propertyId}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getPropertiesByProject(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>\n >(`${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties`, {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getPropertyByProjectAndCode(\n http: HttpClient,\n accessToken: string,\n {\n companySlug,\n projectSlug,\n propertyCode,\n }: { companySlug: string; projectSlug: string; propertyCode: string },\n): Promise<IApiResponse<PropertyResponse | PublicPropertyResponse>> {\n const { data } = await http.get<IApiResponse<PropertyResponse | PublicPropertyResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties/${propertyCode}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies/:companySlug/projects/:projectSlug/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateProperty(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n newPropertyRequest: CreatePropertyRequest,\n): Promise<IApiResponse<PropertyResponse>> {\n const { data } = await http.post<IApiResponse<PropertyResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties`,\n newPropertyRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateProperty(\n http: HttpClient,\n accessToken: string,\n {\n companySlug,\n projectSlug,\n propertyCode,\n }: { companySlug: string; projectSlug: string; propertyCode: string },\n patch: UpdatePropertyRequest,\n): Promise<void> {\n await http.patch<void, UpdatePropertyRequest>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties/${propertyCode}`,\n patch,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n}\n","import { fetchHealthCheck } from './endpoints/health-check';\nimport type { HttpClient } from './http-client';\nimport {\n getGoogleOAuthStart,\n getMe,\n postGoogleOAuthCallback,\n postLogin,\n postLogout,\n postRefresh,\n postRegister,\n} from './endpoints/auth';\nimport {\n getUserById,\n getUsers,\n patchUpdateMe,\n patchUpdateUserBySAdmin,\n patchUpdateUserRoleByAdmin,\n} from './endpoints/user';\nimport {\n getCompanies,\n getCompanyBySlug,\n getMyCompany,\n patchUpdateCompanyBySAdmin,\n patchUpdateMyCompany,\n postCreateCompany,\n} from './endpoints/company';\nimport {\n getMyProjectById,\n getMyProjects,\n getProjectByCompanyAndSlug,\n getProjects,\n getProjectsByCompany,\n patchUpdateProject,\n postCreateProject,\n} from './endpoints/project';\nimport {\n getMyProperties,\n getMyPropertyById,\n getProperties,\n getPropertiesByProject,\n getPropertyByProjectAndCode,\n patchUpdateProperty,\n postCreateProperty,\n} from './endpoints/property';\n\nexport interface CreateApiClientOptions {\n /**\n * Preconfigured HTTP client (e.g. Axios instance with `baseURL` set).\n * Paths in this library are relative to that base (e.g. `/api/v1/...`).\n * The HTTP implementation must support the methods used by this client,\n * including GET, POST, and PATCH.\n */\n readonly http: HttpClient;\n}\n\nexport interface ApiClient {\n readonly healthCheck: () => ReturnType<typeof fetchHealthCheck>;\n readonly auth: {\n readonly register: (\n body: Parameters<typeof postRegister>[1],\n ) => ReturnType<typeof postRegister>;\n readonly login: (body: Parameters<typeof postLogin>[1]) => ReturnType<typeof postLogin>;\n readonly getGoogleOAuthStart: (redirectUri: string) => ReturnType<typeof getGoogleOAuthStart>;\n readonly postGoogleOAuthCallback: (\n body: Parameters<typeof postGoogleOAuthCallback>[1],\n ) => ReturnType<typeof postGoogleOAuthCallback>;\n readonly refresh: (body: Parameters<typeof postRefresh>[1]) => ReturnType<typeof postRefresh>;\n readonly logout: (body: Parameters<typeof postLogout>[1]) => ReturnType<typeof postLogout>;\n readonly me: (accessToken: string) => ReturnType<typeof getMe>;\n };\n readonly user: {\n readonly users: (\n accessToken: string,\n userQuery: Parameters<typeof getUsers>[2],\n ) => ReturnType<typeof getUsers>;\n readonly userById: (\n accessToken: Parameters<typeof getUserById>[1],\n { userId }: Parameters<typeof getUserById>[2],\n ) => ReturnType<typeof getUserById>;\n readonly updateMe: (\n accessToken: Parameters<typeof patchUpdateMe>[1],\n patch: Parameters<typeof patchUpdateMe>[2],\n ) => ReturnType<typeof patchUpdateMe>;\n readonly updateUserRoleByAdmin: (\n accessToken: Parameters<typeof patchUpdateUserRoleByAdmin>[1],\n { userId }: Parameters<typeof patchUpdateUserRoleByAdmin>[2],\n body: Parameters<typeof patchUpdateUserRoleByAdmin>[3],\n ) => ReturnType<typeof patchUpdateUserRoleByAdmin>;\n readonly updateUserBySAdmin: (\n accessToken: Parameters<typeof patchUpdateUserBySAdmin>[1],\n { userId }: Parameters<typeof patchUpdateUserBySAdmin>[2],\n patch: Parameters<typeof patchUpdateUserBySAdmin>[3],\n ) => ReturnType<typeof patchUpdateUserBySAdmin>;\n };\n readonly company: {\n readonly companies: (\n accessToken: Parameters<typeof getCompanies>[1],\n companyQuery: Parameters<typeof getCompanies>[2],\n ) => ReturnType<typeof getCompanies>;\n readonly myCompany: (\n accessToken: Parameters<typeof getMyCompany>[1],\n ) => ReturnType<typeof getMyCompany>;\n readonly companyBySlug: (\n accessToken: Parameters<typeof getCompanyBySlug>[1],\n { companySlug }: Parameters<typeof getCompanyBySlug>[2],\n ) => ReturnType<typeof getCompanyBySlug>;\n readonly createCompany: (\n accessToken: Parameters<typeof postCreateCompany>[1],\n newCompanyRequest: Parameters<typeof postCreateCompany>[2],\n ) => ReturnType<typeof postCreateCompany>;\n readonly updateMyCompany: (\n accessToken: Parameters<typeof patchUpdateMyCompany>[1],\n patch: Parameters<typeof patchUpdateMyCompany>[2],\n ) => ReturnType<typeof patchUpdateMyCompany>;\n readonly updateCompanyBySAdmin: (\n accessToken: Parameters<typeof patchUpdateCompanyBySAdmin>[1],\n { companyId }: Parameters<typeof patchUpdateCompanyBySAdmin>[2],\n patch: Parameters<typeof patchUpdateCompanyBySAdmin>[3],\n ) => ReturnType<typeof patchUpdateCompanyBySAdmin>;\n };\n readonly project: {\n readonly projects: (\n accessToken: Parameters<typeof getProjects>[1],\n projectQuery: Parameters<typeof getProjects>[2],\n ) => ReturnType<typeof getProjects>;\n readonly myProjects: (\n accessToken: Parameters<typeof getMyProjects>[1],\n projectQuery: Parameters<typeof getMyProjects>[2],\n ) => ReturnType<typeof getMyProjects>;\n readonly myProjectById: (\n accessToken: Parameters<typeof getMyProjectById>[1],\n { projectId }: Parameters<typeof getMyProjectById>[2],\n ) => ReturnType<typeof getMyProjectById>;\n readonly projectByCompanyAndSlug: (\n accessToken: Parameters<typeof getProjectByCompanyAndSlug>[1],\n { companySlug, projectSlug }: Parameters<typeof getProjectByCompanyAndSlug>[2],\n ) => ReturnType<typeof getProjectByCompanyAndSlug>;\n readonly projectsByCompany: (\n accessToken: Parameters<typeof getProjectsByCompany>[1],\n { companySlug }: Parameters<typeof getProjectsByCompany>[2],\n projectQuery: Parameters<typeof getProjectsByCompany>[3],\n ) => ReturnType<typeof getProjectsByCompany>;\n readonly createProject: (\n accessToken: Parameters<typeof postCreateProject>[1],\n { companySlug }: Parameters<typeof postCreateProject>[2],\n newProjectRequest: Parameters<typeof postCreateProject>[3],\n ) => ReturnType<typeof postCreateProject>;\n readonly updateProject: (\n accessToken: Parameters<typeof patchUpdateProject>[1],\n { companySlug, projectSlug }: Parameters<typeof patchUpdateProject>[2],\n patch: Parameters<typeof patchUpdateProject>[3],\n ) => ReturnType<typeof patchUpdateProject>;\n };\n readonly property: {\n readonly properties: (\n accessToken: Parameters<typeof getProperties>[1],\n propertyQuery: Parameters<typeof getProperties>[2],\n ) => ReturnType<typeof getProperties>;\n readonly myProperties: (\n accessToken: Parameters<typeof getMyProperties>[1],\n propertyQuery: Parameters<typeof getMyProperties>[2],\n ) => ReturnType<typeof getMyProperties>;\n readonly myPropertyById: (\n accessToken: Parameters<typeof getMyPropertyById>[1],\n { propertyId }: Parameters<typeof getMyPropertyById>[2],\n ) => ReturnType<typeof getMyPropertyById>;\n readonly propertiesByProject: (\n accessToken: Parameters<typeof getPropertiesByProject>[1],\n { companySlug, projectSlug }: Parameters<typeof getPropertiesByProject>[2],\n propertyQuery: Parameters<typeof getPropertiesByProject>[3],\n ) => ReturnType<typeof getPropertiesByProject>;\n readonly propertyByProjectAndCode: (\n accessToken: Parameters<typeof getPropertyByProjectAndCode>[1],\n { companySlug, projectSlug, propertyCode }: Parameters<typeof getPropertyByProjectAndCode>[2],\n ) => ReturnType<typeof getPropertyByProjectAndCode>;\n readonly createProperty: (\n accessToken: Parameters<typeof postCreateProperty>[1],\n { companySlug, projectSlug }: Parameters<typeof postCreateProperty>[2],\n newPropertyRequest: Parameters<typeof postCreateProperty>[3],\n ) => ReturnType<typeof postCreateProperty>;\n readonly updateProperty: (\n accessToken: Parameters<typeof patchUpdateProperty>[1],\n { companySlug, projectSlug, propertyCode }: Parameters<typeof patchUpdateProperty>[2],\n patch: Parameters<typeof patchUpdateProperty>[3],\n ) => ReturnType<typeof patchUpdateProperty>;\n };\n}\n\n/**\n * Creates a typed API client backed by the provided HTTP implementation.\n */\nexport function createApiClient(options: CreateApiClientOptions): ApiClient {\n const { http } = options;\n\n return {\n healthCheck: () => fetchHealthCheck(http),\n auth: {\n register: (body) => postRegister(http, body),\n login: (body) => postLogin(http, body),\n getGoogleOAuthStart: (redirectUri) => getGoogleOAuthStart(http, redirectUri),\n postGoogleOAuthCallback: (body) => postGoogleOAuthCallback(http, body),\n refresh: (body) => postRefresh(http, body),\n logout: (body) => postLogout(http, body),\n me: (accessToken) => getMe(http, accessToken),\n },\n user: {\n users: (accessToken, userQuery) => getUsers(http, accessToken, userQuery),\n userById: (accessToken, { userId }) => getUserById(http, accessToken, { userId }),\n updateMe: (accessToken, patch) => patchUpdateMe(http, accessToken, patch),\n updateUserRoleByAdmin: (accessToken, { userId }, body) =>\n patchUpdateUserRoleByAdmin(http, accessToken, { userId }, body),\n updateUserBySAdmin: (accessToken, { userId }, patch) =>\n patchUpdateUserBySAdmin(http, accessToken, { userId }, patch),\n },\n company: {\n companies: (accessToken, companyQuery) => getCompanies(http, accessToken, companyQuery),\n myCompany: (accessToken) => getMyCompany(http, accessToken),\n companyBySlug: (accessToken, { companySlug }) =>\n getCompanyBySlug(http, accessToken, { companySlug }),\n createCompany: (accessToken, newCompanyRequest) =>\n postCreateCompany(http, accessToken, newCompanyRequest),\n updateMyCompany: (accessToken, patch) => patchUpdateMyCompany(http, accessToken, patch),\n updateCompanyBySAdmin: (accessToken, { companyId }, patch) =>\n patchUpdateCompanyBySAdmin(http, accessToken, { companyId }, patch),\n },\n project: {\n projects: (accessToken, projectQuery) => getProjects(http, accessToken, projectQuery),\n myProjects: (accessToken, projectQuery) => getMyProjects(http, accessToken, projectQuery),\n myProjectById: (accessToken, { projectId }) =>\n getMyProjectById(http, accessToken, { projectId }),\n projectByCompanyAndSlug: (accessToken, { companySlug, projectSlug }) =>\n getProjectByCompanyAndSlug(http, accessToken, { companySlug, projectSlug }),\n projectsByCompany: (accessToken, { companySlug }, projectQuery) =>\n getProjectsByCompany(http, accessToken, { companySlug }, projectQuery),\n createProject: (accessToken, { companySlug }, newProjectRequest) =>\n postCreateProject(http, accessToken, { companySlug }, newProjectRequest),\n updateProject: (accessToken, { companySlug, projectSlug }, patch) =>\n patchUpdateProject(http, accessToken, { companySlug, projectSlug }, patch),\n },\n property: {\n properties: (accessToken, propertyQuery) => getProperties(http, accessToken, propertyQuery),\n myProperties: (accessToken, propertyQuery) =>\n getMyProperties(http, accessToken, propertyQuery),\n myPropertyById: (accessToken, { propertyId }) =>\n getMyPropertyById(http, accessToken, { propertyId }),\n propertiesByProject: (accessToken, { companySlug, projectSlug }, propertyQuery) =>\n getPropertiesByProject(http, accessToken, { companySlug, projectSlug }, propertyQuery),\n propertyByProjectAndCode: (accessToken, { companySlug, projectSlug, propertyCode }) =>\n getPropertyByProjectAndCode(http, accessToken, { companySlug, projectSlug, propertyCode }),\n createProperty: (accessToken, { companySlug, projectSlug }, newPropertyRequest) =>\n postCreateProperty(http, accessToken, { companySlug, projectSlug }, newPropertyRequest),\n updateProperty: (accessToken, { companySlug, projectSlug, propertyCode }, patch) =>\n patchUpdateProperty(http, accessToken, { companySlug, projectSlug, propertyCode }, patch),\n },\n };\n}\n"]}
package/dist/index.mjs CHANGED
@@ -134,7 +134,7 @@ async function patchUpdateCompanyBySAdmin(http, accessToken, { companyId }, patc
134
134
  var API_BASE3 = "/api/v1";
135
135
  var COMPANY_BASE2 = `${API_BASE3}/companies`;
136
136
  async function getProjects(http, accessToken, projectQuery) {
137
- const { data } = await http.get(`${COMPANY_BASE2}/projects`, {
137
+ const { data } = await http.get(`${API_BASE3}/projects`, {
138
138
  params: projectQuery,
139
139
  headers: { Authorization: `Bearer ${accessToken}` }
140
140
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/endpoints/health-check.ts","../src/endpoints/auth.ts","../src/endpoints/user.ts","../src/endpoints/company.ts","../src/endpoints/project.ts","../src/endpoints/property.ts","../src/create-api-client.ts"],"names":["API_BASE","COMPANY_BASE"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { IApiResponse, HealthCheck } from '@kulkan/kulterra-contracts';\nimport type { HttpClient } from '../http-client';\n\n/** Same path as `/api/${v1}/health-check` on the server when `v1` is the string `'v1'`. */\nconst HEALTH_CHECK_PATH = '/api/v1/health-check' as const;\n\n/**\n * GET /api/v1/health-check — server liveness.\n *\n * Returns the full JSON the server sends (`IApiResponse<HealthCheck>`).\n *\n * **Why not `data.data` here?** Adapters like Axios wrap the HTTP body in a property also\n * called `data`. That outer `data` is the entire `res.json(...)` object. The inner\n * `IApiResponse.data` is the `HealthCheck` payload — use `.data` on the **returned** value,\n * e.g. `(await fetchHealthCheck(http)).data`.\n */\nexport async function fetchHealthCheck(http: HttpClient): Promise<IApiResponse<HealthCheck>> {\n const { data: body } = await http.get<IApiResponse<HealthCheck>>(HEALTH_CHECK_PATH);\n\n return body;\n}\n","import type {\n AuthSessionResponse,\n AuthUserResponse,\n IApiResponse,\n LoginRequest,\n LogoutRequest,\n OAuthGoogleCallbackRequest,\n OAuthGoogleStartResponse,\n RefreshRequest,\n RegisterRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst AUTH_BASE = '/api/v1/auth' as const;\n\n/**\n * POST /api/v1/auth/register\n */\nexport async function postRegister(\n http: HttpClient,\n body: RegisterRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, RegisterRequest>(\n `${AUTH_BASE}/register`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/login\n */\nexport async function postLogin(\n http: HttpClient,\n body: LoginRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, LoginRequest>(\n `${AUTH_BASE}/login`,\n body,\n );\n return data;\n}\n\n/**\n * GET /api/v1/auth/oauth/google/start?redirectUri=...\n */\nexport async function getGoogleOAuthStart(\n http: HttpClient,\n redirectUri: string,\n): Promise<IApiResponse<OAuthGoogleStartResponse>> {\n const q = new URLSearchParams({ redirectUri });\n const { data } = await http.get<IApiResponse<OAuthGoogleStartResponse>>(\n `${AUTH_BASE}/oauth/google/start?${q.toString()}`,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/oauth/google/callback\n */\nexport async function postGoogleOAuthCallback(\n http: HttpClient,\n body: OAuthGoogleCallbackRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, OAuthGoogleCallbackRequest>(\n `${AUTH_BASE}/oauth/google/callback`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/refresh\n */\nexport async function postRefresh(\n http: HttpClient,\n body: RefreshRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, RefreshRequest>(\n `${AUTH_BASE}/refresh`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/logout — 204 No Content (no JSON body).\n */\nexport async function postLogout(http: HttpClient, body: LogoutRequest): Promise<void> {\n await http.post<undefined, LogoutRequest>(`${AUTH_BASE}/logout`, body);\n}\n\n/**\n * GET /api/v1/auth/me — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMe(\n http: HttpClient,\n accessToken: string,\n): Promise<IApiResponse<AuthUserResponse>> {\n const { data } = await http.get<IApiResponse<AuthUserResponse>>(`${AUTH_BASE}/me`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n","import type {\n GetUsersQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n ToAdminUsersResponse,\n ToSAdminUsersResponse,\n UpdateUserBySAdminRequest,\n UpdateUserByUserRequest,\n UpdateUserRoleByAdminRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst USER_BASE = `${API_BASE}/users` as const;\n\n// GET\n\n/**\n * GET /api/v1/users — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getUsers(\n http: HttpClient,\n accessToken: string,\n userQuery: GetUsersQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ToAdminUsersResponse | ToSAdminUsersResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ToAdminUsersResponse | ToSAdminUsersResponse>>\n >(USER_BASE, {\n params: userQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/users/:userId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getUserById(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n): Promise<IApiResponse<ToSAdminUsersResponse>> {\n const { data } = await http.get<IApiResponse<ToSAdminUsersResponse>>(`${USER_BASE}/${userId}`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/me — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateMe(\n http: HttpClient,\n accessToken: string,\n patch: UpdateUserByUserRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserByUserRequest>(`${API_BASE}/me`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/users/:userId/role — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateUserRoleByAdmin(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n body: UpdateUserRoleByAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserRoleByAdminRequest>(`${USER_BASE}/${userId}/role`, body, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/users/:userId — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateUserBySAdmin(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n patch: UpdateUserBySAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserBySAdminRequest>(`${USER_BASE}/${userId}`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n","import type {\n AdminCompanyResponse,\n CreateCompanyRequest,\n GetCompaniesQueryRequest,\n IApiResponse,\n IPaginatedResponse,\n PublicCompanyResponse,\n SAdminCompanyResponse,\n UpdateCompanyByAdminRequest,\n UpdateCompanyBySAdminRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/companies — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getCompanies(\n http: HttpClient,\n accessToken: string,\n companyQuery: GetCompaniesQueryRequest,\n): Promise<IApiResponse<IPaginatedResponse<PublicCompanyResponse | SAdminCompanyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedResponse<PublicCompanyResponse | SAdminCompanyResponse>>\n >(COMPANY_BASE, {\n params: companyQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/company — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyCompany(\n http: HttpClient,\n accessToken: string,\n): Promise<IApiResponse<AdminCompanyResponse>> {\n const { data } = await http.get<IApiResponse<AdminCompanyResponse>>(`${API_BASE}/me/company`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getCompanyBySlug(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n): Promise<IApiResponse<PublicCompanyResponse | SAdminCompanyResponse>> {\n const { data } = await http.get<IApiResponse<PublicCompanyResponse | SAdminCompanyResponse>>(\n `${COMPANY_BASE}/${companySlug}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateCompany(\n http: HttpClient,\n accessToken: string,\n newCompanyRequest: CreateCompanyRequest,\n): Promise<IApiResponse<SAdminCompanyResponse>> {\n const { data } = await http.post<IApiResponse<SAdminCompanyResponse>>(\n COMPANY_BASE,\n newCompanyRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/me/company — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateMyCompany(\n http: HttpClient,\n accessToken: string,\n patch: UpdateCompanyByAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateCompanyByAdminRequest>(`${API_BASE}/me/company`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/companies/:companyId — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateCompanyBySAdmin(\n http: HttpClient,\n accessToken: string,\n { companyId }: { companyId: string },\n patch: UpdateCompanyBySAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateCompanyBySAdminRequest>(`${COMPANY_BASE}/${companyId}`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n","import type {\n CreateProjectRequest,\n GetProjectsQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n OwnerProjectResponse,\n ProjectResponse,\n PublicProjectResponse,\n UpdateProjectRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/companies/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjects(\n http: HttpClient,\n accessToken: string,\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>\n >(`${COMPANY_BASE}/projects`, {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProjects(\n http: HttpClient,\n accessToken: string,\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<OwnerProjectResponse>>> {\n const { data } = await http.get<IApiResponse<IPaginatedByTokenResponse<OwnerProjectResponse>>>(\n `${API_BASE}/me/projects`,\n {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/me/projects/:projectId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProjectById(\n http: HttpClient,\n accessToken: string,\n { projectId }: { projectId: string },\n): Promise<IApiResponse<OwnerProjectResponse>> {\n const { data } = await http.get<IApiResponse<OwnerProjectResponse>>(\n `${API_BASE}/me/projects/${projectId}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjectByCompanyAndSlug(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n): Promise<IApiResponse<ProjectResponse | PublicProjectResponse>> {\n const { data } = await http.get<IApiResponse<ProjectResponse | PublicProjectResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjectsByCompany(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>\n >(`${COMPANY_BASE}/${companySlug}/projects`, {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies/:companySlug/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateProject(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n newProjectRequest: CreateProjectRequest,\n): Promise<IApiResponse<ProjectResponse>> {\n const { data } = await http.post<IApiResponse<ProjectResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects`,\n newProjectRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/companies/:companySlug/projects/:projectSlug — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateProject(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n patch: UpdateProjectRequest,\n): Promise<void> {\n await http.patch<void, UpdateProjectRequest>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}`,\n patch,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n}\n","import type {\n BuyerPropertyResponse,\n CreatePropertyRequest,\n GetPropertiesQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n PropertyResponse,\n PublicPropertyResponse,\n UpdatePropertyRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProperties(\n http: HttpClient,\n accessToken: string,\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>\n >(`${API_BASE}/properties`, {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProperties(\n http: HttpClient,\n accessToken: string,\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<BuyerPropertyResponse>>> {\n const { data } = await http.get<IApiResponse<IPaginatedByTokenResponse<BuyerPropertyResponse>>>(\n `${API_BASE}/me/properties`,\n {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/me/properties/:propertyId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyPropertyById(\n http: HttpClient,\n accessToken: string,\n { propertyId }: { propertyId: string },\n): Promise<IApiResponse<BuyerPropertyResponse>> {\n const { data } = await http.get<IApiResponse<BuyerPropertyResponse>>(\n `${API_BASE}/me/properties/${propertyId}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getPropertiesByProject(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>\n >(`${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties`, {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getPropertyByProjectAndCode(\n http: HttpClient,\n accessToken: string,\n {\n companySlug,\n projectSlug,\n propertyCode,\n }: { companySlug: string; projectSlug: string; propertyCode: string },\n): Promise<IApiResponse<PropertyResponse | PublicPropertyResponse>> {\n const { data } = await http.get<IApiResponse<PropertyResponse | PublicPropertyResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties/${propertyCode}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies/:companySlug/projects/:projectSlug/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateProperty(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n newPropertyRequest: CreatePropertyRequest,\n): Promise<IApiResponse<PropertyResponse>> {\n const { data } = await http.post<IApiResponse<PropertyResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties`,\n newPropertyRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateProperty(\n http: HttpClient,\n accessToken: string,\n {\n companySlug,\n projectSlug,\n propertyCode,\n }: { companySlug: string; projectSlug: string; propertyCode: string },\n patch: UpdatePropertyRequest,\n): Promise<void> {\n await http.patch<void, UpdatePropertyRequest>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties/${propertyCode}`,\n patch,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n}\n","import { fetchHealthCheck } from './endpoints/health-check';\nimport type { HttpClient } from './http-client';\nimport {\n getGoogleOAuthStart,\n getMe,\n postGoogleOAuthCallback,\n postLogin,\n postLogout,\n postRefresh,\n postRegister,\n} from './endpoints/auth';\nimport {\n getUserById,\n getUsers,\n patchUpdateMe,\n patchUpdateUserBySAdmin,\n patchUpdateUserRoleByAdmin,\n} from './endpoints/user';\nimport {\n getCompanies,\n getCompanyBySlug,\n getMyCompany,\n patchUpdateCompanyBySAdmin,\n patchUpdateMyCompany,\n postCreateCompany,\n} from './endpoints/company';\nimport {\n getMyProjectById,\n getMyProjects,\n getProjectByCompanyAndSlug,\n getProjects,\n getProjectsByCompany,\n patchUpdateProject,\n postCreateProject,\n} from './endpoints/project';\nimport {\n getMyProperties,\n getMyPropertyById,\n getProperties,\n getPropertiesByProject,\n getPropertyByProjectAndCode,\n patchUpdateProperty,\n postCreateProperty,\n} from './endpoints/property';\n\nexport interface CreateApiClientOptions {\n /**\n * Preconfigured HTTP client (e.g. Axios instance with `baseURL` set).\n * Paths in this library are relative to that base (e.g. `/api/v1/...`).\n * The HTTP implementation must support the methods used by this client,\n * including GET, POST, and PATCH.\n */\n readonly http: HttpClient;\n}\n\nexport interface ApiClient {\n readonly healthCheck: () => ReturnType<typeof fetchHealthCheck>;\n readonly auth: {\n readonly register: (\n body: Parameters<typeof postRegister>[1],\n ) => ReturnType<typeof postRegister>;\n readonly login: (body: Parameters<typeof postLogin>[1]) => ReturnType<typeof postLogin>;\n readonly getGoogleOAuthStart: (redirectUri: string) => ReturnType<typeof getGoogleOAuthStart>;\n readonly postGoogleOAuthCallback: (\n body: Parameters<typeof postGoogleOAuthCallback>[1],\n ) => ReturnType<typeof postGoogleOAuthCallback>;\n readonly refresh: (body: Parameters<typeof postRefresh>[1]) => ReturnType<typeof postRefresh>;\n readonly logout: (body: Parameters<typeof postLogout>[1]) => ReturnType<typeof postLogout>;\n readonly me: (accessToken: string) => ReturnType<typeof getMe>;\n };\n readonly user: {\n readonly users: (\n accessToken: string,\n userQuery: Parameters<typeof getUsers>[2],\n ) => ReturnType<typeof getUsers>;\n readonly userById: (\n accessToken: Parameters<typeof getUserById>[1],\n { userId }: Parameters<typeof getUserById>[2],\n ) => ReturnType<typeof getUserById>;\n readonly updateMe: (\n accessToken: Parameters<typeof patchUpdateMe>[1],\n patch: Parameters<typeof patchUpdateMe>[2],\n ) => ReturnType<typeof patchUpdateMe>;\n readonly updateUserRoleByAdmin: (\n accessToken: Parameters<typeof patchUpdateUserRoleByAdmin>[1],\n { userId }: Parameters<typeof patchUpdateUserRoleByAdmin>[2],\n body: Parameters<typeof patchUpdateUserRoleByAdmin>[3],\n ) => ReturnType<typeof patchUpdateUserRoleByAdmin>;\n readonly updateUserBySAdmin: (\n accessToken: Parameters<typeof patchUpdateUserBySAdmin>[1],\n { userId }: Parameters<typeof patchUpdateUserBySAdmin>[2],\n patch: Parameters<typeof patchUpdateUserBySAdmin>[3],\n ) => ReturnType<typeof patchUpdateUserBySAdmin>;\n };\n readonly company: {\n readonly companies: (\n accessToken: Parameters<typeof getCompanies>[1],\n companyQuery: Parameters<typeof getCompanies>[2],\n ) => ReturnType<typeof getCompanies>;\n readonly myCompany: (\n accessToken: Parameters<typeof getMyCompany>[1],\n ) => ReturnType<typeof getMyCompany>;\n readonly companyBySlug: (\n accessToken: Parameters<typeof getCompanyBySlug>[1],\n { companySlug }: Parameters<typeof getCompanyBySlug>[2],\n ) => ReturnType<typeof getCompanyBySlug>;\n readonly createCompany: (\n accessToken: Parameters<typeof postCreateCompany>[1],\n newCompanyRequest: Parameters<typeof postCreateCompany>[2],\n ) => ReturnType<typeof postCreateCompany>;\n readonly updateMyCompany: (\n accessToken: Parameters<typeof patchUpdateMyCompany>[1],\n patch: Parameters<typeof patchUpdateMyCompany>[2],\n ) => ReturnType<typeof patchUpdateMyCompany>;\n readonly updateCompanyBySAdmin: (\n accessToken: Parameters<typeof patchUpdateCompanyBySAdmin>[1],\n { companyId }: Parameters<typeof patchUpdateCompanyBySAdmin>[2],\n patch: Parameters<typeof patchUpdateCompanyBySAdmin>[3],\n ) => ReturnType<typeof patchUpdateCompanyBySAdmin>;\n };\n readonly project: {\n readonly projects: (\n accessToken: Parameters<typeof getProjects>[1],\n projectQuery: Parameters<typeof getProjects>[2],\n ) => ReturnType<typeof getProjects>;\n readonly myProjects: (\n accessToken: Parameters<typeof getMyProjects>[1],\n projectQuery: Parameters<typeof getMyProjects>[2],\n ) => ReturnType<typeof getMyProjects>;\n readonly myProjectById: (\n accessToken: Parameters<typeof getMyProjectById>[1],\n { projectId }: Parameters<typeof getMyProjectById>[2],\n ) => ReturnType<typeof getMyProjectById>;\n readonly projectByCompanyAndSlug: (\n accessToken: Parameters<typeof getProjectByCompanyAndSlug>[1],\n { companySlug, projectSlug }: Parameters<typeof getProjectByCompanyAndSlug>[2],\n ) => ReturnType<typeof getProjectByCompanyAndSlug>;\n readonly projectsByCompany: (\n accessToken: Parameters<typeof getProjectsByCompany>[1],\n { companySlug }: Parameters<typeof getProjectsByCompany>[2],\n projectQuery: Parameters<typeof getProjectsByCompany>[3],\n ) => ReturnType<typeof getProjectsByCompany>;\n readonly createProject: (\n accessToken: Parameters<typeof postCreateProject>[1],\n { companySlug }: Parameters<typeof postCreateProject>[2],\n newProjectRequest: Parameters<typeof postCreateProject>[3],\n ) => ReturnType<typeof postCreateProject>;\n readonly updateProject: (\n accessToken: Parameters<typeof patchUpdateProject>[1],\n { companySlug, projectSlug }: Parameters<typeof patchUpdateProject>[2],\n patch: Parameters<typeof patchUpdateProject>[3],\n ) => ReturnType<typeof patchUpdateProject>;\n };\n readonly property: {\n readonly properties: (\n accessToken: Parameters<typeof getProperties>[1],\n propertyQuery: Parameters<typeof getProperties>[2],\n ) => ReturnType<typeof getProperties>;\n readonly myProperties: (\n accessToken: Parameters<typeof getMyProperties>[1],\n propertyQuery: Parameters<typeof getMyProperties>[2],\n ) => ReturnType<typeof getMyProperties>;\n readonly myPropertyById: (\n accessToken: Parameters<typeof getMyPropertyById>[1],\n { propertyId }: Parameters<typeof getMyPropertyById>[2],\n ) => ReturnType<typeof getMyPropertyById>;\n readonly propertiesByProject: (\n accessToken: Parameters<typeof getPropertiesByProject>[1],\n { companySlug, projectSlug }: Parameters<typeof getPropertiesByProject>[2],\n propertyQuery: Parameters<typeof getPropertiesByProject>[3],\n ) => ReturnType<typeof getPropertiesByProject>;\n readonly propertyByProjectAndCode: (\n accessToken: Parameters<typeof getPropertyByProjectAndCode>[1],\n { companySlug, projectSlug, propertyCode }: Parameters<typeof getPropertyByProjectAndCode>[2],\n ) => ReturnType<typeof getPropertyByProjectAndCode>;\n readonly createProperty: (\n accessToken: Parameters<typeof postCreateProperty>[1],\n { companySlug, projectSlug }: Parameters<typeof postCreateProperty>[2],\n newPropertyRequest: Parameters<typeof postCreateProperty>[3],\n ) => ReturnType<typeof postCreateProperty>;\n readonly updateProperty: (\n accessToken: Parameters<typeof patchUpdateProperty>[1],\n { companySlug, projectSlug, propertyCode }: Parameters<typeof patchUpdateProperty>[2],\n patch: Parameters<typeof patchUpdateProperty>[3],\n ) => ReturnType<typeof patchUpdateProperty>;\n };\n}\n\n/**\n * Creates a typed API client backed by the provided HTTP implementation.\n */\nexport function createApiClient(options: CreateApiClientOptions): ApiClient {\n const { http } = options;\n\n return {\n healthCheck: () => fetchHealthCheck(http),\n auth: {\n register: (body) => postRegister(http, body),\n login: (body) => postLogin(http, body),\n getGoogleOAuthStart: (redirectUri) => getGoogleOAuthStart(http, redirectUri),\n postGoogleOAuthCallback: (body) => postGoogleOAuthCallback(http, body),\n refresh: (body) => postRefresh(http, body),\n logout: (body) => postLogout(http, body),\n me: (accessToken) => getMe(http, accessToken),\n },\n user: {\n users: (accessToken, userQuery) => getUsers(http, accessToken, userQuery),\n userById: (accessToken, { userId }) => getUserById(http, accessToken, { userId }),\n updateMe: (accessToken, patch) => patchUpdateMe(http, accessToken, patch),\n updateUserRoleByAdmin: (accessToken, { userId }, body) =>\n patchUpdateUserRoleByAdmin(http, accessToken, { userId }, body),\n updateUserBySAdmin: (accessToken, { userId }, patch) =>\n patchUpdateUserBySAdmin(http, accessToken, { userId }, patch),\n },\n company: {\n companies: (accessToken, companyQuery) => getCompanies(http, accessToken, companyQuery),\n myCompany: (accessToken) => getMyCompany(http, accessToken),\n companyBySlug: (accessToken, { companySlug }) =>\n getCompanyBySlug(http, accessToken, { companySlug }),\n createCompany: (accessToken, newCompanyRequest) =>\n postCreateCompany(http, accessToken, newCompanyRequest),\n updateMyCompany: (accessToken, patch) => patchUpdateMyCompany(http, accessToken, patch),\n updateCompanyBySAdmin: (accessToken, { companyId }, patch) =>\n patchUpdateCompanyBySAdmin(http, accessToken, { companyId }, patch),\n },\n project: {\n projects: (accessToken, projectQuery) => getProjects(http, accessToken, projectQuery),\n myProjects: (accessToken, projectQuery) => getMyProjects(http, accessToken, projectQuery),\n myProjectById: (accessToken, { projectId }) =>\n getMyProjectById(http, accessToken, { projectId }),\n projectByCompanyAndSlug: (accessToken, { companySlug, projectSlug }) =>\n getProjectByCompanyAndSlug(http, accessToken, { companySlug, projectSlug }),\n projectsByCompany: (accessToken, { companySlug }, projectQuery) =>\n getProjectsByCompany(http, accessToken, { companySlug }, projectQuery),\n createProject: (accessToken, { companySlug }, newProjectRequest) =>\n postCreateProject(http, accessToken, { companySlug }, newProjectRequest),\n updateProject: (accessToken, { companySlug, projectSlug }, patch) =>\n patchUpdateProject(http, accessToken, { companySlug, projectSlug }, patch),\n },\n property: {\n properties: (accessToken, propertyQuery) => getProperties(http, accessToken, propertyQuery),\n myProperties: (accessToken, propertyQuery) =>\n getMyProperties(http, accessToken, propertyQuery),\n myPropertyById: (accessToken, { propertyId }) =>\n getMyPropertyById(http, accessToken, { propertyId }),\n propertiesByProject: (accessToken, { companySlug, projectSlug }, propertyQuery) =>\n getPropertiesByProject(http, accessToken, { companySlug, projectSlug }, propertyQuery),\n propertyByProjectAndCode: (accessToken, { companySlug, projectSlug, propertyCode }) =>\n getPropertyByProjectAndCode(http, accessToken, { companySlug, projectSlug, propertyCode }),\n createProperty: (accessToken, { companySlug, projectSlug }, newPropertyRequest) =>\n postCreateProperty(http, accessToken, { companySlug, projectSlug }, newPropertyRequest),\n updateProperty: (accessToken, { companySlug, projectSlug, propertyCode }, patch) =>\n patchUpdateProperty(http, accessToken, { companySlug, projectSlug, propertyCode }, patch),\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/endpoints/health-check.ts","../src/endpoints/auth.ts","../src/endpoints/user.ts","../src/endpoints/company.ts","../src/endpoints/project.ts","../src/endpoints/property.ts","../src/create-api-client.ts"],"names":["API_BASE","COMPANY_BASE"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { IApiResponse, HealthCheck } from '@kulkan/kulterra-contracts';\nimport type { HttpClient } from '../http-client';\n\n/** Same path as `/api/${v1}/health-check` on the server when `v1` is the string `'v1'`. */\nconst HEALTH_CHECK_PATH = '/api/v1/health-check' as const;\n\n/**\n * GET /api/v1/health-check — server liveness.\n *\n * Returns the full JSON the server sends (`IApiResponse<HealthCheck>`).\n *\n * **Why not `data.data` here?** Adapters like Axios wrap the HTTP body in a property also\n * called `data`. That outer `data` is the entire `res.json(...)` object. The inner\n * `IApiResponse.data` is the `HealthCheck` payload — use `.data` on the **returned** value,\n * e.g. `(await fetchHealthCheck(http)).data`.\n */\nexport async function fetchHealthCheck(http: HttpClient): Promise<IApiResponse<HealthCheck>> {\n const { data: body } = await http.get<IApiResponse<HealthCheck>>(HEALTH_CHECK_PATH);\n\n return body;\n}\n","import type {\n AuthSessionResponse,\n AuthUserResponse,\n IApiResponse,\n LoginRequest,\n LogoutRequest,\n OAuthGoogleCallbackRequest,\n OAuthGoogleStartResponse,\n RefreshRequest,\n RegisterRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst AUTH_BASE = '/api/v1/auth' as const;\n\n/**\n * POST /api/v1/auth/register\n */\nexport async function postRegister(\n http: HttpClient,\n body: RegisterRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, RegisterRequest>(\n `${AUTH_BASE}/register`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/login\n */\nexport async function postLogin(\n http: HttpClient,\n body: LoginRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, LoginRequest>(\n `${AUTH_BASE}/login`,\n body,\n );\n return data;\n}\n\n/**\n * GET /api/v1/auth/oauth/google/start?redirectUri=...\n */\nexport async function getGoogleOAuthStart(\n http: HttpClient,\n redirectUri: string,\n): Promise<IApiResponse<OAuthGoogleStartResponse>> {\n const q = new URLSearchParams({ redirectUri });\n const { data } = await http.get<IApiResponse<OAuthGoogleStartResponse>>(\n `${AUTH_BASE}/oauth/google/start?${q.toString()}`,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/oauth/google/callback\n */\nexport async function postGoogleOAuthCallback(\n http: HttpClient,\n body: OAuthGoogleCallbackRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, OAuthGoogleCallbackRequest>(\n `${AUTH_BASE}/oauth/google/callback`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/refresh\n */\nexport async function postRefresh(\n http: HttpClient,\n body: RefreshRequest,\n): Promise<IApiResponse<AuthSessionResponse>> {\n const { data } = await http.post<IApiResponse<AuthSessionResponse>, RefreshRequest>(\n `${AUTH_BASE}/refresh`,\n body,\n );\n return data;\n}\n\n/**\n * POST /api/v1/auth/logout — 204 No Content (no JSON body).\n */\nexport async function postLogout(http: HttpClient, body: LogoutRequest): Promise<void> {\n await http.post<undefined, LogoutRequest>(`${AUTH_BASE}/logout`, body);\n}\n\n/**\n * GET /api/v1/auth/me — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMe(\n http: HttpClient,\n accessToken: string,\n): Promise<IApiResponse<AuthUserResponse>> {\n const { data } = await http.get<IApiResponse<AuthUserResponse>>(`${AUTH_BASE}/me`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n","import type {\n GetUsersQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n ToAdminUsersResponse,\n ToSAdminUsersResponse,\n UpdateUserBySAdminRequest,\n UpdateUserByUserRequest,\n UpdateUserRoleByAdminRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst USER_BASE = `${API_BASE}/users` as const;\n\n// GET\n\n/**\n * GET /api/v1/users — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getUsers(\n http: HttpClient,\n accessToken: string,\n userQuery: GetUsersQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ToAdminUsersResponse | ToSAdminUsersResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ToAdminUsersResponse | ToSAdminUsersResponse>>\n >(USER_BASE, {\n params: userQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/users/:userId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getUserById(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n): Promise<IApiResponse<ToSAdminUsersResponse>> {\n const { data } = await http.get<IApiResponse<ToSAdminUsersResponse>>(`${USER_BASE}/${userId}`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/me — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateMe(\n http: HttpClient,\n accessToken: string,\n patch: UpdateUserByUserRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserByUserRequest>(`${API_BASE}/me`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/users/:userId/role — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateUserRoleByAdmin(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n body: UpdateUserRoleByAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserRoleByAdminRequest>(`${USER_BASE}/${userId}/role`, body, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/users/:userId — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateUserBySAdmin(\n http: HttpClient,\n accessToken: string,\n { userId }: { userId: string },\n patch: UpdateUserBySAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateUserBySAdminRequest>(`${USER_BASE}/${userId}`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n","import type {\n AdminCompanyResponse,\n CreateCompanyRequest,\n GetCompaniesQueryRequest,\n IApiResponse,\n IPaginatedResponse,\n PublicCompanyResponse,\n SAdminCompanyResponse,\n UpdateCompanyByAdminRequest,\n UpdateCompanyBySAdminRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/companies — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getCompanies(\n http: HttpClient,\n accessToken: string,\n companyQuery: GetCompaniesQueryRequest,\n): Promise<IApiResponse<IPaginatedResponse<PublicCompanyResponse | SAdminCompanyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedResponse<PublicCompanyResponse | SAdminCompanyResponse>>\n >(COMPANY_BASE, {\n params: companyQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/company — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyCompany(\n http: HttpClient,\n accessToken: string,\n): Promise<IApiResponse<AdminCompanyResponse>> {\n const { data } = await http.get<IApiResponse<AdminCompanyResponse>>(`${API_BASE}/me/company`, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getCompanyBySlug(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n): Promise<IApiResponse<PublicCompanyResponse | SAdminCompanyResponse>> {\n const { data } = await http.get<IApiResponse<PublicCompanyResponse | SAdminCompanyResponse>>(\n `${COMPANY_BASE}/${companySlug}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateCompany(\n http: HttpClient,\n accessToken: string,\n newCompanyRequest: CreateCompanyRequest,\n): Promise<IApiResponse<SAdminCompanyResponse>> {\n const { data } = await http.post<IApiResponse<SAdminCompanyResponse>>(\n COMPANY_BASE,\n newCompanyRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/me/company — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateMyCompany(\n http: HttpClient,\n accessToken: string,\n patch: UpdateCompanyByAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateCompanyByAdminRequest>(`${API_BASE}/me/company`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n\n/**\n * PATCH /api/v1/companies/:companyId — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateCompanyBySAdmin(\n http: HttpClient,\n accessToken: string,\n { companyId }: { companyId: string },\n patch: UpdateCompanyBySAdminRequest,\n): Promise<void> {\n await http.patch<void, UpdateCompanyBySAdminRequest>(`${COMPANY_BASE}/${companyId}`, patch, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n}\n","import type {\n CreateProjectRequest,\n GetProjectsQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n OwnerProjectResponse,\n ProjectResponse,\n PublicProjectResponse,\n UpdateProjectRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/companies/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjects(\n http: HttpClient,\n accessToken: string,\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>\n >(`${API_BASE}/projects`, {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProjects(\n http: HttpClient,\n accessToken: string,\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<OwnerProjectResponse>>> {\n const { data } = await http.get<IApiResponse<IPaginatedByTokenResponse<OwnerProjectResponse>>>(\n `${API_BASE}/me/projects`,\n {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/me/projects/:projectId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProjectById(\n http: HttpClient,\n accessToken: string,\n { projectId }: { projectId: string },\n): Promise<IApiResponse<OwnerProjectResponse>> {\n const { data } = await http.get<IApiResponse<OwnerProjectResponse>>(\n `${API_BASE}/me/projects/${projectId}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjectByCompanyAndSlug(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n): Promise<IApiResponse<ProjectResponse | PublicProjectResponse>> {\n const { data } = await http.get<IApiResponse<ProjectResponse | PublicProjectResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProjectsByCompany(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n projectQuery: GetProjectsQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<ProjectResponse | PublicProjectResponse>>\n >(`${COMPANY_BASE}/${companySlug}/projects`, {\n params: projectQuery,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies/:companySlug/projects — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateProject(\n http: HttpClient,\n accessToken: string,\n { companySlug }: { companySlug: string },\n newProjectRequest: CreateProjectRequest,\n): Promise<IApiResponse<ProjectResponse>> {\n const { data } = await http.post<IApiResponse<ProjectResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects`,\n newProjectRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/companies/:companySlug/projects/:projectSlug — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateProject(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n patch: UpdateProjectRequest,\n): Promise<void> {\n await http.patch<void, UpdateProjectRequest>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}`,\n patch,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n}\n","import type {\n BuyerPropertyResponse,\n CreatePropertyRequest,\n GetPropertiesQueryByTokenRequest,\n IApiResponse,\n IPaginatedByTokenResponse,\n PropertyResponse,\n PublicPropertyResponse,\n UpdatePropertyRequest,\n} from '@kulkan/kulterra-contracts';\n\nimport type { HttpClient } from '../http-client';\n\nconst API_BASE = '/api/v1' as const;\nconst COMPANY_BASE = `${API_BASE}/companies` as const;\n\n// GET\n\n/**\n * GET /api/v1/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getProperties(\n http: HttpClient,\n accessToken: string,\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>\n >(`${API_BASE}/properties`, {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/me/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyProperties(\n http: HttpClient,\n accessToken: string,\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<BuyerPropertyResponse>>> {\n const { data } = await http.get<IApiResponse<IPaginatedByTokenResponse<BuyerPropertyResponse>>>(\n `${API_BASE}/me/properties`,\n {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/me/properties/:propertyId — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getMyPropertyById(\n http: HttpClient,\n accessToken: string,\n { propertyId }: { propertyId: string },\n): Promise<IApiResponse<BuyerPropertyResponse>> {\n const { data } = await http.get<IApiResponse<BuyerPropertyResponse>>(\n `${API_BASE}/me/properties/${propertyId}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getPropertiesByProject(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n query: GetPropertiesQueryByTokenRequest,\n): Promise<IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>> {\n const { data } = await http.get<\n IApiResponse<IPaginatedByTokenResponse<PropertyResponse | PublicPropertyResponse>>\n >(`${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties`, {\n params: query,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return data;\n}\n\n/**\n * GET /api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function getPropertyByProjectAndCode(\n http: HttpClient,\n accessToken: string,\n {\n companySlug,\n projectSlug,\n propertyCode,\n }: { companySlug: string; projectSlug: string; propertyCode: string },\n): Promise<IApiResponse<PropertyResponse | PublicPropertyResponse>> {\n const { data } = await http.get<IApiResponse<PropertyResponse | PublicPropertyResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties/${propertyCode}`,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// POST\n\n/**\n * POST /api/v1/companies/:companySlug/projects/:projectSlug/properties — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function postCreateProperty(\n http: HttpClient,\n accessToken: string,\n { companySlug, projectSlug }: { companySlug: string; projectSlug: string },\n newPropertyRequest: CreatePropertyRequest,\n): Promise<IApiResponse<PropertyResponse>> {\n const { data } = await http.post<IApiResponse<PropertyResponse>>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties`,\n newPropertyRequest,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return data;\n}\n\n// PATCH\n\n/**\n * PATCH /api/v1/companies/:companySlug/projects/:projectSlug/properties/:propertyCode — 204 No Content (no JSON body) — requires `Authorization: Bearer <accessToken>`.\n */\nexport async function patchUpdateProperty(\n http: HttpClient,\n accessToken: string,\n {\n companySlug,\n projectSlug,\n propertyCode,\n }: { companySlug: string; projectSlug: string; propertyCode: string },\n patch: UpdatePropertyRequest,\n): Promise<void> {\n await http.patch<void, UpdatePropertyRequest>(\n `${COMPANY_BASE}/${companySlug}/projects/${projectSlug}/properties/${propertyCode}`,\n patch,\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n}\n","import { fetchHealthCheck } from './endpoints/health-check';\nimport type { HttpClient } from './http-client';\nimport {\n getGoogleOAuthStart,\n getMe,\n postGoogleOAuthCallback,\n postLogin,\n postLogout,\n postRefresh,\n postRegister,\n} from './endpoints/auth';\nimport {\n getUserById,\n getUsers,\n patchUpdateMe,\n patchUpdateUserBySAdmin,\n patchUpdateUserRoleByAdmin,\n} from './endpoints/user';\nimport {\n getCompanies,\n getCompanyBySlug,\n getMyCompany,\n patchUpdateCompanyBySAdmin,\n patchUpdateMyCompany,\n postCreateCompany,\n} from './endpoints/company';\nimport {\n getMyProjectById,\n getMyProjects,\n getProjectByCompanyAndSlug,\n getProjects,\n getProjectsByCompany,\n patchUpdateProject,\n postCreateProject,\n} from './endpoints/project';\nimport {\n getMyProperties,\n getMyPropertyById,\n getProperties,\n getPropertiesByProject,\n getPropertyByProjectAndCode,\n patchUpdateProperty,\n postCreateProperty,\n} from './endpoints/property';\n\nexport interface CreateApiClientOptions {\n /**\n * Preconfigured HTTP client (e.g. Axios instance with `baseURL` set).\n * Paths in this library are relative to that base (e.g. `/api/v1/...`).\n * The HTTP implementation must support the methods used by this client,\n * including GET, POST, and PATCH.\n */\n readonly http: HttpClient;\n}\n\nexport interface ApiClient {\n readonly healthCheck: () => ReturnType<typeof fetchHealthCheck>;\n readonly auth: {\n readonly register: (\n body: Parameters<typeof postRegister>[1],\n ) => ReturnType<typeof postRegister>;\n readonly login: (body: Parameters<typeof postLogin>[1]) => ReturnType<typeof postLogin>;\n readonly getGoogleOAuthStart: (redirectUri: string) => ReturnType<typeof getGoogleOAuthStart>;\n readonly postGoogleOAuthCallback: (\n body: Parameters<typeof postGoogleOAuthCallback>[1],\n ) => ReturnType<typeof postGoogleOAuthCallback>;\n readonly refresh: (body: Parameters<typeof postRefresh>[1]) => ReturnType<typeof postRefresh>;\n readonly logout: (body: Parameters<typeof postLogout>[1]) => ReturnType<typeof postLogout>;\n readonly me: (accessToken: string) => ReturnType<typeof getMe>;\n };\n readonly user: {\n readonly users: (\n accessToken: string,\n userQuery: Parameters<typeof getUsers>[2],\n ) => ReturnType<typeof getUsers>;\n readonly userById: (\n accessToken: Parameters<typeof getUserById>[1],\n { userId }: Parameters<typeof getUserById>[2],\n ) => ReturnType<typeof getUserById>;\n readonly updateMe: (\n accessToken: Parameters<typeof patchUpdateMe>[1],\n patch: Parameters<typeof patchUpdateMe>[2],\n ) => ReturnType<typeof patchUpdateMe>;\n readonly updateUserRoleByAdmin: (\n accessToken: Parameters<typeof patchUpdateUserRoleByAdmin>[1],\n { userId }: Parameters<typeof patchUpdateUserRoleByAdmin>[2],\n body: Parameters<typeof patchUpdateUserRoleByAdmin>[3],\n ) => ReturnType<typeof patchUpdateUserRoleByAdmin>;\n readonly updateUserBySAdmin: (\n accessToken: Parameters<typeof patchUpdateUserBySAdmin>[1],\n { userId }: Parameters<typeof patchUpdateUserBySAdmin>[2],\n patch: Parameters<typeof patchUpdateUserBySAdmin>[3],\n ) => ReturnType<typeof patchUpdateUserBySAdmin>;\n };\n readonly company: {\n readonly companies: (\n accessToken: Parameters<typeof getCompanies>[1],\n companyQuery: Parameters<typeof getCompanies>[2],\n ) => ReturnType<typeof getCompanies>;\n readonly myCompany: (\n accessToken: Parameters<typeof getMyCompany>[1],\n ) => ReturnType<typeof getMyCompany>;\n readonly companyBySlug: (\n accessToken: Parameters<typeof getCompanyBySlug>[1],\n { companySlug }: Parameters<typeof getCompanyBySlug>[2],\n ) => ReturnType<typeof getCompanyBySlug>;\n readonly createCompany: (\n accessToken: Parameters<typeof postCreateCompany>[1],\n newCompanyRequest: Parameters<typeof postCreateCompany>[2],\n ) => ReturnType<typeof postCreateCompany>;\n readonly updateMyCompany: (\n accessToken: Parameters<typeof patchUpdateMyCompany>[1],\n patch: Parameters<typeof patchUpdateMyCompany>[2],\n ) => ReturnType<typeof patchUpdateMyCompany>;\n readonly updateCompanyBySAdmin: (\n accessToken: Parameters<typeof patchUpdateCompanyBySAdmin>[1],\n { companyId }: Parameters<typeof patchUpdateCompanyBySAdmin>[2],\n patch: Parameters<typeof patchUpdateCompanyBySAdmin>[3],\n ) => ReturnType<typeof patchUpdateCompanyBySAdmin>;\n };\n readonly project: {\n readonly projects: (\n accessToken: Parameters<typeof getProjects>[1],\n projectQuery: Parameters<typeof getProjects>[2],\n ) => ReturnType<typeof getProjects>;\n readonly myProjects: (\n accessToken: Parameters<typeof getMyProjects>[1],\n projectQuery: Parameters<typeof getMyProjects>[2],\n ) => ReturnType<typeof getMyProjects>;\n readonly myProjectById: (\n accessToken: Parameters<typeof getMyProjectById>[1],\n { projectId }: Parameters<typeof getMyProjectById>[2],\n ) => ReturnType<typeof getMyProjectById>;\n readonly projectByCompanyAndSlug: (\n accessToken: Parameters<typeof getProjectByCompanyAndSlug>[1],\n { companySlug, projectSlug }: Parameters<typeof getProjectByCompanyAndSlug>[2],\n ) => ReturnType<typeof getProjectByCompanyAndSlug>;\n readonly projectsByCompany: (\n accessToken: Parameters<typeof getProjectsByCompany>[1],\n { companySlug }: Parameters<typeof getProjectsByCompany>[2],\n projectQuery: Parameters<typeof getProjectsByCompany>[3],\n ) => ReturnType<typeof getProjectsByCompany>;\n readonly createProject: (\n accessToken: Parameters<typeof postCreateProject>[1],\n { companySlug }: Parameters<typeof postCreateProject>[2],\n newProjectRequest: Parameters<typeof postCreateProject>[3],\n ) => ReturnType<typeof postCreateProject>;\n readonly updateProject: (\n accessToken: Parameters<typeof patchUpdateProject>[1],\n { companySlug, projectSlug }: Parameters<typeof patchUpdateProject>[2],\n patch: Parameters<typeof patchUpdateProject>[3],\n ) => ReturnType<typeof patchUpdateProject>;\n };\n readonly property: {\n readonly properties: (\n accessToken: Parameters<typeof getProperties>[1],\n propertyQuery: Parameters<typeof getProperties>[2],\n ) => ReturnType<typeof getProperties>;\n readonly myProperties: (\n accessToken: Parameters<typeof getMyProperties>[1],\n propertyQuery: Parameters<typeof getMyProperties>[2],\n ) => ReturnType<typeof getMyProperties>;\n readonly myPropertyById: (\n accessToken: Parameters<typeof getMyPropertyById>[1],\n { propertyId }: Parameters<typeof getMyPropertyById>[2],\n ) => ReturnType<typeof getMyPropertyById>;\n readonly propertiesByProject: (\n accessToken: Parameters<typeof getPropertiesByProject>[1],\n { companySlug, projectSlug }: Parameters<typeof getPropertiesByProject>[2],\n propertyQuery: Parameters<typeof getPropertiesByProject>[3],\n ) => ReturnType<typeof getPropertiesByProject>;\n readonly propertyByProjectAndCode: (\n accessToken: Parameters<typeof getPropertyByProjectAndCode>[1],\n { companySlug, projectSlug, propertyCode }: Parameters<typeof getPropertyByProjectAndCode>[2],\n ) => ReturnType<typeof getPropertyByProjectAndCode>;\n readonly createProperty: (\n accessToken: Parameters<typeof postCreateProperty>[1],\n { companySlug, projectSlug }: Parameters<typeof postCreateProperty>[2],\n newPropertyRequest: Parameters<typeof postCreateProperty>[3],\n ) => ReturnType<typeof postCreateProperty>;\n readonly updateProperty: (\n accessToken: Parameters<typeof patchUpdateProperty>[1],\n { companySlug, projectSlug, propertyCode }: Parameters<typeof patchUpdateProperty>[2],\n patch: Parameters<typeof patchUpdateProperty>[3],\n ) => ReturnType<typeof patchUpdateProperty>;\n };\n}\n\n/**\n * Creates a typed API client backed by the provided HTTP implementation.\n */\nexport function createApiClient(options: CreateApiClientOptions): ApiClient {\n const { http } = options;\n\n return {\n healthCheck: () => fetchHealthCheck(http),\n auth: {\n register: (body) => postRegister(http, body),\n login: (body) => postLogin(http, body),\n getGoogleOAuthStart: (redirectUri) => getGoogleOAuthStart(http, redirectUri),\n postGoogleOAuthCallback: (body) => postGoogleOAuthCallback(http, body),\n refresh: (body) => postRefresh(http, body),\n logout: (body) => postLogout(http, body),\n me: (accessToken) => getMe(http, accessToken),\n },\n user: {\n users: (accessToken, userQuery) => getUsers(http, accessToken, userQuery),\n userById: (accessToken, { userId }) => getUserById(http, accessToken, { userId }),\n updateMe: (accessToken, patch) => patchUpdateMe(http, accessToken, patch),\n updateUserRoleByAdmin: (accessToken, { userId }, body) =>\n patchUpdateUserRoleByAdmin(http, accessToken, { userId }, body),\n updateUserBySAdmin: (accessToken, { userId }, patch) =>\n patchUpdateUserBySAdmin(http, accessToken, { userId }, patch),\n },\n company: {\n companies: (accessToken, companyQuery) => getCompanies(http, accessToken, companyQuery),\n myCompany: (accessToken) => getMyCompany(http, accessToken),\n companyBySlug: (accessToken, { companySlug }) =>\n getCompanyBySlug(http, accessToken, { companySlug }),\n createCompany: (accessToken, newCompanyRequest) =>\n postCreateCompany(http, accessToken, newCompanyRequest),\n updateMyCompany: (accessToken, patch) => patchUpdateMyCompany(http, accessToken, patch),\n updateCompanyBySAdmin: (accessToken, { companyId }, patch) =>\n patchUpdateCompanyBySAdmin(http, accessToken, { companyId }, patch),\n },\n project: {\n projects: (accessToken, projectQuery) => getProjects(http, accessToken, projectQuery),\n myProjects: (accessToken, projectQuery) => getMyProjects(http, accessToken, projectQuery),\n myProjectById: (accessToken, { projectId }) =>\n getMyProjectById(http, accessToken, { projectId }),\n projectByCompanyAndSlug: (accessToken, { companySlug, projectSlug }) =>\n getProjectByCompanyAndSlug(http, accessToken, { companySlug, projectSlug }),\n projectsByCompany: (accessToken, { companySlug }, projectQuery) =>\n getProjectsByCompany(http, accessToken, { companySlug }, projectQuery),\n createProject: (accessToken, { companySlug }, newProjectRequest) =>\n postCreateProject(http, accessToken, { companySlug }, newProjectRequest),\n updateProject: (accessToken, { companySlug, projectSlug }, patch) =>\n patchUpdateProject(http, accessToken, { companySlug, projectSlug }, patch),\n },\n property: {\n properties: (accessToken, propertyQuery) => getProperties(http, accessToken, propertyQuery),\n myProperties: (accessToken, propertyQuery) =>\n getMyProperties(http, accessToken, propertyQuery),\n myPropertyById: (accessToken, { propertyId }) =>\n getMyPropertyById(http, accessToken, { propertyId }),\n propertiesByProject: (accessToken, { companySlug, projectSlug }, propertyQuery) =>\n getPropertiesByProject(http, accessToken, { companySlug, projectSlug }, propertyQuery),\n propertyByProjectAndCode: (accessToken, { companySlug, projectSlug, propertyCode }) =>\n getPropertyByProjectAndCode(http, accessToken, { companySlug, projectSlug, propertyCode }),\n createProperty: (accessToken, { companySlug, projectSlug }, newPropertyRequest) =>\n postCreateProperty(http, accessToken, { companySlug, projectSlug }, newPropertyRequest),\n updateProperty: (accessToken, { companySlug, projectSlug, propertyCode }, patch) =>\n patchUpdateProperty(http, accessToken, { companySlug, projectSlug, propertyCode }, patch),\n },\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kulkan/kulterra-api-client",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "description": "Client used to interact with KulTerra project API",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",