diff --git a/docs-mdx/README.md b/docs-mdx/README.md
new file mode 100644
index 0000000..b0adb5a
--- /dev/null
+++ b/docs-mdx/README.md
@@ -0,0 +1,40 @@
+---
+title: @base44/sdk
+description: - createClient - createClientFromRequest - getAccessToken -
+---
+
+## Classes
+
+- [Base44Error](classes/Base44Error.md)
+
+## Interfaces
+
+- [AppMessageContent](interfaces/AppMessageContent.md)
+- [AppConversationMessage](interfaces/AppConversationMessage.md)
+- [AppConversationLike](interfaces/AppConversationLike.md)
+- [DenoProjectLike](interfaces/DenoProjectLike.md)
+- [AppLike](interfaces/AppLike.md)
+- [UserLike](interfaces/UserLike.md)
+- [UserEntityLike](interfaces/UserEntityLike.md)
+- [AuthConfigLike](interfaces/AuthConfigLike.md)
+- [LoginViaEmailPasswordResponse](interfaces/LoginViaEmailPasswordResponse.md)
+- [AuthMethods](interfaces/AuthMethods.md)
+
+## Type Aliases
+
+- [Base44Client](types/Base44Client.md)
+- [AgentConversation](types/AgentConversation.md)
+- [AgentMessage](types/AgentMessage.md)
+- [LoginInfoResponse](types/LoginInfoResponse.md)
+- [ConnectorIntegrationType](types/ConnectorIntegrationType.md)
+- [ConnectorAccessTokenResponse](types/ConnectorAccessTokenResponse.md)
+- [ModelFilterParams](types/ModelFilterParams.md)
+
+## Functions
+
+- [createClient](functions/createClient.md)
+- [createClientFromRequest](functions/createClientFromRequest.md)
+- [getAccessToken](functions/getAccessToken.md)
+- [saveAccessToken](functions/saveAccessToken.md)
+- [removeAccessToken](functions/removeAccessToken.md)
+- [getLoginUrl](functions/getLoginUrl.md)
diff --git a/docs-mdx/classes/Base44Error.md b/docs-mdx/classes/Base44Error.md
new file mode 100644
index 0000000..05028d9
--- /dev/null
+++ b/docs-mdx/classes/Base44Error.md
@@ -0,0 +1,100 @@
+---
+title: "Class: Base44Error"
+description: "utils/axios-client.ts:27"
+---
+
+## Hierarchy
+
+- `Error`
+
+ ↳ **`Base44Error`**
+
+## Constructors
+
+### constructor
+
+• **new Base44Error**(`message`, `status`, `code`, `data`, `originalError`): [`Base44Error`](Base44Error.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `message` | `string` |
+| `status` | `number` |
+| `code` | `string` |
+| `data` | `any` |
+| `originalError` | `unknown` |
+
+#### Returns
+
+[`Base44Error`](Base44Error.md)
+
+#### Overrides
+
+Error.constructor
+
+#### Defined in
+
+[utils/axios-client.ts:11](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L11)
+
+## Properties
+
+### status
+
+• **status**: `number`
+
+#### Defined in
+
+[utils/axios-client.ts:6](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L6)
+
+___
+
+### code
+
+• **code**: `string`
+
+#### Defined in
+
+[utils/axios-client.ts:7](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L7)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Defined in
+
+[utils/axios-client.ts:8](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L8)
+
+___
+
+### originalError
+
+• **originalError**: `unknown`
+
+#### Defined in
+
+[utils/axios-client.ts:9](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L9)
+
+## Methods
+
+### toJSON
+
+▸ **toJSON**(): `Object`
+
+#### Returns
+
+`Object`
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `message` | `string` |
+| `status` | `number` |
+| `code` | `string` |
+| `data` | `any` |
+
+#### Defined in
+
+[utils/axios-client.ts:27](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L27)
diff --git a/docs-mdx/functions/createClient.md b/docs-mdx/functions/createClient.md
new file mode 100644
index 0000000..eb0d04f
--- /dev/null
+++ b/docs-mdx/functions/createClient.md
@@ -0,0 +1,82 @@
+---
+title: "Function: createClient"
+description: "client.ts:30"
+---
+
+▸ **createClient**(`config`): `Object`
+
+Create a Base44 client instance
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `config` | `Object` | Client configuration |
+| `config.serverUrl?` | `string` | API server URL |
+| `config.appBaseUrl?` | `string` | Application base URL |
+| `config.appId` | `string` | Application ID |
+| `config.token?` | `string` | Authentication token |
+| `config.serviceToken?` | `string` | Service role authentication token |
+| `config.requiresAuth?` | `boolean` | Whether the app requires authentication |
+| `config.functionsVersion?` | `string` | - |
+| `config.headers?` | `Record`\<..., ...\> | - |
+| `config.options?` | `CreateClientOptions` | - |
+
+#### Returns
+
+[**Base44Client**](../types/Base44Client.md)
+
+Base44 client instance
+
+
+View full type definition
+
+| Name | Type |
+| :------ | :------ |
+| `entities` | {} |
+| `integrations` | {} |
+| `auth` | [`AuthMethods`](../interfaces/AuthMethods.md) |
+| `functions` | \{ `invoke`: (`functionName`: `string`, `data`: `Record`\<..., ...\>) => `Promise`\<...\> } |
+| `functions.invoke` | [object Object] |
+| `agents` | \{ `getConversations`: () => ... ; `getConversation`: (`conversationId`: ...) => ... ; `listConversations`: (`filterParams`: ...) => ... ; `createConversation`: (`conversation`: ...) => ... ; `addMessage`: (`conversation`: ..., `message`: ...) => ... ; `subscribeToConversation`: (`conversationId`: ..., `onUpdate?`: ...) => ... ; `getWhatsAppConnectURL`: (`agentName`: ...) => ... } |
+| `agents.getConversations` | () => ... |
+| `agents.getConversation` | (`conversationId`: ...) => ... |
+| `agents.listConversations` | (`filterParams`: ...) => ... |
+| `agents.createConversation` | (`conversation`: ...) => ... |
+| `agents.addMessage` | (`conversation`: ..., `message`: ...) => ... |
+| `agents.subscribeToConversation` | (`conversationId`: ..., `onUpdate?`: ...) => ... |
+| `agents.getWhatsAppConnectURL` | (`agentName`: ...) => ... |
+| `appLogs` | \{ `logUserInApp`: (`pageName`: `string`) => `Promise`\<...\> ; `fetchLogs`: (`params`: `Record`\<..., ...\>) => `Promise`\<...\> ; `getStats`: (`params`: `Record`\<..., ...\>) => `Promise`\<...\> } |
+| `appLogs.logUserInApp` | [object Object] |
+| `appLogs.fetchLogs` | [object Object] |
+| `appLogs.getStats` | [object Object] |
+| `cleanup` | () => `void` |
+| `setToken` | (`newToken`: `string`) => `void` |
+| `getConfig` | () => \{ `serverUrl`: `string` ; `appId`: `string` ; `requiresAuth`: `boolean` } |
+| `asServiceRole` | \{ `entities`: {} ; `integrations`: {} ; `sso`: \{ `getAccessToken`: (`userid`: ...) => ... } ; `connectors`: \{ `getAccessToken`: (`integrationType`: ...) => ... } ; `functions`: \{ `invoke`: (`functionName`: ..., `data`: ...) => ... } ; `agents`: \{ `getConversations`: ... ; `getConversation`: ... ; `listConversations`: ... ; `createConversation`: ... ; `addMessage`: ... ; `subscribeToConversation`: ... ; `getWhatsAppConnectURL`: ... } ; `appLogs`: \{ `logUserInApp`: (`pageName`: ...) => ... ; `fetchLogs`: (`params`: ...) => ... ; `getStats`: (`params`: ...) => ... } ; `cleanup`: () => ... } |
+| `asServiceRole.entities` | {} |
+| `asServiceRole.integrations` | {} |
+| `asServiceRole.sso` | \{ `getAccessToken`: (`userid`: ...) => ... } |
+| `asServiceRole.sso.getAccessToken` | [object Object] |
+| `asServiceRole.connectors` | \{ `getAccessToken`: (`integrationType`: ...) => ... } |
+| `asServiceRole.connectors.getAccessToken` | [object Object] |
+| `asServiceRole.functions` | \{ `invoke`: (`functionName`: ..., `data`: ...) => ... } |
+| `asServiceRole.functions.invoke` | [object Object] |
+| `asServiceRole.agents` | \{ `getConversations`: ... ; `getConversation`: ... ; `listConversations`: ... ; `createConversation`: ... ; `addMessage`: ... ; `subscribeToConversation`: ... ; `getWhatsAppConnectURL`: ... } |
+| `asServiceRole.agents.getConversations` | ... |
+| `asServiceRole.agents.getConversation` | ... |
+| `asServiceRole.agents.listConversations` | ... |
+| `asServiceRole.agents.createConversation` | ... |
+| `asServiceRole.agents.addMessage` | ... |
+| `asServiceRole.agents.subscribeToConversation` | ... |
+| `asServiceRole.agents.getWhatsAppConnectURL` | ... |
+| `asServiceRole.appLogs` | \{ `logUserInApp`: (`pageName`: ...) => ... ; `fetchLogs`: (`params`: ...) => ... ; `getStats`: (`params`: ...) => ... } |
+| `asServiceRole.appLogs.logUserInApp` | [object Object] |
+| `asServiceRole.appLogs.fetchLogs` | [object Object] |
+| `asServiceRole.appLogs.getStats` | [object Object] |
+| `asServiceRole.cleanup` | () => ... |
+
+
+#### Defined in
+
+[client.ts:30](https://github.com/base44-dev/javascript-sdk/blob/main/src/client.ts#L30)
diff --git a/docs-mdx/functions/createClientFromRequest.md b/docs-mdx/functions/createClientFromRequest.md
new file mode 100644
index 0000000..385772e
--- /dev/null
+++ b/docs-mdx/functions/createClientFromRequest.md
@@ -0,0 +1,65 @@
+---
+title: "Function: createClientFromRequest"
+description: "client.ts:215"
+---
+
+▸ **createClientFromRequest**(`request`): `Object`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `request` | `Request` |
+
+#### Returns
+
+`Object`
+
+| Name | Type |
+| :------ | :------ |
+| `entities` | {} |
+| `integrations` | {} |
+| `auth` | [`AuthMethods`](../interfaces/AuthMethods.md) |
+| `functions` | \{ `invoke`: (`functionName`: `string`, `data`: `Record`\<..., ...\>) => `Promise`\<...\> } |
+| `functions.invoke` | [object Object] |
+| `agents` | \{ `getConversations`: () => ... ; `getConversation`: (`conversationId`: ...) => ... ; `listConversations`: (`filterParams`: ...) => ... ; `createConversation`: (`conversation`: ...) => ... ; `addMessage`: (`conversation`: ..., `message`: ...) => ... ; `subscribeToConversation`: (`conversationId`: ..., `onUpdate?`: ...) => ... ; `getWhatsAppConnectURL`: (`agentName`: ...) => ... } |
+| `agents.getConversations` | () => ... |
+| `agents.getConversation` | (`conversationId`: ...) => ... |
+| `agents.listConversations` | (`filterParams`: ...) => ... |
+| `agents.createConversation` | (`conversation`: ...) => ... |
+| `agents.addMessage` | (`conversation`: ..., `message`: ...) => ... |
+| `agents.subscribeToConversation` | (`conversationId`: ..., `onUpdate?`: ...) => ... |
+| `agents.getWhatsAppConnectURL` | (`agentName`: ...) => ... |
+| `appLogs` | \{ `logUserInApp`: (`pageName`: `string`) => `Promise`\<...\> ; `fetchLogs`: (`params`: `Record`\<..., ...\>) => `Promise`\<...\> ; `getStats`: (`params`: `Record`\<..., ...\>) => `Promise`\<...\> } |
+| `appLogs.logUserInApp` | [object Object] |
+| `appLogs.fetchLogs` | [object Object] |
+| `appLogs.getStats` | [object Object] |
+| `cleanup` | () => `void` |
+| `setToken` | (`newToken`: `string`) => `void` |
+| `getConfig` | () => \{ `serverUrl`: `string` ; `appId`: `string` ; `requiresAuth`: `boolean` } |
+| `asServiceRole` | \{ `entities`: {} ; `integrations`: {} ; `sso`: \{ `getAccessToken`: (`userid`: ...) => ... } ; `connectors`: \{ `getAccessToken`: (`integrationType`: ...) => ... } ; `functions`: \{ `invoke`: (`functionName`: ..., `data`: ...) => ... } ; `agents`: \{ `getConversations`: ... ; `getConversation`: ... ; `listConversations`: ... ; `createConversation`: ... ; `addMessage`: ... ; `subscribeToConversation`: ... ; `getWhatsAppConnectURL`: ... } ; `appLogs`: \{ `logUserInApp`: (`pageName`: ...) => ... ; `fetchLogs`: (`params`: ...) => ... ; `getStats`: (`params`: ...) => ... } ; `cleanup`: () => ... } |
+| `asServiceRole.entities` | {} |
+| `asServiceRole.integrations` | {} |
+| `asServiceRole.sso` | \{ `getAccessToken`: (`userid`: ...) => ... } |
+| `asServiceRole.sso.getAccessToken` | [object Object] |
+| `asServiceRole.connectors` | \{ `getAccessToken`: (`integrationType`: ...) => ... } |
+| `asServiceRole.connectors.getAccessToken` | [object Object] |
+| `asServiceRole.functions` | \{ `invoke`: (`functionName`: ..., `data`: ...) => ... } |
+| `asServiceRole.functions.invoke` | [object Object] |
+| `asServiceRole.agents` | \{ `getConversations`: ... ; `getConversation`: ... ; `listConversations`: ... ; `createConversation`: ... ; `addMessage`: ... ; `subscribeToConversation`: ... ; `getWhatsAppConnectURL`: ... } |
+| `asServiceRole.agents.getConversations` | ... |
+| `asServiceRole.agents.getConversation` | ... |
+| `asServiceRole.agents.listConversations` | ... |
+| `asServiceRole.agents.createConversation` | ... |
+| `asServiceRole.agents.addMessage` | ... |
+| `asServiceRole.agents.subscribeToConversation` | ... |
+| `asServiceRole.agents.getWhatsAppConnectURL` | ... |
+| `asServiceRole.appLogs` | \{ `logUserInApp`: (`pageName`: ...) => ... ; `fetchLogs`: (`params`: ...) => ... ; `getStats`: (`params`: ...) => ... } |
+| `asServiceRole.appLogs.logUserInApp` | [object Object] |
+| `asServiceRole.appLogs.fetchLogs` | [object Object] |
+| `asServiceRole.appLogs.getStats` | [object Object] |
+| `asServiceRole.cleanup` | () => ... |
+
+#### Defined in
+
+[client.ts:215](https://github.com/base44-dev/javascript-sdk/blob/main/src/client.ts#L215)
diff --git a/docs-mdx/functions/getAccessToken.md b/docs-mdx/functions/getAccessToken.md
new file mode 100644
index 0000000..d767ab2
--- /dev/null
+++ b/docs-mdx/functions/getAccessToken.md
@@ -0,0 +1,28 @@
+---
+title: "Function: getAccessToken"
+description: "utils/auth-utils.ts:15"
+---
+
+▸ **getAccessToken**(`options?`): ``null`` \| `string`
+
+Retrieves an access token from either localStorage or URL parameters
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `options` | `Object` | Configuration options |
+| `options.storageKey?` | `string` | The key to use in localStorage |
+| `options.paramName?` | `string` | The URL parameter name |
+| `options.saveToStorage?` | `boolean` | Whether to save the token to localStorage if found in URL |
+| `options.removeFromUrl?` | `boolean` | Whether to remove the token from URL after retrieval |
+
+#### Returns
+
+``null`` \| `string`
+
+The access token or null if not found
+
+#### Defined in
+
+[utils/auth-utils.ts:15](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/auth-utils.ts#L15)
diff --git a/docs-mdx/functions/getLoginUrl.md b/docs-mdx/functions/getLoginUrl.md
new file mode 100644
index 0000000..ee03d8f
--- /dev/null
+++ b/docs-mdx/functions/getLoginUrl.md
@@ -0,0 +1,28 @@
+---
+title: "Function: getLoginUrl"
+description: "utils/auth-utils.ts:138"
+---
+
+▸ **getLoginUrl**(`nextUrl`, `options`): `string`
+
+Constructs the absolute URL for the login page
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `nextUrl` | `string` | URL to redirect back to after login |
+| `options` | `Object` | Configuration options |
+| `options.serverUrl` | `string` | Server URL (e.g., 'https://base44.app') |
+| `options.appId` | `string` | Application ID |
+| `options.loginPath?` | `string` | Path to the login endpoint |
+
+#### Returns
+
+`string`
+
+The complete login URL
+
+#### Defined in
+
+[utils/auth-utils.ts:138](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/auth-utils.ts#L138)
diff --git a/docs-mdx/functions/removeAccessToken.md b/docs-mdx/functions/removeAccessToken.md
new file mode 100644
index 0000000..3a0b05d
--- /dev/null
+++ b/docs-mdx/functions/removeAccessToken.md
@@ -0,0 +1,25 @@
+---
+title: "Function: removeAccessToken"
+description: "utils/auth-utils.ts:112"
+---
+
+▸ **removeAccessToken**(`options`): `boolean`
+
+Removes the access token from localStorage
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `options` | `Object` | Configuration options |
+| `options.storageKey?` | `string` | The key to use in localStorage |
+
+#### Returns
+
+`boolean`
+
+Success status
+
+#### Defined in
+
+[utils/auth-utils.ts:112](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/auth-utils.ts#L112)
diff --git a/docs-mdx/functions/saveAccessToken.md b/docs-mdx/functions/saveAccessToken.md
new file mode 100644
index 0000000..6103eed
--- /dev/null
+++ b/docs-mdx/functions/saveAccessToken.md
@@ -0,0 +1,26 @@
+---
+title: "Function: saveAccessToken"
+description: "utils/auth-utils.ts:82"
+---
+
+▸ **saveAccessToken**(`token`, `options`): `boolean`
+
+Saves an access token to localStorage
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `token` | `string` | The access token to save |
+| `options` | `Object` | Configuration options |
+| `options.storageKey?` | `string` | The key to use in localStorage |
+
+#### Returns
+
+`boolean`
+
+Success status
+
+#### Defined in
+
+[utils/auth-utils.ts:82](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/auth-utils.ts#L82)
diff --git a/docs-mdx/interfaces/AppConversationLike.md b/docs-mdx/interfaces/AppConversationLike.md
new file mode 100644
index 0000000..082b2c8
--- /dev/null
+++ b/docs-mdx/interfaces/AppConversationLike.md
@@ -0,0 +1,44 @@
+---
+title: "Interface: AppConversationLike"
+description: "modules/app.types.ts:20"
+---
+
+## Properties
+
+### id
+
+• `Optional` **id**: ``null`` \| `string`
+
+#### Defined in
+
+[modules/app.types.ts:17](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L17)
+
+___
+
+### messages
+
+• `Optional` **messages**: ``null`` \| [`AppMessageContent`](AppMessageContent.md)[]
+
+#### Defined in
+
+[modules/app.types.ts:18](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L18)
+
+___
+
+### model
+
+• `Optional` **model**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:19](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L19)
+
+___
+
+### functions\_fail\_silently
+
+• `Optional` **functions\_fail\_silently**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:20](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L20)
diff --git a/docs-mdx/interfaces/AppConversationMessage.md b/docs-mdx/interfaces/AppConversationMessage.md
new file mode 100644
index 0000000..bfafc36
--- /dev/null
+++ b/docs-mdx/interfaces/AppConversationMessage.md
@@ -0,0 +1,86 @@
+---
+title: "Interface: AppConversationMessage"
+description: "modules/app.types.ts:13"
+---
+
+## Hierarchy
+
+- [`AppMessageContent`](AppMessageContent.md)
+
+ ↳ **`AppConversationMessage`**
+
+## Properties
+
+### content
+
+• `Optional` **content**: `string`
+
+#### Inherited from
+
+[AppMessageContent](AppMessageContent.md).[content](AppMessageContent.md#content)
+
+#### Defined in
+
+[modules/app.types.ts:4](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L4)
+
+___
+
+### file\_urls
+
+• `Optional` **file\_urls**: `string`[]
+
+#### Inherited from
+
+[AppMessageContent](AppMessageContent.md).[file_urls](AppMessageContent.md#file_urls)
+
+#### Defined in
+
+[modules/app.types.ts:5](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L5)
+
+___
+
+### custom\_context
+
+• `Optional` **custom\_context**: `unknown`
+
+#### Inherited from
+
+[AppMessageContent](AppMessageContent.md).[custom_context](AppMessageContent.md#custom_context)
+
+#### Defined in
+
+[modules/app.types.ts:6](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L6)
+
+___
+
+### additional\_message\_params
+
+• `Optional` **additional\_message\_params**: `Record`\<`string`, `unknown`\>
+
+#### Inherited from
+
+[AppMessageContent](AppMessageContent.md).[additional_message_params](AppMessageContent.md#additional_message_params)
+
+#### Defined in
+
+[modules/app.types.ts:7](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L7)
+
+___
+
+### id
+
+• `Optional` **id**: ``null`` \| `string`
+
+#### Defined in
+
+[modules/app.types.ts:12](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L12)
+
+___
+
+### role
+
+• `Optional` **role**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:13](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L13)
diff --git a/docs-mdx/interfaces/AppLike.md b/docs-mdx/interfaces/AppLike.md
new file mode 100644
index 0000000..f03ad4d
--- /dev/null
+++ b/docs-mdx/interfaces/AppLike.md
@@ -0,0 +1,480 @@
+---
+title: "Interface: AppLike"
+description: "modules/app.types.ts:82"
+---
+
+## Properties
+
+### id
+
+• `Optional` **id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:33](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L33)
+
+___
+
+### conversation
+
+• `Optional` **conversation**: ``null`` \| [`AppConversationLike`](AppConversationLike.md)
+
+#### Defined in
+
+[modules/app.types.ts:34](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L34)
+
+___
+
+### app\_stage
+
+• `Optional` **app\_stage**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:35](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L35)
+
+___
+
+### created\_date
+
+• `Optional` **created\_date**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:36](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L36)
+
+___
+
+### updated\_date
+
+• `Optional` **updated\_date**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:37](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L37)
+
+___
+
+### created\_by
+
+• `Optional` **created\_by**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:38](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L38)
+
+___
+
+### organization\_id
+
+• `Optional` **organization\_id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:39](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L39)
+
+___
+
+### name
+
+• `Optional` **name**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:40](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L40)
+
+___
+
+### user\_description
+
+• `Optional` **user\_description**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:41](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L41)
+
+___
+
+### entities
+
+• `Optional` **entities**: `Record`\<`string`, `any`\>
+
+#### Defined in
+
+[modules/app.types.ts:42](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L42)
+
+___
+
+### additional\_user\_data\_schema
+
+• `Optional` **additional\_user\_data\_schema**: `any`
+
+#### Defined in
+
+[modules/app.types.ts:43](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L43)
+
+___
+
+### pages
+
+• `Optional` **pages**: `Object`
+
+#### Index signature
+
+▪ [key: `string`]: `string`
+
+#### Defined in
+
+[modules/app.types.ts:44](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L44)
+
+___
+
+### components
+
+• **components**: `Object`
+
+#### Index signature
+
+▪ [key: `string`]: `any`
+
+#### Defined in
+
+[modules/app.types.ts:45](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L45)
+
+___
+
+### layout
+
+• `Optional` **layout**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:46](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L46)
+
+___
+
+### globals\_css
+
+• `Optional` **globals\_css**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:47](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L47)
+
+___
+
+### agents
+
+• `Optional` **agents**: `Record`\<`string`, `any`\>
+
+#### Defined in
+
+[modules/app.types.ts:48](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L48)
+
+___
+
+### logo\_url
+
+• `Optional` **logo\_url**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:49](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L49)
+
+___
+
+### slug
+
+• `Optional` **slug**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:50](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L50)
+
+___
+
+### public\_settings
+
+• `Optional` **public\_settings**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:51](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L51)
+
+___
+
+### is\_blocked
+
+• `Optional` **is\_blocked**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:52](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L52)
+
+___
+
+### github\_repo\_url
+
+• `Optional` **github\_repo\_url**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:53](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L53)
+
+___
+
+### main\_page
+
+• `Optional` **main\_page**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:54](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L54)
+
+___
+
+### installable\_integrations
+
+• `Optional` **installable\_integrations**: `any`
+
+#### Defined in
+
+[modules/app.types.ts:55](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L55)
+
+___
+
+### backend\_project
+
+• `Optional` **backend\_project**: [`DenoProjectLike`](DenoProjectLike.md)
+
+#### Defined in
+
+[modules/app.types.ts:56](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L56)
+
+___
+
+### last\_deployed\_at
+
+• `Optional` **last\_deployed\_at**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:57](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L57)
+
+___
+
+### is\_remixable
+
+• `Optional` **is\_remixable**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:58](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L58)
+
+___
+
+### remixed\_from\_app\_id
+
+• `Optional` **remixed\_from\_app\_id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:59](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L59)
+
+___
+
+### hide\_entity\_created\_by
+
+• `Optional` **hide\_entity\_created\_by**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:60](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L60)
+
+___
+
+### platform\_version
+
+• `Optional` **platform\_version**: `number`
+
+#### Defined in
+
+[modules/app.types.ts:61](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L61)
+
+___
+
+### enable\_username\_password
+
+• `Optional` **enable\_username\_password**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:62](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L62)
+
+___
+
+### auth\_config
+
+• `Optional` **auth\_config**: [`AuthConfigLike`](AuthConfigLike.md)
+
+#### Defined in
+
+[modules/app.types.ts:63](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L63)
+
+___
+
+### status
+
+• `Optional` **status**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `state?` | ... \| ... |
+| `details?` | `any` |
+| `last_updated_date?` | ... \| ... |
+
+#### Defined in
+
+[modules/app.types.ts:64](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L64)
+
+___
+
+### custom\_instructions
+
+• `Optional` **custom\_instructions**: `any`
+
+#### Defined in
+
+[modules/app.types.ts:69](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L69)
+
+___
+
+### frozen\_files
+
+• `Optional` **frozen\_files**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:70](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L70)
+
+___
+
+### deep\_coding\_mode
+
+• `Optional` **deep\_coding\_mode**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:71](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L71)
+
+___
+
+### needs\_to\_add\_diff
+
+• `Optional` **needs\_to\_add\_diff**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:72](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L72)
+
+___
+
+### installed\_integration\_context\_items
+
+• `Optional` **installed\_integration\_context\_items**: `any`[]
+
+#### Defined in
+
+[modules/app.types.ts:73](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L73)
+
+___
+
+### model
+
+• `Optional` **model**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:74](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L74)
+
+___
+
+### is\_starred
+
+• `Optional` **is\_starred**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:75](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L75)
+
+___
+
+### agents\_enabled
+
+• `Optional` **agents\_enabled**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:76](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L76)
+
+___
+
+### categories
+
+• `Optional` **categories**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:77](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L77)
+
+___
+
+### functions
+
+• `Optional` **functions**: `any`
+
+#### Defined in
+
+[modules/app.types.ts:78](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L78)
+
+___
+
+### function\_names
+
+• `Optional` **function\_names**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:79](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L79)
+
+___
+
+### user\_entity
+
+• `Optional` **user\_entity**: [`UserEntityLike`](UserEntityLike.md)
+
+#### Defined in
+
+[modules/app.types.ts:80](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L80)
+
+___
+
+### app\_code\_hash
+
+• `Optional` **app\_code\_hash**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:81](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L81)
+
+___
+
+### has\_backend\_functions\_enabled
+
+• `Optional` **has\_backend\_functions\_enabled**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:82](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L82)
diff --git a/docs-mdx/interfaces/AppMessageContent.md b/docs-mdx/interfaces/AppMessageContent.md
new file mode 100644
index 0000000..e09a0c2
--- /dev/null
+++ b/docs-mdx/interfaces/AppMessageContent.md
@@ -0,0 +1,54 @@
+---
+title: "Interface: AppMessageContent"
+description: "modules/app.types.ts:7"
+---
+
+## Hierarchy
+
+- **`AppMessageContent`**
+
+ ↳ [`AppConversationMessage`](AppConversationMessage.md)
+
+## Indexable
+
+▪ [key: `string`]: `unknown`
+
+## Properties
+
+### content
+
+• `Optional` **content**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:4](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L4)
+
+___
+
+### file\_urls
+
+• `Optional` **file\_urls**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:5](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L5)
+
+___
+
+### custom\_context
+
+• `Optional` **custom\_context**: `unknown`
+
+#### Defined in
+
+[modules/app.types.ts:6](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L6)
+
+___
+
+### additional\_message\_params
+
+• `Optional` **additional\_message\_params**: `Record`\<`string`, `unknown`\>
+
+#### Defined in
+
+[modules/app.types.ts:7](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L7)
diff --git a/docs-mdx/interfaces/AuthConfigLike.md b/docs-mdx/interfaces/AuthConfigLike.md
new file mode 100644
index 0000000..941dae8
--- /dev/null
+++ b/docs-mdx/interfaces/AuthConfigLike.md
@@ -0,0 +1,64 @@
+---
+title: "Interface: AuthConfigLike"
+description: "modules/app.types.ts:118"
+---
+
+## Properties
+
+### enable\_username\_password
+
+• `Optional` **enable\_username\_password**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:113](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L113)
+
+___
+
+### enable\_google\_login
+
+• `Optional` **enable\_google\_login**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:114](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L114)
+
+___
+
+### enable\_microsoft\_login
+
+• `Optional` **enable\_microsoft\_login**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:115](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L115)
+
+___
+
+### enable\_facebook\_login
+
+• `Optional` **enable\_facebook\_login**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:116](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L116)
+
+___
+
+### sso\_provider\_name
+
+• `Optional` **sso\_provider\_name**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:117](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L117)
+
+___
+
+### enable\_sso\_login
+
+• `Optional` **enable\_sso\_login**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:118](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L118)
diff --git a/docs-mdx/interfaces/AuthMethods.md b/docs-mdx/interfaces/AuthMethods.md
new file mode 100644
index 0000000..31d3cdf
--- /dev/null
+++ b/docs-mdx/interfaces/AuthMethods.md
@@ -0,0 +1,384 @@
+---
+title: "Interface: AuthMethods"
+description: "modules/auth.ts:166"
+---
+
+Public auth methods available from the SDK.
+Document only the methods you want to expose and support.
+
+## Methods
+
+### me
+
+▸ **me**(): `Promise`\<`any`\>
+
+Get current user information
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+import { createClient, getAccessToken } from '@base44/sdk';
+
+const client = createClient({ appId: 'your-app-id', token: getAccessToken() });
+const user = await client.auth.me();
+console.log(user);
+```
+
+#### Defined in
+
+[modules/auth.ts:24](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L24)
+
+___
+
+### redirectToLogin
+
+▸ **redirectToLogin**(`nextUrl`): `void`
+
+Redirects the user to the app's login page
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `nextUrl` | `string` |
+
+#### Returns
+
+`void`
+
+**`Example`**
+
+```ts
+// Redirect and return to current route after login
+client.auth.redirectToLogin(window.location.pathname);
+```
+
+#### Defined in
+
+[modules/auth.ts:38](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L38)
+
+___
+
+### logout
+
+▸ **logout**(`redirectUrl?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `redirectUrl?` | `string` |
+
+#### Returns
+
+`void`
+
+**`Example`**
+
+```ts
+// Reload the page after logout
+client.auth.logout();
+
+// Or redirect to a login page
+client.auth.logout('/login');
+```
+
+#### Defined in
+
+[modules/auth.ts:54](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L54)
+
+___
+
+### setToken
+
+▸ **setToken**(`token`, `saveToStorage?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `token` | `string` |
+| `saveToStorage?` | `boolean` |
+
+#### Returns
+
+`void`
+
+**`Example`**
+
+```ts
+// After obtaining a token from your auth flow
+client.auth.setToken(accessToken);
+```
+
+#### Defined in
+
+[modules/auth.ts:68](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L68)
+
+___
+
+### loginViaEmailPassword
+
+▸ **loginViaEmailPassword**(`email`, `password`, `turnstileToken?`): `Promise`\<[`LoginViaEmailPasswordResponse`](LoginViaEmailPasswordResponse.md)\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `email` | `string` |
+| `password` | `string` |
+| `turnstileToken?` | `string` |
+
+#### Returns
+
+`Promise`\<`LoginViaEmailPasswordResponse`\>
+
+**Return Object Properties:**
+
+| Property | Type |
+| :------ | :------ |
+| `access_token` | `string` |
+| `user` | `any` |
+
+
+**`Example`**
+
+```ts
+const { access_token, user } = await client.auth.loginViaEmailPassword(
+ 'user@example.com',
+ 's3cret'
+);
+client.auth.setToken(access_token);
+```
+
+#### Defined in
+
+[modules/auth.ts:84](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L84)
+
+___
+
+### isAuthenticated
+
+▸ **isAuthenticated**(): `Promise`\<`boolean`\>
+
+Verify if the current token is valid
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+**`Example`**
+
+```ts
+const ok = await client.auth.isAuthenticated();
+if (!ok) client.auth.redirectToLogin('/dashboard');
+```
+
+#### Defined in
+
+[modules/auth.ts:98](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L98)
+
+___
+
+### inviteUser
+
+▸ **inviteUser**(`userEmail`, `role`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `userEmail` | `string` |
+| `role` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.inviteUser('new-user@example.com', 'member');
+```
+
+#### Defined in
+
+[modules/auth.ts:106](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L106)
+
+___
+
+### register
+
+▸ **register**(`payload`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `payload` | `Object` |
+| `payload.email` | `string` |
+| `payload.password` | `string` |
+| `payload.turnstile_token?` | ``null`` \| `string` |
+| `payload.referral_code?` | ``null`` \| `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.register({
+ email: 'user@example.com',
+ password: 's3cret',
+});
+```
+
+#### Defined in
+
+[modules/auth.ts:117](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L117)
+
+___
+
+### verifyOtp
+
+▸ **verifyOtp**(`args`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `args` | `Object` |
+| `args.email` | `string` |
+| `args.otpCode` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.verifyOtp({ email: 'user@example.com', otpCode: '123456' });
+```
+
+#### Defined in
+
+[modules/auth.ts:130](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L130)
+
+___
+
+### resendOtp
+
+▸ **resendOtp**(`email`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `email` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.resendOtp('user@example.com');
+```
+
+#### Defined in
+
+[modules/auth.ts:138](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L138)
+
+___
+
+### resetPasswordRequest
+
+▸ **resetPasswordRequest**(`email`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `email` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.resetPasswordRequest('user@example.com');
+```
+
+#### Defined in
+
+[modules/auth.ts:146](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L146)
+
+___
+
+### resetPassword
+
+▸ **resetPassword**(`args`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `args` | `Object` |
+| `args.resetToken` | `string` |
+| `args.newPassword` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.resetPassword({ resetToken: 'token', newPassword: 'newPass123' });
+```
+
+#### Defined in
+
+[modules/auth.ts:154](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L154)
+
+___
+
+### changePassword
+
+▸ **changePassword**(`args`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `args` | `Object` |
+| `args.userId` | `string` |
+| `args.currentPassword` | `string` |
+| `args.newPassword` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.changePassword({
+ userId: 'abc123',
+ currentPassword: 'oldPass',
+ newPassword: 'newPass123',
+});
+```
+
+#### Defined in
+
+[modules/auth.ts:166](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L166)
diff --git a/docs-mdx/interfaces/DenoProjectLike.md b/docs-mdx/interfaces/DenoProjectLike.md
new file mode 100644
index 0000000..8ba77ab
--- /dev/null
+++ b/docs-mdx/interfaces/DenoProjectLike.md
@@ -0,0 +1,44 @@
+---
+title: "Interface: DenoProjectLike"
+description: "modules/app.types.ts:28"
+---
+
+## Properties
+
+### project\_id
+
+• **project\_id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:25](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L25)
+
+___
+
+### project\_name
+
+• **project\_name**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:26](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L26)
+
+___
+
+### app\_id
+
+• **app\_id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:27](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L27)
+
+___
+
+### deployment\_name\_to\_info
+
+• **deployment\_name\_to\_info**: `Record`\<`string`, \{ `id`: `string` ; `code`: `string` }\>
+
+#### Defined in
+
+[modules/app.types.ts:28](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L28)
diff --git a/docs-mdx/interfaces/UserEntityLike.md b/docs-mdx/interfaces/UserEntityLike.md
new file mode 100644
index 0000000..14a9976
--- /dev/null
+++ b/docs-mdx/interfaces/UserEntityLike.md
@@ -0,0 +1,62 @@
+---
+title: "Interface: UserEntityLike"
+description: "modules/app.types.ts:108"
+---
+
+## Properties
+
+### type
+
+• **type**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:90](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L90)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:91](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L91)
+
+___
+
+### title
+
+• `Optional` **title**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:92](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L92)
+
+___
+
+### properties
+
+• `Optional` **properties**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `role?` | ... \| ... |
+| `email?` | ... \| ... |
+| `full_name?` | ... \| ... |
+
+#### Defined in
+
+[modules/app.types.ts:93](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L93)
+
+___
+
+### required
+
+• **required**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:108](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L108)
diff --git a/docs-mdx/interfaces/UserLike.md b/docs-mdx/interfaces/UserLike.md
new file mode 100644
index 0000000..80bf64a
--- /dev/null
+++ b/docs-mdx/interfaces/UserLike.md
@@ -0,0 +1,14 @@
+---
+title: "Interface: UserLike"
+description: "modules/app.types.ts:86"
+---
+
+## Properties
+
+### id
+
+• `Optional` **id**: ``null`` \| `string`
+
+#### Defined in
+
+[modules/app.types.ts:86](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L86)
diff --git a/docs-mdx/types/AgentConversation.md b/docs-mdx/types/AgentConversation.md
new file mode 100644
index 0000000..f68d9ce
--- /dev/null
+++ b/docs-mdx/types/AgentConversation.md
@@ -0,0 +1,21 @@
+---
+title: "Type alias: AgentConversation"
+description: "modules/agents.types.ts:1"
+---
+
+Ƭ **AgentConversation**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+| `app_id` | `string` |
+| `agent_name` | `string` |
+| `created_by_id` | `string` |
+| `messages` | [`AgentMessage`](AgentMessage.md)[] |
+| `metadata?` | `Record`\<`string`, `any`\> |
+
+#### Defined in
+
+[modules/agents.types.ts:1](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/agents.types.ts#L1)
diff --git a/docs-mdx/types/AgentMessage.md b/docs-mdx/types/AgentMessage.md
new file mode 100644
index 0000000..350e32a
--- /dev/null
+++ b/docs-mdx/types/AgentMessage.md
@@ -0,0 +1,34 @@
+---
+title: "Type alias: AgentMessage"
+description: "modules/agents.types.ts:10"
+---
+
+Ƭ **AgentMessage**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+| `role` | ``"user"`` \| ``"assistant"`` \| ``"system"`` |
+| `reasoning?` | \{ `start_date`: `string` ; `end_date?`: `string` ; `content`: `string` } |
+| `reasoning.start_date` | `string` |
+| `reasoning.end_date?` | `string` |
+| `reasoning.content` | `string` |
+| `content?` | `string` \| `Record`\<..., ...\> \| ``null`` |
+| `file_urls?` | ...[] \| ``null`` |
+| `tool_calls?` | ...[] \| ``null`` |
+| `usage?` | \{ `prompt_tokens?`: ... ; `completion_tokens?`: ... } \| ``null`` |
+| `hidden?` | `boolean` |
+| `custom_context?` | ...[] \| ``null`` |
+| `model?` | `string` \| ``null`` |
+| `checkpoint_id?` | `string` \| ``null`` |
+| `metadata?` | \{ `created_date`: `string` ; `created_by_email`: `string` ; `created_by_full_name`: ... \| ... } |
+| `metadata.created_date` | `string` |
+| `metadata.created_by_email` | `string` |
+| `metadata.created_by_full_name` | ... \| ... |
+| `additional_message_params?` | `Record`\<`string`, `any`\> |
+
+#### Defined in
+
+[modules/agents.types.ts:10](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/agents.types.ts#L10)
diff --git a/docs-mdx/types/Base44Client.md b/docs-mdx/types/Base44Client.md
new file mode 100644
index 0000000..7ef98f2
--- /dev/null
+++ b/docs-mdx/types/Base44Client.md
@@ -0,0 +1,10 @@
+---
+title: "Type alias: Base44Client"
+description: "client.ts:17"
+---
+
+Ƭ **Base44Client**: `ReturnType`\
+
+#### Defined in
+
+[client.ts:17](https://github.com/base44-dev/javascript-sdk/blob/main/src/client.ts#L17)
diff --git a/docs-mdx/types/ConnectorAccessTokenResponse.md b/docs-mdx/types/ConnectorAccessTokenResponse.md
new file mode 100644
index 0000000..a90ef36
--- /dev/null
+++ b/docs-mdx/types/ConnectorAccessTokenResponse.md
@@ -0,0 +1,16 @@
+---
+title: "Type alias: ConnectorAccessTokenResponse"
+description: "modules/connectors.types.ts:3"
+---
+
+Ƭ **ConnectorAccessTokenResponse**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `access_token` | `string` |
+
+#### Defined in
+
+[modules/connectors.types.ts:3](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/connectors.types.ts#L3)
diff --git a/docs-mdx/types/ConnectorIntegrationType.md b/docs-mdx/types/ConnectorIntegrationType.md
new file mode 100644
index 0000000..42c2143
--- /dev/null
+++ b/docs-mdx/types/ConnectorIntegrationType.md
@@ -0,0 +1,10 @@
+---
+title: "Type alias: ConnectorIntegrationType"
+description: "modules/connectors.types.ts:1"
+---
+
+Ƭ **ConnectorIntegrationType**: `string`
+
+#### Defined in
+
+[modules/connectors.types.ts:1](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/connectors.types.ts#L1)
diff --git a/docs-mdx/types/LoginInfoResponse.md b/docs-mdx/types/LoginInfoResponse.md
new file mode 100644
index 0000000..6b1a8d3
--- /dev/null
+++ b/docs-mdx/types/LoginInfoResponse.md
@@ -0,0 +1,10 @@
+---
+title: "Type alias: LoginInfoResponse"
+description: "modules/app.types.ts:124"
+---
+
+Ƭ **LoginInfoResponse**: `Pick`\<[`AppLike`](../interfaces/AppLike.md), ``"id"`` \| ``"name"`` \| ``"slug"`` \| ``"logo_url"`` \| ``"user_description"`` \| ``"updated_date"`` \| ``"created_date"`` \| ``"auth_config"`` \| ``"platform_version"``\>
+
+#### Defined in
+
+[modules/app.types.ts:124](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L124)
diff --git a/docs-mdx/types/ModelFilterParams.md b/docs-mdx/types/ModelFilterParams.md
new file mode 100644
index 0000000..cfecd8c
--- /dev/null
+++ b/docs-mdx/types/ModelFilterParams.md
@@ -0,0 +1,21 @@
+---
+title: "Type alias: ModelFilterParams"
+description: "types.ts:3"
+---
+
+Ƭ **ModelFilterParams**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `q?` | `Record`\<`string`, `any`\> |
+| `sort?` | `string` \| ``null`` |
+| `sort_by?` | `string` \| ``null`` |
+| `limit?` | `number` \| ``null`` |
+| `skip?` | `number` \| ``null`` |
+| `fields?` | ...[] \| ``null`` |
+
+#### Defined in
+
+[types.ts:3](https://github.com/base44-dev/javascript-sdk/blob/main/src/types.ts#L3)
diff --git a/docs/.nojekyll b/docs/.nojekyll
new file mode 100644
index 0000000..e2ac661
--- /dev/null
+++ b/docs/.nojekyll
@@ -0,0 +1 @@
+TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..3485ab4
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,37 @@
+# @base44/sdk
+
+## Classes
+
+- [Base44Error](classes/Base44Error.md)
+
+## Interfaces
+
+- [AppMessageContent](interfaces/AppMessageContent.md)
+- [AppConversationMessage](interfaces/AppConversationMessage.md)
+- [AppConversationLike](interfaces/AppConversationLike.md)
+- [DenoProjectLike](interfaces/DenoProjectLike.md)
+- [AppLike](interfaces/AppLike.md)
+- [UserLike](interfaces/UserLike.md)
+- [UserEntityLike](interfaces/UserEntityLike.md)
+- [AuthConfigLike](interfaces/AuthConfigLike.md)
+- [LoginViaEmailPasswordResponse](interfaces/LoginViaEmailPasswordResponse.md)
+- [AuthMethods](interfaces/AuthMethods.md)
+
+## Type Aliases
+
+- [Base44Client](types/Base44Client.md)
+- [AgentConversation](types/AgentConversation.md)
+- [AgentMessage](types/AgentMessage.md)
+- [LoginInfoResponse](types/LoginInfoResponse.md)
+- [ConnectorIntegrationType](types/ConnectorIntegrationType.md)
+- [ConnectorAccessTokenResponse](types/ConnectorAccessTokenResponse.md)
+- [ModelFilterParams](types/ModelFilterParams.md)
+
+## Functions
+
+- [createClient](functions/createClient.md)
+- [createClientFromRequest](functions/createClientFromRequest.md)
+- [getAccessToken](functions/getAccessToken.md)
+- [saveAccessToken](functions/saveAccessToken.md)
+- [removeAccessToken](functions/removeAccessToken.md)
+- [getLoginUrl](functions/getLoginUrl.md)
diff --git a/docs/classes/Base44Error.md b/docs/classes/Base44Error.md
new file mode 100644
index 0000000..6d80606
--- /dev/null
+++ b/docs/classes/Base44Error.md
@@ -0,0 +1,97 @@
+# Class: Base44Error
+
+## Hierarchy
+
+- `Error`
+
+ ↳ **`Base44Error`**
+
+## Constructors
+
+### constructor
+
+• **new Base44Error**(`message`, `status`, `code`, `data`, `originalError`): [`Base44Error`](Base44Error.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `message` | `string` |
+| `status` | `number` |
+| `code` | `string` |
+| `data` | `any` |
+| `originalError` | `unknown` |
+
+#### Returns
+
+[`Base44Error`](Base44Error.md)
+
+#### Overrides
+
+Error.constructor
+
+#### Defined in
+
+[utils/axios-client.ts:11](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L11)
+
+## Properties
+
+### status
+
+• **status**: `number`
+
+#### Defined in
+
+[utils/axios-client.ts:6](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L6)
+
+___
+
+### code
+
+• **code**: `string`
+
+#### Defined in
+
+[utils/axios-client.ts:7](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L7)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Defined in
+
+[utils/axios-client.ts:8](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L8)
+
+___
+
+### originalError
+
+• **originalError**: `unknown`
+
+#### Defined in
+
+[utils/axios-client.ts:9](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L9)
+
+## Methods
+
+### toJSON
+
+▸ **toJSON**(): `Object`
+
+#### Returns
+
+`Object`
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `message` | `string` |
+| `status` | `number` |
+| `code` | `string` |
+| `data` | `any` |
+
+#### Defined in
+
+[utils/axios-client.ts:27](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/axios-client.ts#L27)
diff --git a/docs/functions/createClient.md b/docs/functions/createClient.md
new file mode 100644
index 0000000..8784ec9
--- /dev/null
+++ b/docs/functions/createClient.md
@@ -0,0 +1,75 @@
+# Function: createClient
+
+▸ **createClient**(`config`): `Object`
+
+Create a Base44 client instance
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `config` | `Object` | Client configuration |
+| `config.serverUrl?` | `string` | API server URL |
+| `config.appBaseUrl?` | `string` | Application base URL |
+| `config.appId` | `string` | Application ID |
+| `config.token?` | `string` | Authentication token |
+| `config.serviceToken?` | `string` | Service role authentication token |
+| `config.requiresAuth?` | `boolean` | Whether the app requires authentication |
+| `config.functionsVersion?` | `string` | - |
+| `config.headers?` | `Record`\<..., ...\> | - |
+| `config.options?` | `CreateClientOptions` | - |
+
+#### Returns
+
+`Object`
+
+Base44 client instance
+
+| Name | Type |
+| :------ | :------ |
+| `entities` | {} |
+| `integrations` | {} |
+| `auth` | [`AuthMethods`](../interfaces/AuthMethods.md) |
+| `functions` | \{ `invoke`: (`functionName`: `string`, `data`: `Record`\<..., ...\>) => `Promise`\<...\> } |
+| `functions.invoke` | [object Object] |
+| `agents` | \{ `getConversations`: () => ... ; `getConversation`: (`conversationId`: ...) => ... ; `listConversations`: (`filterParams`: ...) => ... ; `createConversation`: (`conversation`: ...) => ... ; `addMessage`: (`conversation`: ..., `message`: ...) => ... ; `subscribeToConversation`: (`conversationId`: ..., `onUpdate?`: ...) => ... ; `getWhatsAppConnectURL`: (`agentName`: ...) => ... } |
+| `agents.getConversations` | () => ... |
+| `agents.getConversation` | (`conversationId`: ...) => ... |
+| `agents.listConversations` | (`filterParams`: ...) => ... |
+| `agents.createConversation` | (`conversation`: ...) => ... |
+| `agents.addMessage` | (`conversation`: ..., `message`: ...) => ... |
+| `agents.subscribeToConversation` | (`conversationId`: ..., `onUpdate?`: ...) => ... |
+| `agents.getWhatsAppConnectURL` | (`agentName`: ...) => ... |
+| `appLogs` | \{ `logUserInApp`: (`pageName`: `string`) => `Promise`\<...\> ; `fetchLogs`: (`params`: `Record`\<..., ...\>) => `Promise`\<...\> ; `getStats`: (`params`: `Record`\<..., ...\>) => `Promise`\<...\> } |
+| `appLogs.logUserInApp` | [object Object] |
+| `appLogs.fetchLogs` | [object Object] |
+| `appLogs.getStats` | [object Object] |
+| `cleanup` | () => `void` |
+| `setToken` | (`newToken`: `string`) => `void` |
+| `getConfig` | () => \{ `serverUrl`: `string` ; `appId`: `string` ; `requiresAuth`: `boolean` } |
+| `asServiceRole` | \{ `entities`: {} ; `integrations`: {} ; `sso`: \{ `getAccessToken`: (`userid`: ...) => ... } ; `connectors`: \{ `getAccessToken`: (`integrationType`: ...) => ... } ; `functions`: \{ `invoke`: (`functionName`: ..., `data`: ...) => ... } ; `agents`: \{ `getConversations`: ... ; `getConversation`: ... ; `listConversations`: ... ; `createConversation`: ... ; `addMessage`: ... ; `subscribeToConversation`: ... ; `getWhatsAppConnectURL`: ... } ; `appLogs`: \{ `logUserInApp`: (`pageName`: ...) => ... ; `fetchLogs`: (`params`: ...) => ... ; `getStats`: (`params`: ...) => ... } ; `cleanup`: () => ... } |
+| `asServiceRole.entities` | {} |
+| `asServiceRole.integrations` | {} |
+| `asServiceRole.sso` | \{ `getAccessToken`: (`userid`: ...) => ... } |
+| `asServiceRole.sso.getAccessToken` | [object Object] |
+| `asServiceRole.connectors` | \{ `getAccessToken`: (`integrationType`: ...) => ... } |
+| `asServiceRole.connectors.getAccessToken` | [object Object] |
+| `asServiceRole.functions` | \{ `invoke`: (`functionName`: ..., `data`: ...) => ... } |
+| `asServiceRole.functions.invoke` | [object Object] |
+| `asServiceRole.agents` | \{ `getConversations`: ... ; `getConversation`: ... ; `listConversations`: ... ; `createConversation`: ... ; `addMessage`: ... ; `subscribeToConversation`: ... ; `getWhatsAppConnectURL`: ... } |
+| `asServiceRole.agents.getConversations` | ... |
+| `asServiceRole.agents.getConversation` | ... |
+| `asServiceRole.agents.listConversations` | ... |
+| `asServiceRole.agents.createConversation` | ... |
+| `asServiceRole.agents.addMessage` | ... |
+| `asServiceRole.agents.subscribeToConversation` | ... |
+| `asServiceRole.agents.getWhatsAppConnectURL` | ... |
+| `asServiceRole.appLogs` | \{ `logUserInApp`: (`pageName`: ...) => ... ; `fetchLogs`: (`params`: ...) => ... ; `getStats`: (`params`: ...) => ... } |
+| `asServiceRole.appLogs.logUserInApp` | [object Object] |
+| `asServiceRole.appLogs.fetchLogs` | [object Object] |
+| `asServiceRole.appLogs.getStats` | [object Object] |
+| `asServiceRole.cleanup` | () => ... |
+
+#### Defined in
+
+[client.ts:30](https://github.com/base44-dev/javascript-sdk/blob/main/src/client.ts#L30)
diff --git a/docs/functions/createClientFromRequest.md b/docs/functions/createClientFromRequest.md
new file mode 100644
index 0000000..13e005f
--- /dev/null
+++ b/docs/functions/createClientFromRequest.md
@@ -0,0 +1,62 @@
+# Function: createClientFromRequest
+
+▸ **createClientFromRequest**(`request`): `Object`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `request` | `Request` |
+
+#### Returns
+
+`Object`
+
+| Name | Type |
+| :------ | :------ |
+| `entities` | {} |
+| `integrations` | {} |
+| `auth` | [`AuthMethods`](../interfaces/AuthMethods.md) |
+| `functions` | \{ `invoke`: (`functionName`: `string`, `data`: `Record`\<..., ...\>) => `Promise`\<...\> } |
+| `functions.invoke` | [object Object] |
+| `agents` | \{ `getConversations`: () => ... ; `getConversation`: (`conversationId`: ...) => ... ; `listConversations`: (`filterParams`: ...) => ... ; `createConversation`: (`conversation`: ...) => ... ; `addMessage`: (`conversation`: ..., `message`: ...) => ... ; `subscribeToConversation`: (`conversationId`: ..., `onUpdate?`: ...) => ... ; `getWhatsAppConnectURL`: (`agentName`: ...) => ... } |
+| `agents.getConversations` | () => ... |
+| `agents.getConversation` | (`conversationId`: ...) => ... |
+| `agents.listConversations` | (`filterParams`: ...) => ... |
+| `agents.createConversation` | (`conversation`: ...) => ... |
+| `agents.addMessage` | (`conversation`: ..., `message`: ...) => ... |
+| `agents.subscribeToConversation` | (`conversationId`: ..., `onUpdate?`: ...) => ... |
+| `agents.getWhatsAppConnectURL` | (`agentName`: ...) => ... |
+| `appLogs` | \{ `logUserInApp`: (`pageName`: `string`) => `Promise`\<...\> ; `fetchLogs`: (`params`: `Record`\<..., ...\>) => `Promise`\<...\> ; `getStats`: (`params`: `Record`\<..., ...\>) => `Promise`\<...\> } |
+| `appLogs.logUserInApp` | [object Object] |
+| `appLogs.fetchLogs` | [object Object] |
+| `appLogs.getStats` | [object Object] |
+| `cleanup` | () => `void` |
+| `setToken` | (`newToken`: `string`) => `void` |
+| `getConfig` | () => \{ `serverUrl`: `string` ; `appId`: `string` ; `requiresAuth`: `boolean` } |
+| `asServiceRole` | \{ `entities`: {} ; `integrations`: {} ; `sso`: \{ `getAccessToken`: (`userid`: ...) => ... } ; `connectors`: \{ `getAccessToken`: (`integrationType`: ...) => ... } ; `functions`: \{ `invoke`: (`functionName`: ..., `data`: ...) => ... } ; `agents`: \{ `getConversations`: ... ; `getConversation`: ... ; `listConversations`: ... ; `createConversation`: ... ; `addMessage`: ... ; `subscribeToConversation`: ... ; `getWhatsAppConnectURL`: ... } ; `appLogs`: \{ `logUserInApp`: (`pageName`: ...) => ... ; `fetchLogs`: (`params`: ...) => ... ; `getStats`: (`params`: ...) => ... } ; `cleanup`: () => ... } |
+| `asServiceRole.entities` | {} |
+| `asServiceRole.integrations` | {} |
+| `asServiceRole.sso` | \{ `getAccessToken`: (`userid`: ...) => ... } |
+| `asServiceRole.sso.getAccessToken` | [object Object] |
+| `asServiceRole.connectors` | \{ `getAccessToken`: (`integrationType`: ...) => ... } |
+| `asServiceRole.connectors.getAccessToken` | [object Object] |
+| `asServiceRole.functions` | \{ `invoke`: (`functionName`: ..., `data`: ...) => ... } |
+| `asServiceRole.functions.invoke` | [object Object] |
+| `asServiceRole.agents` | \{ `getConversations`: ... ; `getConversation`: ... ; `listConversations`: ... ; `createConversation`: ... ; `addMessage`: ... ; `subscribeToConversation`: ... ; `getWhatsAppConnectURL`: ... } |
+| `asServiceRole.agents.getConversations` | ... |
+| `asServiceRole.agents.getConversation` | ... |
+| `asServiceRole.agents.listConversations` | ... |
+| `asServiceRole.agents.createConversation` | ... |
+| `asServiceRole.agents.addMessage` | ... |
+| `asServiceRole.agents.subscribeToConversation` | ... |
+| `asServiceRole.agents.getWhatsAppConnectURL` | ... |
+| `asServiceRole.appLogs` | \{ `logUserInApp`: (`pageName`: ...) => ... ; `fetchLogs`: (`params`: ...) => ... ; `getStats`: (`params`: ...) => ... } |
+| `asServiceRole.appLogs.logUserInApp` | [object Object] |
+| `asServiceRole.appLogs.fetchLogs` | [object Object] |
+| `asServiceRole.appLogs.getStats` | [object Object] |
+| `asServiceRole.cleanup` | () => ... |
+
+#### Defined in
+
+[client.ts:215](https://github.com/base44-dev/javascript-sdk/blob/main/src/client.ts#L215)
diff --git a/docs/functions/getAccessToken.md b/docs/functions/getAccessToken.md
new file mode 100644
index 0000000..b95f7a1
--- /dev/null
+++ b/docs/functions/getAccessToken.md
@@ -0,0 +1,25 @@
+# Function: getAccessToken
+
+▸ **getAccessToken**(`options?`): ``null`` \| `string`
+
+Retrieves an access token from either localStorage or URL parameters
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `options` | `Object` | Configuration options |
+| `options.storageKey?` | `string` | The key to use in localStorage |
+| `options.paramName?` | `string` | The URL parameter name |
+| `options.saveToStorage?` | `boolean` | Whether to save the token to localStorage if found in URL |
+| `options.removeFromUrl?` | `boolean` | Whether to remove the token from URL after retrieval |
+
+#### Returns
+
+``null`` \| `string`
+
+The access token or null if not found
+
+#### Defined in
+
+[utils/auth-utils.ts:15](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/auth-utils.ts#L15)
diff --git a/docs/functions/getLoginUrl.md b/docs/functions/getLoginUrl.md
new file mode 100644
index 0000000..3ac3879
--- /dev/null
+++ b/docs/functions/getLoginUrl.md
@@ -0,0 +1,25 @@
+# Function: getLoginUrl
+
+▸ **getLoginUrl**(`nextUrl`, `options`): `string`
+
+Constructs the absolute URL for the login page
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `nextUrl` | `string` | URL to redirect back to after login |
+| `options` | `Object` | Configuration options |
+| `options.serverUrl` | `string` | Server URL (e.g., 'https://base44.app') |
+| `options.appId` | `string` | Application ID |
+| `options.loginPath?` | `string` | Path to the login endpoint |
+
+#### Returns
+
+`string`
+
+The complete login URL
+
+#### Defined in
+
+[utils/auth-utils.ts:138](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/auth-utils.ts#L138)
diff --git a/docs/functions/removeAccessToken.md b/docs/functions/removeAccessToken.md
new file mode 100644
index 0000000..a6c7b23
--- /dev/null
+++ b/docs/functions/removeAccessToken.md
@@ -0,0 +1,22 @@
+# Function: removeAccessToken
+
+▸ **removeAccessToken**(`options`): `boolean`
+
+Removes the access token from localStorage
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `options` | `Object` | Configuration options |
+| `options.storageKey?` | `string` | The key to use in localStorage |
+
+#### Returns
+
+`boolean`
+
+Success status
+
+#### Defined in
+
+[utils/auth-utils.ts:112](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/auth-utils.ts#L112)
diff --git a/docs/functions/saveAccessToken.md b/docs/functions/saveAccessToken.md
new file mode 100644
index 0000000..89ddd39
--- /dev/null
+++ b/docs/functions/saveAccessToken.md
@@ -0,0 +1,23 @@
+# Function: saveAccessToken
+
+▸ **saveAccessToken**(`token`, `options`): `boolean`
+
+Saves an access token to localStorage
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `token` | `string` | The access token to save |
+| `options` | `Object` | Configuration options |
+| `options.storageKey?` | `string` | The key to use in localStorage |
+
+#### Returns
+
+`boolean`
+
+Success status
+
+#### Defined in
+
+[utils/auth-utils.ts:82](https://github.com/base44-dev/javascript-sdk/blob/main/src/utils/auth-utils.ts#L82)
diff --git a/docs/interfaces/AppConversationLike.md b/docs/interfaces/AppConversationLike.md
new file mode 100644
index 0000000..dbda4e0
--- /dev/null
+++ b/docs/interfaces/AppConversationLike.md
@@ -0,0 +1,41 @@
+# Interface: AppConversationLike
+
+## Properties
+
+### id
+
+• `Optional` **id**: ``null`` \| `string`
+
+#### Defined in
+
+[modules/app.types.ts:17](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L17)
+
+___
+
+### messages
+
+• `Optional` **messages**: ``null`` \| [`AppMessageContent`](AppMessageContent.md)[]
+
+#### Defined in
+
+[modules/app.types.ts:18](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L18)
+
+___
+
+### model
+
+• `Optional` **model**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:19](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L19)
+
+___
+
+### functions\_fail\_silently
+
+• `Optional` **functions\_fail\_silently**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:20](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L20)
diff --git a/docs/interfaces/AppConversationMessage.md b/docs/interfaces/AppConversationMessage.md
new file mode 100644
index 0000000..7af6be3
--- /dev/null
+++ b/docs/interfaces/AppConversationMessage.md
@@ -0,0 +1,83 @@
+# Interface: AppConversationMessage
+
+## Hierarchy
+
+- [`AppMessageContent`](AppMessageContent.md)
+
+ ↳ **`AppConversationMessage`**
+
+## Properties
+
+### content
+
+• `Optional` **content**: `string`
+
+#### Inherited from
+
+[AppMessageContent](AppMessageContent.md).[content](AppMessageContent.md#content)
+
+#### Defined in
+
+[modules/app.types.ts:4](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L4)
+
+___
+
+### file\_urls
+
+• `Optional` **file\_urls**: `string`[]
+
+#### Inherited from
+
+[AppMessageContent](AppMessageContent.md).[file_urls](AppMessageContent.md#file_urls)
+
+#### Defined in
+
+[modules/app.types.ts:5](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L5)
+
+___
+
+### custom\_context
+
+• `Optional` **custom\_context**: `unknown`
+
+#### Inherited from
+
+[AppMessageContent](AppMessageContent.md).[custom_context](AppMessageContent.md#custom_context)
+
+#### Defined in
+
+[modules/app.types.ts:6](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L6)
+
+___
+
+### additional\_message\_params
+
+• `Optional` **additional\_message\_params**: `Record`\<`string`, `unknown`\>
+
+#### Inherited from
+
+[AppMessageContent](AppMessageContent.md).[additional_message_params](AppMessageContent.md#additional_message_params)
+
+#### Defined in
+
+[modules/app.types.ts:7](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L7)
+
+___
+
+### id
+
+• `Optional` **id**: ``null`` \| `string`
+
+#### Defined in
+
+[modules/app.types.ts:12](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L12)
+
+___
+
+### role
+
+• `Optional` **role**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:13](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L13)
diff --git a/docs/interfaces/AppLike.md b/docs/interfaces/AppLike.md
new file mode 100644
index 0000000..018635e
--- /dev/null
+++ b/docs/interfaces/AppLike.md
@@ -0,0 +1,477 @@
+# Interface: AppLike
+
+## Properties
+
+### id
+
+• `Optional` **id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:33](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L33)
+
+___
+
+### conversation
+
+• `Optional` **conversation**: ``null`` \| [`AppConversationLike`](AppConversationLike.md)
+
+#### Defined in
+
+[modules/app.types.ts:34](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L34)
+
+___
+
+### app\_stage
+
+• `Optional` **app\_stage**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:35](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L35)
+
+___
+
+### created\_date
+
+• `Optional` **created\_date**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:36](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L36)
+
+___
+
+### updated\_date
+
+• `Optional` **updated\_date**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:37](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L37)
+
+___
+
+### created\_by
+
+• `Optional` **created\_by**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:38](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L38)
+
+___
+
+### organization\_id
+
+• `Optional` **organization\_id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:39](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L39)
+
+___
+
+### name
+
+• `Optional` **name**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:40](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L40)
+
+___
+
+### user\_description
+
+• `Optional` **user\_description**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:41](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L41)
+
+___
+
+### entities
+
+• `Optional` **entities**: `Record`\<`string`, `any`\>
+
+#### Defined in
+
+[modules/app.types.ts:42](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L42)
+
+___
+
+### additional\_user\_data\_schema
+
+• `Optional` **additional\_user\_data\_schema**: `any`
+
+#### Defined in
+
+[modules/app.types.ts:43](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L43)
+
+___
+
+### pages
+
+• `Optional` **pages**: `Object`
+
+#### Index signature
+
+▪ [key: `string`]: `string`
+
+#### Defined in
+
+[modules/app.types.ts:44](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L44)
+
+___
+
+### components
+
+• **components**: `Object`
+
+#### Index signature
+
+▪ [key: `string`]: `any`
+
+#### Defined in
+
+[modules/app.types.ts:45](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L45)
+
+___
+
+### layout
+
+• `Optional` **layout**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:46](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L46)
+
+___
+
+### globals\_css
+
+• `Optional` **globals\_css**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:47](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L47)
+
+___
+
+### agents
+
+• `Optional` **agents**: `Record`\<`string`, `any`\>
+
+#### Defined in
+
+[modules/app.types.ts:48](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L48)
+
+___
+
+### logo\_url
+
+• `Optional` **logo\_url**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:49](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L49)
+
+___
+
+### slug
+
+• `Optional` **slug**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:50](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L50)
+
+___
+
+### public\_settings
+
+• `Optional` **public\_settings**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:51](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L51)
+
+___
+
+### is\_blocked
+
+• `Optional` **is\_blocked**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:52](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L52)
+
+___
+
+### github\_repo\_url
+
+• `Optional` **github\_repo\_url**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:53](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L53)
+
+___
+
+### main\_page
+
+• `Optional` **main\_page**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:54](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L54)
+
+___
+
+### installable\_integrations
+
+• `Optional` **installable\_integrations**: `any`
+
+#### Defined in
+
+[modules/app.types.ts:55](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L55)
+
+___
+
+### backend\_project
+
+• `Optional` **backend\_project**: [`DenoProjectLike`](DenoProjectLike.md)
+
+#### Defined in
+
+[modules/app.types.ts:56](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L56)
+
+___
+
+### last\_deployed\_at
+
+• `Optional` **last\_deployed\_at**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:57](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L57)
+
+___
+
+### is\_remixable
+
+• `Optional` **is\_remixable**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:58](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L58)
+
+___
+
+### remixed\_from\_app\_id
+
+• `Optional` **remixed\_from\_app\_id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:59](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L59)
+
+___
+
+### hide\_entity\_created\_by
+
+• `Optional` **hide\_entity\_created\_by**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:60](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L60)
+
+___
+
+### platform\_version
+
+• `Optional` **platform\_version**: `number`
+
+#### Defined in
+
+[modules/app.types.ts:61](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L61)
+
+___
+
+### enable\_username\_password
+
+• `Optional` **enable\_username\_password**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:62](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L62)
+
+___
+
+### auth\_config
+
+• `Optional` **auth\_config**: [`AuthConfigLike`](AuthConfigLike.md)
+
+#### Defined in
+
+[modules/app.types.ts:63](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L63)
+
+___
+
+### status
+
+• `Optional` **status**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `state?` | ... \| ... |
+| `details?` | `any` |
+| `last_updated_date?` | ... \| ... |
+
+#### Defined in
+
+[modules/app.types.ts:64](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L64)
+
+___
+
+### custom\_instructions
+
+• `Optional` **custom\_instructions**: `any`
+
+#### Defined in
+
+[modules/app.types.ts:69](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L69)
+
+___
+
+### frozen\_files
+
+• `Optional` **frozen\_files**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:70](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L70)
+
+___
+
+### deep\_coding\_mode
+
+• `Optional` **deep\_coding\_mode**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:71](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L71)
+
+___
+
+### needs\_to\_add\_diff
+
+• `Optional` **needs\_to\_add\_diff**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:72](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L72)
+
+___
+
+### installed\_integration\_context\_items
+
+• `Optional` **installed\_integration\_context\_items**: `any`[]
+
+#### Defined in
+
+[modules/app.types.ts:73](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L73)
+
+___
+
+### model
+
+• `Optional` **model**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:74](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L74)
+
+___
+
+### is\_starred
+
+• `Optional` **is\_starred**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:75](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L75)
+
+___
+
+### agents\_enabled
+
+• `Optional` **agents\_enabled**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:76](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L76)
+
+___
+
+### categories
+
+• `Optional` **categories**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:77](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L77)
+
+___
+
+### functions
+
+• `Optional` **functions**: `any`
+
+#### Defined in
+
+[modules/app.types.ts:78](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L78)
+
+___
+
+### function\_names
+
+• `Optional` **function\_names**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:79](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L79)
+
+___
+
+### user\_entity
+
+• `Optional` **user\_entity**: [`UserEntityLike`](UserEntityLike.md)
+
+#### Defined in
+
+[modules/app.types.ts:80](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L80)
+
+___
+
+### app\_code\_hash
+
+• `Optional` **app\_code\_hash**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:81](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L81)
+
+___
+
+### has\_backend\_functions\_enabled
+
+• `Optional` **has\_backend\_functions\_enabled**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:82](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L82)
diff --git a/docs/interfaces/AppMessageContent.md b/docs/interfaces/AppMessageContent.md
new file mode 100644
index 0000000..7796543
--- /dev/null
+++ b/docs/interfaces/AppMessageContent.md
@@ -0,0 +1,51 @@
+# Interface: AppMessageContent
+
+## Hierarchy
+
+- **`AppMessageContent`**
+
+ ↳ [`AppConversationMessage`](AppConversationMessage.md)
+
+## Indexable
+
+▪ [key: `string`]: `unknown`
+
+## Properties
+
+### content
+
+• `Optional` **content**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:4](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L4)
+
+___
+
+### file\_urls
+
+• `Optional` **file\_urls**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:5](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L5)
+
+___
+
+### custom\_context
+
+• `Optional` **custom\_context**: `unknown`
+
+#### Defined in
+
+[modules/app.types.ts:6](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L6)
+
+___
+
+### additional\_message\_params
+
+• `Optional` **additional\_message\_params**: `Record`\<`string`, `unknown`\>
+
+#### Defined in
+
+[modules/app.types.ts:7](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L7)
diff --git a/docs/interfaces/AuthConfigLike.md b/docs/interfaces/AuthConfigLike.md
new file mode 100644
index 0000000..cb2d47c
--- /dev/null
+++ b/docs/interfaces/AuthConfigLike.md
@@ -0,0 +1,61 @@
+# Interface: AuthConfigLike
+
+## Properties
+
+### enable\_username\_password
+
+• `Optional` **enable\_username\_password**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:113](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L113)
+
+___
+
+### enable\_google\_login
+
+• `Optional` **enable\_google\_login**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:114](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L114)
+
+___
+
+### enable\_microsoft\_login
+
+• `Optional` **enable\_microsoft\_login**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:115](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L115)
+
+___
+
+### enable\_facebook\_login
+
+• `Optional` **enable\_facebook\_login**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:116](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L116)
+
+___
+
+### sso\_provider\_name
+
+• `Optional` **sso\_provider\_name**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:117](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L117)
+
+___
+
+### enable\_sso\_login
+
+• `Optional` **enable\_sso\_login**: `boolean`
+
+#### Defined in
+
+[modules/app.types.ts:118](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L118)
diff --git a/docs/interfaces/AuthMethods.md b/docs/interfaces/AuthMethods.md
new file mode 100644
index 0000000..305ad47
--- /dev/null
+++ b/docs/interfaces/AuthMethods.md
@@ -0,0 +1,373 @@
+# Interface: AuthMethods
+
+Public auth methods available from the SDK.
+Document only the methods you want to expose and support.
+
+## Methods
+
+### me
+
+▸ **me**(): `Promise`\<`any`\>
+
+Get current user information
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+import { createClient, getAccessToken } from '@base44/sdk';
+
+const client = createClient({ appId: 'your-app-id', token: getAccessToken() });
+const user = await client.auth.me();
+console.log(user);
+```
+
+#### Defined in
+
+[modules/auth.ts:24](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L24)
+
+___
+
+### redirectToLogin
+
+▸ **redirectToLogin**(`nextUrl`): `void`
+
+Redirects the user to the app's login page
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `nextUrl` | `string` |
+
+#### Returns
+
+`void`
+
+**`Example`**
+
+```ts
+// Redirect and return to current route after login
+client.auth.redirectToLogin(window.location.pathname);
+```
+
+#### Defined in
+
+[modules/auth.ts:38](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L38)
+
+___
+
+### logout
+
+▸ **logout**(`redirectUrl?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `redirectUrl?` | `string` |
+
+#### Returns
+
+`void`
+
+**`Example`**
+
+```ts
+// Reload the page after logout
+client.auth.logout();
+
+// Or redirect to a login page
+client.auth.logout('/login');
+```
+
+#### Defined in
+
+[modules/auth.ts:54](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L54)
+
+___
+
+### setToken
+
+▸ **setToken**(`token`, `saveToStorage?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `token` | `string` |
+| `saveToStorage?` | `boolean` |
+
+#### Returns
+
+`void`
+
+**`Example`**
+
+```ts
+// After obtaining a token from your auth flow
+client.auth.setToken(accessToken);
+```
+
+#### Defined in
+
+[modules/auth.ts:68](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L68)
+
+___
+
+### loginViaEmailPassword
+
+▸ **loginViaEmailPassword**(`email`, `password`, `turnstileToken?`): `Promise`\<[`LoginViaEmailPasswordResponse`](LoginViaEmailPasswordResponse.md)\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `email` | `string` |
+| `password` | `string` |
+| `turnstileToken?` | `string` |
+
+#### Returns
+
+`Promise`\<[`LoginViaEmailPasswordResponse`](LoginViaEmailPasswordResponse.md)\>
+
+**`Example`**
+
+```ts
+const { access_token, user } = await client.auth.loginViaEmailPassword(
+ 'user@example.com',
+ 's3cret'
+);
+client.auth.setToken(access_token);
+```
+
+#### Defined in
+
+[modules/auth.ts:84](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L84)
+
+___
+
+### isAuthenticated
+
+▸ **isAuthenticated**(): `Promise`\<`boolean`\>
+
+Verify if the current token is valid
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+**`Example`**
+
+```ts
+const ok = await client.auth.isAuthenticated();
+if (!ok) client.auth.redirectToLogin('/dashboard');
+```
+
+#### Defined in
+
+[modules/auth.ts:98](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L98)
+
+___
+
+### inviteUser
+
+▸ **inviteUser**(`userEmail`, `role`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `userEmail` | `string` |
+| `role` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.inviteUser('new-user@example.com', 'member');
+```
+
+#### Defined in
+
+[modules/auth.ts:106](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L106)
+
+___
+
+### register
+
+▸ **register**(`payload`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `payload` | `Object` |
+| `payload.email` | `string` |
+| `payload.password` | `string` |
+| `payload.turnstile_token?` | ``null`` \| `string` |
+| `payload.referral_code?` | ``null`` \| `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.register({
+ email: 'user@example.com',
+ password: 's3cret',
+});
+```
+
+#### Defined in
+
+[modules/auth.ts:117](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L117)
+
+___
+
+### verifyOtp
+
+▸ **verifyOtp**(`args`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `args` | `Object` |
+| `args.email` | `string` |
+| `args.otpCode` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.verifyOtp({ email: 'user@example.com', otpCode: '123456' });
+```
+
+#### Defined in
+
+[modules/auth.ts:130](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L130)
+
+___
+
+### resendOtp
+
+▸ **resendOtp**(`email`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `email` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.resendOtp('user@example.com');
+```
+
+#### Defined in
+
+[modules/auth.ts:138](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L138)
+
+___
+
+### resetPasswordRequest
+
+▸ **resetPasswordRequest**(`email`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `email` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.resetPasswordRequest('user@example.com');
+```
+
+#### Defined in
+
+[modules/auth.ts:146](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L146)
+
+___
+
+### resetPassword
+
+▸ **resetPassword**(`args`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `args` | `Object` |
+| `args.resetToken` | `string` |
+| `args.newPassword` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.resetPassword({ resetToken: 'token', newPassword: 'newPass123' });
+```
+
+#### Defined in
+
+[modules/auth.ts:154](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L154)
+
+___
+
+### changePassword
+
+▸ **changePassword**(`args`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `args` | `Object` |
+| `args.userId` | `string` |
+| `args.currentPassword` | `string` |
+| `args.newPassword` | `string` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+**`Example`**
+
+```ts
+await client.auth.changePassword({
+ userId: 'abc123',
+ currentPassword: 'oldPass',
+ newPassword: 'newPass123',
+});
+```
+
+#### Defined in
+
+[modules/auth.ts:166](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L166)
diff --git a/docs/interfaces/DenoProjectLike.md b/docs/interfaces/DenoProjectLike.md
new file mode 100644
index 0000000..ab16aed
--- /dev/null
+++ b/docs/interfaces/DenoProjectLike.md
@@ -0,0 +1,41 @@
+# Interface: DenoProjectLike
+
+## Properties
+
+### project\_id
+
+• **project\_id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:25](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L25)
+
+___
+
+### project\_name
+
+• **project\_name**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:26](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L26)
+
+___
+
+### app\_id
+
+• **app\_id**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:27](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L27)
+
+___
+
+### deployment\_name\_to\_info
+
+• **deployment\_name\_to\_info**: `Record`\<`string`, \{ `id`: `string` ; `code`: `string` }\>
+
+#### Defined in
+
+[modules/app.types.ts:28](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L28)
diff --git a/docs/interfaces/LoginViaEmailPasswordResponse.md b/docs/interfaces/LoginViaEmailPasswordResponse.md
new file mode 100644
index 0000000..bf6564f
--- /dev/null
+++ b/docs/interfaces/LoginViaEmailPasswordResponse.md
@@ -0,0 +1,21 @@
+# Interface: LoginViaEmailPasswordResponse
+
+## Properties
+
+### access\_token
+
+• **access\_token**: `string`
+
+#### Defined in
+
+[modules/auth.ts:4](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L4)
+
+___
+
+### user
+
+• **user**: `any`
+
+#### Defined in
+
+[modules/auth.ts:5](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/auth.ts#L5)
diff --git a/docs/interfaces/UserEntityLike.md b/docs/interfaces/UserEntityLike.md
new file mode 100644
index 0000000..7eb5566
--- /dev/null
+++ b/docs/interfaces/UserEntityLike.md
@@ -0,0 +1,59 @@
+# Interface: UserEntityLike
+
+## Properties
+
+### type
+
+• **type**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:90](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L90)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:91](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L91)
+
+___
+
+### title
+
+• `Optional` **title**: `string`
+
+#### Defined in
+
+[modules/app.types.ts:92](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L92)
+
+___
+
+### properties
+
+• `Optional` **properties**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `role?` | ... \| ... |
+| `email?` | ... \| ... |
+| `full_name?` | ... \| ... |
+
+#### Defined in
+
+[modules/app.types.ts:93](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L93)
+
+___
+
+### required
+
+• **required**: `string`[]
+
+#### Defined in
+
+[modules/app.types.ts:108](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L108)
diff --git a/docs/interfaces/UserLike.md b/docs/interfaces/UserLike.md
new file mode 100644
index 0000000..7118f57
--- /dev/null
+++ b/docs/interfaces/UserLike.md
@@ -0,0 +1,11 @@
+# Interface: UserLike
+
+## Properties
+
+### id
+
+• `Optional` **id**: ``null`` \| `string`
+
+#### Defined in
+
+[modules/app.types.ts:86](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L86)
diff --git a/docs/types/AgentConversation.md b/docs/types/AgentConversation.md
new file mode 100644
index 0000000..38da911
--- /dev/null
+++ b/docs/types/AgentConversation.md
@@ -0,0 +1,18 @@
+# Type alias: AgentConversation
+
+Ƭ **AgentConversation**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+| `app_id` | `string` |
+| `agent_name` | `string` |
+| `created_by_id` | `string` |
+| `messages` | [`AgentMessage`](AgentMessage.md)[] |
+| `metadata?` | `Record`\<`string`, `any`\> |
+
+#### Defined in
+
+[modules/agents.types.ts:1](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/agents.types.ts#L1)
diff --git a/docs/types/AgentMessage.md b/docs/types/AgentMessage.md
new file mode 100644
index 0000000..bc0b68f
--- /dev/null
+++ b/docs/types/AgentMessage.md
@@ -0,0 +1,31 @@
+# Type alias: AgentMessage
+
+Ƭ **AgentMessage**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+| `role` | ``"user"`` \| ``"assistant"`` \| ``"system"`` |
+| `reasoning?` | \{ `start_date`: `string` ; `end_date?`: `string` ; `content`: `string` } |
+| `reasoning.start_date` | `string` |
+| `reasoning.end_date?` | `string` |
+| `reasoning.content` | `string` |
+| `content?` | `string` \| `Record`\<..., ...\> \| ``null`` |
+| `file_urls?` | ...[] \| ``null`` |
+| `tool_calls?` | ...[] \| ``null`` |
+| `usage?` | \{ `prompt_tokens?`: ... ; `completion_tokens?`: ... } \| ``null`` |
+| `hidden?` | `boolean` |
+| `custom_context?` | ...[] \| ``null`` |
+| `model?` | `string` \| ``null`` |
+| `checkpoint_id?` | `string` \| ``null`` |
+| `metadata?` | \{ `created_date`: `string` ; `created_by_email`: `string` ; `created_by_full_name`: ... \| ... } |
+| `metadata.created_date` | `string` |
+| `metadata.created_by_email` | `string` |
+| `metadata.created_by_full_name` | ... \| ... |
+| `additional_message_params?` | `Record`\<`string`, `any`\> |
+
+#### Defined in
+
+[modules/agents.types.ts:10](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/agents.types.ts#L10)
diff --git a/docs/types/Base44Client.md b/docs/types/Base44Client.md
new file mode 100644
index 0000000..bca0300
--- /dev/null
+++ b/docs/types/Base44Client.md
@@ -0,0 +1,7 @@
+# Type alias: Base44Client
+
+Ƭ **Base44Client**: `ReturnType`\
+
+#### Defined in
+
+[client.ts:17](https://github.com/base44-dev/javascript-sdk/blob/main/src/client.ts#L17)
diff --git a/docs/types/ConnectorAccessTokenResponse.md b/docs/types/ConnectorAccessTokenResponse.md
new file mode 100644
index 0000000..24fd0ef
--- /dev/null
+++ b/docs/types/ConnectorAccessTokenResponse.md
@@ -0,0 +1,13 @@
+# Type alias: ConnectorAccessTokenResponse
+
+Ƭ **ConnectorAccessTokenResponse**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `access_token` | `string` |
+
+#### Defined in
+
+[modules/connectors.types.ts:3](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/connectors.types.ts#L3)
diff --git a/docs/types/ConnectorIntegrationType.md b/docs/types/ConnectorIntegrationType.md
new file mode 100644
index 0000000..41637c6
--- /dev/null
+++ b/docs/types/ConnectorIntegrationType.md
@@ -0,0 +1,7 @@
+# Type alias: ConnectorIntegrationType
+
+Ƭ **ConnectorIntegrationType**: `string`
+
+#### Defined in
+
+[modules/connectors.types.ts:1](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/connectors.types.ts#L1)
diff --git a/docs/types/LoginInfoResponse.md b/docs/types/LoginInfoResponse.md
new file mode 100644
index 0000000..5ce760a
--- /dev/null
+++ b/docs/types/LoginInfoResponse.md
@@ -0,0 +1,7 @@
+# Type alias: LoginInfoResponse
+
+Ƭ **LoginInfoResponse**: `Pick`\<[`AppLike`](../interfaces/AppLike.md), ``"id"`` \| ``"name"`` \| ``"slug"`` \| ``"logo_url"`` \| ``"user_description"`` \| ``"updated_date"`` \| ``"created_date"`` \| ``"auth_config"`` \| ``"platform_version"``\>
+
+#### Defined in
+
+[modules/app.types.ts:124](https://github.com/base44-dev/javascript-sdk/blob/main/src/modules/app.types.ts#L124)
diff --git a/docs/types/ModelFilterParams.md b/docs/types/ModelFilterParams.md
new file mode 100644
index 0000000..e03afa8
--- /dev/null
+++ b/docs/types/ModelFilterParams.md
@@ -0,0 +1,18 @@
+# Type alias: ModelFilterParams
+
+Ƭ **ModelFilterParams**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `q?` | `Record`\<`string`, `any`\> |
+| `sort?` | `string` \| ``null`` |
+| `sort_by?` | `string` \| ``null`` |
+| `limit?` | `number` \| ``null`` |
+| `skip?` | `number` \| ``null`` |
+| `fields?` | ...[] \| ``null`` |
+
+#### Defined in
+
+[types.ts:3](https://github.com/base44-dev/javascript-sdk/blob/main/src/types.ts#L3)
diff --git a/package-lock.json b/package-lock.json
index 8418a06..a71ee95 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,6 +20,8 @@
"dotenv": "^16.3.1",
"eslint": "^8.54.0",
"nock": "^13.4.0",
+ "typedoc": "^0.25.0",
+ "typedoc-plugin-markdown": "^3.17.0",
"typescript": "^5.3.2",
"vitest": "^1.0.0"
}
@@ -1579,6 +1581,13 @@
"node": ">=8"
}
},
+ "node_modules/ansi-sequence-parser": {
+ "version": "1.1.3",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/ansi-sequence-parser/-/ansi-sequence-parser-1.1.3.tgz",
+ "integrity": "sha512-+fksAx9eG3Ab6LDnLs3ZqZa8KVJ/jYnX+D4Qe1azX+LFGFAXqynCQLOdLpNYN/l9e7l6hMWwZbrnctqr6eSQSw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -2665,6 +2674,28 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/handlebars": {
+ "version": "4.7.8",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.2",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -2937,6 +2968,13 @@
"node": ">=6"
}
},
+ "node_modules/jsonc-parser": {
+ "version": "3.3.1",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -3005,6 +3043,13 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/lunr": {
+ "version": "2.3.9",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/lunr/-/lunr-2.3.9.tgz",
+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/magic-string": {
"version": "0.30.17",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
@@ -3056,6 +3101,19 @@
"node": ">=10"
}
},
+ "node_modules/marked": {
+ "version": "4.3.0",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/marked/-/marked-4.3.0.tgz",
+ "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -3143,6 +3201,16 @@
"node": "*"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/mlly": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz",
@@ -3205,6 +3273,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/nock": {
"version": "13.5.6",
"resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz",
@@ -3625,6 +3700,19 @@
"node": ">=8"
}
},
+ "node_modules/shiki": {
+ "version": "0.14.7",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/shiki/-/shiki-0.14.7.tgz",
+ "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-sequence-parser": "^1.1.0",
+ "jsonc-parser": "^3.2.0",
+ "vscode-oniguruma": "^1.7.0",
+ "vscode-textmate": "^8.0.0"
+ }
+ },
"node_modules/siginfo": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
@@ -3715,8 +3803,6 @@
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
- "optional": true,
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3955,10 +4041,71 @@
"node": ">=4"
}
},
+ "node_modules/typedoc": {
+ "version": "0.25.13",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/typedoc/-/typedoc-0.25.13.tgz",
+ "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "lunr": "^2.3.9",
+ "marked": "^4.3.0",
+ "minimatch": "^9.0.3",
+ "shiki": "^0.14.7"
+ },
+ "bin": {
+ "typedoc": "bin/typedoc"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "peerDependencies": {
+ "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x"
+ }
+ },
+ "node_modules/typedoc-plugin-markdown": {
+ "version": "3.17.1",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz",
+ "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "handlebars": "^4.7.7"
+ },
+ "peerDependencies": {
+ "typedoc": ">=0.24.0"
+ }
+ },
+ "node_modules/typedoc/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/typedoc/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/typescript": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
- "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
+ "version": "5.4.5",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/typescript/-/typescript-5.4.5.tgz",
+ "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -3976,6 +4123,20 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/uglify-js": {
+ "version": "3.19.3",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/uglify-js/-/uglify-js-3.19.3.tgz",
+ "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/undici-types": {
"version": "6.20.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
@@ -4332,6 +4493,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/vscode-oniguruma": {
+ "version": "1.7.0",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
+ "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-textmate": {
+ "version": "8.0.0",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/vscode-textmate/-/vscode-textmate-8.0.0.tgz",
+ "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -4375,6 +4550,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://npm.dev.wixpress.com/api/npm/npm-repos/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/package.json b/package.json
index 2b6cee7..bbe37ef 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,9 @@
"test:e2e": "vitest run tests/e2e",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
+ "docs": "npm run docs:generate && npm run docs:process",
+ "docs:generate": "typedoc",
+ "docs:process": "node scripts/process-docs-for-mintlify.js",
"prepublishOnly": "npm run build"
},
"dependencies": {
@@ -30,6 +33,8 @@
"dotenv": "^16.3.1",
"eslint": "^8.54.0",
"nock": "^13.4.0",
+ "typedoc": "^0.25.0",
+ "typedoc-plugin-markdown": "^3.17.0",
"typescript": "^5.3.2",
"vitest": "^1.0.0"
},
diff --git a/src/index.ts b/src/index.ts
index 7a4b962..a442b83 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -20,3 +20,4 @@ export {
export type { Base44Client };
export * from "./types.js";
+export type { AuthMethods, LoginViaEmailPasswordResponse } from "./modules/auth.js";
diff --git a/src/modules/auth.ts b/src/modules/auth.ts
index 412b65a..4d344f7 100644
--- a/src/modules/auth.ts
+++ b/src/modules/auth.ts
@@ -1,5 +1,175 @@
import { AxiosInstance } from "axios";
+export interface LoginViaEmailPasswordResponse {
+ access_token: string;
+ user: any;
+}
+
+/**
+ * Public auth methods available from the SDK.
+ * Document only the methods you want to expose and support.
+ */
+export interface AuthMethods {
+ /**
+ * Get current user information
+ * @example
+ * ```ts
+ * import { createClient, getAccessToken } from '@base44/sdk';
+ *
+ * const client = createClient({ appId: 'your-app-id', token: getAccessToken() });
+ * const user = await client.auth.me();
+ * console.log(user);
+ * ```
+ */
+ me(): Promise;
+
+ /** Update current user data */
+ /** @internal */
+ updateMe(data: Record): Promise;
+
+ /**
+ * Redirects the user to the app's login page
+ * @example
+ * ```ts
+ * // Redirect and return to current route after login
+ * client.auth.redirectToLogin(window.location.pathname);
+ * ```
+ */
+ redirectToLogin(nextUrl: string): void;
+
+ /**
+ * Logout the current user
+ * Removes the token from localStorage and optionally redirects to a URL or reloads the page
+ */
+ /**
+ * @example
+ * ```ts
+ * // Reload the page after logout
+ * client.auth.logout();
+ *
+ * // Or redirect to a login page
+ * client.auth.logout('/login');
+ * ```
+ */
+ logout(redirectUrl?: string): void;
+
+ /**
+ * Set authentication token
+ * @param token - Auth token
+ * @param saveToStorage - Whether to save the token to localStorage (default true)
+ */
+ /**
+ * @example
+ * ```ts
+ * // After obtaining a token from your auth flow
+ * client.auth.setToken(accessToken);
+ * ```
+ */
+ setToken(token: string, saveToStorage?: boolean): void;
+
+ /**
+ * Login via username and password
+ * @returns Login response with access_token and user
+ */
+ /**
+ * @example
+ * ```ts
+ * const { access_token, user } = await client.auth.loginViaEmailPassword(
+ * 'user@example.com',
+ * 's3cret'
+ * );
+ * client.auth.setToken(access_token);
+ * ```
+ */
+ loginViaEmailPassword(
+ email: string,
+ password: string,
+ turnstileToken?: string
+ ): Promise;
+
+ /**
+ * Verify if the current token is valid
+ * @example
+ * ```ts
+ * const ok = await client.auth.isAuthenticated();
+ * if (!ok) client.auth.redirectToLogin('/dashboard');
+ * ```
+ */
+ isAuthenticated(): Promise;
+
+ /**
+ * @example
+ * ```ts
+ * await client.auth.inviteUser('new-user@example.com', 'member');
+ * ```
+ */
+ inviteUser(userEmail: string, role: string): Promise;
+
+ /**
+ * @example
+ * ```ts
+ * await client.auth.register({
+ * email: 'user@example.com',
+ * password: 's3cret',
+ * });
+ * ```
+ */
+ register(payload: {
+ email: string;
+ password: string;
+ turnstile_token?: string | null;
+ referral_code?: string | null;
+ }): Promise;
+
+ /**
+ * @example
+ * ```ts
+ * await client.auth.verifyOtp({ email: 'user@example.com', otpCode: '123456' });
+ * ```
+ */
+ verifyOtp(args: { email: string; otpCode: string }): Promise;
+
+ /**
+ * @example
+ * ```ts
+ * await client.auth.resendOtp('user@example.com');
+ * ```
+ */
+ resendOtp(email: string): Promise;
+
+ /**
+ * @example
+ * ```ts
+ * await client.auth.resetPasswordRequest('user@example.com');
+ * ```
+ */
+ resetPasswordRequest(email: string): Promise;
+
+ /**
+ * @example
+ * ```ts
+ * await client.auth.resetPassword({ resetToken: 'token', newPassword: 'newPass123' });
+ * ```
+ */
+ resetPassword(args: { resetToken: string; newPassword: string }): Promise;
+
+ /**
+ * @example
+ * ```ts
+ * await client.auth.changePassword({
+ * userId: 'abc123',
+ * currentPassword: 'oldPass',
+ * newPassword: 'newPass123',
+ * });
+ * ```
+ */
+ changePassword(args: {
+ userId: string;
+ currentPassword: string;
+ newPassword: string;
+ }): Promise;
+}
+
/**
* Creates the auth module for the Base44 SDK
* @param {import('axios').AxiosInstance} axios - Axios instance
@@ -15,29 +185,15 @@ export function createAuthModule(
serverUrl: string;
appBaseUrl?: string;
}
-) {
+): AuthMethods {
return {
- /**
- * Get current user information
- * @returns {Promise