@apito-io/js-admin-sdk 2.1.2 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -1
- package/dist/index.d.mts +65 -7
- package/dist/index.d.ts +65 -7
- package/dist/index.js +88 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +88 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/client.test.ts +56 -4
- package/src/client.ts +209 -15
- package/src/types.ts +48 -1
- package/src/version.ts +1 -1
package/README.md
CHANGED
|
@@ -145,6 +145,34 @@ const relatedUsers = await client.getRelationDocuments('todo-123', {
|
|
|
145
145
|
});
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
+
### Pro: tenant catalog users (Apito Pro)
|
|
149
|
+
|
|
150
|
+
These calls use the same admin client and system GraphQL endpoint as the rest of the SDK. They mirror the Go SDK and require a **Pro** Apito engine. Pass `projectId`; each returned user includes `tenant_id`.
|
|
151
|
+
|
|
152
|
+
| Method | Description |
|
|
153
|
+
|--------|-------------|
|
|
154
|
+
| `searchTenantUsers(projectId, limit?, offset?)` | List users registered for a project. |
|
|
155
|
+
| `searchTenantsByDomain(projectId, domain)` | Exact domain lookup in project scope; returns `{ tenant }` (null if no match). |
|
|
156
|
+
| `createTenantUser(projectId, username, email, password, role)` | Create a local-password user in project scope. |
|
|
157
|
+
| `loginTenantUser(username, password, projectId)` | Password login in project scope; response may include a tenant-scoped token. |
|
|
158
|
+
| `loginTenantUserGoogle(projectId, idToken)` | Google ID token login in project scope. |
|
|
159
|
+
|
|
160
|
+
On the engine system GraphQL API, `createTenant` accepts an optional `domain`; when set, the domain must be unused in the project (otherwise the mutation fails). `updateTenant` enforces the same when setting `domain` to a non-empty value. Call those mutations via `executeGraphQL` if needed.
|
|
161
|
+
|
|
162
|
+
```javascript
|
|
163
|
+
const projectId = 'your-project-id';
|
|
164
|
+
|
|
165
|
+
const { users, count } = await client.searchTenantUsers(projectId, 50, 0);
|
|
166
|
+
console.log('users:', count, users.map((u) => u.username));
|
|
167
|
+
|
|
168
|
+
const login = await client.loginTenantUser('admin', 'your-password', projectId);
|
|
169
|
+
if (login.token) {
|
|
170
|
+
console.log('tenant-scoped token:', login.token);
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Runnable sample: `examples/tenant_users` (set `APITO_BASE_URL`, `APITO_API_KEY`, `APITO_PROJECT_ID`).
|
|
175
|
+
|
|
148
176
|
### Typed Operations
|
|
149
177
|
|
|
150
178
|
For type-safe operations, use the `TypedOperations` class:
|
|
@@ -302,7 +330,8 @@ const createdTodos = await Promise.all(
|
|
|
302
330
|
|
|
303
331
|
This client mirrors the Go `go-internal-sdk` package and the `InternalSDKOperation` interface from `github.com/apito-io/types`.
|
|
304
332
|
|
|
305
|
-
- **Tenant header:** In Go, set `context.WithValue(ctx, "tenant_id", id)` before calls. In JavaScript, set `tenantId` on `ClientConfig`, or
|
|
333
|
+
- **Tenant header:** In Go, set `context.WithValue(ctx, "tenant_id", id)` before calls. In JavaScript, set `tenantId` on `ClientConfig`, or pass `{ tenantId }` to `executeGraphQL` options where relevant.
|
|
334
|
+
- **`generateTenantToken(tenantId, duration?, role?)`:** Matches engine `generateTenantToken` — `tenant_id`, `duration` (`YYYY-MM-DD`; omit for default one year ahead in UTC), optional `role` (omit for engine default `admin`). Sends `X-Apito-Tenant-ID` for the mutation. Auth uses the client `apiKey`.
|
|
306
335
|
- **GraphQL errors:** The Go client returns `(response, err)` when the response includes `errors`. This SDK throws `GraphQLError` with `graphQLErrors` and the full payload on `response`; use `error.partialData` to read `data` when the server returns partial success.
|
|
307
336
|
- **`searchResources` filter:** Only `_key`, `page`, `limit`, `where`, and `search` are forwarded. Extra keys are ignored so unknown GraphQL variables cannot break the request.
|
|
308
337
|
- **`TypedOperations`:** `data` is deep-cloned via `JSON.parse(JSON.stringify(...))`, matching the Go SDK’s marshal/unmarshal approach for typed document `data`.
|
|
@@ -332,6 +361,14 @@ npm install
|
|
|
332
361
|
npm start
|
|
333
362
|
```
|
|
334
363
|
|
|
364
|
+
Pro tenant-user listing (optional `APITO_TENANT_USERNAME` / `APITO_TENANT_PASSWORD` for login):
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
cd examples/tenant_users
|
|
368
|
+
npm install
|
|
369
|
+
APITO_BASE_URL=http://localhost:5050/system/graphql APITO_API_KEY=... APITO_PROJECT_ID=... npm start
|
|
370
|
+
```
|
|
371
|
+
|
|
335
372
|
## 📄 License
|
|
336
373
|
|
|
337
374
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
package/dist/index.d.mts
CHANGED
|
@@ -69,6 +69,37 @@ interface CreateAndUpdateRequest {
|
|
|
69
69
|
singlePageData?: boolean;
|
|
70
70
|
forceUpdate?: boolean;
|
|
71
71
|
}
|
|
72
|
+
/** Tenant catalog user from engine system DB (pro_tenant_users). */
|
|
73
|
+
interface TenantUser {
|
|
74
|
+
id: string;
|
|
75
|
+
username: string;
|
|
76
|
+
email?: string;
|
|
77
|
+
role: string;
|
|
78
|
+
tenant_id: string;
|
|
79
|
+
provider?: string;
|
|
80
|
+
status?: string;
|
|
81
|
+
created_at?: string;
|
|
82
|
+
updated_at?: string;
|
|
83
|
+
}
|
|
84
|
+
interface TenantLoginResponse {
|
|
85
|
+
token: string;
|
|
86
|
+
user?: TenantUser;
|
|
87
|
+
}
|
|
88
|
+
interface TenantUsersResponse {
|
|
89
|
+
users: TenantUser[];
|
|
90
|
+
count: number;
|
|
91
|
+
}
|
|
92
|
+
/** One SaaS catalog tenant row from searchTenantsByDomain. */
|
|
93
|
+
interface TenantCatalogSearchRow {
|
|
94
|
+
id: string;
|
|
95
|
+
name: string;
|
|
96
|
+
status?: string;
|
|
97
|
+
domain?: string;
|
|
98
|
+
data?: string;
|
|
99
|
+
}
|
|
100
|
+
interface TenantByDomainResponse {
|
|
101
|
+
tenant: TenantCatalogSearchRow | null;
|
|
102
|
+
}
|
|
72
103
|
interface ClientConfig {
|
|
73
104
|
baseURL: string;
|
|
74
105
|
apiKey: string;
|
|
@@ -97,7 +128,12 @@ interface InjectedDBOperationInterface {
|
|
|
97
128
|
tenantId?: string;
|
|
98
129
|
}): Promise<GraphQLResponse>;
|
|
99
130
|
/** @param token Legacy; ignored. Auth uses client API key. */
|
|
100
|
-
generateTenantToken(
|
|
131
|
+
generateTenantToken(tenantId: string, duration?: string, role?: string): Promise<string>;
|
|
132
|
+
loginTenantUser(username: string, password: string, projectId: string): Promise<TenantLoginResponse>;
|
|
133
|
+
loginTenantUserGoogle(projectId: string, idToken: string): Promise<TenantLoginResponse>;
|
|
134
|
+
searchTenantUsers(projectId: string, limit?: number, offset?: number): Promise<TenantUsersResponse>;
|
|
135
|
+
searchTenantsByDomain(projectId: string, domain: string): Promise<TenantByDomainResponse>;
|
|
136
|
+
createTenantUser(projectId: string, username: string, email: string, password: string, role: string): Promise<TenantUser>;
|
|
101
137
|
getSingleResource(model: string, id: string, singlePageData?: boolean): Promise<DefaultDocumentStructure>;
|
|
102
138
|
searchResources(model: string, filter?: Record<string, any>, aggregate?: boolean): Promise<SearchResult>;
|
|
103
139
|
getRelationDocuments(id: string, connection: Record<string, any>): Promise<SearchResult>;
|
|
@@ -146,12 +182,34 @@ declare class ApitoClient implements InjectedDBOperationInterface {
|
|
|
146
182
|
tenantId?: string;
|
|
147
183
|
}): Promise<GraphQLResponse>;
|
|
148
184
|
/**
|
|
149
|
-
* Generate a tenant-scoped API key
|
|
185
|
+
* Generate a tenant-scoped API key. Matches engine `generateTenantToken`: `tenant_id`, `duration`, optional `role`.
|
|
186
|
+
* Auth uses `X-Apito-Key` (client `apiKey`).
|
|
150
187
|
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
188
|
+
* @param tenantId Catalog tenant id (`tenant_id` in the mutation).
|
|
189
|
+
* @param duration Expiry calendar day `YYYY-MM-DD`. If omitted/empty, defaults to one year ahead in UTC.
|
|
190
|
+
* @param role Optional token role; if omitted/empty, the engine defaults to `admin`.
|
|
191
|
+
*/
|
|
192
|
+
generateTenantToken(tenantId: string, duration?: string, role?: string): Promise<string>;
|
|
193
|
+
/**
|
|
194
|
+
* Tenant catalog login (system GraphQL). Returns a tenant-scoped `ak_` API token on success.
|
|
195
|
+
*/
|
|
196
|
+
loginTenantUser(username: string, password: string, projectId: string): Promise<TenantLoginResponse>;
|
|
197
|
+
/**
|
|
198
|
+
* Google ID token login for tenant users (project must have google_client_id set).
|
|
199
|
+
*/
|
|
200
|
+
loginTenantUserGoogle(projectId: string, idToken: string): Promise<TenantLoginResponse>;
|
|
201
|
+
/**
|
|
202
|
+
* Search tenant users for a project.
|
|
203
|
+
*/
|
|
204
|
+
searchTenantUsers(projectId: string, limit?: number, offset?: number): Promise<TenantUsersResponse>;
|
|
205
|
+
/**
|
|
206
|
+
* Resolve the single SaaS catalog tenant for an exact domain match in the project (`tenant` null if none).
|
|
207
|
+
*/
|
|
208
|
+
searchTenantsByDomain(projectId: string, domain: string): Promise<TenantByDomainResponse>;
|
|
209
|
+
/**
|
|
210
|
+
* Create a tenant catalog user (local password).
|
|
153
211
|
*/
|
|
154
|
-
|
|
212
|
+
createTenantUser(projectId: string, username: string, email: string, password: string, role: string): Promise<TenantUser>;
|
|
155
213
|
/**
|
|
156
214
|
* Get a single resource by model and ID
|
|
157
215
|
*/
|
|
@@ -219,10 +277,10 @@ declare class TypedOperations {
|
|
|
219
277
|
/**
|
|
220
278
|
* Apito JavaScript internal SDK version (kept in sync with package.json for releases)
|
|
221
279
|
*/
|
|
222
|
-
declare const Version = "2.
|
|
280
|
+
declare const Version = "2.5.0";
|
|
223
281
|
/**
|
|
224
282
|
* GetVersion returns the current version of the SDK
|
|
225
283
|
*/
|
|
226
284
|
declare function getVersion(): string;
|
|
227
285
|
|
|
228
|
-
export { ApitoClient, ApitoError, type ClientConfig, type ConnectionOptions, type CreateAndUpdateRequest, type DefaultDocumentStructure, type Filter, GraphQLError, type GraphQLErrorLocation, type GraphQLResponse, type InjectedDBOperationInterface, type MetaField, type RequestOptions, type SearchOptions, type SearchResult, type TypedDocumentStructure, TypedOperations, type TypedSearchResult, ValidationError, Version, createClient, ApitoClient as default, getVersion };
|
|
286
|
+
export { ApitoClient, ApitoError, type ClientConfig, type ConnectionOptions, type CreateAndUpdateRequest, type DefaultDocumentStructure, type Filter, GraphQLError, type GraphQLErrorLocation, type GraphQLResponse, type InjectedDBOperationInterface, type MetaField, type RequestOptions, type SearchOptions, type SearchResult, type TenantByDomainResponse, type TenantCatalogSearchRow, type TenantLoginResponse, type TenantUser, type TenantUsersResponse, type TypedDocumentStructure, TypedOperations, type TypedSearchResult, ValidationError, Version, createClient, ApitoClient as default, getVersion };
|
package/dist/index.d.ts
CHANGED
|
@@ -69,6 +69,37 @@ interface CreateAndUpdateRequest {
|
|
|
69
69
|
singlePageData?: boolean;
|
|
70
70
|
forceUpdate?: boolean;
|
|
71
71
|
}
|
|
72
|
+
/** Tenant catalog user from engine system DB (pro_tenant_users). */
|
|
73
|
+
interface TenantUser {
|
|
74
|
+
id: string;
|
|
75
|
+
username: string;
|
|
76
|
+
email?: string;
|
|
77
|
+
role: string;
|
|
78
|
+
tenant_id: string;
|
|
79
|
+
provider?: string;
|
|
80
|
+
status?: string;
|
|
81
|
+
created_at?: string;
|
|
82
|
+
updated_at?: string;
|
|
83
|
+
}
|
|
84
|
+
interface TenantLoginResponse {
|
|
85
|
+
token: string;
|
|
86
|
+
user?: TenantUser;
|
|
87
|
+
}
|
|
88
|
+
interface TenantUsersResponse {
|
|
89
|
+
users: TenantUser[];
|
|
90
|
+
count: number;
|
|
91
|
+
}
|
|
92
|
+
/** One SaaS catalog tenant row from searchTenantsByDomain. */
|
|
93
|
+
interface TenantCatalogSearchRow {
|
|
94
|
+
id: string;
|
|
95
|
+
name: string;
|
|
96
|
+
status?: string;
|
|
97
|
+
domain?: string;
|
|
98
|
+
data?: string;
|
|
99
|
+
}
|
|
100
|
+
interface TenantByDomainResponse {
|
|
101
|
+
tenant: TenantCatalogSearchRow | null;
|
|
102
|
+
}
|
|
72
103
|
interface ClientConfig {
|
|
73
104
|
baseURL: string;
|
|
74
105
|
apiKey: string;
|
|
@@ -97,7 +128,12 @@ interface InjectedDBOperationInterface {
|
|
|
97
128
|
tenantId?: string;
|
|
98
129
|
}): Promise<GraphQLResponse>;
|
|
99
130
|
/** @param token Legacy; ignored. Auth uses client API key. */
|
|
100
|
-
generateTenantToken(
|
|
131
|
+
generateTenantToken(tenantId: string, duration?: string, role?: string): Promise<string>;
|
|
132
|
+
loginTenantUser(username: string, password: string, projectId: string): Promise<TenantLoginResponse>;
|
|
133
|
+
loginTenantUserGoogle(projectId: string, idToken: string): Promise<TenantLoginResponse>;
|
|
134
|
+
searchTenantUsers(projectId: string, limit?: number, offset?: number): Promise<TenantUsersResponse>;
|
|
135
|
+
searchTenantsByDomain(projectId: string, domain: string): Promise<TenantByDomainResponse>;
|
|
136
|
+
createTenantUser(projectId: string, username: string, email: string, password: string, role: string): Promise<TenantUser>;
|
|
101
137
|
getSingleResource(model: string, id: string, singlePageData?: boolean): Promise<DefaultDocumentStructure>;
|
|
102
138
|
searchResources(model: string, filter?: Record<string, any>, aggregate?: boolean): Promise<SearchResult>;
|
|
103
139
|
getRelationDocuments(id: string, connection: Record<string, any>): Promise<SearchResult>;
|
|
@@ -146,12 +182,34 @@ declare class ApitoClient implements InjectedDBOperationInterface {
|
|
|
146
182
|
tenantId?: string;
|
|
147
183
|
}): Promise<GraphQLResponse>;
|
|
148
184
|
/**
|
|
149
|
-
* Generate a tenant-scoped API key
|
|
185
|
+
* Generate a tenant-scoped API key. Matches engine `generateTenantToken`: `tenant_id`, `duration`, optional `role`.
|
|
186
|
+
* Auth uses `X-Apito-Key` (client `apiKey`).
|
|
150
187
|
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
188
|
+
* @param tenantId Catalog tenant id (`tenant_id` in the mutation).
|
|
189
|
+
* @param duration Expiry calendar day `YYYY-MM-DD`. If omitted/empty, defaults to one year ahead in UTC.
|
|
190
|
+
* @param role Optional token role; if omitted/empty, the engine defaults to `admin`.
|
|
191
|
+
*/
|
|
192
|
+
generateTenantToken(tenantId: string, duration?: string, role?: string): Promise<string>;
|
|
193
|
+
/**
|
|
194
|
+
* Tenant catalog login (system GraphQL). Returns a tenant-scoped `ak_` API token on success.
|
|
195
|
+
*/
|
|
196
|
+
loginTenantUser(username: string, password: string, projectId: string): Promise<TenantLoginResponse>;
|
|
197
|
+
/**
|
|
198
|
+
* Google ID token login for tenant users (project must have google_client_id set).
|
|
199
|
+
*/
|
|
200
|
+
loginTenantUserGoogle(projectId: string, idToken: string): Promise<TenantLoginResponse>;
|
|
201
|
+
/**
|
|
202
|
+
* Search tenant users for a project.
|
|
203
|
+
*/
|
|
204
|
+
searchTenantUsers(projectId: string, limit?: number, offset?: number): Promise<TenantUsersResponse>;
|
|
205
|
+
/**
|
|
206
|
+
* Resolve the single SaaS catalog tenant for an exact domain match in the project (`tenant` null if none).
|
|
207
|
+
*/
|
|
208
|
+
searchTenantsByDomain(projectId: string, domain: string): Promise<TenantByDomainResponse>;
|
|
209
|
+
/**
|
|
210
|
+
* Create a tenant catalog user (local password).
|
|
153
211
|
*/
|
|
154
|
-
|
|
212
|
+
createTenantUser(projectId: string, username: string, email: string, password: string, role: string): Promise<TenantUser>;
|
|
155
213
|
/**
|
|
156
214
|
* Get a single resource by model and ID
|
|
157
215
|
*/
|
|
@@ -219,10 +277,10 @@ declare class TypedOperations {
|
|
|
219
277
|
/**
|
|
220
278
|
* Apito JavaScript internal SDK version (kept in sync with package.json for releases)
|
|
221
279
|
*/
|
|
222
|
-
declare const Version = "2.
|
|
280
|
+
declare const Version = "2.5.0";
|
|
223
281
|
/**
|
|
224
282
|
* GetVersion returns the current version of the SDK
|
|
225
283
|
*/
|
|
226
284
|
declare function getVersion(): string;
|
|
227
285
|
|
|
228
|
-
export { ApitoClient, ApitoError, type ClientConfig, type ConnectionOptions, type CreateAndUpdateRequest, type DefaultDocumentStructure, type Filter, GraphQLError, type GraphQLErrorLocation, type GraphQLResponse, type InjectedDBOperationInterface, type MetaField, type RequestOptions, type SearchOptions, type SearchResult, type TypedDocumentStructure, TypedOperations, type TypedSearchResult, ValidationError, Version, createClient, ApitoClient as default, getVersion };
|
|
286
|
+
export { ApitoClient, ApitoError, type ClientConfig, type ConnectionOptions, type CreateAndUpdateRequest, type DefaultDocumentStructure, type Filter, GraphQLError, type GraphQLErrorLocation, type GraphQLResponse, type InjectedDBOperationInterface, type MetaField, type RequestOptions, type SearchOptions, type SearchResult, type TenantByDomainResponse, type TenantCatalogSearchRow, type TenantLoginResponse, type TenantUser, type TenantUsersResponse, type TypedDocumentStructure, TypedOperations, type TypedSearchResult, ValidationError, Version, createClient, ApitoClient as default, getVersion };
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,88 @@
|
|
|
1
1
|
// @apito-io/js-admin-sdk - Admin SDK for Apito GraphQL API
|
|
2
|
-
var
|
|
3
|
-
mutation GenerateTenantToken($tenantId: String!, $duration: String
|
|
4
|
-
generateTenantToken(tenant_id: $tenantId, duration: $duration) {
|
|
2
|
+
var S=Object.create;var m=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var x=(i,e)=>{for(var t in e)m(i,t,{get:e[t],enumerable:!0})},f=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $(e))!b.call(i,n)&&n!==t&&m(i,n,{get:()=>e[n],enumerable:!(r=D(e,n))||r.enumerable});return i};var U=(i,e,t)=>(t=i!=null?S(w(i)):{},f(e||!i||!i.__esModule?m(t,"default",{value:i,enumerable:!0}):t,i)),v=i=>f(m({},"__esModule",{value:!0}),i);var I={};x(I,{ApitoClient:()=>l,ApitoError:()=>u,GraphQLError:()=>g,TypedOperations:()=>y,ValidationError:()=>o,Version:()=>_,createClient:()=>T,default:()=>l,getVersion:()=>R});module.exports=v(I);var h=U(require("axios"));var u=class extends Error{constructor(t,r,n,s){super(t);this.code=r;this.statusCode=n;this.details=s;this.name="ApitoError"}},g=class extends u{constructor(t,r,n){super(t,"GRAPHQL_ERROR");this.graphQLErrors=r;this.response=n;this.name="GraphQLError"}get partialData(){return this.response?.data}},o=class extends u{constructor(t,r){super(t,"VALIDATION_ERROR");this.field=r;this.name="ValidationError"}};var l=class{constructor(e){this.baseURL=e.baseURL,this.apiKey=e.apiKey,this.tenantId=e.tenantId,this.httpClient=h.default.create({timeout:e.timeout||3e4,headers:{"Content-Type":"application/json",...this.apiKey.startsWith("cli-")||this.apiKey.startsWith("sdk-")?{"X-Apito-Sync-Key":this.apiKey}:{"X-Apito-Key":this.apiKey}},...e.httpClient}),this.tenantId&&(this.httpClient.defaults.headers["X-Apito-Tenant-ID"]=this.tenantId)}async executeGraphQL(e,t,r){try{let n={query:e,variables:t||{}},s={"Content-Type":"application/json",...this.apiKey.startsWith("cli-")||this.apiKey.startsWith("sdk-")?{"X-Apito-Sync-Key":this.apiKey}:{"X-Apito-Key":this.apiKey}};(r?.tenantId||this.tenantId)&&(s["X-Apito-Tenant-ID"]=r?.tenantId||this.tenantId);let a=await this.httpClient.post(this.baseURL,n,{headers:s});if(a.data.errors&&a.data.errors.length>0)throw new g("GraphQL query failed",a.data.errors,a.data);return a.data}catch(n){throw h.default.isAxiosError(n)?new u(n.response?.data?.message||n.message,"HTTP_ERROR",n.response?.status,n.response?.data):n}}async generateTenantToken(e,t,r){let n=(t??"").trim();if(!n){let c=new Date;n=`${c.getUTCFullYear()+1}-${String(c.getUTCMonth()+1).padStart(2,"0")}-${String(c.getUTCDate()).padStart(2,"0")}`}let s=`
|
|
3
|
+
mutation GenerateTenantToken($tenantId: String!, $duration: String!, $role: String) {
|
|
4
|
+
generateTenantToken(tenant_id: $tenantId, duration: $duration, role: $role) {
|
|
5
5
|
token
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
-
`,
|
|
8
|
+
`,a={tenantId:e,duration:n,role:r!==void 0&&r.trim()!==""?r.trim():null},p=(await this.executeGraphQL(s,a,{tenantId:e})).data?.generateTenantToken;if(!p?.token)throw new o("Invalid response format for tenant token");return p.token}async loginTenantUser(e,t,r){let n=`
|
|
9
|
+
query LoginTenantUser($project_id: String!, $username: String!, $password: String!) {
|
|
10
|
+
loginTenantUser(project_id: $project_id, username: $username, password: $password) {
|
|
11
|
+
token
|
|
12
|
+
user {
|
|
13
|
+
id
|
|
14
|
+
username
|
|
15
|
+
email
|
|
16
|
+
role
|
|
17
|
+
provider
|
|
18
|
+
tenant_id
|
|
19
|
+
status
|
|
20
|
+
created_at
|
|
21
|
+
updated_at
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`,s={project_id:r,username:e,password:t},d=(await this.executeGraphQL(n,s)).data?.loginTenantUser;if(!d?.token)throw new o("Invalid response format for loginTenantUser");return{token:d.token,user:d.user}}async loginTenantUserGoogle(e,t){let r=`
|
|
26
|
+
mutation LoginTenantUserGoogle($project_id: String!, $id_token: String!) {
|
|
27
|
+
loginTenantUserGoogle(project_id: $project_id, id_token: $id_token) {
|
|
28
|
+
token
|
|
29
|
+
user {
|
|
30
|
+
id
|
|
31
|
+
username
|
|
32
|
+
email
|
|
33
|
+
role
|
|
34
|
+
provider
|
|
35
|
+
tenant_id
|
|
36
|
+
status
|
|
37
|
+
created_at
|
|
38
|
+
updated_at
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
`,n={project_id:e,id_token:t},a=(await this.executeGraphQL(r,n)).data?.loginTenantUserGoogle;if(!a?.token)throw new o("Invalid response format for loginTenantUserGoogle");return{token:a.token,user:a.user}}async searchTenantUsers(e,t,r){let n=`
|
|
43
|
+
query SearchTenantUsers($project_id: String!, $limit: Int, $offset: Int) {
|
|
44
|
+
searchTenantUsers(project_id: $project_id, limit: $limit, offset: $offset) {
|
|
45
|
+
count
|
|
46
|
+
users {
|
|
47
|
+
id
|
|
48
|
+
username
|
|
49
|
+
email
|
|
50
|
+
role
|
|
51
|
+
provider
|
|
52
|
+
tenant_id
|
|
53
|
+
status
|
|
54
|
+
created_at
|
|
55
|
+
updated_at
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
`,s={project_id:e};t!==void 0&&(s.limit=t),r!==void 0&&(s.offset=r);let d=(await this.executeGraphQL(n,s)).data?.searchTenantUsers;if(!d)throw new o("Invalid response format for searchTenantUsers");let p=0;return typeof d.count=="number"&&(p=d.count),{users:d.users??[],count:p}}async searchTenantsByDomain(e,t){let r=`
|
|
60
|
+
query SearchTenantsByDomain($project_id: String!, $domain: String!) {
|
|
61
|
+
searchTenantsByDomain(project_id: $project_id, domain: $domain) {
|
|
62
|
+
tenant {
|
|
63
|
+
id
|
|
64
|
+
name
|
|
65
|
+
status
|
|
66
|
+
domain
|
|
67
|
+
data
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
`,n={project_id:e,domain:t},a=(await this.executeGraphQL(r,n)).data?.searchTenantsByDomain;if(!a)throw new o("Invalid response format for searchTenantsByDomain");return{tenant:a.tenant??null}}async createTenantUser(e,t,r,n,s){let a=`
|
|
72
|
+
mutation CreateTenantUser($project_id: String!, $username: String!, $password: String!, $role: String, $email: String) {
|
|
73
|
+
createTenantUser(project_id: $project_id, username: $username, password: $password, role: $role, email: $email) {
|
|
74
|
+
id
|
|
75
|
+
username
|
|
76
|
+
email
|
|
77
|
+
role
|
|
78
|
+
provider
|
|
79
|
+
tenant_id
|
|
80
|
+
status
|
|
81
|
+
created_at
|
|
82
|
+
updated_at
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
`,d={project_id:e,username:t,password:n,email:r,role:s},c=(await this.executeGraphQL(a,d)).data?.createTenantUser;if(!c?.id)throw new o("Invalid response format for createTenantUser");return c}async getSingleResource(e,t,r=!1){let n=`
|
|
9
86
|
query GetSingleData($model: String, $_id: String!, $single_page_data: Boolean) {
|
|
10
87
|
getSingleData(model: $model, _id: $_id, single_page_data: $single_page_data) {
|
|
11
88
|
_key
|
|
@@ -23,7 +100,7 @@ var R=Object.create;var p=Object.defineProperty;var D=Object.getOwnPropertyDescr
|
|
|
23
100
|
type
|
|
24
101
|
}
|
|
25
102
|
}
|
|
26
|
-
`,
|
|
103
|
+
`,s={model:e,_id:t,single_page_data:r},a=await this.executeGraphQL(n,s);if(!a.data?.getSingleData)throw new o("Resource not found");return a.data.getSingleData}async searchResources(e,t={},r=!1){let n=`
|
|
27
104
|
query GetModelData(
|
|
28
105
|
$model: String!
|
|
29
106
|
$page: Int
|
|
@@ -56,7 +133,7 @@ var R=Object.create;var p=Object.defineProperty;var D=Object.getOwnPropertyDescr
|
|
|
56
133
|
count
|
|
57
134
|
}
|
|
58
135
|
}
|
|
59
|
-
`,
|
|
136
|
+
`,s={model:e};t&&typeof t=="object"&&(t._key!==void 0&&(s._key=t._key),t.page!==void 0&&(s.page=t.page),t.limit!==void 0&&(s.limit=t.limit),t.where!==void 0&&(s.where=t.where),t.search!==void 0&&(s.search=t.search));let a=await this.executeGraphQL(n,s);if(!a.data?.getModelData)throw new o("Invalid search response format");return a.data.getModelData}async getRelationDocuments(e,t){let r=`
|
|
60
137
|
query GetModelData($model: String!, $page: Int, $limit: Int, $where: JSON, $search: String, $connection : ListAllDataDetailedOfAModelConnectionPayload) {
|
|
61
138
|
getModelData(model: $model, page: $page, limit: $limit, where: $where, search: $search, connection: $connection) {
|
|
62
139
|
results {
|
|
@@ -75,7 +152,7 @@ var R=Object.create;var p=Object.defineProperty;var D=Object.getOwnPropertyDescr
|
|
|
75
152
|
count
|
|
76
153
|
}
|
|
77
154
|
}
|
|
78
|
-
`,
|
|
155
|
+
`,n={connection:t};if(t.model)n.model=t.model;else throw new o("model is required in connection parameters");if(t.filter){let a=t.filter;a.page!==void 0&&(n.page=a.page),a.limit!==void 0&&(n.limit=a.limit),a.where!==void 0&&(n.where=a.where),a.search!==void 0&&(n.search=a.search)}let s=await this.executeGraphQL(r,n);if(!s.data?.getModelData)throw new o("Invalid relation documents response format");return s.data.getModelData}async createNewResource(e){if(!e.model)throw new o("model is required");if(!e.payload)throw new o("payload is required");let t=`
|
|
79
156
|
mutation CreateNewData($model: String!, $single_page_data: Boolean, $payload: JSON!, $connect: JSON) {
|
|
80
157
|
upsertModelData(
|
|
81
158
|
connect: $connect
|
|
@@ -95,7 +172,7 @@ var R=Object.create;var p=Object.defineProperty;var D=Object.getOwnPropertyDescr
|
|
|
95
172
|
}
|
|
96
173
|
}
|
|
97
174
|
}
|
|
98
|
-
`,r={model:e.model,payload:e.payload,single_page_data:e.singlePageData||!1};e.connect&&(r.connect=e.connect);let
|
|
175
|
+
`,r={model:e.model,payload:e.payload,single_page_data:e.singlePageData||!1};e.connect&&(r.connect=e.connect);let n=await this.executeGraphQL(t,r);if(!n.data?.upsertModelData)throw new o("Invalid create response format");return n.data.upsertModelData}async updateResource(e){if(!e.id)throw new o("id is required");if(!e.model)throw new o("model is required");if(!e.payload)throw new o("payload is required");let t=`
|
|
99
176
|
mutation UpdateModelData($_id: String!, $model: String!, $single_page_data: Boolean, $force_update: Boolean, $payload: JSON!, $connect: JSON, $disconnect: JSON) {
|
|
100
177
|
upsertModelData(
|
|
101
178
|
connect: $connect
|
|
@@ -118,18 +195,18 @@ var R=Object.create;var p=Object.defineProperty;var D=Object.getOwnPropertyDescr
|
|
|
118
195
|
}
|
|
119
196
|
}
|
|
120
197
|
}
|
|
121
|
-
`,r={_id:e.id,model:e.model,payload:e.payload,single_page_data:e.singlePageData||!1,force_update:e.forceUpdate||!1};e.connect&&(r.connect=e.connect),e.disconnect&&(r.disconnect=e.disconnect);let
|
|
198
|
+
`,r={_id:e.id,model:e.model,payload:e.payload,single_page_data:e.singlePageData||!1,force_update:e.forceUpdate||!1};e.connect&&(r.connect=e.connect),e.disconnect&&(r.disconnect=e.disconnect);let n=await this.executeGraphQL(t,r);if(!n.data?.upsertModelData)throw new o("Invalid update response format");return n.data.upsertModelData}async deleteResource(e,t){let r=`
|
|
122
199
|
mutation DeleteData($model: String!, $_id: String!) {
|
|
123
200
|
deleteModelData(model_name: $model, _id: $_id) {
|
|
124
201
|
id
|
|
125
202
|
}
|
|
126
203
|
}
|
|
127
|
-
`,
|
|
204
|
+
`,n={model:e,_id:t};await this.executeGraphQL(r,n)}async debug(e,...t){let r=`
|
|
128
205
|
mutation Debug($stage: String!, $data: JSON) {
|
|
129
206
|
debug(stage: $stage, data: $data) {
|
|
130
207
|
message
|
|
131
208
|
data
|
|
132
209
|
}
|
|
133
210
|
}
|
|
134
|
-
`,
|
|
211
|
+
`,n={stage:e,data:t};return(await this.executeGraphQL(r,n)).data?.debug}};function T(i){return new l(i)}var y=class i{constructor(e){this.client=e}static toTypedDocument(e){let t=JSON.parse(JSON.stringify(e.data));return{_key:e._key,_id:e._id,data:t,meta:e.meta,id:e.id,expire_at:e.expire_at,relation_doc_id:e.relation_doc_id,last_revision_doc_id:e.last_revision_doc_id,type:e.type,tenant_id:e.tenant_id,tenant_model:e.tenant_model}}async getSingleResourceTyped(e,t,r=!1){let n=await this.client.getSingleResource(e,t,r);return i.toTypedDocument(n)}async searchResourcesTyped(e,t={},r=!1){let n=await this.client.searchResources(e,t,r);return{results:n.results.map(s=>i.toTypedDocument(s)),count:n.count}}async getRelationDocumentsTyped(e,t){let r=await this.client.getRelationDocuments(e,t);return{results:r.results.map(n=>i.toTypedDocument(n)),count:r.count}}async createNewResourceTyped(e){let t=await this.client.createNewResource(e);return i.toTypedDocument(t)}async updateResourceTyped(e){let t=await this.client.updateResource(e);return i.toTypedDocument(t)}};var _="2.5.0";function R(){return _}0&&(module.exports={ApitoClient,ApitoError,GraphQLError,TypedOperations,ValidationError,Version,createClient,getVersion});
|
|
135
212
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/types.ts","../src/typed-operations.ts","../src/version.ts"],"sourcesContent":["/**\n * Apito JavaScript SDK\n * A comprehensive JavaScript SDK for communicating with Apito GraphQL API endpoints\n * \n * @module @apito-io/js-admin-sdk\n */\n\n// Export main client and types\nexport { ApitoClient, createClient } from './client';\nexport { TypedOperations } from './typed-operations';\nexport { Version, getVersion } from './version';\nexport * from './types';\n\n// Re-export commonly used types for convenience\nexport type {\n ClientConfig,\n DefaultDocumentStructure,\n SearchResult,\n TypedDocumentStructure,\n TypedSearchResult,\n CreateAndUpdateRequest,\n GraphQLResponse,\n GraphQLError,\n ApitoError,\n ValidationError,\n InjectedDBOperationInterface,\n} from './types';\n\n// Default export for convenience\nexport { ApitoClient as default } from './client';\n","import axios, { AxiosInstance } from 'axios';\nimport {\n ClientConfig,\n DefaultDocumentStructure,\n SearchResult,\n TypedDocumentStructure,\n TypedSearchResult,\n CreateAndUpdateRequest,\n GraphQLResponse,\n GraphQLError as SDKGraphQLError,\n ApitoError,\n ValidationError,\n InjectedDBOperationInterface,\n} from './types';\n\n/**\n * Apito SDK Client - JavaScript implementation matching the Go SDK\n */\nexport class ApitoClient implements InjectedDBOperationInterface {\n private httpClient: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n private tenantId?: string;\n\n constructor(config: ClientConfig) {\n this.baseURL = config.baseURL;\n this.apiKey = config.apiKey;\n this.tenantId = config.tenantId;\n\n // Create axios instance with default configuration\n this.httpClient = axios.create({\n timeout: config.timeout || 30000,\n headers: {\n 'Content-Type': 'application/json',\n 'X-Apito-Key': this.apiKey,\n },\n ...config.httpClient,\n });\n\n // Add tenant ID to headers if provided\n if (this.tenantId) {\n this.httpClient.defaults.headers['X-Apito-Tenant-ID'] = this.tenantId;\n }\n }\n\n /**\n * Execute an arbitrary GraphQL query or mutation against the Apito admin (system) endpoint.\n * Use for plugin-registered operations (e.g. processLedger, plg_closeOrder) when not wrapped by dedicated SDK methods.\n */\n async executeGraphQL(\n query: string,\n variables?: Record<string, any>,\n options?: { tenantId?: string }\n ): Promise<GraphQLResponse> {\n try {\n const payload = {\n query,\n variables: variables || {},\n };\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Apito-Key': this.apiKey,\n };\n\n if (options?.tenantId || this.tenantId) {\n headers['X-Apito-Tenant-ID'] = options?.tenantId || this.tenantId!;\n }\n\n const response = await this.httpClient.post<GraphQLResponse>(\n this.baseURL,\n payload,\n { headers }\n );\n\n if (response.data.errors && response.data.errors.length > 0) {\n throw new SDKGraphQLError(\n 'GraphQL query failed',\n response.data.errors,\n response.data\n );\n }\n\n return response.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new ApitoError(\n error.response?.data?.message || error.message,\n 'HTTP_ERROR',\n error.response?.status,\n error.response?.data\n );\n }\n throw error;\n }\n }\n\n /**\n * Generate a tenant-scoped API key for {@link tenantId}.\n *\n * `token` is legacy and ignored; the engine authenticates via `X-Apito-Key` (client `apiKey`).\n * Expiry is sent as a calendar day `YYYY-MM-DD`; defaults to one year ahead in UTC (same default as Go admin/internal SDK).\n */\n async generateTenantToken(token: string, tenantId: string): Promise<string> {\n void token;\n\n const d = new Date();\n const duration = `${d.getUTCFullYear() + 1}-${String(d.getUTCMonth() + 1).padStart(2, '0')}-${String(\n d.getUTCDate()\n ).padStart(2, '0')}`;\n\n const query = `\n mutation GenerateTenantToken($tenantId: String!, $duration: String!) {\n generateTenantToken(tenant_id: $tenantId, duration: $duration) {\n token\n }\n }\n `;\n\n const variables = { tenantId, duration };\n const response = await this.executeGraphQL(query, variables, { tenantId });\n\n const data = response.data?.generateTenantToken;\n if (!data?.token) {\n throw new ValidationError('Invalid response format for tenant token');\n }\n\n return data.token;\n }\n\n /**\n * Get a single resource by model and ID\n */\n async getSingleResource(\n model: string,\n id: string,\n singlePageData: boolean = false\n ): Promise<DefaultDocumentStructure> {\n const query = `\n query GetSingleData($model: String, $_id: String!, $single_page_data: Boolean) {\n getSingleData(model: $model, _id: $_id, single_page_data: $single_page_data) {\n _key\n data\n meta {\n created_at\n updated_at\n status\n revision\n revision_at\n }\n id\n expire_at\n relation_doc_id\n type\n }\n }\n `;\n\n const variables = {\n model,\n _id: id,\n single_page_data: singlePageData,\n };\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.getSingleData) {\n throw new ValidationError('Resource not found');\n }\n\n return response.data.getSingleData;\n }\n\n /**\n * Search resources in a model\n */\n async searchResources(\n model: string,\n filter: Record<string, any> = {},\n aggregate: boolean = false\n ): Promise<SearchResult> {\n const query = `\n query GetModelData(\n $model: String!\n $page: Int\n $limit: Int\n $_key: JSON\n $where: JSON\n $search: String\n ) {\n getModelData(\n model: $model\n page: $page\n limit: $limit\n _key: $_key\n where: $where\n search: $search\n ) {\n results {\n id\n relation_doc_id\n data\n type\n expire_at\n meta {\n created_at\n updated_at\n status\n root_revision_id\n }\n }\n count\n }\n }\n `;\n\n // Only forward keys declared on the GraphQL operation (matches go-internal-sdk)\n const variables: Record<string, any> = { model };\n if (filter && typeof filter === 'object') {\n if (filter._key !== undefined) {\n variables._key = filter._key;\n }\n if (filter.page !== undefined) {\n variables.page = filter.page;\n }\n if (filter.limit !== undefined) {\n variables.limit = filter.limit;\n }\n if (filter.where !== undefined) {\n variables.where = filter.where;\n }\n if (filter.search !== undefined) {\n variables.search = filter.search;\n }\n }\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.getModelData) {\n throw new ValidationError('Invalid search response format');\n }\n\n return response.data.getModelData;\n }\n\n /**\n * Get related documents\n */\n async getRelationDocuments(\n id: string,\n connection: Record<string, any>\n ): Promise<SearchResult> {\n const query = `\n query GetModelData($model: String!, $page: Int, $limit: Int, $where: JSON, $search: String, $connection : ListAllDataDetailedOfAModelConnectionPayload) {\n getModelData(model: $model, page: $page, limit: $limit, where: $where, search: $search, connection: $connection) {\n results {\n id\n relation_doc_id\n data\n type\n expire_at\n meta {\n created_at\n updated_at\n status\n root_revision_id\n }\n }\n count\n }\n }\n `;\n\n const variables: Record<string, any> = {\n connection,\n };\n\n // Extract model from connection if available\n if (connection.model) {\n variables.model = connection.model;\n } else {\n throw new ValidationError('model is required in connection parameters');\n }\n\n // Add filter parameters if provided in connection\n if (connection.filter) {\n const filter = connection.filter;\n if (filter.page !== undefined) {\n variables.page = filter.page;\n }\n if (filter.limit !== undefined) {\n variables.limit = filter.limit;\n }\n if (filter.where !== undefined) {\n variables.where = filter.where;\n }\n if (filter.search !== undefined) {\n variables.search = filter.search;\n }\n }\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.getModelData) {\n throw new ValidationError('Invalid relation documents response format');\n }\n\n return response.data.getModelData;\n }\n\n /**\n * Create a new resource\n */\n async createNewResource(request: CreateAndUpdateRequest): Promise<DefaultDocumentStructure> {\n if (!request.model) {\n throw new ValidationError('model is required');\n }\n\n if (!request.payload) {\n throw new ValidationError('payload is required');\n }\n\n const query = `\n mutation CreateNewData($model: String!, $single_page_data: Boolean, $payload: JSON!, $connect: JSON) {\n upsertModelData(\n connect: $connect\n model_name: $model\n single_page_data: $single_page_data\n payload: $payload\n ) {\n id\n type\n data\n meta {\n created_at\n updated_at\n status\n revision\n revision_at\n }\n }\n }\n `;\n\n const variables: Record<string, any> = {\n model: request.model,\n payload: request.payload,\n single_page_data: request.singlePageData || false,\n };\n\n if (request.connect) {\n variables.connect = request.connect;\n }\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.upsertModelData) {\n throw new ValidationError('Invalid create response format');\n }\n\n return response.data.upsertModelData;\n }\n\n /**\n * Update an existing resource\n */\n async updateResource(request: CreateAndUpdateRequest): Promise<DefaultDocumentStructure> {\n if (!request.id) {\n throw new ValidationError('id is required');\n }\n\n if (!request.model) {\n throw new ValidationError('model is required');\n }\n\n if (!request.payload) {\n throw new ValidationError('payload is required');\n }\n\n const query = `\n mutation UpdateModelData($_id: String!, $model: String!, $single_page_data: Boolean, $force_update: Boolean, $payload: JSON!, $connect: JSON, $disconnect: JSON) {\n upsertModelData(\n connect: $connect\n model_name: $model\n single_page_data: $single_page_data\n force_update: $force_update\n disconnect: $disconnect\n _id: $_id\n payload: $payload\n ) {\n id\n type\n data\n meta {\n created_at\n updated_at\n status\n revision\n revision_at\n }\n }\n }\n `;\n\n const variables: Record<string, any> = {\n _id: request.id,\n model: request.model,\n payload: request.payload,\n single_page_data: request.singlePageData || false,\n force_update: request.forceUpdate || false,\n };\n\n if (request.connect) {\n variables.connect = request.connect;\n }\n if (request.disconnect) {\n variables.disconnect = request.disconnect;\n }\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.upsertModelData) {\n throw new ValidationError('Invalid update response format');\n }\n\n return response.data.upsertModelData;\n }\n\n /**\n * Delete a resource by model and ID\n */\n async deleteResource(model: string, id: string): Promise<void> {\n const query = `\n mutation DeleteData($model: String!, $_id: String!) {\n deleteModelData(model_name: $model, _id: $_id) {\n id\n }\n }\n `;\n\n const variables = {\n model,\n _id: id,\n };\n\n await this.executeGraphQL(query, variables);\n }\n\n /**\n * Debug is used to debug the plugin, you can pass data here to debug the plugin\n */\n async debug(stage: string, ...data: any[]): Promise<any> {\n const query = `\n mutation Debug($stage: String!, $data: JSON) {\n debug(stage: $stage, data: $data) {\n message\n data\n }\n }\n `;\n\n const variables = {\n stage,\n data,\n };\n\n const response = await this.executeGraphQL(query, variables);\n\n return response.data?.debug;\n }\n}\n\n/**\n * Factory function to create a new Apito client\n */\nexport function createClient(config: ClientConfig): ApitoClient {\n return new ApitoClient(config);\n}\n","/**\n * Type definitions for the Apito JavaScript SDK\n */\n\nexport interface MetaField {\n created_at: string;\n updated_at: string;\n status: string;\n revision?: string;\n revision_at?: string;\n root_revision_id?: string;\n}\n\nexport interface DefaultDocumentStructure {\n _key?: string;\n _id?: string;\n data: any;\n meta?: MetaField;\n id: string;\n expire_at?: string | number;\n relation_doc_id?: string;\n last_revision_doc_id?: string;\n type?: string;\n tenant_id?: string;\n tenant_model?: string;\n}\n\nexport interface SearchResult {\n results: DefaultDocumentStructure[];\n count: number;\n}\n\nexport interface TypedDocumentStructure<T> {\n _key?: string;\n _id?: string;\n data: T;\n meta?: MetaField;\n id: string;\n expire_at?: string | number;\n relation_doc_id?: string;\n last_revision_doc_id?: string;\n type?: string;\n tenant_id?: string;\n tenant_model?: string;\n}\n\nexport interface TypedSearchResult<T> {\n results: TypedDocumentStructure<T>[];\n count: number;\n}\n\nexport interface Filter {\n page?: number;\n offset?: number;\n limit?: number;\n order?: string;\n min?: number;\n max?: number;\n category?: string;\n}\n\nexport interface GraphQLErrorLocation {\n line: number;\n column: number;\n}\n\nexport interface GraphQLError {\n message: string;\n locations?: GraphQLErrorLocation[];\n path?: (string | number)[];\n extensions?: Record<string, any>;\n}\n\nexport interface GraphQLResponse {\n data?: any;\n errors?: GraphQLError[];\n}\n\nexport interface CreateAndUpdateRequest {\n id?: string;\n model: string;\n payload: any;\n connect?: Record<string, any>;\n disconnect?: Record<string, any>;\n singlePageData?: boolean;\n forceUpdate?: boolean;\n}\n\nexport interface ClientConfig {\n baseURL: string;\n apiKey: string;\n timeout?: number;\n httpClient?: any;\n tenantId?: string;\n}\n\nexport interface RequestOptions {\n headers?: Record<string, string>;\n timeout?: number;\n}\n\nexport interface SearchOptions {\n limit?: number;\n page?: number;\n offset?: number;\n where?: Record<string, any>;\n search?: string;\n sort?: Record<string, 1 | -1>;\n}\n\nexport interface ConnectionOptions {\n model: string;\n filter?: SearchOptions;\n}\n\n// Plugin interface matching the Go SDK\nexport interface InjectedDBOperationInterface {\n executeGraphQL(\n query: string,\n variables?: Record<string, any>,\n options?: { tenantId?: string }\n ): Promise<GraphQLResponse>;\n /** @param token Legacy; ignored. Auth uses client API key. */\n generateTenantToken(token: string, tenantId: string): Promise<string>;\n getSingleResource(model: string, id: string, singlePageData?: boolean): Promise<DefaultDocumentStructure>;\n searchResources(model: string, filter?: Record<string, any>, aggregate?: boolean): Promise<SearchResult>;\n getRelationDocuments(id: string, connection: Record<string, any>): Promise<SearchResult>;\n createNewResource(request: CreateAndUpdateRequest): Promise<DefaultDocumentStructure>;\n updateResource(request: CreateAndUpdateRequest): Promise<DefaultDocumentStructure>;\n deleteResource(model: string, id: string): Promise<void>;\n debug(stage: string, ...data: any[]): Promise<any>;\n}\n\n// Typed operations interface\nexport interface TypedOperations {\n getSingleResourceTyped<T>(model: string, id: string, singlePageData?: boolean): Promise<TypedDocumentStructure<T>>;\n searchResourcesTyped<T>(model: string, filter?: Record<string, any>, aggregate?: boolean): Promise<TypedSearchResult<T>>;\n getRelationDocumentsTyped<T>(id: string, connection: Record<string, any>): Promise<TypedSearchResult<T>>;\n createNewResourceTyped<T>(request: CreateAndUpdateRequest): Promise<TypedDocumentStructure<T>>;\n updateResourceTyped<T>(request: CreateAndUpdateRequest): Promise<TypedDocumentStructure<T>>;\n}\n\n// Error classes\nexport class ApitoError extends Error {\n constructor(\n message: string,\n public code?: string,\n public statusCode?: number,\n public details?: any\n ) {\n super(message);\n this.name = 'ApitoError';\n }\n}\n\nexport class GraphQLError extends ApitoError {\n constructor(\n message: string,\n public graphQLErrors: GraphQLError[],\n public response?: any\n ) {\n super(message, 'GRAPHQL_ERROR');\n this.name = 'GraphQLError';\n }\n\n get partialData(): any {\n return this.response?.data;\n }\n}\n\nexport class ValidationError extends ApitoError {\n constructor(message: string, public field?: string) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n }\n}\n","import {\n DefaultDocumentStructure,\n TypedDocumentStructure,\n TypedSearchResult,\n CreateAndUpdateRequest,\n} from './types';\nimport { ApitoClient } from './client';\n\n/**\n * Typed operations wrapper for the Apito SDK\n * Provides type-safe methods for working with typed data\n */\nexport class TypedOperations {\n constructor(private client: ApitoClient) {}\n\n private static toTypedDocument<T>(raw: DefaultDocumentStructure): TypedDocumentStructure<T> {\n const data = JSON.parse(JSON.stringify(raw.data)) as T;\n return {\n _key: raw._key,\n _id: raw._id,\n data,\n meta: raw.meta,\n id: raw.id,\n expire_at: raw.expire_at,\n relation_doc_id: raw.relation_doc_id,\n last_revision_doc_id: raw.last_revision_doc_id,\n type: raw.type,\n tenant_id: raw.tenant_id,\n tenant_model: raw.tenant_model,\n };\n }\n\n /**\n * Get a single resource with type safety\n */\n async getSingleResourceTyped<T>(\n model: string,\n id: string,\n singlePageData: boolean = false\n ): Promise<TypedDocumentStructure<T>> {\n const result = await this.client.getSingleResource(model, id, singlePageData);\n return TypedOperations.toTypedDocument<T>(result);\n }\n\n /**\n * Search resources with type safety\n */\n async searchResourcesTyped<T>(\n model: string,\n filter: Record<string, any> = {},\n aggregate: boolean = false\n ): Promise<TypedSearchResult<T>> {\n const result = await this.client.searchResources(model, filter, aggregate);\n return {\n results: result.results.map((doc) => TypedOperations.toTypedDocument<T>(doc)),\n count: result.count,\n };\n }\n\n /**\n * Get related documents with type safety\n */\n async getRelationDocumentsTyped<T>(\n id: string,\n connection: Record<string, any>\n ): Promise<TypedSearchResult<T>> {\n const result = await this.client.getRelationDocuments(id, connection);\n return {\n results: result.results.map((doc) => TypedOperations.toTypedDocument<T>(doc)),\n count: result.count,\n };\n }\n\n /**\n * Create a new resource with type safety\n */\n async createNewResourceTyped<T>(\n request: CreateAndUpdateRequest\n ): Promise<TypedDocumentStructure<T>> {\n const result = await this.client.createNewResource(request);\n return TypedOperations.toTypedDocument<T>(result);\n }\n\n /**\n * Update a resource with type safety\n */\n async updateResourceTyped<T>(\n request: CreateAndUpdateRequest\n ): Promise<TypedDocumentStructure<T>> {\n const result = await this.client.updateResource(request);\n return TypedOperations.toTypedDocument<T>(result);\n }\n}\n","/**\n * Apito JavaScript internal SDK version (kept in sync with package.json for releases)\n */\nexport const Version = '2.1.1';\n\n/**\n * GetVersion returns the current version of the SDK\n */\nexport function getVersion(): string {\n return Version;\n}\n"],"mappings":"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","names":["index_exports","__export","ApitoClient","ApitoError","GraphQLError","TypedOperations","ValidationError","Version","createClient","getVersion","__toCommonJS","import_axios","ApitoError","message","code","statusCode","details","GraphQLError","graphQLErrors","response","ValidationError","field","ApitoClient","config","axios","query","variables","options","payload","headers","response","GraphQLError","error","ApitoError","token","tenantId","d","duration","data","ValidationError","model","id","singlePageData","filter","aggregate","connection","request","stage","createClient","TypedOperations","_TypedOperations","client","raw","data","model","id","singlePageData","result","filter","aggregate","doc","connection","request","Version","getVersion"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/types.ts","../src/typed-operations.ts","../src/version.ts"],"sourcesContent":["/**\n * Apito JavaScript SDK\n * A comprehensive JavaScript SDK for communicating with Apito GraphQL API endpoints\n * \n * @module @apito-io/js-admin-sdk\n */\n\n// Export main client and types\nexport { ApitoClient, createClient } from './client';\nexport { TypedOperations } from './typed-operations';\nexport { Version, getVersion } from './version';\nexport * from './types';\n\n// Re-export commonly used types for convenience\nexport type {\n ClientConfig,\n DefaultDocumentStructure,\n SearchResult,\n TypedDocumentStructure,\n TypedSearchResult,\n CreateAndUpdateRequest,\n GraphQLResponse,\n GraphQLError,\n ApitoError,\n ValidationError,\n InjectedDBOperationInterface,\n} from './types';\n\n// Default export for convenience\nexport { ApitoClient as default } from './client';\n","import axios, { AxiosInstance } from 'axios';\nimport {\n ClientConfig,\n DefaultDocumentStructure,\n SearchResult,\n TypedDocumentStructure,\n TypedSearchResult,\n CreateAndUpdateRequest,\n GraphQLResponse,\n GraphQLError as SDKGraphQLError,\n ApitoError,\n ValidationError,\n InjectedDBOperationInterface,\n TenantLoginResponse,\n TenantUser,\n TenantUsersResponse,\n TenantByDomainResponse,\n TenantCatalogSearchRow,\n} from './types';\n\n/**\n * Apito SDK Client - JavaScript implementation matching the Go SDK\n */\nexport class ApitoClient implements InjectedDBOperationInterface {\n private httpClient: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n private tenantId?: string;\n\n constructor(config: ClientConfig) {\n this.baseURL = config.baseURL;\n this.apiKey = config.apiKey;\n this.tenantId = config.tenantId;\n\n // Create axios instance with default configuration\n this.httpClient = axios.create({\n timeout: config.timeout || 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...(this.apiKey.startsWith('cli-') || this.apiKey.startsWith('sdk-')\n ? { 'X-Apito-Sync-Key': this.apiKey }\n : { 'X-Apito-Key': this.apiKey }),\n },\n ...config.httpClient,\n });\n\n // Add tenant ID to headers if provided\n if (this.tenantId) {\n this.httpClient.defaults.headers['X-Apito-Tenant-ID'] = this.tenantId;\n }\n }\n\n /**\n * Execute an arbitrary GraphQL query or mutation against the Apito admin (system) endpoint.\n * Use for plugin-registered operations (e.g. processLedger, plg_closeOrder) when not wrapped by dedicated SDK methods.\n */\n async executeGraphQL(\n query: string,\n variables?: Record<string, any>,\n options?: { tenantId?: string }\n ): Promise<GraphQLResponse> {\n try {\n const payload = {\n query,\n variables: variables || {},\n };\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(this.apiKey.startsWith('cli-') || this.apiKey.startsWith('sdk-')\n ? { 'X-Apito-Sync-Key': this.apiKey }\n : { 'X-Apito-Key': this.apiKey }),\n };\n\n if (options?.tenantId || this.tenantId) {\n headers['X-Apito-Tenant-ID'] = options?.tenantId || this.tenantId!;\n }\n\n const response = await this.httpClient.post<GraphQLResponse>(\n this.baseURL,\n payload,\n { headers }\n );\n\n if (response.data.errors && response.data.errors.length > 0) {\n throw new SDKGraphQLError(\n 'GraphQL query failed',\n response.data.errors,\n response.data\n );\n }\n\n return response.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new ApitoError(\n error.response?.data?.message || error.message,\n 'HTTP_ERROR',\n error.response?.status,\n error.response?.data\n );\n }\n throw error;\n }\n }\n\n /**\n * Generate a tenant-scoped API key. Matches engine `generateTenantToken`: `tenant_id`, `duration`, optional `role`.\n * Auth uses `X-Apito-Key` (client `apiKey`).\n *\n * @param tenantId Catalog tenant id (`tenant_id` in the mutation).\n * @param duration Expiry calendar day `YYYY-MM-DD`. If omitted/empty, defaults to one year ahead in UTC.\n * @param role Optional token role; if omitted/empty, the engine defaults to `admin`.\n */\n async generateTenantToken(tenantId: string, duration?: string, role?: string): Promise<string> {\n let dur = (duration ?? '').trim();\n if (!dur) {\n const d = new Date();\n dur = `${d.getUTCFullYear() + 1}-${String(d.getUTCMonth() + 1).padStart(2, '0')}-${String(\n d.getUTCDate()\n ).padStart(2, '0')}`;\n }\n\n const query = `\n mutation GenerateTenantToken($tenantId: String!, $duration: String!, $role: String) {\n generateTenantToken(tenant_id: $tenantId, duration: $duration, role: $role) {\n token\n }\n }\n `;\n\n const variables: Record<string, any> = {\n tenantId,\n duration: dur,\n role: role !== undefined && role.trim() !== '' ? role.trim() : null,\n };\n const response = await this.executeGraphQL(query, variables, { tenantId });\n\n const data = response.data?.generateTenantToken;\n if (!data?.token) {\n throw new ValidationError('Invalid response format for tenant token');\n }\n\n return data.token;\n }\n\n /**\n * Tenant catalog login (system GraphQL). Returns a tenant-scoped `ak_` API token on success.\n */\n async loginTenantUser(\n username: string,\n password: string,\n projectId: string\n ): Promise<TenantLoginResponse> {\n const query = `\n query LoginTenantUser($project_id: String!, $username: String!, $password: String!) {\n loginTenantUser(project_id: $project_id, username: $username, password: $password) {\n token\n user {\n id\n username\n email\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n }\n `;\n const variables: Record<string, any> = { project_id: projectId, username, password };\n const response = await this.executeGraphQL(query, variables);\n const raw = response.data?.loginTenantUser;\n if (!raw?.token) {\n throw new ValidationError('Invalid response format for loginTenantUser');\n }\n return {\n token: raw.token as string,\n user: raw.user as TenantUser | undefined,\n };\n }\n\n /**\n * Google ID token login for tenant users (project must have google_client_id set).\n */\n async loginTenantUserGoogle(projectId: string, idToken: string): Promise<TenantLoginResponse> {\n const query = `\n mutation LoginTenantUserGoogle($project_id: String!, $id_token: String!) {\n loginTenantUserGoogle(project_id: $project_id, id_token: $id_token) {\n token\n user {\n id\n username\n email\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n }\n `;\n const variables = { project_id: projectId, id_token: idToken };\n const response = await this.executeGraphQL(query, variables);\n const raw = response.data?.loginTenantUserGoogle;\n if (!raw?.token) {\n throw new ValidationError('Invalid response format for loginTenantUserGoogle');\n }\n return {\n token: raw.token as string,\n user: raw.user as TenantUser | undefined,\n };\n }\n\n /**\n * Search tenant users for a project.\n */\n async searchTenantUsers(\n projectId: string,\n limit?: number,\n offset?: number\n ): Promise<TenantUsersResponse> {\n const query = `\n query SearchTenantUsers($project_id: String!, $limit: Int, $offset: Int) {\n searchTenantUsers(project_id: $project_id, limit: $limit, offset: $offset) {\n count\n users {\n id\n username\n email\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n }\n `;\n const variables: Record<string, any> = { project_id: projectId };\n if (limit !== undefined) variables.limit = limit;\n if (offset !== undefined) variables.offset = offset;\n const response = await this.executeGraphQL(query, variables);\n const raw = response.data?.searchTenantUsers;\n if (!raw) {\n throw new ValidationError('Invalid response format for searchTenantUsers');\n }\n let count = 0;\n if (typeof raw.count === 'number') {\n count = raw.count;\n }\n const users = (raw.users ?? []) as TenantUser[];\n return { users, count };\n }\n\n /**\n * Resolve the single SaaS catalog tenant for an exact domain match in the project (`tenant` null if none).\n */\n async searchTenantsByDomain(projectId: string, domain: string): Promise<TenantByDomainResponse> {\n const query = `\n query SearchTenantsByDomain($project_id: String!, $domain: String!) {\n searchTenantsByDomain(project_id: $project_id, domain: $domain) {\n tenant {\n id\n name\n status\n domain\n data\n }\n }\n }\n `;\n const variables: Record<string, any> = {\n project_id: projectId,\n domain,\n };\n const response = await this.executeGraphQL(query, variables);\n const raw = response.data?.searchTenantsByDomain;\n if (!raw) {\n throw new ValidationError('Invalid response format for searchTenantsByDomain');\n }\n const tenant = (raw.tenant ?? null) as TenantCatalogSearchRow | null;\n return { tenant };\n }\n\n /**\n * Create a tenant catalog user (local password).\n */\n async createTenantUser(\n projectId: string,\n username: string,\n email: string,\n password: string,\n role: string\n ): Promise<TenantUser> {\n const query = `\n mutation CreateTenantUser($project_id: String!, $username: String!, $password: String!, $role: String, $email: String) {\n createTenantUser(project_id: $project_id, username: $username, password: $password, role: $role, email: $email) {\n id\n username\n email\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n `;\n const variables = { project_id: projectId, username, password, email, role };\n const response = await this.executeGraphQL(query, variables);\n const u = response.data?.createTenantUser;\n if (!u?.id) {\n throw new ValidationError('Invalid response format for createTenantUser');\n }\n return u as TenantUser;\n }\n\n /**\n * Get a single resource by model and ID\n */\n async getSingleResource(\n model: string,\n id: string,\n singlePageData: boolean = false\n ): Promise<DefaultDocumentStructure> {\n const query = `\n query GetSingleData($model: String, $_id: String!, $single_page_data: Boolean) {\n getSingleData(model: $model, _id: $_id, single_page_data: $single_page_data) {\n _key\n data\n meta {\n created_at\n updated_at\n status\n revision\n revision_at\n }\n id\n expire_at\n relation_doc_id\n type\n }\n }\n `;\n\n const variables = {\n model,\n _id: id,\n single_page_data: singlePageData,\n };\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.getSingleData) {\n throw new ValidationError('Resource not found');\n }\n\n return response.data.getSingleData;\n }\n\n /**\n * Search resources in a model\n */\n async searchResources(\n model: string,\n filter: Record<string, any> = {},\n aggregate: boolean = false\n ): Promise<SearchResult> {\n const query = `\n query GetModelData(\n $model: String!\n $page: Int\n $limit: Int\n $_key: JSON\n $where: JSON\n $search: String\n ) {\n getModelData(\n model: $model\n page: $page\n limit: $limit\n _key: $_key\n where: $where\n search: $search\n ) {\n results {\n id\n relation_doc_id\n data\n type\n expire_at\n meta {\n created_at\n updated_at\n status\n root_revision_id\n }\n }\n count\n }\n }\n `;\n\n // Only forward keys declared on the GraphQL operation (matches go-internal-sdk)\n const variables: Record<string, any> = { model };\n if (filter && typeof filter === 'object') {\n if (filter._key !== undefined) {\n variables._key = filter._key;\n }\n if (filter.page !== undefined) {\n variables.page = filter.page;\n }\n if (filter.limit !== undefined) {\n variables.limit = filter.limit;\n }\n if (filter.where !== undefined) {\n variables.where = filter.where;\n }\n if (filter.search !== undefined) {\n variables.search = filter.search;\n }\n }\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.getModelData) {\n throw new ValidationError('Invalid search response format');\n }\n\n return response.data.getModelData;\n }\n\n /**\n * Get related documents\n */\n async getRelationDocuments(\n id: string,\n connection: Record<string, any>\n ): Promise<SearchResult> {\n const query = `\n query GetModelData($model: String!, $page: Int, $limit: Int, $where: JSON, $search: String, $connection : ListAllDataDetailedOfAModelConnectionPayload) {\n getModelData(model: $model, page: $page, limit: $limit, where: $where, search: $search, connection: $connection) {\n results {\n id\n relation_doc_id\n data\n type\n expire_at\n meta {\n created_at\n updated_at\n status\n root_revision_id\n }\n }\n count\n }\n }\n `;\n\n const variables: Record<string, any> = {\n connection,\n };\n\n // Extract model from connection if available\n if (connection.model) {\n variables.model = connection.model;\n } else {\n throw new ValidationError('model is required in connection parameters');\n }\n\n // Add filter parameters if provided in connection\n if (connection.filter) {\n const filter = connection.filter;\n if (filter.page !== undefined) {\n variables.page = filter.page;\n }\n if (filter.limit !== undefined) {\n variables.limit = filter.limit;\n }\n if (filter.where !== undefined) {\n variables.where = filter.where;\n }\n if (filter.search !== undefined) {\n variables.search = filter.search;\n }\n }\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.getModelData) {\n throw new ValidationError('Invalid relation documents response format');\n }\n\n return response.data.getModelData;\n }\n\n /**\n * Create a new resource\n */\n async createNewResource(request: CreateAndUpdateRequest): Promise<DefaultDocumentStructure> {\n if (!request.model) {\n throw new ValidationError('model is required');\n }\n\n if (!request.payload) {\n throw new ValidationError('payload is required');\n }\n\n const query = `\n mutation CreateNewData($model: String!, $single_page_data: Boolean, $payload: JSON!, $connect: JSON) {\n upsertModelData(\n connect: $connect\n model_name: $model\n single_page_data: $single_page_data\n payload: $payload\n ) {\n id\n type\n data\n meta {\n created_at\n updated_at\n status\n revision\n revision_at\n }\n }\n }\n `;\n\n const variables: Record<string, any> = {\n model: request.model,\n payload: request.payload,\n single_page_data: request.singlePageData || false,\n };\n\n if (request.connect) {\n variables.connect = request.connect;\n }\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.upsertModelData) {\n throw new ValidationError('Invalid create response format');\n }\n\n return response.data.upsertModelData;\n }\n\n /**\n * Update an existing resource\n */\n async updateResource(request: CreateAndUpdateRequest): Promise<DefaultDocumentStructure> {\n if (!request.id) {\n throw new ValidationError('id is required');\n }\n\n if (!request.model) {\n throw new ValidationError('model is required');\n }\n\n if (!request.payload) {\n throw new ValidationError('payload is required');\n }\n\n const query = `\n mutation UpdateModelData($_id: String!, $model: String!, $single_page_data: Boolean, $force_update: Boolean, $payload: JSON!, $connect: JSON, $disconnect: JSON) {\n upsertModelData(\n connect: $connect\n model_name: $model\n single_page_data: $single_page_data\n force_update: $force_update\n disconnect: $disconnect\n _id: $_id\n payload: $payload\n ) {\n id\n type\n data\n meta {\n created_at\n updated_at\n status\n revision\n revision_at\n }\n }\n }\n `;\n\n const variables: Record<string, any> = {\n _id: request.id,\n model: request.model,\n payload: request.payload,\n single_page_data: request.singlePageData || false,\n force_update: request.forceUpdate || false,\n };\n\n if (request.connect) {\n variables.connect = request.connect;\n }\n if (request.disconnect) {\n variables.disconnect = request.disconnect;\n }\n\n const response = await this.executeGraphQL(query, variables);\n\n if (!response.data?.upsertModelData) {\n throw new ValidationError('Invalid update response format');\n }\n\n return response.data.upsertModelData;\n }\n\n /**\n * Delete a resource by model and ID\n */\n async deleteResource(model: string, id: string): Promise<void> {\n const query = `\n mutation DeleteData($model: String!, $_id: String!) {\n deleteModelData(model_name: $model, _id: $_id) {\n id\n }\n }\n `;\n\n const variables = {\n model,\n _id: id,\n };\n\n await this.executeGraphQL(query, variables);\n }\n\n /**\n * Debug is used to debug the plugin, you can pass data here to debug the plugin\n */\n async debug(stage: string, ...data: any[]): Promise<any> {\n const query = `\n mutation Debug($stage: String!, $data: JSON) {\n debug(stage: $stage, data: $data) {\n message\n data\n }\n }\n `;\n\n const variables = {\n stage,\n data,\n };\n\n const response = await this.executeGraphQL(query, variables);\n\n return response.data?.debug;\n }\n}\n\n/**\n * Factory function to create a new Apito client\n */\nexport function createClient(config: ClientConfig): ApitoClient {\n return new ApitoClient(config);\n}\n","/**\n * Type definitions for the Apito JavaScript SDK\n */\n\nexport interface MetaField {\n created_at: string;\n updated_at: string;\n status: string;\n revision?: string;\n revision_at?: string;\n root_revision_id?: string;\n}\n\nexport interface DefaultDocumentStructure {\n _key?: string;\n _id?: string;\n data: any;\n meta?: MetaField;\n id: string;\n expire_at?: string | number;\n relation_doc_id?: string;\n last_revision_doc_id?: string;\n type?: string;\n tenant_id?: string;\n tenant_model?: string;\n}\n\nexport interface SearchResult {\n results: DefaultDocumentStructure[];\n count: number;\n}\n\nexport interface TypedDocumentStructure<T> {\n _key?: string;\n _id?: string;\n data: T;\n meta?: MetaField;\n id: string;\n expire_at?: string | number;\n relation_doc_id?: string;\n last_revision_doc_id?: string;\n type?: string;\n tenant_id?: string;\n tenant_model?: string;\n}\n\nexport interface TypedSearchResult<T> {\n results: TypedDocumentStructure<T>[];\n count: number;\n}\n\nexport interface Filter {\n page?: number;\n offset?: number;\n limit?: number;\n order?: string;\n min?: number;\n max?: number;\n category?: string;\n}\n\nexport interface GraphQLErrorLocation {\n line: number;\n column: number;\n}\n\nexport interface GraphQLError {\n message: string;\n locations?: GraphQLErrorLocation[];\n path?: (string | number)[];\n extensions?: Record<string, any>;\n}\n\nexport interface GraphQLResponse {\n data?: any;\n errors?: GraphQLError[];\n}\n\nexport interface CreateAndUpdateRequest {\n id?: string;\n model: string;\n payload: any;\n connect?: Record<string, any>;\n disconnect?: Record<string, any>;\n singlePageData?: boolean;\n forceUpdate?: boolean;\n}\n\n/** Tenant catalog user from engine system DB (pro_tenant_users). */\nexport interface TenantUser {\n id: string;\n username: string;\n email?: string;\n role: string;\n tenant_id: string;\n provider?: string;\n status?: string;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface TenantLoginResponse {\n token: string;\n user?: TenantUser;\n}\n\nexport interface TenantUsersResponse {\n users: TenantUser[];\n count: number;\n}\n\n/** One SaaS catalog tenant row from searchTenantsByDomain. */\nexport interface TenantCatalogSearchRow {\n id: string;\n name: string;\n status?: string;\n domain?: string;\n data?: string;\n}\n\nexport interface TenantByDomainResponse {\n tenant: TenantCatalogSearchRow | null;\n}\n\nexport interface ClientConfig {\n baseURL: string;\n apiKey: string;\n timeout?: number;\n httpClient?: any;\n tenantId?: string;\n}\n\nexport interface RequestOptions {\n headers?: Record<string, string>;\n timeout?: number;\n}\n\nexport interface SearchOptions {\n limit?: number;\n page?: number;\n offset?: number;\n where?: Record<string, any>;\n search?: string;\n sort?: Record<string, 1 | -1>;\n}\n\nexport interface ConnectionOptions {\n model: string;\n filter?: SearchOptions;\n}\n\n// Plugin interface matching the Go SDK\nexport interface InjectedDBOperationInterface {\n executeGraphQL(\n query: string,\n variables?: Record<string, any>,\n options?: { tenantId?: string }\n ): Promise<GraphQLResponse>;\n /** @param token Legacy; ignored. Auth uses client API key. */\n generateTenantToken(tenantId: string, duration?: string, role?: string): Promise<string>;\n loginTenantUser(username: string, password: string, projectId: string): Promise<TenantLoginResponse>;\n loginTenantUserGoogle(projectId: string, idToken: string): Promise<TenantLoginResponse>;\n searchTenantUsers(projectId: string, limit?: number, offset?: number): Promise<TenantUsersResponse>;\n searchTenantsByDomain(projectId: string, domain: string): Promise<TenantByDomainResponse>;\n createTenantUser(\n projectId: string,\n username: string,\n email: string,\n password: string,\n role: string\n ): Promise<TenantUser>;\n getSingleResource(model: string, id: string, singlePageData?: boolean): Promise<DefaultDocumentStructure>;\n searchResources(model: string, filter?: Record<string, any>, aggregate?: boolean): Promise<SearchResult>;\n getRelationDocuments(id: string, connection: Record<string, any>): Promise<SearchResult>;\n createNewResource(request: CreateAndUpdateRequest): Promise<DefaultDocumentStructure>;\n updateResource(request: CreateAndUpdateRequest): Promise<DefaultDocumentStructure>;\n deleteResource(model: string, id: string): Promise<void>;\n debug(stage: string, ...data: any[]): Promise<any>;\n}\n\n// Typed operations interface\nexport interface TypedOperations {\n getSingleResourceTyped<T>(model: string, id: string, singlePageData?: boolean): Promise<TypedDocumentStructure<T>>;\n searchResourcesTyped<T>(model: string, filter?: Record<string, any>, aggregate?: boolean): Promise<TypedSearchResult<T>>;\n getRelationDocumentsTyped<T>(id: string, connection: Record<string, any>): Promise<TypedSearchResult<T>>;\n createNewResourceTyped<T>(request: CreateAndUpdateRequest): Promise<TypedDocumentStructure<T>>;\n updateResourceTyped<T>(request: CreateAndUpdateRequest): Promise<TypedDocumentStructure<T>>;\n}\n\n// Error classes\nexport class ApitoError extends Error {\n constructor(\n message: string,\n public code?: string,\n public statusCode?: number,\n public details?: any\n ) {\n super(message);\n this.name = 'ApitoError';\n }\n}\n\nexport class GraphQLError extends ApitoError {\n constructor(\n message: string,\n public graphQLErrors: GraphQLError[],\n public response?: any\n ) {\n super(message, 'GRAPHQL_ERROR');\n this.name = 'GraphQLError';\n }\n\n get partialData(): any {\n return this.response?.data;\n }\n}\n\nexport class ValidationError extends ApitoError {\n constructor(message: string, public field?: string) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n }\n}\n","import {\n DefaultDocumentStructure,\n TypedDocumentStructure,\n TypedSearchResult,\n CreateAndUpdateRequest,\n} from './types';\nimport { ApitoClient } from './client';\n\n/**\n * Typed operations wrapper for the Apito SDK\n * Provides type-safe methods for working with typed data\n */\nexport class TypedOperations {\n constructor(private client: ApitoClient) {}\n\n private static toTypedDocument<T>(raw: DefaultDocumentStructure): TypedDocumentStructure<T> {\n const data = JSON.parse(JSON.stringify(raw.data)) as T;\n return {\n _key: raw._key,\n _id: raw._id,\n data,\n meta: raw.meta,\n id: raw.id,\n expire_at: raw.expire_at,\n relation_doc_id: raw.relation_doc_id,\n last_revision_doc_id: raw.last_revision_doc_id,\n type: raw.type,\n tenant_id: raw.tenant_id,\n tenant_model: raw.tenant_model,\n };\n }\n\n /**\n * Get a single resource with type safety\n */\n async getSingleResourceTyped<T>(\n model: string,\n id: string,\n singlePageData: boolean = false\n ): Promise<TypedDocumentStructure<T>> {\n const result = await this.client.getSingleResource(model, id, singlePageData);\n return TypedOperations.toTypedDocument<T>(result);\n }\n\n /**\n * Search resources with type safety\n */\n async searchResourcesTyped<T>(\n model: string,\n filter: Record<string, any> = {},\n aggregate: boolean = false\n ): Promise<TypedSearchResult<T>> {\n const result = await this.client.searchResources(model, filter, aggregate);\n return {\n results: result.results.map((doc) => TypedOperations.toTypedDocument<T>(doc)),\n count: result.count,\n };\n }\n\n /**\n * Get related documents with type safety\n */\n async getRelationDocumentsTyped<T>(\n id: string,\n connection: Record<string, any>\n ): Promise<TypedSearchResult<T>> {\n const result = await this.client.getRelationDocuments(id, connection);\n return {\n results: result.results.map((doc) => TypedOperations.toTypedDocument<T>(doc)),\n count: result.count,\n };\n }\n\n /**\n * Create a new resource with type safety\n */\n async createNewResourceTyped<T>(\n request: CreateAndUpdateRequest\n ): Promise<TypedDocumentStructure<T>> {\n const result = await this.client.createNewResource(request);\n return TypedOperations.toTypedDocument<T>(result);\n }\n\n /**\n * Update a resource with type safety\n */\n async updateResourceTyped<T>(\n request: CreateAndUpdateRequest\n ): Promise<TypedDocumentStructure<T>> {\n const result = await this.client.updateResource(request);\n return TypedOperations.toTypedDocument<T>(result);\n }\n}\n","/**\n * Apito JavaScript internal SDK version (kept in sync with package.json for releases)\n */\nexport const Version = '2.5.0';\n\n/**\n * GetVersion returns the current version of the SDK\n */\nexport function getVersion(): string {\n return Version;\n}\n"],"mappings":";6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,EAAA,eAAAC,EAAA,iBAAAC,EAAA,oBAAAC,EAAA,oBAAAC,EAAA,YAAAC,EAAA,iBAAAC,EAAA,YAAAN,EAAA,eAAAO,IAAA,eAAAC,EAAAV,GCAA,IAAAW,EAAqC,oBC8L9B,IAAMC,EAAN,cAAyB,KAAM,CACpC,YACEC,EACOC,EACAC,EACAC,EACP,CACA,MAAMH,CAAO,EAJN,UAAAC,EACA,gBAAAC,EACA,aAAAC,EAGP,KAAK,KAAO,YACd,CACF,EAEaC,EAAN,cAA2BL,CAAW,CAC3C,YACEC,EACOK,EACAC,EACP,CACA,MAAMN,EAAS,eAAe,EAHvB,mBAAAK,EACA,cAAAC,EAGP,KAAK,KAAO,cACd,CAEA,IAAI,aAAmB,CACrB,OAAO,KAAK,UAAU,IACxB,CACF,EAEaC,EAAN,cAA8BR,CAAW,CAC9C,YAAYC,EAAwBQ,EAAgB,CAClD,MAAMR,EAAS,kBAAkB,EADC,WAAAQ,EAElC,KAAK,KAAO,iBACd,CACF,EDvMO,IAAMC,EAAN,KAA0D,CAM/D,YAAYC,EAAsB,CAChC,KAAK,QAAUA,EAAO,QACtB,KAAK,OAASA,EAAO,OACrB,KAAK,SAAWA,EAAO,SAGvB,KAAK,WAAa,EAAAC,QAAM,OAAO,CAC7B,QAASD,EAAO,SAAW,IAC3B,QAAS,CACP,eAAgB,mBAChB,GAAI,KAAK,OAAO,WAAW,MAAM,GAAK,KAAK,OAAO,WAAW,MAAM,EAC/D,CAAE,mBAAoB,KAAK,MAAO,EAClC,CAAE,cAAe,KAAK,MAAO,CACnC,EACA,GAAGA,EAAO,UACZ,CAAC,EAGG,KAAK,WACP,KAAK,WAAW,SAAS,QAAQ,mBAAmB,EAAI,KAAK,SAEjE,CAMA,MAAM,eACJE,EACAC,EACAC,EAC0B,CAC1B,GAAI,CACF,IAAMC,EAAU,CACd,MAAAH,EACA,UAAWC,GAAa,CAAC,CAC3B,EAEMG,EAAkC,CACtC,eAAgB,mBAChB,GAAI,KAAK,OAAO,WAAW,MAAM,GAAK,KAAK,OAAO,WAAW,MAAM,EAC/D,CAAE,mBAAoB,KAAK,MAAO,EAClC,CAAE,cAAe,KAAK,MAAO,CACnC,GAEIF,GAAS,UAAY,KAAK,YAC5BE,EAAQ,mBAAmB,EAAIF,GAAS,UAAY,KAAK,UAG3D,IAAMG,EAAW,MAAM,KAAK,WAAW,KACrC,KAAK,QACLF,EACA,CAAE,QAAAC,CAAQ,CACZ,EAEA,GAAIC,EAAS,KAAK,QAAUA,EAAS,KAAK,OAAO,OAAS,EACxD,MAAM,IAAIC,EACR,uBACAD,EAAS,KAAK,OACdA,EAAS,IACX,EAGF,OAAOA,EAAS,IAClB,OAASE,EAAO,CACd,MAAI,EAAAR,QAAM,aAAaQ,CAAK,EACpB,IAAIC,EACRD,EAAM,UAAU,MAAM,SAAWA,EAAM,QACvC,aACAA,EAAM,UAAU,OAChBA,EAAM,UAAU,IAClB,EAEIA,CACR,CACF,CAUA,MAAM,oBAAoBE,EAAkBC,EAAmBC,EAAgC,CAC7F,IAAIC,GAAOF,GAAY,IAAI,KAAK,EAChC,GAAI,CAACE,EAAK,CACR,IAAMC,EAAI,IAAI,KACdD,EAAM,GAAGC,EAAE,eAAe,EAAI,CAAC,IAAI,OAAOA,EAAE,YAAY,EAAI,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OACjFA,EAAE,WAAW,CACf,EAAE,SAAS,EAAG,GAAG,CAAC,EACpB,CAEA,IAAMb,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQRC,EAAiC,CACrC,SAAAQ,EACA,SAAUG,EACV,KAAMD,IAAS,QAAaA,EAAK,KAAK,IAAM,GAAKA,EAAK,KAAK,EAAI,IACjE,EAGMG,GAFW,MAAM,KAAK,eAAed,EAAOC,EAAW,CAAE,SAAAQ,CAAS,CAAC,GAEnD,MAAM,oBAC5B,GAAI,CAACK,GAAM,MACT,MAAM,IAAIC,EAAgB,0CAA0C,EAGtE,OAAOD,EAAK,KACd,CAKA,MAAM,gBACJE,EACAC,EACAC,EAC8B,CAC9B,IAAMlB,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBRC,EAAiC,CAAE,WAAYiB,EAAW,SAAAF,EAAU,SAAAC,CAAS,EAE7EE,GADW,MAAM,KAAK,eAAenB,EAAOC,CAAS,GACtC,MAAM,gBAC3B,GAAI,CAACkB,GAAK,MACR,MAAM,IAAIJ,EAAgB,6CAA6C,EAEzE,MAAO,CACL,MAAOI,EAAI,MACX,KAAMA,EAAI,IACZ,CACF,CAKA,MAAM,sBAAsBD,EAAmBE,EAA+C,CAC5F,IAAMpB,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBRC,EAAY,CAAE,WAAYiB,EAAW,SAAUE,CAAQ,EAEvDD,GADW,MAAM,KAAK,eAAenB,EAAOC,CAAS,GACtC,MAAM,sBAC3B,GAAI,CAACkB,GAAK,MACR,MAAM,IAAIJ,EAAgB,mDAAmD,EAE/E,MAAO,CACL,MAAOI,EAAI,MACX,KAAMA,EAAI,IACZ,CACF,CAKA,MAAM,kBACJD,EACAG,EACAC,EAC8B,CAC9B,IAAMtB,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBRC,EAAiC,CAAE,WAAYiB,CAAU,EAC3DG,IAAU,SAAWpB,EAAU,MAAQoB,GACvCC,IAAW,SAAWrB,EAAU,OAASqB,GAE7C,IAAMH,GADW,MAAM,KAAK,eAAenB,EAAOC,CAAS,GACtC,MAAM,kBAC3B,GAAI,CAACkB,EACH,MAAM,IAAIJ,EAAgB,+CAA+C,EAE3E,IAAIQ,EAAQ,EACZ,OAAI,OAAOJ,EAAI,OAAU,WACvBI,EAAQJ,EAAI,OAGP,CAAE,MADMA,EAAI,OAAS,CAAC,EACb,MAAAI,CAAM,CACxB,CAKA,MAAM,sBAAsBL,EAAmBM,EAAiD,CAC9F,IAAMxB,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaRC,EAAiC,CACrC,WAAYiB,EACZ,OAAAM,CACF,EAEML,GADW,MAAM,KAAK,eAAenB,EAAOC,CAAS,GACtC,MAAM,sBAC3B,GAAI,CAACkB,EACH,MAAM,IAAIJ,EAAgB,mDAAmD,EAG/E,MAAO,CAAE,OADOI,EAAI,QAAU,IACd,CAClB,CAKA,MAAM,iBACJD,EACAF,EACAS,EACAR,EACAN,EACqB,CACrB,IAAMX,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeRC,EAAY,CAAE,WAAYiB,EAAW,SAAAF,EAAU,SAAAC,EAAU,MAAAQ,EAAO,KAAAd,CAAK,EAErEe,GADW,MAAM,KAAK,eAAe1B,EAAOC,CAAS,GACxC,MAAM,iBACzB,GAAI,CAACyB,GAAG,GACN,MAAM,IAAIX,EAAgB,8CAA8C,EAE1E,OAAOW,CACT,CAKA,MAAM,kBACJC,EACAC,EACAC,EAA0B,GACS,CACnC,IAAM7B,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBRC,EAAY,CAChB,MAAA0B,EACA,IAAKC,EACL,iBAAkBC,CACpB,EAEMxB,EAAW,MAAM,KAAK,eAAeL,EAAOC,CAAS,EAE3D,GAAI,CAACI,EAAS,MAAM,cAClB,MAAM,IAAIU,EAAgB,oBAAoB,EAGhD,OAAOV,EAAS,KAAK,aACvB,CAKA,MAAM,gBACJsB,EACAG,EAA8B,CAAC,EAC/BC,EAAqB,GACE,CACvB,IAAM/B,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoCRC,EAAiC,CAAE,MAAA0B,CAAM,EAC3CG,GAAU,OAAOA,GAAW,WAC1BA,EAAO,OAAS,SAClB7B,EAAU,KAAO6B,EAAO,MAEtBA,EAAO,OAAS,SAClB7B,EAAU,KAAO6B,EAAO,MAEtBA,EAAO,QAAU,SACnB7B,EAAU,MAAQ6B,EAAO,OAEvBA,EAAO,QAAU,SACnB7B,EAAU,MAAQ6B,EAAO,OAEvBA,EAAO,SAAW,SACpB7B,EAAU,OAAS6B,EAAO,SAI9B,IAAMzB,EAAW,MAAM,KAAK,eAAeL,EAAOC,CAAS,EAE3D,GAAI,CAACI,EAAS,MAAM,aAClB,MAAM,IAAIU,EAAgB,gCAAgC,EAG5D,OAAOV,EAAS,KAAK,YACvB,CAKA,MAAM,qBACJuB,EACAI,EACuB,CACvB,IAAMhC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBRC,EAAiC,CACrC,WAAA+B,CACF,EAGA,GAAIA,EAAW,MACb/B,EAAU,MAAQ+B,EAAW,UAE7B,OAAM,IAAIjB,EAAgB,4CAA4C,EAIxE,GAAIiB,EAAW,OAAQ,CACrB,IAAMF,EAASE,EAAW,OACtBF,EAAO,OAAS,SAClB7B,EAAU,KAAO6B,EAAO,MAEtBA,EAAO,QAAU,SACnB7B,EAAU,MAAQ6B,EAAO,OAEvBA,EAAO,QAAU,SACnB7B,EAAU,MAAQ6B,EAAO,OAEvBA,EAAO,SAAW,SACpB7B,EAAU,OAAS6B,EAAO,OAE9B,CAEA,IAAMzB,EAAW,MAAM,KAAK,eAAeL,EAAOC,CAAS,EAE3D,GAAI,CAACI,EAAS,MAAM,aAClB,MAAM,IAAIU,EAAgB,4CAA4C,EAGxE,OAAOV,EAAS,KAAK,YACvB,CAKA,MAAM,kBAAkB4B,EAAoE,CAC1F,GAAI,CAACA,EAAQ,MACX,MAAM,IAAIlB,EAAgB,mBAAmB,EAG/C,GAAI,CAACkB,EAAQ,QACX,MAAM,IAAIlB,EAAgB,qBAAqB,EAGjD,IAAMf,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBRC,EAAiC,CACrC,MAAOgC,EAAQ,MACf,QAASA,EAAQ,QACjB,iBAAkBA,EAAQ,gBAAkB,EAC9C,EAEIA,EAAQ,UACVhC,EAAU,QAAUgC,EAAQ,SAG9B,IAAM5B,EAAW,MAAM,KAAK,eAAeL,EAAOC,CAAS,EAE3D,GAAI,CAACI,EAAS,MAAM,gBAClB,MAAM,IAAIU,EAAgB,gCAAgC,EAG5D,OAAOV,EAAS,KAAK,eACvB,CAKA,MAAM,eAAe4B,EAAoE,CACvF,GAAI,CAACA,EAAQ,GACX,MAAM,IAAIlB,EAAgB,gBAAgB,EAG5C,GAAI,CAACkB,EAAQ,MACX,MAAM,IAAIlB,EAAgB,mBAAmB,EAG/C,GAAI,CAACkB,EAAQ,QACX,MAAM,IAAIlB,EAAgB,qBAAqB,EAGjD,IAAMf,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBRC,EAAiC,CACrC,IAAKgC,EAAQ,GACb,MAAOA,EAAQ,MACf,QAASA,EAAQ,QACjB,iBAAkBA,EAAQ,gBAAkB,GAC5C,aAAcA,EAAQ,aAAe,EACvC,EAEIA,EAAQ,UACVhC,EAAU,QAAUgC,EAAQ,SAE1BA,EAAQ,aACVhC,EAAU,WAAagC,EAAQ,YAGjC,IAAM5B,EAAW,MAAM,KAAK,eAAeL,EAAOC,CAAS,EAE3D,GAAI,CAACI,EAAS,MAAM,gBAClB,MAAM,IAAIU,EAAgB,gCAAgC,EAG5D,OAAOV,EAAS,KAAK,eACvB,CAKA,MAAM,eAAesB,EAAeC,EAA2B,CAC7D,IAAM5B,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQRC,EAAY,CAChB,MAAA0B,EACA,IAAKC,CACP,EAEA,MAAM,KAAK,eAAe5B,EAAOC,CAAS,CAC5C,CAKA,MAAM,MAAMiC,KAAkBpB,EAA2B,CACvD,IAAMd,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASRC,EAAY,CAChB,MAAAiC,EACA,KAAApB,CACF,EAIA,OAFiB,MAAM,KAAK,eAAed,EAAOC,CAAS,GAE3C,MAAM,KACxB,CACF,EAKO,SAASkC,EAAarC,EAAmC,CAC9D,OAAO,IAAID,EAAYC,CAAM,CAC/B,CEnpBO,IAAMsC,EAAN,MAAMC,CAAgB,CAC3B,YAAoBC,EAAqB,CAArB,YAAAA,CAAsB,CAE1C,OAAe,gBAAmBC,EAA0D,CAC1F,IAAMC,EAAO,KAAK,MAAM,KAAK,UAAUD,EAAI,IAAI,CAAC,EAChD,MAAO,CACL,KAAMA,EAAI,KACV,IAAKA,EAAI,IACT,KAAAC,EACA,KAAMD,EAAI,KACV,GAAIA,EAAI,GACR,UAAWA,EAAI,UACf,gBAAiBA,EAAI,gBACrB,qBAAsBA,EAAI,qBAC1B,KAAMA,EAAI,KACV,UAAWA,EAAI,UACf,aAAcA,EAAI,YACpB,CACF,CAKA,MAAM,uBACJE,EACAC,EACAC,EAA0B,GACU,CACpC,IAAMC,EAAS,MAAM,KAAK,OAAO,kBAAkBH,EAAOC,EAAIC,CAAc,EAC5E,OAAON,EAAgB,gBAAmBO,CAAM,CAClD,CAKA,MAAM,qBACJH,EACAI,EAA8B,CAAC,EAC/BC,EAAqB,GACU,CAC/B,IAAMF,EAAS,MAAM,KAAK,OAAO,gBAAgBH,EAAOI,EAAQC,CAAS,EACzE,MAAO,CACL,QAASF,EAAO,QAAQ,IAAKG,GAAQV,EAAgB,gBAAmBU,CAAG,CAAC,EAC5E,MAAOH,EAAO,KAChB,CACF,CAKA,MAAM,0BACJF,EACAM,EAC+B,CAC/B,IAAMJ,EAAS,MAAM,KAAK,OAAO,qBAAqBF,EAAIM,CAAU,EACpE,MAAO,CACL,QAASJ,EAAO,QAAQ,IAAKG,GAAQV,EAAgB,gBAAmBU,CAAG,CAAC,EAC5E,MAAOH,EAAO,KAChB,CACF,CAKA,MAAM,uBACJK,EACoC,CACpC,IAAML,EAAS,MAAM,KAAK,OAAO,kBAAkBK,CAAO,EAC1D,OAAOZ,EAAgB,gBAAmBO,CAAM,CAClD,CAKA,MAAM,oBACJK,EACoC,CACpC,IAAML,EAAS,MAAM,KAAK,OAAO,eAAeK,CAAO,EACvD,OAAOZ,EAAgB,gBAAmBO,CAAM,CAClD,CACF,ECzFO,IAAMM,EAAU,QAKhB,SAASC,GAAqB,CACjC,OAAOD,CACX","names":["index_exports","__export","ApitoClient","ApitoError","GraphQLError","TypedOperations","ValidationError","Version","createClient","getVersion","__toCommonJS","import_axios","ApitoError","message","code","statusCode","details","GraphQLError","graphQLErrors","response","ValidationError","field","ApitoClient","config","axios","query","variables","options","payload","headers","response","GraphQLError","error","ApitoError","tenantId","duration","role","dur","d","data","ValidationError","username","password","projectId","raw","idToken","limit","offset","count","domain","email","u","model","id","singlePageData","filter","aggregate","connection","request","stage","createClient","TypedOperations","_TypedOperations","client","raw","data","model","id","singlePageData","result","filter","aggregate","doc","connection","request","Version","getVersion"]}
|