@apito-io/js-admin-sdk 2.1.2 → 2.7.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/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 TenantLoginParams,\n CreateTenantUserParams,\n UpdateTenantUserParams,\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 TenantLoginParams,\n CreateTenantUserParams,\n UpdateTenantUserParams,\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 `loginTenantUser`). Password path: pass `password` and `email` or `phone` per project Authentication settings. Google OAuth path: `authMethod: 'google'` with `code` and `state` from the redirect; call `tenantGoogleOAuthState(projectId)` before opening Google to obtain `state`.\n */\n async loginTenantUser(params: TenantLoginParams): Promise<TenantLoginResponse> {\n const authMethod = (params.authMethod ?? 'general').trim().toLowerCase() || 'general';\n const variables: Record<string, any> = {\n project_id: params.projectId,\n };\n\n if (authMethod === 'google') {\n variables.auth_method = 'google';\n const code = (params.code ?? '').trim();\n const state = (params.state ?? '').trim();\n if (!code || !state) {\n throw new ValidationError('code and state are required for Google login');\n }\n variables.code = code;\n variables.state = state;\n } else {\n const password = (params.password ?? '').trim();\n if (!password) {\n throw new ValidationError('password is required');\n }\n variables.password = password;\n const email = (params.email ?? '').trim();\n const phone = (params.phone ?? '').trim();\n if (!email && !phone) {\n throw new ValidationError('email or phone is required');\n }\n if (email) variables.email = email;\n if (phone) variables.phone = phone;\n }\n\n const query = `\n query LoginTenantUser($project_id: String!, $password: String, $auth_method: String, $email: String, $phone: String, $code: String, $state: String) {\n loginTenantUser(project_id: $project_id, password: $password, auth_method: $auth_method, email: $email, phone: $phone, code: $code, state: $state) {\n token\n user {\n id\n email\n phone\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n }\n `;\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 * Signed OAuth state for tenant Google login (system query `tenantGoogleOAuthState`). Use in the authorize URL together with project `google_client_id` and the configured redirect URI.\n */\n async tenantGoogleOAuthState(projectId: string): Promise<{ state: string }> {\n const query = `\n query TenantGoogleOAuthState($project_id: String!) {\n tenantGoogleOAuthState(project_id: $project_id) {\n state\n }\n }\n `;\n const variables = { project_id: projectId };\n const response = await this.executeGraphQL(query, variables);\n const raw = response.data?.tenantGoogleOAuthState;\n const state = typeof raw?.state === 'string' ? raw.state.trim() : '';\n if (!state) {\n throw new ValidationError('Invalid response format for tenantGoogleOAuthState');\n }\n return { state };\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 email\n phone\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). Use `email` and/or `phone` per engine validation for the project identifier mode.\n */\n async createTenantUser(\n projectId: string,\n params: CreateTenantUserParams\n ): Promise<TenantUser> {\n const password = (params.password ?? '').trim();\n if (!password) {\n throw new ValidationError('password is required');\n }\n const query = `\n mutation CreateTenantUser($project_id: String!, $password: String!, $role: String, $email: String, $phone: String) {\n createTenantUser(project_id: $project_id, password: $password, role: $role, email: $email, phone: $phone) {\n id\n email\n phone\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n `;\n const variables: Record<string, any> = {\n project_id: projectId,\n password,\n };\n const role = (params.role ?? '').trim();\n if (role) variables.role = role;\n const email = (params.email ?? '').trim();\n if (email) variables.email = email;\n const phone = (params.phone ?? '').trim();\n if (phone) variables.phone = phone;\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 * Update a tenant catalog user. Project scope is implied by the API key. Only include fields to change.\n */\n async updateTenantUser(userId: string, params: UpdateTenantUserParams): Promise<TenantUser> {\n const uid = (userId ?? '').trim();\n if (!uid) {\n throw new ValidationError('userId is required');\n }\n if (\n params.email === undefined &&\n params.phone === undefined &&\n params.password === undefined &&\n params.role === undefined\n ) {\n throw new ValidationError('at least one field must be provided');\n }\n const query = `\n mutation UpdateTenantUser($user_id: String!, $email: String, $phone: String, $password: String, $role: String) {\n updateTenantUser(user_id: $user_id, email: $email, phone: $phone, password: $password, role: $role) {\n id\n email\n phone\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n `;\n const variables: Record<string, any> = { user_id: uid };\n if (params.email !== undefined) variables.email = params.email;\n if (params.phone !== undefined) variables.phone = params.phone;\n if (params.password !== undefined) variables.password = params.password;\n if (params.role !== undefined) variables.role = params.role;\n const response = await this.executeGraphQL(query, variables);\n const u = response.data?.updateTenantUser;\n if (!u?.id) {\n throw new ValidationError('Invalid response format for updateTenantUser');\n }\n return u as TenantUser;\n }\n\n /**\n * Delete a tenant catalog user by id. Project scope is implied by the API key.\n */\n async deleteTenantUser(userId: string): Promise<boolean> {\n const uid = (userId ?? '').trim();\n if (!uid) {\n throw new ValidationError('userId is required');\n }\n const query = `\n mutation DeleteTenantUser($user_id: String!) {\n deleteTenantUser(user_id: $user_id)\n }\n `;\n const response = await this.executeGraphQL(query, { user_id: uid });\n const ok = response.data?.deleteTenantUser;\n if (typeof ok !== 'boolean') {\n throw new ValidationError('Invalid response format for deleteTenantUser');\n }\n return ok;\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 email?: string;\n phone?: string;\n role: string;\n tenant_id: string;\n provider?: string;\n status?: string;\n created_at?: string;\n updated_at?: string;\n}\n\n/** Login via system GraphQL `loginTenantUser`. Password path: use `email` or `phone` per project settings. Google OAuth code path: `authMethod: 'google'`, `code`, `state` from redirect (get `state` first via `tenantGoogleOAuthState`). */\nexport interface TenantLoginParams {\n projectId: string;\n /** Required for general (password) login. */\n password?: string;\n email?: string;\n phone?: string;\n /** `general` (default) or `google`. */\n authMethod?: string;\n /** Google authorization code (with `authMethod: 'google'`). */\n code?: string;\n /** OAuth state from `tenantGoogleOAuthState` or callback (with `authMethod: 'google'`). */\n state?: string;\n}\n\nexport interface TenantGoogleOAuthStateResponse {\n state: string;\n}\n\nexport interface CreateTenantUserParams {\n password: string;\n role?: string;\n email?: string;\n phone?: string;\n}\n\n/** Optional fields for `updateTenantUser`; omitted keys are not sent. */\nexport interface UpdateTenantUserParams {\n email?: string;\n phone?: string;\n password?: string;\n role?: 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(params: TenantLoginParams): Promise<TenantLoginResponse>;\n tenantGoogleOAuthState(projectId: string): Promise<TenantGoogleOAuthStateResponse>;\n searchTenantUsers(projectId: string, limit?: number, offset?: number): Promise<TenantUsersResponse>;\n searchTenantsByDomain(projectId: string, domain: string): Promise<TenantByDomainResponse>;\n createTenantUser(projectId: string, params: CreateTenantUserParams): Promise<TenantUser>;\n updateTenantUser(userId: string, params: UpdateTenantUserParams): Promise<TenantUser>;\n deleteTenantUser(userId: string): Promise<boolean>;\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.7.0';\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","tenantId","duration","role","dur","d","data","ValidationError","params","authMethod","code","state","password","email","phone","raw","projectId","limit","offset","count","domain","u","userId","uid","ok","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"]}
package/dist/index.mjs CHANGED
@@ -1,11 +1,95 @@
1
1
  // @apito-io/js-admin-sdk - Admin SDK for Apito GraphQL API
2
- import g from"axios";var d=class extends Error{constructor(t,r,a,i){super(t);this.code=r;this.statusCode=a;this.details=i;this.name="ApitoError"}},u=class extends d{constructor(t,r,a){super(t,"GRAPHQL_ERROR");this.graphQLErrors=r;this.response=a;this.name="GraphQLError"}get partialData(){return this.response?.data}},o=class extends d{constructor(t,r){super(t,"VALIDATION_ERROR");this.field=r;this.name="ValidationError"}};var c=class{constructor(e){this.baseURL=e.baseURL,this.apiKey=e.apiKey,this.tenantId=e.tenantId,this.httpClient=g.create({timeout:e.timeout||3e4,headers:{"Content-Type":"application/json","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 a={query:e,variables:t||{}},i={"Content-Type":"application/json","X-Apito-Key":this.apiKey};(r?.tenantId||this.tenantId)&&(i["X-Apito-Tenant-ID"]=r?.tenantId||this.tenantId);let n=await this.httpClient.post(this.baseURL,a,{headers:i});if(n.data.errors&&n.data.errors.length>0)throw new u("GraphQL query failed",n.data.errors,n.data);return n.data}catch(a){throw g.isAxiosError(a)?new d(a.response?.data?.message||a.message,"HTTP_ERROR",a.response?.status,a.response?.data):a}}async generateTenantToken(e,t){let r=new Date,a=`${r.getUTCFullYear()+1}-${String(r.getUTCMonth()+1).padStart(2,"0")}-${String(r.getUTCDate()).padStart(2,"0")}`,i=`
3
- mutation GenerateTenantToken($tenantId: String!, $duration: String!) {
4
- generateTenantToken(tenant_id: $tenantId, duration: $duration) {
2
+ import y from"axios";var u=class extends Error{constructor(t,n,r,a){super(t);this.code=n;this.statusCode=r;this.details=a;this.name="ApitoError"}},g=class extends u{constructor(t,n,r){super(t,"GRAPHQL_ERROR");this.graphQLErrors=n;this.response=r;this.name="GraphQLError"}get partialData(){return this.response?.data}},o=class extends u{constructor(t,n){super(t,"VALIDATION_ERROR");this.field=n;this.name="ValidationError"}};var l=class{constructor(e){this.baseURL=e.baseURL,this.apiKey=e.apiKey,this.tenantId=e.tenantId,this.httpClient=y.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,n){try{let r={query:e,variables:t||{}},a={"Content-Type":"application/json",...this.apiKey.startsWith("cli-")||this.apiKey.startsWith("sdk-")?{"X-Apito-Sync-Key":this.apiKey}:{"X-Apito-Key":this.apiKey}};(n?.tenantId||this.tenantId)&&(a["X-Apito-Tenant-ID"]=n?.tenantId||this.tenantId);let s=await this.httpClient.post(this.baseURL,r,{headers:a});if(s.data.errors&&s.data.errors.length>0)throw new g("GraphQL query failed",s.data.errors,s.data);return s.data}catch(r){throw y.isAxiosError(r)?new u(r.response?.data?.message||r.message,"HTTP_ERROR",r.response?.status,r.response?.data):r}}async generateTenantToken(e,t,n){let r=(t??"").trim();if(!r){let p=new Date;r=`${p.getUTCFullYear()+1}-${String(p.getUTCMonth()+1).padStart(2,"0")}-${String(p.getUTCDate()).padStart(2,"0")}`}let a=`
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
- `,n={tenantId:t,duration:a},l=(await this.executeGraphQL(i,n,{tenantId:t})).data?.generateTenantToken;if(!l?.token)throw new o("Invalid response format for tenant token");return l.token}async getSingleResource(e,t,r=!1){let a=`
8
+ `,s={tenantId:e,duration:r,role:n!==void 0&&n.trim()!==""?n.trim():null},d=(await this.executeGraphQL(a,s,{tenantId:e})).data?.generateTenantToken;if(!d?.token)throw new o("Invalid response format for tenant token");return d.token}async loginTenantUser(e){let t=(e.authMethod??"general").trim().toLowerCase()||"general",n={project_id:e.projectId};if(t==="google"){n.auth_method="google";let i=(e.code??"").trim(),d=(e.state??"").trim();if(!i||!d)throw new o("code and state are required for Google login");n.code=i,n.state=d}else{let i=(e.password??"").trim();if(!i)throw new o("password is required");n.password=i;let d=(e.email??"").trim(),p=(e.phone??"").trim();if(!d&&!p)throw new o("email or phone is required");d&&(n.email=d),p&&(n.phone=p)}let s=(await this.executeGraphQL(`
9
+ query LoginTenantUser($project_id: String!, $password: String, $auth_method: String, $email: String, $phone: String, $code: String, $state: String) {
10
+ loginTenantUser(project_id: $project_id, password: $password, auth_method: $auth_method, email: $email, phone: $phone, code: $code, state: $state) {
11
+ token
12
+ user {
13
+ id
14
+ email
15
+ phone
16
+ role
17
+ provider
18
+ tenant_id
19
+ status
20
+ created_at
21
+ updated_at
22
+ }
23
+ }
24
+ }
25
+ `,n)).data?.loginTenantUser;if(!s?.token)throw new o("Invalid response format for loginTenantUser");return{token:s.token,user:s.user}}async tenantGoogleOAuthState(e){let t=`
26
+ query TenantGoogleOAuthState($project_id: String!) {
27
+ tenantGoogleOAuthState(project_id: $project_id) {
28
+ state
29
+ }
30
+ }
31
+ `,n={project_id:e},a=(await this.executeGraphQL(t,n)).data?.tenantGoogleOAuthState,s=typeof a?.state=="string"?a.state.trim():"";if(!s)throw new o("Invalid response format for tenantGoogleOAuthState");return{state:s}}async searchTenantUsers(e,t,n){let r=`
32
+ query SearchTenantUsers($project_id: String!, $limit: Int, $offset: Int) {
33
+ searchTenantUsers(project_id: $project_id, limit: $limit, offset: $offset) {
34
+ count
35
+ users {
36
+ id
37
+ email
38
+ phone
39
+ role
40
+ provider
41
+ tenant_id
42
+ status
43
+ created_at
44
+ updated_at
45
+ }
46
+ }
47
+ }
48
+ `,a={project_id:e};t!==void 0&&(a.limit=t),n!==void 0&&(a.offset=n);let i=(await this.executeGraphQL(r,a)).data?.searchTenantUsers;if(!i)throw new o("Invalid response format for searchTenantUsers");let d=0;return typeof i.count=="number"&&(d=i.count),{users:i.users??[],count:d}}async searchTenantsByDomain(e,t){let n=`
49
+ query SearchTenantsByDomain($project_id: String!, $domain: String!) {
50
+ searchTenantsByDomain(project_id: $project_id, domain: $domain) {
51
+ tenant {
52
+ id
53
+ name
54
+ status
55
+ domain
56
+ data
57
+ }
58
+ }
59
+ }
60
+ `,r={project_id:e,domain:t},s=(await this.executeGraphQL(n,r)).data?.searchTenantsByDomain;if(!s)throw new o("Invalid response format for searchTenantsByDomain");return{tenant:s.tenant??null}}async createTenantUser(e,t){let n=(t.password??"").trim();if(!n)throw new o("password is required");let r=`
61
+ mutation CreateTenantUser($project_id: String!, $password: String!, $role: String, $email: String, $phone: String) {
62
+ createTenantUser(project_id: $project_id, password: $password, role: $role, email: $email, phone: $phone) {
63
+ id
64
+ email
65
+ phone
66
+ role
67
+ provider
68
+ tenant_id
69
+ status
70
+ created_at
71
+ updated_at
72
+ }
73
+ }
74
+ `,a={project_id:e,password:n},s=(t.role??"").trim();s&&(a.role=s);let i=(t.email??"").trim();i&&(a.email=i);let d=(t.phone??"").trim();d&&(a.phone=d);let h=(await this.executeGraphQL(r,a)).data?.createTenantUser;if(!h?.id)throw new o("Invalid response format for createTenantUser");return h}async updateTenantUser(e,t){let n=(e??"").trim();if(!n)throw new o("userId is required");if(t.email===void 0&&t.phone===void 0&&t.password===void 0&&t.role===void 0)throw new o("at least one field must be provided");let r=`
75
+ mutation UpdateTenantUser($user_id: String!, $email: String, $phone: String, $password: String, $role: String) {
76
+ updateTenantUser(user_id: $user_id, email: $email, phone: $phone, password: $password, role: $role) {
77
+ id
78
+ email
79
+ phone
80
+ role
81
+ provider
82
+ tenant_id
83
+ status
84
+ created_at
85
+ updated_at
86
+ }
87
+ }
88
+ `,a={user_id:n};t.email!==void 0&&(a.email=t.email),t.phone!==void 0&&(a.phone=t.phone),t.password!==void 0&&(a.password=t.password),t.role!==void 0&&(a.role=t.role);let i=(await this.executeGraphQL(r,a)).data?.updateTenantUser;if(!i?.id)throw new o("Invalid response format for updateTenantUser");return i}async deleteTenantUser(e){let t=(e??"").trim();if(!t)throw new o("userId is required");let a=(await this.executeGraphQL(`
89
+ mutation DeleteTenantUser($user_id: String!) {
90
+ deleteTenantUser(user_id: $user_id)
91
+ }
92
+ `,{user_id:t})).data?.deleteTenantUser;if(typeof a!="boolean")throw new o("Invalid response format for deleteTenantUser");return a}async getSingleResource(e,t,n=!1){let r=`
9
93
  query GetSingleData($model: String, $_id: String!, $single_page_data: Boolean) {
10
94
  getSingleData(model: $model, _id: $_id, single_page_data: $single_page_data) {
11
95
  _key
@@ -23,7 +107,7 @@ import g from"axios";var d=class extends Error{constructor(t,r,a,i){super(t);thi
23
107
  type
24
108
  }
25
109
  }
26
- `,i={model:e,_id:t,single_page_data:r},n=await this.executeGraphQL(a,i);if(!n.data?.getSingleData)throw new o("Resource not found");return n.data.getSingleData}async searchResources(e,t={},r=!1){let a=`
110
+ `,a={model:e,_id:t,single_page_data:n},s=await this.executeGraphQL(r,a);if(!s.data?.getSingleData)throw new o("Resource not found");return s.data.getSingleData}async searchResources(e,t={},n=!1){let r=`
27
111
  query GetModelData(
28
112
  $model: String!
29
113
  $page: Int
@@ -56,7 +140,7 @@ import g from"axios";var d=class extends Error{constructor(t,r,a,i){super(t);thi
56
140
  count
57
141
  }
58
142
  }
59
- `,i={model:e};t&&typeof t=="object"&&(t._key!==void 0&&(i._key=t._key),t.page!==void 0&&(i.page=t.page),t.limit!==void 0&&(i.limit=t.limit),t.where!==void 0&&(i.where=t.where),t.search!==void 0&&(i.search=t.search));let n=await this.executeGraphQL(a,i);if(!n.data?.getModelData)throw new o("Invalid search response format");return n.data.getModelData}async getRelationDocuments(e,t){let r=`
143
+ `,a={model:e};t&&typeof t=="object"&&(t._key!==void 0&&(a._key=t._key),t.page!==void 0&&(a.page=t.page),t.limit!==void 0&&(a.limit=t.limit),t.where!==void 0&&(a.where=t.where),t.search!==void 0&&(a.search=t.search));let s=await this.executeGraphQL(r,a);if(!s.data?.getModelData)throw new o("Invalid search response format");return s.data.getModelData}async getRelationDocuments(e,t){let n=`
60
144
  query GetModelData($model: String!, $page: Int, $limit: Int, $where: JSON, $search: String, $connection : ListAllDataDetailedOfAModelConnectionPayload) {
61
145
  getModelData(model: $model, page: $page, limit: $limit, where: $where, search: $search, connection: $connection) {
62
146
  results {
@@ -75,7 +159,7 @@ import g from"axios";var d=class extends Error{constructor(t,r,a,i){super(t);thi
75
159
  count
76
160
  }
77
161
  }
78
- `,a={connection:t};if(t.model)a.model=t.model;else throw new o("model is required in connection parameters");if(t.filter){let n=t.filter;n.page!==void 0&&(a.page=n.page),n.limit!==void 0&&(a.limit=n.limit),n.where!==void 0&&(a.where=n.where),n.search!==void 0&&(a.search=n.search)}let i=await this.executeGraphQL(r,a);if(!i.data?.getModelData)throw new o("Invalid relation documents response format");return i.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=`
162
+ `,r={connection:t};if(t.model)r.model=t.model;else throw new o("model is required in connection parameters");if(t.filter){let s=t.filter;s.page!==void 0&&(r.page=s.page),s.limit!==void 0&&(r.limit=s.limit),s.where!==void 0&&(r.where=s.where),s.search!==void 0&&(r.search=s.search)}let a=await this.executeGraphQL(n,r);if(!a.data?.getModelData)throw new o("Invalid relation documents response format");return a.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
163
  mutation CreateNewData($model: String!, $single_page_data: Boolean, $payload: JSON!, $connect: JSON) {
80
164
  upsertModelData(
81
165
  connect: $connect
@@ -95,7 +179,7 @@ import g from"axios";var d=class extends Error{constructor(t,r,a,i){super(t);thi
95
179
  }
96
180
  }
97
181
  }
98
- `,r={model:e.model,payload:e.payload,single_page_data:e.singlePageData||!1};e.connect&&(r.connect=e.connect);let a=await this.executeGraphQL(t,r);if(!a.data?.upsertModelData)throw new o("Invalid create response format");return a.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=`
182
+ `,n={model:e.model,payload:e.payload,single_page_data:e.singlePageData||!1};e.connect&&(n.connect=e.connect);let r=await this.executeGraphQL(t,n);if(!r.data?.upsertModelData)throw new o("Invalid create response format");return r.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
183
  mutation UpdateModelData($_id: String!, $model: String!, $single_page_data: Boolean, $force_update: Boolean, $payload: JSON!, $connect: JSON, $disconnect: JSON) {
100
184
  upsertModelData(
101
185
  connect: $connect
@@ -118,18 +202,18 @@ import g from"axios";var d=class extends Error{constructor(t,r,a,i){super(t);thi
118
202
  }
119
203
  }
120
204
  }
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 a=await this.executeGraphQL(t,r);if(!a.data?.upsertModelData)throw new o("Invalid update response format");return a.data.upsertModelData}async deleteResource(e,t){let r=`
205
+ `,n={_id:e.id,model:e.model,payload:e.payload,single_page_data:e.singlePageData||!1,force_update:e.forceUpdate||!1};e.connect&&(n.connect=e.connect),e.disconnect&&(n.disconnect=e.disconnect);let r=await this.executeGraphQL(t,n);if(!r.data?.upsertModelData)throw new o("Invalid update response format");return r.data.upsertModelData}async deleteResource(e,t){let n=`
122
206
  mutation DeleteData($model: String!, $_id: String!) {
123
207
  deleteModelData(model_name: $model, _id: $_id) {
124
208
  id
125
209
  }
126
210
  }
127
- `,a={model:e,_id:t};await this.executeGraphQL(r,a)}async debug(e,...t){let r=`
211
+ `,r={model:e,_id:t};await this.executeGraphQL(n,r)}async debug(e,...t){let n=`
128
212
  mutation Debug($stage: String!, $data: JSON) {
129
213
  debug(stage: $stage, data: $data) {
130
214
  message
131
215
  data
132
216
  }
133
217
  }
134
- `,a={stage:e,data:t};return(await this.executeGraphQL(r,a)).data?.debug}};function y(s){return new c(s)}var p=class s{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 a=await this.client.getSingleResource(e,t,r);return s.toTypedDocument(a)}async searchResourcesTyped(e,t={},r=!1){let a=await this.client.searchResources(e,t,r);return{results:a.results.map(i=>s.toTypedDocument(i)),count:a.count}}async getRelationDocumentsTyped(e,t){let r=await this.client.getRelationDocuments(e,t);return{results:r.results.map(a=>s.toTypedDocument(a)),count:r.count}}async createNewResourceTyped(e){let t=await this.client.createNewResource(e);return s.toTypedDocument(t)}async updateResourceTyped(e){let t=await this.client.updateResource(e);return s.toTypedDocument(t)}};var m="2.1.1";function h(){return m}export{c as ApitoClient,d as ApitoError,u as GraphQLError,p as TypedOperations,o as ValidationError,m as Version,y as createClient,c as default,h as getVersion};
218
+ `,r={stage:e,data:t};return(await this.executeGraphQL(n,r)).data?.debug}};function T(c){return new l(c)}var m=class c{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,n=!1){let r=await this.client.getSingleResource(e,t,n);return c.toTypedDocument(r)}async searchResourcesTyped(e,t={},n=!1){let r=await this.client.searchResources(e,t,n);return{results:r.results.map(a=>c.toTypedDocument(a)),count:r.count}}async getRelationDocumentsTyped(e,t){let n=await this.client.getRelationDocuments(e,t);return{results:n.results.map(r=>c.toTypedDocument(r)),count:n.count}}async createNewResourceTyped(e){let t=await this.client.createNewResource(e);return c.toTypedDocument(t)}async updateResourceTyped(e){let t=await this.client.updateResource(e);return c.toTypedDocument(t)}};var f="2.7.0";function _(){return f}export{l as ApitoClient,u as ApitoError,g as GraphQLError,m as TypedOperations,o as ValidationError,f as Version,T as createClient,l as default,_ as getVersion};
135
219
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/types.ts","../src/typed-operations.ts","../src/version.ts"],"sourcesContent":["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":["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/client.ts","../src/types.ts","../src/typed-operations.ts","../src/version.ts"],"sourcesContent":["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 TenantLoginParams,\n CreateTenantUserParams,\n UpdateTenantUserParams,\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 `loginTenantUser`). Password path: pass `password` and `email` or `phone` per project Authentication settings. Google OAuth path: `authMethod: 'google'` with `code` and `state` from the redirect; call `tenantGoogleOAuthState(projectId)` before opening Google to obtain `state`.\n */\n async loginTenantUser(params: TenantLoginParams): Promise<TenantLoginResponse> {\n const authMethod = (params.authMethod ?? 'general').trim().toLowerCase() || 'general';\n const variables: Record<string, any> = {\n project_id: params.projectId,\n };\n\n if (authMethod === 'google') {\n variables.auth_method = 'google';\n const code = (params.code ?? '').trim();\n const state = (params.state ?? '').trim();\n if (!code || !state) {\n throw new ValidationError('code and state are required for Google login');\n }\n variables.code = code;\n variables.state = state;\n } else {\n const password = (params.password ?? '').trim();\n if (!password) {\n throw new ValidationError('password is required');\n }\n variables.password = password;\n const email = (params.email ?? '').trim();\n const phone = (params.phone ?? '').trim();\n if (!email && !phone) {\n throw new ValidationError('email or phone is required');\n }\n if (email) variables.email = email;\n if (phone) variables.phone = phone;\n }\n\n const query = `\n query LoginTenantUser($project_id: String!, $password: String, $auth_method: String, $email: String, $phone: String, $code: String, $state: String) {\n loginTenantUser(project_id: $project_id, password: $password, auth_method: $auth_method, email: $email, phone: $phone, code: $code, state: $state) {\n token\n user {\n id\n email\n phone\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n }\n `;\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 * Signed OAuth state for tenant Google login (system query `tenantGoogleOAuthState`). Use in the authorize URL together with project `google_client_id` and the configured redirect URI.\n */\n async tenantGoogleOAuthState(projectId: string): Promise<{ state: string }> {\n const query = `\n query TenantGoogleOAuthState($project_id: String!) {\n tenantGoogleOAuthState(project_id: $project_id) {\n state\n }\n }\n `;\n const variables = { project_id: projectId };\n const response = await this.executeGraphQL(query, variables);\n const raw = response.data?.tenantGoogleOAuthState;\n const state = typeof raw?.state === 'string' ? raw.state.trim() : '';\n if (!state) {\n throw new ValidationError('Invalid response format for tenantGoogleOAuthState');\n }\n return { state };\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 email\n phone\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). Use `email` and/or `phone` per engine validation for the project identifier mode.\n */\n async createTenantUser(\n projectId: string,\n params: CreateTenantUserParams\n ): Promise<TenantUser> {\n const password = (params.password ?? '').trim();\n if (!password) {\n throw new ValidationError('password is required');\n }\n const query = `\n mutation CreateTenantUser($project_id: String!, $password: String!, $role: String, $email: String, $phone: String) {\n createTenantUser(project_id: $project_id, password: $password, role: $role, email: $email, phone: $phone) {\n id\n email\n phone\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n `;\n const variables: Record<string, any> = {\n project_id: projectId,\n password,\n };\n const role = (params.role ?? '').trim();\n if (role) variables.role = role;\n const email = (params.email ?? '').trim();\n if (email) variables.email = email;\n const phone = (params.phone ?? '').trim();\n if (phone) variables.phone = phone;\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 * Update a tenant catalog user. Project scope is implied by the API key. Only include fields to change.\n */\n async updateTenantUser(userId: string, params: UpdateTenantUserParams): Promise<TenantUser> {\n const uid = (userId ?? '').trim();\n if (!uid) {\n throw new ValidationError('userId is required');\n }\n if (\n params.email === undefined &&\n params.phone === undefined &&\n params.password === undefined &&\n params.role === undefined\n ) {\n throw new ValidationError('at least one field must be provided');\n }\n const query = `\n mutation UpdateTenantUser($user_id: String!, $email: String, $phone: String, $password: String, $role: String) {\n updateTenantUser(user_id: $user_id, email: $email, phone: $phone, password: $password, role: $role) {\n id\n email\n phone\n role\n provider\n tenant_id\n status\n created_at\n updated_at\n }\n }\n `;\n const variables: Record<string, any> = { user_id: uid };\n if (params.email !== undefined) variables.email = params.email;\n if (params.phone !== undefined) variables.phone = params.phone;\n if (params.password !== undefined) variables.password = params.password;\n if (params.role !== undefined) variables.role = params.role;\n const response = await this.executeGraphQL(query, variables);\n const u = response.data?.updateTenantUser;\n if (!u?.id) {\n throw new ValidationError('Invalid response format for updateTenantUser');\n }\n return u as TenantUser;\n }\n\n /**\n * Delete a tenant catalog user by id. Project scope is implied by the API key.\n */\n async deleteTenantUser(userId: string): Promise<boolean> {\n const uid = (userId ?? '').trim();\n if (!uid) {\n throw new ValidationError('userId is required');\n }\n const query = `\n mutation DeleteTenantUser($user_id: String!) {\n deleteTenantUser(user_id: $user_id)\n }\n `;\n const response = await this.executeGraphQL(query, { user_id: uid });\n const ok = response.data?.deleteTenantUser;\n if (typeof ok !== 'boolean') {\n throw new ValidationError('Invalid response format for deleteTenantUser');\n }\n return ok;\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 email?: string;\n phone?: string;\n role: string;\n tenant_id: string;\n provider?: string;\n status?: string;\n created_at?: string;\n updated_at?: string;\n}\n\n/** Login via system GraphQL `loginTenantUser`. Password path: use `email` or `phone` per project settings. Google OAuth code path: `authMethod: 'google'`, `code`, `state` from redirect (get `state` first via `tenantGoogleOAuthState`). */\nexport interface TenantLoginParams {\n projectId: string;\n /** Required for general (password) login. */\n password?: string;\n email?: string;\n phone?: string;\n /** `general` (default) or `google`. */\n authMethod?: string;\n /** Google authorization code (with `authMethod: 'google'`). */\n code?: string;\n /** OAuth state from `tenantGoogleOAuthState` or callback (with `authMethod: 'google'`). */\n state?: string;\n}\n\nexport interface TenantGoogleOAuthStateResponse {\n state: string;\n}\n\nexport interface CreateTenantUserParams {\n password: string;\n role?: string;\n email?: string;\n phone?: string;\n}\n\n/** Optional fields for `updateTenantUser`; omitted keys are not sent. */\nexport interface UpdateTenantUserParams {\n email?: string;\n phone?: string;\n password?: string;\n role?: 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(params: TenantLoginParams): Promise<TenantLoginResponse>;\n tenantGoogleOAuthState(projectId: string): Promise<TenantGoogleOAuthStateResponse>;\n searchTenantUsers(projectId: string, limit?: number, offset?: number): Promise<TenantUsersResponse>;\n searchTenantsByDomain(projectId: string, domain: string): Promise<TenantByDomainResponse>;\n createTenantUser(projectId: string, params: CreateTenantUserParams): Promise<TenantUser>;\n updateTenantUser(userId: string, params: UpdateTenantUserParams): Promise<TenantUser>;\n deleteTenantUser(userId: string): Promise<boolean>;\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.7.0';\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":["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","params","authMethod","code","state","password","email","phone","raw","projectId","limit","offset","count","domain","u","userId","uid","ok","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apito-io/js-admin-sdk",
3
- "version": "2.1.2",
3
+ "version": "2.7.0",
4
4
  "description": "Admin JavaScript SDK for Apito GraphQL API (mirrors go-internal-sdk)",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",