@bshsolutions/sdk 0.0.40-beta.4 → 0.0.41-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -80,5 +80,5 @@ var BshSessionMetaData = {
80
80
  };
81
81
 
82
82
  export { AggregateFunctions, BshEntityPermissions, BshEntityTypes, BshError, BshInsertDuplicates, BshPKStrategies, BshPKTypes, BshSessionMetaData, BshUpdateStrategies, ComparisonOperators, LogicalOperators, PolicyActions, PrincipalType, defaultSettings, formatFileSize, isExpired, isOk };
83
- //# sourceMappingURL=chunk-7SPVM2YJ.js.map
84
- //# sourceMappingURL=chunk-7SPVM2YJ.js.map
83
+ //# sourceMappingURL=chunk-ARI3OLHJ.js.map
84
+ //# sourceMappingURL=chunk-ARI3OLHJ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/response/index.ts","../src/types/search/index.ts","../src/types/entities/index.ts","../src/types/security/index.ts","../src/types/config/index.ts","../src/types/storage/index.ts","../src/types/auth/index.ts"],"names":[],"mappings":";AAsCO,IAAM,IAAA,GAAO,CAAC,QAAA,KAA+C,QAAA,IAAY,MAAA,GAAY,QAAQ,QAAA,EAAU,IAAA,IAAQ,GAAA,IAAO,QAAA,EAAU,IAAA,GAAO;AAGvI,IAAM,SAAA,GAAY,CAAC,KAAA,KAAuD;AAC7E,EAAA,MAAM,QAAA,GAAW,KAAA,YAAiB,QAAA,GAAW,KAAA,CAAM,QAAA,GAAW,KAAA;AAC9D,EAAA,OAAO,QAAA,EAAU,MAAM,QAAA,KAAa,sBAAA;AACxC;AAEO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAChC,WAAA,CACW,MAAA,EACA,QAAA,EACA,QAAA,EACT;AACE,IAAA,IAAI,QAAA,WAAmB,QAAA,GAAW,QAAA;AAClC,IAAA,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC,CAAA;AALhC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAIP,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AAAA,EAChB;AACJ;;;AC3CO,IAAM,gBAAA,GAAmB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAK;AAG5C,IAAM,sBAAsB,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,KAAA,EAAO,MAAM,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,aAAa,QAAA,EAAU,SAAA,EAAW,MAAM,KAAA,EAAO,SAAA,EAAW,UAAU,SAAS;AAgB7K,IAAM,qBAAqB,CAAC,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK;;;ACF/D,IAAM,cAAA,GAAiB,CAAC,OAAA,EAAS,MAAA,EAAQ,UAAU;AACnD,IAAM,mBAAA,GAAsB,CAAC,SAAA,EAAW,QAAQ;AAChD,IAAM,mBAAA,GAAsB,CAAC,QAAA,EAAU,OAAO;AAC9C,IAAM,eAAA,GAAkB,CAAC,eAAA,EAAiB,MAAA,EAAQ,OAAO;AACzD,IAAM,UAAA,GAAa,CAAC,QAAA,EAAU,QAAQ;AACtC,IAAM,oBAAA,GAAuB,CAAC,MAAA,EAAQ,OAAA,EAAS,UAAU,QAAQ;;;ACuBjE,IAAM,aAAA,GAAgB;AAAA,EAAC,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO;AAAA;AAAqB;AACnE,IAAM,gBAAgB,CAAC,GAAA,EAAK,QAAQ,OAAA,EAAS,QAAA,EAAU,UAAU,QAAQ;;;ACtCzE,IAAM,eAAA,GAA+B;AAAA,EACxC,IAAA,EAAM,WAAA;AAAA,EACN,GAAA,EAAK;AAAA,IACD,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,KACb;AAAA,IACA,IAAA,EAAM;AAAA,MACF,cAAA,EAAgB;AAAA;AACpB;AAER;;;ACgBO,IAAM,cAAA,GAAiB,CAAC,IAAA,KAA2B;AACtD,EAAA,IAAI,CAAC,IAAA,EAAM,KAAA,EAAO,OAAO,SAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,EAAS,IAAA,EAAM,MAAM,IAAI,CAAA;AACxC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1D,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,GAAQ,KAAK,GAAA,CAAI,IAAA,EAAM,CAAC,CAAA,GAAI,GAAG,CAAA,GAAI,GAAA,GAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACjF;;;ACtCO,IAAM,kBAAA,GAAqB;AAAA,EAC9B,QAAA,EAAU;AAAA,IACN,MAAA;AAAA,IAAQ,OAAA;AAAA,IAAS,kBAAA;AAAA,IAAoB,SAAA;AAAA,IAAW,QAAA;AAAA,IAAU,QAAA;AAAA,IAC1D,SAAA;AAAA,IAAW,MAAA;AAAA,IAAQ,OAAA;AAAA,IAAS,YAAA;AAAA,IAAc,MAAA;AAAA,IAAQ;AAAA,GACtD;AAAA,EACA,IAAI,CAAC,SAAA,EAAW,OAAO,SAAA,EAAW,UAAA,EAAY,SAAS,OAAO,CAAA;AAAA,EAC9D,OAAA,EAAS,CAAC,SAAA,EAAW,QAAA,EAAU,UAAU,OAAO;AACpD","file":"chunk-7SPVM2YJ.js","sourcesContent":["export type BshErrorCode =\n | 'JWT__SESSION_EXPIRED'\n | 'JWT__EXPIRED'\n | 'JWT__UNSUPPORTED'\n | 'JWT__MALFORMED'\n | 'JWT__INVALID_SIGNATURE'\n | 'JWT__INVALID'\n | 'JWT__INVALID_TYP'\n | 'API__NOT_FOUND'\n\nexport type BshResponse<T> = {\n data: T[]\n timestamp: number\n code: number\n status: string\n message?: string\n error?: string\n meta?: {\n type?: string,\n sql?: string,\n error?: string,\n tips?: {[key: string]: string},\n accessToken?: string,\n refreshToken?: string,\n bshError?: BshErrorCode,\n }\n pagination?: {\n current: number,\n total: number,\n pages: number,\n first: boolean,\n last: boolean\n }\n endpoint?: string,\n api?: string,\n validations?: {field: string, error: string}[]\n}\n\nexport const isOk = (response: BshResponse<unknown> | undefined) => response == undefined ? false : response?.code >= 200 && response?.code < 300\n\n/** True when the engine rejected the request because the auth session is over (user must log in again). */\nexport const isExpired = (error: BshError | BshResponse<unknown> | undefined) => {\n const response = error instanceof BshError ? error.response : error\n return response?.meta?.bshError === 'JWT__SESSION_EXPIRED'\n}\n\nexport class BshError extends Error {\n constructor(\n public status: number,\n public endpoint: string,\n public response?: BshResponse<unknown>\n ) {\n if (response) response.endpoint = endpoint\n super(JSON.stringify(response, null, 2));\n this.name = 'BshError';\n }\n}\n","type CaseInsensitive<T extends string> = T | Uppercase<T>;\n\nexport type BshSearch<T = unknown> = {\n entity?: string\n alias?: string\n fields?: keyof T | string[]\n filters?: Filter<T>[]\n groupBy?: GroupBy<T>\n sort?: Sort<T>[]\n pagination?: Pagination\n from?: BshSearch<unknown>\n}\n\nexport const LogicalOperators = [\"and\", \"or\", \"not\"] as const;\nexport type LogicalOperator = CaseInsensitive<typeof LogicalOperators[number]>;\n\nexport const ComparisonOperators = [\"eq\", \"ne\", \"gt\", \"gte\", \"lt\", \"lte\", \"like\", \"ilike\", \"contains\", \"icontains\", \"starts\", \"istarts\", \"in\", \"nin\", \"between\", \"isnull\", \"notnull\"] as const;\nexport type ComparisonOperator = CaseInsensitive<typeof ComparisonOperators[number]>;\n\nexport type Filter<T = unknown> = {\n operator?: ComparisonOperator | LogicalOperator;\n field?: string | keyof T;\n value?: unknown;\n type?: string;\n filters?: Filter<T>[];\n};\n\nexport type GroupBy<T = unknown> = {\n fields?: string[] | keyof T[]\n aggregate?: Aggregate<T>[]\n}\n\nexport const AggregateFunctions = [\"COUNT\", \"SUM\", \"AVG\", \"MIN\", \"MAX\"] as const;\nexport type AggregateFunction = CaseInsensitive<typeof AggregateFunctions[number]>;\n\nexport type Aggregate<T = unknown> = {\n function?: AggregateFunction\n field?: string | keyof T\n alias?: string\n}\n\nexport type Sort<T> = {\n field?: string | keyof T\n direction?: -1 | 1 | 0\n}\n\nexport type Pagination = {\n page?: number\n size?: number\n}\n","import { BshObject, BshObjectPure } from '@types';\n\nexport type BshEntities = {\n name: string\n dbTable: string\n dbSchema: string\n type: 'Table' | 'View' | 'Function'\n dbSource: string\n updateStrategy: 'Replace' | 'Upsert'\n insertDuplicate: 'Upsert' | 'Error'\n bshSchema?: string\n bshPlugin?: string\n auditable?: boolean\n isPluginBased?: boolean\n isMultiTenant?: boolean\n pks: {\n key: string\n strategy: 'AutoIncrement' | 'UUID' | 'Fixed'\n type: 'string' | 'number'\n }[]\n permissions?: {\n write?: boolean\n read?: boolean\n delete?: boolean\n update?: boolean\n }\n} & BshObject;\n\nexport type BshEntitiesPure = BshObjectPure<BshEntities>;\nexport type BshEntityPermissions = 'read' | 'write' | 'update' | 'delete';\nexport const BshEntityTypes = ['Table', 'View', 'Function'] as const;\nexport const BshUpdateStrategies = ['Replace', 'Upsert'] as const;\nexport const BshInsertDuplicates = ['Upsert', 'Error'] as const;\nexport const BshPKStrategies = ['AutoIncrement', 'UUID', 'Fixed'] as const;\nexport const BshPKTypes = ['string', 'number'] as const;\nexport const BshEntityPermissions = ['read', 'write', 'update', 'delete'] as const;\n\nexport type BshSchemas = {\n name: string\n label: string\n description: string\n bshPlugin: string\n properties: {\n type: string\n name: string\n label: string\n\n meta?: {\n description?: string\n\n required?: boolean\n unique?: boolean\n default?: string\n\n length?: number\n maxLength?: number\n minLength?: number\n\n pattern?: string\n }\n }[]\n} & BshObject;\n\nexport type BshSchemasPure = BshObjectPure<BshSchemas>;\nexport type BshSchemaProperty = BshSchemas['properties'][number];\n\nexport type BshTypes = {\n name: string\n label: string\n bshPlugin?: string\n baseType?: string\n schema?: string\n meta?: {\n description?: string\n pattern?: string\n maxLength?: number\n minLength?: number\n max?: number\n min?: number\n }\n} & BshObject;\n\nexport type BshTypesPure = BshObjectPure<BshTypes>;\n\n","import {BshDate, BshObject, BshObjectPure} from '@types';\n\nexport type BshUser = {\n userId: string\n tenantId: string\n email: string\n password?: string\n roles: string[]\n status: 'ACTIVATED' | 'REQUIRED_ACTIVATION' | 'DISABLED' | 'REQUIRED_RESET_PASSWORD'\n profile?: {\n firstName?: string\n lastName?: string\n phone?: string\n picture?: string\n tags?: string[]\n [k: string]: unknown\n }\n} & BshObject;\n\nexport type BshUserInit = {\n email: string\n tenantId?: string\n password?: string\n roles?: string[]\n profile: BshUser['profile']\n}\n\nexport type BshUserPure = BshObjectPure<BshUser>;\n\nexport type BshRole = {\n name: string\n public?: boolean\n admin?: boolean\n description?: string\n bshPlugin?: string;\n} & BshObject;\n\nexport type BshRolePure = BshObjectPure<BshRole>;\n\nexport type BshPolicy = {\n name: string\n description?: string\n principals: {\n type: Uppercase<'user' | 'group' | 'role' | 'apiKey' | 'any'>\n value: string[]\n }[]\n permissions: {\n entity: string[]\n actions: ('READ' | 'WRITE' | 'DELETE' | 'UPDATE' | 'SEARCH' | '*')[]\n allow: boolean\n }[]\n enabled: boolean\n priority?: number\n apiKeyId?: number\n bshPlugin?: string;\n} & BshObject;\n\nexport type BshPolicyPure = BshObjectPure<BshPolicy>;\nexport const PrincipalType = ['user', 'role', 'any', 'apiKey', /*'group'*/] as const;\nexport const PolicyActions = ['*', 'READ', 'WRITE', 'DELETE', 'UPDATE', 'SEARCH'] as const;\n\nexport type BshApiKeysScopes = {\n read: boolean\n write: boolean\n delete: boolean\n update: boolean\n}\n\nexport type BshApiKeysForm = {\n name: string\n description?: string\n duration: number\n type: 'PERSONAL' | 'MACHINE'\n scopes: string[] // Format: [\"EntityName:ACTION\", ...]\n}\n\nexport type BshApiKeys = BshApiKeysForm & {\n id: number\n apiKey: string\n startedAt: BshDate\n expiresAt?: BshDate\n status: 'ACTIVE' | 'REVOKED'\n userId?: string\n} & BshObject;\n\nexport type BshTenant = {\n tenantId: string;\n name: string;\n status: 'Active' | 'Inactive' | 'Blocked';\n description?: string;\n domain?: string;\n email?: string;\n adminId?: string;\n settings?: Record<string, unknown>;\n} & BshObject;\n\nexport type BshTenantPure = BshObjectPure<BshTenant>;\n","import {BshObject} from \"@types\";\n\nexport type BshConfigurations<T extends Record<string, unknown> = Record<string, unknown>> = {\n name: string;\n description: string;\n bshPlugin?: string;\n config?: T;\n} & BshObject\n\nexport type BshSettings = {\n name: string;\n api: {\n response?: {\n showSql?: boolean;\n };\n auth?: {\n enableRegister?: boolean;\n };\n };\n}\n\nexport const defaultSettings: BshSettings = {\n name: 'BshEngine',\n api: {\n response: {\n showSql: true\n },\n auth: {\n enableRegister: false\n }\n }\n}\n\n","import { BshObject, BshConfigurations } from '@types';\n\nexport type StorageProvider = 'cloudinary';\n\nexport type CloudinaryConfig = {\n url: string;\n folder?: string;\n}\n\nexport type StorageConfiguration = BshConfigurations & {\n enabled?: StorageProvider;\n cloudinary: CloudinaryConfig\n}\n\nexport type BshFiles = {\n storageId: string;\n id: string;\n filename: string;\n mediaType: string;\n uri: string;\n secureUri: string;\n bytes: number;\n format: string;\n folder: string;\n width: number;\n height: number;\n tags: string[];\n context: { [key: string]: unknown };\n fileId: string;\n} & BshObject\n\nexport type UploadOptions = {\n tags: string[]\n context: { [key: string]: unknown }\n [key: string]: unknown;\n}\n\nexport type UploadResponse = {\n fileId: string\n publicId: string\n assetId: string\n uri: string\n secureUri: string\n tags: string[]\n context: { [key: string]: unknown }\n}\n\nexport const formatFileSize = (file: BshFiles): string => {\n if (!file?.bytes) return 'Unknown';\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(file.bytes) / Math.log(1024));\n return Math.round(file.bytes / Math.pow(1024, i) * 100) / 100 + ' ' + sizes[i];\n};\n\n","import {BshDate, BshObject} from \"@src/types/core\";\n\nexport type LoginParams = {\n email: string;\n password: string;\n}\n\nexport type AuthTokens = {\n access: string;\n refresh: string;\n}\n\nexport type BshAuthSessionStatus = 'Active' | 'Expired' | 'Revoked' | 'LoggedOut' | 'Blocked';\n\nexport const BshSessionMetaData = {\n browsers: [\n 'Edge', 'Opera', 'Samsung Internet', 'Firefox', 'Chrome', 'Safari',\n 'Postman', 'curl', 'axios', 'node-fetch', 'Java', 'Python',\n ],\n os: ['Windows', 'iOS', 'Android', 'ChromeOS', 'macOS', 'Linux'],\n devices: ['Desktop', 'Mobile', 'Tablet', 'Other']\n} as const;\n\nexport type BshBrowser = typeof BshSessionMetaData.browsers[number];\nexport type BshOS = typeof BshSessionMetaData.os[number];\nexport type BshDevice = typeof BshSessionMetaData.devices[number];\n\nexport type BshAuthSessionMetadata = {\n /** Readable summary, e.g. \"Chrome 131 on macOS\". */\n label?: string;\n browser?: BshBrowser;\n /** Major version for browsers, full version for HTTP clients. */\n browserVersion?: string;\n os?: BshOS;\n device?: BshDevice;\n /** Value of the X-Bsh-Client header sent at login. */\n client?: string;\n userAgent?: string;\n};\n\nexport type BshAuthSession = Omit<BshObject, 'persistenceId'> & {\n sid: string;\n sub?: string;\n iat: BshDate;\n exp: BshDate;\n status: BshAuthSessionStatus;\n reason?: string;\n metadata?: BshAuthSessionMetadata;\n current: boolean;\n}\n\n\nexport type BshRevokeSessionResult = {\n sid: string;\n message: string;\n}\n"]}
1
+ {"version":3,"sources":["../src/types/response/index.ts","../src/types/search/index.ts","../src/types/entities/index.ts","../src/types/security/index.ts","../src/types/config/index.ts","../src/types/storage/index.ts","../src/types/auth/index.ts"],"names":[],"mappings":"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","file":"chunk-ARI3OLHJ.js","sourcesContent":["export type BshErrorCode =\n | 'JWT__SESSION_EXPIRED'\n | 'JWT__EXPIRED'\n | 'JWT__UNSUPPORTED'\n | 'JWT__MALFORMED'\n | 'JWT__INVALID_SIGNATURE'\n | 'JWT__INVALID'\n | 'JWT__INVALID_TYP'\n | 'API__NOT_FOUND'\n\nexport type BshResponse<T> = {\n data: T[]\n timestamp: number\n code: number\n status: string\n message?: string\n error?: string\n meta?: {\n type?: string,\n sql?: string,\n error?: string,\n tips?: {[key: string]: string},\n accessToken?: string,\n refreshToken?: string,\n bshError?: BshErrorCode,\n }\n pagination?: {\n current: number,\n total: number,\n pages: number,\n first: boolean,\n last: boolean\n }\n endpoint?: string,\n api?: string,\n validations?: {field: string, error: string}[]\n}\n\nexport const isOk = (response: BshResponse<unknown> | undefined) => response == undefined ? false : response?.code >= 200 && response?.code < 300\n\n/** True when the engine rejected the request because the auth session is over (user must log in again). */\nexport const isExpired = (error: BshError | BshResponse<unknown> | undefined) => {\n const response = error instanceof BshError ? error.response : error\n return response?.meta?.bshError === 'JWT__SESSION_EXPIRED'\n}\n\nexport class BshError extends Error {\n constructor(\n public status: number,\n public endpoint: string,\n public response?: BshResponse<unknown>\n ) {\n if (response) response.endpoint = endpoint\n super(JSON.stringify(response, null, 2));\n this.name = 'BshError';\n }\n}\n","type CaseInsensitive<T extends string> = T | Uppercase<T>;\n\nexport type BshSearch<T = unknown> = {\n entity?: string\n alias?: string\n fields?: keyof T | string[]\n filters?: Filter<T>[]\n groupBy?: GroupBy<T>\n sort?: Sort<T>[]\n pagination?: Pagination\n from?: BshSearch<unknown>\n}\n\nexport const LogicalOperators = [\"and\", \"or\", \"not\"] as const;\nexport type LogicalOperator = CaseInsensitive<typeof LogicalOperators[number]>;\n\nexport const ComparisonOperators = [\"eq\", \"ne\", \"gt\", \"gte\", \"lt\", \"lte\", \"like\", \"ilike\", \"contains\", \"icontains\", \"starts\", \"istarts\", \"in\", \"nin\", \"between\", \"isnull\", \"notnull\"] as const;\nexport type ComparisonOperator = CaseInsensitive<typeof ComparisonOperators[number]>;\n\nexport type Filter<T = unknown> = {\n operator?: ComparisonOperator | LogicalOperator;\n field?: string | keyof T;\n value?: unknown;\n type?: string;\n filters?: Filter<T>[];\n};\n\nexport type GroupBy<T = unknown> = {\n fields?: string[] | keyof T[]\n aggregate?: Aggregate<T>[]\n}\n\nexport const AggregateFunctions = [\"COUNT\", \"SUM\", \"AVG\", \"MIN\", \"MAX\"] as const;\nexport type AggregateFunction = CaseInsensitive<typeof AggregateFunctions[number]>;\n\nexport type Aggregate<T = unknown> = {\n function?: AggregateFunction\n field?: string | keyof T\n alias?: string\n}\n\nexport type Sort<T> = {\n field?: string | keyof T\n direction?: -1 | 1 | 0\n}\n\nexport type Pagination = {\n page?: number\n size?: number\n}\n","import { BshObject, BshObjectPure } from '@types';\n\nexport type BshEntities = {\n name: string\n dbTable: string\n dbSchema: string\n type: 'Table' | 'View' | 'Function'\n dbSource: string\n updateStrategy: 'Replace' | 'Upsert'\n insertDuplicate: 'Upsert' | 'Error'\n bshSchema?: string\n bshPlugin?: string\n auditable?: boolean\n isPluginBased?: boolean\n isMultiTenant?: boolean\n pks: {\n key: string\n strategy: 'AutoIncrement' | 'UUID' | 'Fixed'\n type: 'string' | 'number'\n }[]\n permissions?: {\n write?: boolean\n read?: boolean\n delete?: boolean\n update?: boolean\n }\n} & BshObject;\n\nexport type BshEntitiesPure = BshObjectPure<BshEntities>;\nexport type BshEntityPermissions = 'read' | 'write' | 'update' | 'delete';\nexport const BshEntityTypes = ['Table', 'View', 'Function'] as const;\nexport const BshUpdateStrategies = ['Replace', 'Upsert'] as const;\nexport const BshInsertDuplicates = ['Upsert', 'Error'] as const;\nexport const BshPKStrategies = ['AutoIncrement', 'UUID', 'Fixed'] as const;\nexport const BshPKTypes = ['string', 'number'] as const;\nexport const BshEntityPermissions = ['read', 'write', 'update', 'delete'] as const;\n\nexport type BshSchemas = {\n name: string\n label: string\n description: string\n bshPlugin: string\n properties: {\n type: string\n name: string\n label: string\n\n meta?: {\n description?: string\n\n required?: boolean\n unique?: boolean\n default?: string\n\n length?: number\n maxLength?: number\n minLength?: number\n\n pattern?: string\n }\n }[]\n} & BshObject;\n\nexport type BshSchemasPure = BshObjectPure<BshSchemas>;\nexport type BshSchemaProperty = BshSchemas['properties'][number];\n\nexport type BshTypes = {\n name: string\n label: string\n bshPlugin?: string\n baseType?: string\n schema?: string\n meta?: {\n description?: string\n pattern?: string\n maxLength?: number\n minLength?: number\n max?: number\n min?: number\n }\n} & BshObject;\n\nexport type BshTypesPure = BshObjectPure<BshTypes>;\n\n","import {BshDate, BshObject, BshObjectPure} from '@types';\n\nexport type BshUser = {\n userId: string\n tenantId: string\n email: string\n password?: string\n roles: string[]\n status: 'ACTIVATED' | 'REQUIRED_ACTIVATION' | 'DISABLED' | 'REQUIRED_RESET_PASSWORD'\n profile?: {\n firstName?: string\n lastName?: string\n phone?: string\n picture?: string\n tags?: string[]\n [k: string]: unknown\n }\n} & BshObject;\n\nexport type BshUserInit = {\n email: string\n tenantId?: string\n password?: string\n roles?: string[]\n profile: BshUser['profile']\n}\n\nexport type BshUserPure = BshObjectPure<BshUser>;\n\nexport type BshRole = {\n name: string\n public?: boolean\n admin?: boolean\n description?: string\n bshPlugin?: string;\n} & BshObject;\n\nexport type BshRolePure = BshObjectPure<BshRole>;\n\nexport type BshPolicy = {\n name: string\n description?: string\n principals: {\n type: Uppercase<'user' | 'group' | 'role' | 'apiKey' | 'any'>\n value: string[]\n }[]\n permissions: {\n entity: string[]\n actions: ('READ' | 'WRITE' | 'DELETE' | 'UPDATE' | 'SEARCH' | '*')[]\n allow: boolean\n }[]\n enabled: boolean\n priority?: number\n apiKeyId?: number\n bshPlugin?: string;\n} & BshObject;\n\nexport type BshPolicyPure = BshObjectPure<BshPolicy>;\nexport const PrincipalType = ['user', 'role', 'any', 'apiKey', /*'group'*/] as const;\nexport const PolicyActions = ['*', 'READ', 'WRITE', 'DELETE', 'UPDATE', 'SEARCH'] as const;\n\nexport type BshApiKeysScopes = {\n read: boolean\n write: boolean\n delete: boolean\n update: boolean\n}\n\nexport type BshApiKeysForm = {\n name: string\n description?: string\n duration: number\n type: 'PERSONAL' | 'MACHINE'\n scopes: string[] // Format: [\"EntityName:ACTION\", ...]\n}\n\nexport type BshApiKeys = BshApiKeysForm & {\n id: number\n apiKey: string\n startedAt: BshDate\n expiresAt?: BshDate\n status: 'ACTIVE' | 'REVOKED'\n userId?: string\n} & BshObject;\n\nexport type BshTenant = {\n tenantId: string;\n name: string;\n status: 'Active' | 'Inactive' | 'Blocked';\n description?: string;\n domain?: string;\n email?: string;\n adminId?: string;\n settings?: Record<string, unknown>;\n} & BshObject;\n\nexport type BshTenantPure = BshObjectPure<BshTenant>;\n","import {BshObject} from \"@types\";\n\nexport type BshConfigurations<T extends Record<string, unknown> = Record<string, unknown>> = {\n name: string;\n description: string;\n bshPlugin?: string;\n config?: T;\n} & BshObject\n\nexport type BshSettings = {\n name: string;\n api: {\n response?: {\n showSql?: boolean;\n };\n auth?: {\n enableRegister?: boolean;\n };\n };\n}\n\nexport const defaultSettings: BshSettings = {\n name: 'BshEngine',\n api: {\n response: {\n showSql: true\n },\n auth: {\n enableRegister: false\n }\n }\n}\n\n","import { BshObject, BshConfigurations } from '@types';\n\nexport type StorageProvider = 'cloudinary';\n\nexport type CloudinaryConfig = {\n url: string;\n folder?: string;\n}\n\nexport type StorageConfiguration = BshConfigurations & {\n enabled?: StorageProvider;\n cloudinary: CloudinaryConfig\n}\n\nexport type BshFiles = {\n storageId: string;\n id: string;\n filename: string;\n mediaType: string;\n uri: string;\n secureUri: string;\n bytes: number;\n format: string;\n folder: string;\n width: number;\n height: number;\n tags: string[];\n context: { [key: string]: unknown };\n fileId: string;\n} & BshObject\n\nexport type UploadOptions = {\n tags: string[]\n context: { [key: string]: unknown }\n [key: string]: unknown;\n}\n\nexport type UploadResponse = {\n fileId: string\n publicId: string\n assetId: string\n uri: string\n secureUri: string\n tags: string[]\n context: { [key: string]: unknown }\n}\n\nexport const formatFileSize = (file: BshFiles): string => {\n if (!file?.bytes) return 'Unknown';\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(file.bytes) / Math.log(1024));\n return Math.round(file.bytes / Math.pow(1024, i) * 100) / 100 + ' ' + sizes[i];\n};\n\n","import {BshDate, BshObject} from \"@src/types/core\";\n\nexport type LoginParams = {\n email: string;\n password: string;\n}\n\nexport type AuthTokens = {\n access: string;\n refresh: string;\n}\n\nexport type BshAuthSessionStatus = 'Active' | 'Expired' | 'Revoked' | 'LoggedOut';\n\nexport const BshSessionMetaData = {\n browsers: [\n 'Edge', 'Opera', 'Samsung Internet', 'Firefox', 'Chrome', 'Safari',\n 'Postman', 'curl', 'axios', 'node-fetch', 'Java', 'Python',\n ],\n os: ['Windows', 'iOS', 'Android', 'ChromeOS', 'macOS', 'Linux'],\n devices: ['Desktop', 'Mobile', 'Tablet', 'Other']\n} as const;\n\nexport type BshBrowser = typeof BshSessionMetaData.browsers[number];\nexport type BshOS = typeof BshSessionMetaData.os[number];\nexport type BshDevice = typeof BshSessionMetaData.devices[number];\n\nexport type BshAuthSessionMetadata = {\n /** Readable summary, e.g. \"Chrome 131 on macOS\". */\n label?: string;\n browser?: BshBrowser;\n /** Major version for browsers, full version for HTTP clients. */\n browserVersion?: string;\n os?: BshOS;\n device?: BshDevice;\n /** Value of the X-Bsh-Client header sent at login. */\n client?: string;\n userAgent?: string;\n};\n\nexport type BshAuthSession = Omit<BshObject, 'persistenceId'> & {\n sid: string;\n sub?: string;\n iat: BshDate;\n exp: BshDate;\n status: BshAuthSessionStatus;\n metadata?: BshAuthSessionMetadata;\n current: boolean;\n}\n\n\nexport type BshRevokeSessionResult = {\n sid: string;\n message: string;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { BshError } from './chunk-7SPVM2YJ.js';
1
+ import { BshError } from './chunk-ARI3OLHJ.js';
2
2
 
3
3
  // src/client/types.ts
4
4
  var defaultClientFn = async (params) => {
@@ -261,5 +261,5 @@ var fetchClientFn = async (params) => {
261
261
  };
262
262
 
263
263
  export { BshClient, defaultClientFn, fetchClientFn };
264
- //# sourceMappingURL=chunk-I5DDZIGR.js.map
265
- //# sourceMappingURL=chunk-I5DDZIGR.js.map
264
+ //# sourceMappingURL=chunk-Q2AC5OLH.js.map
265
+ //# sourceMappingURL=chunk-Q2AC5OLH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client/types.ts","../src/client/bsh-client.ts","../src/client/index.ts"],"names":["error"],"mappings":";;;AAqBO,IAAM,eAAA,GAA+B,OAAO,MAAA,KAAW;AAC1D,EAAA,OAAO,KAAA;AAAA,IACH,MAAA,CAAO,IAAA;AAAA,IACP;AAAA,MACI,MAAA,EAAQ,OAAO,OAAA,CAAQ,MAAA;AAAA,MACvB,MAAM,MAAA,CAAO,OAAA,CAAQ,aAAA,KAAkB,MAAA,GACnC,OAAO,OAAA,CAAQ,IAAA,GAAmB,MAAA,CAAO,OAAA,CAAQ,OAC7C,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,GAAI,MAAA;AAAA,MAC9C,OAAA,EAAS,OAAO,OAAA,CAAQ;AAAA;AAC5B,GACJ;AACJ;;;AC5BO,IAAM,YAAN,MAAgB;AAAA,EAQnB,YACI,IAAA,EACA,UAAA,EACA,MAAA,EACA,cAAA,EACA,UACA,SAAA,EACF;AACE,IAAA,IAAA,CAAK,OAAO,IAAA,IAAQ,EAAA;AACpB,IAAA,IAAA,CAAK,aAAa,UAAA,IAAc,eAAA;AAChC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACrB;AAAA,EAIA,MAAc,cAAA,CAAwB,QAAA,EAAoB,MAAA,EAA8B,IAAA,EAAmE;AACvJ,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,IAAI,IAAA,GAAY,MAAA;AAChB,MAAA,IAAI;AACA,QAAA,IAAA,GAAO,MAAM,SAAS,IAAA,EAAK;AAAA,MAC/B,SAASA,MAAAA,EAAO;AACZ,QAAA,IAAI;AACA,UAAA,IAAA,GAAO,MAAM,SAAS,IAAA,EAAK;AAAA,QAC/B,SAASA,MAAAA,EAAO;AACZ,UAAA,IAAA,GAAO;AAAA,YACH,OAAA,EAAS;AAAA,WACb;AAAA,QACJ;AAAA,MACJ;AACA,MAAA,IAAI,QAAQ,IAAI,QAAA,CAAS,SAAS,MAAA,EAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAC3D,MAAA,MAAM,sBAAA,GAAyB,MAAA,CAAO,UAAA,CAAW,MAAA,EAAQ,YAAA,EAAc,KAAA;AACvE,MAAA,IAAA,CAAK,sBAAA,IAA0B,UAAa,CAAC,sBAAA,KAA2B,KAAK,SAAA,EAAW,oBAAA,GAAuB,MAAA,EAAQ;AACnH,QAAA,KAAA,MAAW,WAAA,IAAe,IAAA,CAAK,SAAA,CAAU,oBAAA,EAAqB,EAAG;AAC7D,UAAA,MAAM,WAAW,MAAM,WAAA,CAAY,KAAA,EAAO,KAAA,CAAM,UAAU,MAAgC,CAAA;AAC1F,UAAA,IAAI,UAAU,KAAA,GAAQ,QAAA;AAAA,QAC1B;AAAA,MACJ;AACA,MAAA,IAAI,MAAA,CAAO,WAAW,OAAA,EAAS;AAC3B,QAAA,MAAA,CAAO,UAAA,CAAW,QAAQ,KAAK,CAAA;AAC/B,QAAA,OAAO,MAAA;AAAA,MACX,OACK,MAAM,KAAA;AAAA,IACf;AAEA,IAAA,IAAI,SAAS,MAAA,EAAQ;AACjB,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,IAAI,MAAA,GAAS,IAAA;AACb,MAAA,MAAA,CAAO,MAAM,MAAA,CAAO,GAAA;AACpB,MAAA,MAAM,IAAA,CAAK,8BAA8B,MAAM,CAAA;AAC/C,MAAA,MAAM,sBAAA,GAAyB,MAAA,CAAO,UAAA,CAAW,MAAA,EAAQ,YAAA,EAAc,IAAA;AACvE,MAAA,IAAA,CAAK,sBAAA,IAA0B,UAAa,CAAC,sBAAA,KAA2B,KAAK,SAAA,EAAW,mBAAA,GAAsB,MAAA,EAAQ;AAClH,QAAA,KAAA,MAAW,WAAA,IAAe,IAAA,CAAK,SAAA,CAAU,mBAAA,EAAoB,EAAG;AAC5D,UAAA,MAAM,SAAA,GAAY,MAAM,WAAA,CAAY,MAAA,EAAQ,MAAgC,CAAA;AAC5E,UAAA,IAAI,WAAW,MAAA,GAAS,SAAA;AAAA,QAC5B;AAAA,MACJ;AACA,MAAA,IAAI,MAAA,CAAO,WAAW,SAAA,EAAW;AAC7B,QAAA,MAAA,CAAO,UAAA,CAAW,UAAU,IAAI,CAAA;AAChC,QAAA,OAAO,MAAA;AAAA,MACX;AACA,MAAA,OAAO,MAAA;AAAA,IACX,CAAA,MAAA,IACS,SAAS,MAAA,EAAQ;AACtB,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,IAAI,MAAA,CAAO,WAAW,UAAA,EAAY;AAC9B,QAAA,MAAA,CAAO,UAAA,CAAW,WAAW,IAAI,CAAA;AACjC,QAAA,OAAO,MAAA;AAAA,MACX,OACK,OAAO,IAAA;AAAA,IAChB;AAAA,EACJ;AAAA,EAEA,MAAc,8BAA8B,MAAA,EAA8B;AACtE,IAAA,MAAM,WAAA,GAAc,OAAO,IAAA,EAAM,WAAA;AACjC,IAAA,MAAM,YAAA,GAAe,OAAO,IAAA,EAAM,YAAA;AAClC,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,YAAA,EAAc;AACnC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,EAAW,mBAAA,EAAoB;AACpD,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,MAAM,OAAA,CAAQ;AAAA,QACV,WAAA;AAAA,QACA;AAAA,OACH,CAAA;AAAA,IACL;AAAA,EACJ;AAAA,EAEQ,UAAU,IAAA,EAAkC;AAChD,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,MAAA;AAE5C,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAEzC,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC1B,MAAA,MAAM,CAAC,KAAK,GAAG,UAAU,IAAI,MAAA,CAAO,IAAA,EAAK,CAAE,KAAA,CAAM,GAAG,CAAA;AACpD,MAAA,IAAI,QAAQ,IAAA,EAAM,OAAO,mBAAmB,UAAA,CAAW,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IACpE;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEQ,eAAe,MAAA,EAAwD;AAC3E,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,aAAY,IAAK,KAAA;AACxD,IAAA,IAAI,WAAW,KAAA,IAAS,MAAA,KAAW,UAAU,MAAA,KAAW,SAAA,SAAkB,EAAC;AAC3E,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,YAAY,CAAA;AAC7C,IAAA,IAAI,CAAC,SAAA,EAAW,OAAO,EAAC;AACxB,IAAA,OAAO,EAAE,gBAAgB,SAAA,EAAU;AAAA,EACvC;AAAA,EAEA,MAAc,eAAe,MAAA,EAAiE;AAC1F,IAAA,MAAM,OAAO,IAAA,CAAK,MAAA,GAAS,MAAM,IAAA,CAAK,QAAO,GAAI,MAAA;AAEjD,IAAA,IAAI,MAAM,IAAA,KAAS,QAAA,SAAiB,EAAE,aAAA,EAAe,KAAK,KAAA,EAAM;AAEhE,IAAA,IAAI,WAAA,GAAsC,IAAA,EAAM,IAAA,KAAS,KAAA,GACnD,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,KAAK,CAAA,CAAA,EAAG,GACxC,IAAA,CAAK,eAAe,MAAM,CAAA;AAEhC,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA,IAAiB;AACjD,IAAA,IAAI,cAAc,WAAA,GAAc,EAAE,GAAG,WAAA,EAAa,sBAAsB,YAAA,EAAa;AAErF,IAAA,OAAO,WAAA;AAAA,EACX;AAAA,EAEA,MAAc,iBAAiB,MAAA,EAAiE;AAC5F,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,IAAW;AACrC,IAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,IAAA,OAAO,EAAE,eAAe,MAAA,EAAO;AAAA,EACnC;AAAA,EAEQ,gBAAA,GAA2C;AAC/C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,EAAW,aAAA,EAAc;AACjD,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,EAAC;AACzB,IAAA,OAAO,EAAE,gBAAgB,UAAA,EAAW;AAAA,EACxC;AAAA,EAEA,MAAc,cAAc,MAAA,EAAiE;AACzF,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AACpD,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA;AAExD,IAAA,OAAO;AAAA,MACH,GAAG,KAAK,gBAAA,EAAiB;AAAA,MACzB,GAAG,WAAA;AAAA,MACH,GAAG;AAAA,KACP;AAAA,EACJ;AAAA,EAEA,MAAc,qBAAyC,MAAA,EAAmE;AACtH,IAAA,MAAM,qBAAA,GAAwB,MAAA,CAAO,UAAA,CAAW,MAAA,EAAQ,YAAA,EAAc,GAAA;AACtE,IAAA,IAAI,qBAAA,IAAyB,QAAQ,CAAC,IAAA,CAAK,WAAW,kBAAA,EAAmB,CAAE,QAAQ,OAAO,MAAA;AAC1F,IAAA,KAAA,MAAW,WAAA,IAAe,IAAA,CAAK,SAAA,CAAU,kBAAA,EAAmB,EAAG;AAC3D,MAAA,MAAM,SAAA,GAAY,MAAM,WAAA,CAAY,MAA6C,CAAA;AACjF,MAAA,IAAI,WAAW,OAAO,SAAA;AAAA,IAC1B;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,MAAM,IAAiB,MAAA,EAAmE;AACtF,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,EAAE,GAAG,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,KAAA,IAAS,CAAA;AAEzG,IAAA,IAAI,YAAA,GAAe;AAAA,MACf,GAAG,MAAA;AAAA,MACH,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAI,CAAA,CAAA;AAAA,MAChC,OAAA,EAAS;AAAA,QACL,GAAG,MAAA,CAAO,OAAA;AAAA,QACV,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACL,GAAG,OAAO,OAAA,CAAQ,OAAA;AAAA,UAClB,GAAG;AAAA;AACP;AACJ,KACJ;AAEA,IAAA,YAAA,GAAe,MAAM,IAAA,CAAK,oBAAA,CAAwB,YAAY,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,KAAyB,MAAA,EAAsE;AACjG,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,EAAE,GAAG,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,MAAA,IAAU,CAAA;AAE1G,IAAA,IAAI,YAAA,GAAe;AAAA,MACf,GAAG,MAAA;AAAA,MACH,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAI,CAAA,CAAA;AAAA,MAChC,OAAA,EAAS;AAAA,QACL,GAAG,MAAA,CAAO,OAAA;AAAA,QACV,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACL,GAAG,OAAO,OAAA,CAAQ,OAAA;AAAA,UAClB,GAAG;AAAA;AACP;AACJ,KACJ;AAEA,IAAA,YAAA,GAAe,MAAM,IAAA,CAAK,oBAAA,CAA2B,YAAY,CAAA;AACjE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,IAAwB,MAAA,EAAsE;AAChG,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,EAAE,GAAG,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,KAAA,IAAS,CAAA;AACzG,IAAA,IAAI,YAAA,GAAe;AAAA,MACf,GAAG,MAAA;AAAA,MACH,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAI,CAAA,CAAA;AAAA,MAChC,OAAA,EAAS;AAAA,QACL,GAAG,MAAA,CAAO,OAAA;AAAA,QACV,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACL,GAAG,OAAO,OAAA,CAAQ,OAAA;AAAA,UAClB,GAAG;AAAA;AACP;AACJ,KACJ;AAEA,IAAA,YAAA,GAAe,MAAM,IAAA,CAAK,oBAAA,CAA2B,YAAY,CAAA;AACjE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,OAAoB,MAAA,EAAmE;AACzF,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,EAAE,GAAG,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,QAAA,IAAY,CAAA;AAC5G,IAAA,IAAI,YAAA,GAAe;AAAA,MACf,GAAG,MAAA;AAAA,MACH,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAI,CAAA,CAAA;AAAA,MAChC,OAAA,EAAS;AAAA,QACL,GAAG,MAAA,CAAO,OAAA;AAAA,QACV,MAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACL,GAAG,OAAO,OAAA,CAAQ,OAAA;AAAA,UAClB,GAAG;AAAA;AACP;AACJ,KACJ;AAEA,IAAA,YAAA,GAAe,MAAM,IAAA,CAAK,oBAAA,CAAwB,YAAY,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,MAAmB,MAAA,EAAmE;AACxF,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,EAAE,GAAG,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,OAAA,IAAW,CAAA;AAC3G,IAAA,IAAI,YAAA,GAAe;AAAA,MACf,GAAG,MAAA;AAAA,MACH,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAI,CAAA,CAAA;AAAA,MAChC,OAAA,EAAS;AAAA,QACL,GAAG,MAAA,CAAO,OAAA;AAAA,QACV,MAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACL,GAAG,OAAO,OAAA,CAAQ,OAAA;AAAA,UAClB,GAAG;AAAA;AACP;AACJ,KACJ;AAEA,IAAA,YAAA,GAAe,MAAM,IAAA,CAAK,oBAAA,CAAwB,YAAY,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,SAAsB,MAAA,EAAyD;AACjF,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,EAAE,GAAG,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,KAAA,IAAS,CAAA;AACzG,IAAA,IAAI,YAAA,GAAe;AAAA,MACf,GAAG,MAAA;AAAA,MACH,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAI,CAAA,CAAA;AAAA,MAChC,OAAA,EAAS;AAAA,QACL,GAAG,MAAA,CAAO,OAAA;AAAA,QACV,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACL,GAAG,OAAO,OAAA,CAAQ,OAAA;AAAA,UAClB,GAAG;AAAA;AACP;AACJ,KACJ;AAEA,IAAA,YAAA,GAAe,MAAM,IAAA,CAAK,oBAAA,CAAwB,YAAY,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D;AACJ;;;AC7RO,IAAM,aAAA,GAA6B,OAAO,MAAA,KAAW;AACxD,EAAA,OAAO,KAAA;AAAA,IACH,MAAA,CAAO,IAAA;AAAA,IACP;AAAA,MACI,MAAA,EAAQ,OAAO,OAAA,CAAQ,MAAA;AAAA,MACvB,MAAM,MAAA,CAAO,OAAA,CAAQ,aAAA,KAAkB,MAAA,GACnC,OAAO,OAAA,CAAQ,IAAA,GAAmB,MAAA,CAAO,OAAA,CAAQ,OAC7C,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,GAAI,MAAA;AAAA,MAC9C,OAAA,EAAS,OAAO,OAAA,CAAQ;AAAA;AAC5B,GACJ;AACJ","file":"chunk-I5DDZIGR.js","sourcesContent":["import { BshCallbackParams } from \"@src/services\";\nimport { BshError, BshResponse, BshSearch } from \"@types\";\n\nexport type BshClientFnParams<T = unknown, R = T> = {\n path: string,\n options: {\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n responseType?: 'json' | 'blob' | 'text' | 'arrayBuffer',\n requestFormat?: 'json' | 'text' | 'form',\n body?: T | BshSearch<T> | unknown,\n formData?: FormData,\n queryParams?: Record<string, string>,\n headers?: Record<string, string>,\n },\n bshOptions: BshCallbackParams<T, R>,\n api?: string,\n entity?: string\n}\n\nexport type BshClientFn = <T = unknown>(params: BshClientFnParams<T>) => Promise<Response>;\n\nexport const defaultClientFn: BshClientFn = async (params) => {\n return fetch(\n params.path,\n {\n method: params.options.method,\n body: params.options.requestFormat === 'form' ?\n params.options.body as BodyInit : params.options.body ?\n JSON.stringify(params.options.body) : undefined,\n headers: params.options.headers,\n }\n );\n};\n\nexport type AuthToken = {\n type: 'JWT' | 'APIKEY';\n token: string\n}\n\nexport type BshAuthFn = () => Promise<AuthToken | undefined | null>;\n\nexport type BshRefreshTokenFn = () => Promise<string | undefined | null>;\n\nexport type BshOnTokenRefreshedFn = (tokens: { accessToken?: string; refreshToken?: string; }) => void | Promise<void>;\n\nexport type BshTenantFn = () => Promise<string | undefined | null>;\n\nexport type BshPostInterceptor<T = any> = (response: BshResponse<T>, params?: BshClientFnParams<T>) => Promise<BshResponse<T>>;\nexport type BshPreInterceptor<T = any, R = T> = (params: BshClientFnParams<T, R>) => Promise<BshClientFnParams<T, R>>;\nexport type BshErrorInterceptor<T = any> = (error: BshError, response?: BshResponse<T>, params?: BshClientFnParams<T>) => Promise<BshError | undefined>;\n","import { BshResponse, BshError } from \"@types\";\nimport { AuthToken, BshAuthFn, BshClientFn, BshClientFnParams, BshRefreshTokenFn, BshTenantFn, defaultClientFn } from \"@src/client/types\";\nimport { BshEngine } from \"@src/bshengine\";\n\nexport class BshClient {\n private readonly httpClient: BshClientFn;\n private readonly authFn?: BshAuthFn;\n private readonly refreshTokenFn?: BshRefreshTokenFn;\n private readonly tenantFn?: BshTenantFn;\n private readonly host: string;\n private readonly bshEngine?: BshEngine;\n\n constructor(\n host?: string,\n httpClient?: BshClientFn,\n authFn?: BshAuthFn,\n refreshTokenFn?: BshRefreshTokenFn,\n tenantFn?: BshTenantFn,\n bshEngine?: BshEngine\n ) {\n this.host = host || '';\n this.httpClient = httpClient || defaultClientFn;\n this.authFn = authFn;\n this.refreshTokenFn = refreshTokenFn;\n this.tenantFn = tenantFn;\n this.bshEngine = bshEngine;\n }\n\n private async handleResponse<T = any>(response: Response, params: BshClientFnParams<T>, type: 'json'): Promise<BshResponse<T> | undefined>\n private async handleResponse<T = any>(response: Response, params: BshClientFnParams<T>, type: 'blob'): Promise<Blob | undefined>\n private async handleResponse<T = any>(response: Response, params: BshClientFnParams<T>, type: 'json' | 'blob'): Promise<BshResponse<T> | Blob | undefined> {\n if (!response.ok) {\n let data: any = undefined;\n try {\n data = await response.json();\n } catch (error) {\n try {\n data = await response.text();\n } catch (error) {\n data = {\n message: 'Connection Issue'\n };\n }\n }\n let error = new BshError(response.status, params.path, data);\n const byPassErrorInterceptor = params.bshOptions.byPass?.interceptors?.error;\n if ((byPassErrorInterceptor == undefined || !byPassErrorInterceptor) && this.bshEngine?.getErrorInterceptors().length) {\n for (const interceptor of this.bshEngine.getErrorInterceptors()) {\n const newError = await interceptor(error, error.response, params as BshClientFnParams<any>);\n if (newError) error = newError;\n }\n }\n if (params.bshOptions.onError) {\n params.bshOptions.onError(error);\n return undefined;\n }\n else throw error;\n }\n\n if (type === 'json') {\n const data = await response.json();\n let result = data as BshResponse<T>;\n result.api = params.api;\n await this.notifyTokenRefreshedIfPresent(result);\n const byPassPostInterceptors = params.bshOptions.byPass?.interceptors?.post;\n if ((byPassPostInterceptors == undefined || !byPassPostInterceptors) && this.bshEngine?.getPostInterceptors().length) {\n for (const interceptor of this.bshEngine.getPostInterceptors()) {\n const newResult = await interceptor(result, params as BshClientFnParams<any>);\n if (newResult) result = newResult as BshResponse<T>;\n }\n }\n if (params.bshOptions.onSuccess) {\n params.bshOptions.onSuccess(data);\n return undefined;\n }\n return result;\n }\n else if (type === 'blob') {\n const blob = await response.blob();\n if (params.bshOptions.onDownload) {\n params.bshOptions.onDownload(blob);\n return undefined;\n }\n else return blob;\n }\n }\n\n private async notifyTokenRefreshedIfPresent(result: BshResponse<unknown>) {\n const accessToken = result.meta?.accessToken;\n const refreshToken = result.meta?.refreshToken;\n if (!accessToken && !refreshToken) return;\n const handler = this.bshEngine?.getOnTokenRefreshed();\n if (handler) {\n await handler({\n accessToken,\n refreshToken,\n });\n }\n }\n\n private getCookie(name: string): string | undefined {\n if (typeof document === 'undefined') return undefined;\n\n const cookies = document.cookie.split(';');\n\n for (const cookie of cookies) {\n const [key, ...valueParts] = cookie.trim().split('=');\n if (key === name) return decodeURIComponent(valueParts.join('='));\n }\n\n return undefined;\n }\n\n private getCsrfHeaders(params: BshClientFnParams<any>): Record<string, string> {\n const method = params.options?.method?.toUpperCase() || 'GET';\n if (method === 'GET' || method === 'HEAD' || method === 'OPTIONS') return {};\n const csrfToken = this.getCookie('XSRF-TOKEN');\n if (!csrfToken) return {};\n return { 'X-XSRF-TOKEN': csrfToken };\n }\n\n private async getAuthHeaders(params: BshClientFnParams<any>): Promise<Record<string, string>> {\n const auth = this.authFn ? await this.authFn() : undefined;\n\n if (auth?.type === 'APIKEY') return { Authorization: auth.token };\n\n let authHeaders: Record<string, string> = auth?.type === 'JWT'\n ? { Authorization: `Bearer ${auth.token}` }\n : this.getCsrfHeaders(params);\n\n const refreshToken = await this.refreshTokenFn?.();\n if (refreshToken) authHeaders = { ...authHeaders, 'X-BSH-REFRESHTOKEN': refreshToken };\n\n return authHeaders;\n }\n\n private async getTenantHeaders(params: BshClientFnParams<any>): Promise<Record<string, string>> {\n const tenant = await this.tenantFn?.();\n if (!tenant) return {};\n return { 'X-Tenant-Id': tenant };\n }\n\n private getClientHeaders(): Record<string, string> {\n const clientName = this.bshEngine?.getClientName();\n if (!clientName) return {};\n return { 'X-Bsh-Client': clientName };\n }\n\n private async injectHeaders(params: BshClientFnParams<any>): Promise<Record<string, string>> {\n const authHeaders = await this.getAuthHeaders(params);\n const tenantHeaders = await this.getTenantHeaders(params);\n\n return {\n ...this.getClientHeaders(),\n ...authHeaders,\n ...tenantHeaders,\n };\n }\n\n private async applyPreInterceptors<T = unknown, R = T>(params: BshClientFnParams<T, R>): Promise<BshClientFnParams<T, R>> {\n const byPassPreInterceptors = params.bshOptions.byPass?.interceptors?.pre;\n if (byPassPreInterceptors == true || !this.bshEngine?.getPreInterceptors().length) return params;\n for (const interceptor of this.bshEngine.getPreInterceptors()) {\n const newParams = await interceptor(params as BshClientFnParams<unknown, unknown>);\n if (newParams) return newParams as BshClientFnParams<T, R>;\n }\n return params;\n }\n\n async get<T = unknown>(params: BshClientFnParams<T>): Promise<BshResponse<T> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'GET' } });\n\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'GET',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T>;\n\n clientParams = await this.applyPreInterceptors<T>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async post<T = unknown, R = T>(params: BshClientFnParams<T, R>): Promise<BshResponse<R> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'POST' } });\n\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'POST',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T, R>;\n\n clientParams = await this.applyPreInterceptors<T, R>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async put<T = unknown, R = T>(params: BshClientFnParams<T, R>): Promise<BshResponse<R> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'PUT' } });\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'PUT',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T, R>;\n\n clientParams = await this.applyPreInterceptors<T, R>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async delete<T = unknown>(params: BshClientFnParams<T>): Promise<BshResponse<T> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'DELETE' } });\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'DELETE',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T>;\n\n clientParams = await this.applyPreInterceptors<T>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async patch<T = unknown>(params: BshClientFnParams<T>): Promise<BshResponse<T> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'PATCH' } });\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'PATCH',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T>;\n\n clientParams = await this.applyPreInterceptors<T>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async download<T = unknown>(params: BshClientFnParams<T>): Promise<Blob | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'GET' } });\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'GET',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T>;\n\n clientParams = await this.applyPreInterceptors<T>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'blob');\n }\n}\n","import { BshClientFn } from './types';\n\nexport * from './types';\nexport * from './bsh-client';\n\nexport const fetchClientFn: BshClientFn = async (params) => {\n return fetch(\n params.path,\n {\n method: params.options.method,\n body: params.options.requestFormat === 'form' ?\n params.options.body as BodyInit : params.options.body ?\n JSON.stringify(params.options.body) : undefined,\n headers: params.options.headers,\n }\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/client/types.ts","../src/client/bsh-client.ts","../src/client/index.ts"],"names":["error"],"mappings":"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","file":"chunk-Q2AC5OLH.js","sourcesContent":["import { BshCallbackParams } from \"@src/services\";\nimport { BshError, BshResponse, BshSearch } from \"@types\";\n\nexport type BshClientFnParams<T = unknown, R = T> = {\n path: string,\n options: {\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n responseType?: 'json' | 'blob' | 'text' | 'arrayBuffer',\n requestFormat?: 'json' | 'text' | 'form',\n body?: T | BshSearch<T> | unknown,\n formData?: FormData,\n queryParams?: Record<string, string>,\n headers?: Record<string, string>,\n },\n bshOptions: BshCallbackParams<T, R>,\n api?: string,\n entity?: string\n}\n\nexport type BshClientFn = <T = unknown>(params: BshClientFnParams<T>) => Promise<Response>;\n\nexport const defaultClientFn: BshClientFn = async (params) => {\n return fetch(\n params.path,\n {\n method: params.options.method,\n body: params.options.requestFormat === 'form' ?\n params.options.body as BodyInit : params.options.body ?\n JSON.stringify(params.options.body) : undefined,\n headers: params.options.headers,\n }\n );\n};\n\nexport type AuthToken = {\n type: 'JWT' | 'APIKEY';\n token: string\n}\n\nexport type BshAuthFn = () => Promise<AuthToken | undefined | null>;\n\nexport type BshRefreshTokenFn = () => Promise<string | undefined | null>;\n\nexport type BshOnTokenRefreshedFn = (tokens: { accessToken?: string; refreshToken?: string; }) => void | Promise<void>;\n\nexport type BshTenantFn = () => Promise<string | undefined | null>;\n\nexport type BshPostInterceptor<T = any> = (response: BshResponse<T>, params?: BshClientFnParams<T>) => Promise<BshResponse<T>>;\nexport type BshPreInterceptor<T = any, R = T> = (params: BshClientFnParams<T, R>) => Promise<BshClientFnParams<T, R>>;\nexport type BshErrorInterceptor<T = any> = (error: BshError, response?: BshResponse<T>, params?: BshClientFnParams<T>) => Promise<BshError | undefined>;\n","import { BshResponse, BshError } from \"@types\";\nimport { AuthToken, BshAuthFn, BshClientFn, BshClientFnParams, BshRefreshTokenFn, BshTenantFn, defaultClientFn } from \"@src/client/types\";\nimport { BshEngine } from \"@src/bshengine\";\n\nexport class BshClient {\n private readonly httpClient: BshClientFn;\n private readonly authFn?: BshAuthFn;\n private readonly refreshTokenFn?: BshRefreshTokenFn;\n private readonly tenantFn?: BshTenantFn;\n private readonly host: string;\n private readonly bshEngine?: BshEngine;\n\n constructor(\n host?: string,\n httpClient?: BshClientFn,\n authFn?: BshAuthFn,\n refreshTokenFn?: BshRefreshTokenFn,\n tenantFn?: BshTenantFn,\n bshEngine?: BshEngine\n ) {\n this.host = host || '';\n this.httpClient = httpClient || defaultClientFn;\n this.authFn = authFn;\n this.refreshTokenFn = refreshTokenFn;\n this.tenantFn = tenantFn;\n this.bshEngine = bshEngine;\n }\n\n private async handleResponse<T = any>(response: Response, params: BshClientFnParams<T>, type: 'json'): Promise<BshResponse<T> | undefined>\n private async handleResponse<T = any>(response: Response, params: BshClientFnParams<T>, type: 'blob'): Promise<Blob | undefined>\n private async handleResponse<T = any>(response: Response, params: BshClientFnParams<T>, type: 'json' | 'blob'): Promise<BshResponse<T> | Blob | undefined> {\n if (!response.ok) {\n let data: any = undefined;\n try {\n data = await response.json();\n } catch (error) {\n try {\n data = await response.text();\n } catch (error) {\n data = {\n message: 'Connection Issue'\n };\n }\n }\n let error = new BshError(response.status, params.path, data);\n const byPassErrorInterceptor = params.bshOptions.byPass?.interceptors?.error;\n if ((byPassErrorInterceptor == undefined || !byPassErrorInterceptor) && this.bshEngine?.getErrorInterceptors().length) {\n for (const interceptor of this.bshEngine.getErrorInterceptors()) {\n const newError = await interceptor(error, error.response, params as BshClientFnParams<any>);\n if (newError) error = newError;\n }\n }\n if (params.bshOptions.onError) {\n params.bshOptions.onError(error);\n return undefined;\n }\n else throw error;\n }\n\n if (type === 'json') {\n const data = await response.json();\n let result = data as BshResponse<T>;\n result.api = params.api;\n await this.notifyTokenRefreshedIfPresent(result);\n const byPassPostInterceptors = params.bshOptions.byPass?.interceptors?.post;\n if ((byPassPostInterceptors == undefined || !byPassPostInterceptors) && this.bshEngine?.getPostInterceptors().length) {\n for (const interceptor of this.bshEngine.getPostInterceptors()) {\n const newResult = await interceptor(result, params as BshClientFnParams<any>);\n if (newResult) result = newResult as BshResponse<T>;\n }\n }\n if (params.bshOptions.onSuccess) {\n params.bshOptions.onSuccess(data);\n return undefined;\n }\n return result;\n }\n else if (type === 'blob') {\n const blob = await response.blob();\n if (params.bshOptions.onDownload) {\n params.bshOptions.onDownload(blob);\n return undefined;\n }\n else return blob;\n }\n }\n\n private async notifyTokenRefreshedIfPresent(result: BshResponse<unknown>) {\n const accessToken = result.meta?.accessToken;\n const refreshToken = result.meta?.refreshToken;\n if (!accessToken && !refreshToken) return;\n const handler = this.bshEngine?.getOnTokenRefreshed();\n if (handler) {\n await handler({\n accessToken,\n refreshToken,\n });\n }\n }\n\n private getCookie(name: string): string | undefined {\n if (typeof document === 'undefined') return undefined;\n\n const cookies = document.cookie.split(';');\n\n for (const cookie of cookies) {\n const [key, ...valueParts] = cookie.trim().split('=');\n if (key === name) return decodeURIComponent(valueParts.join('='));\n }\n\n return undefined;\n }\n\n private getCsrfHeaders(params: BshClientFnParams<any>): Record<string, string> {\n const method = params.options?.method?.toUpperCase() || 'GET';\n if (method === 'GET' || method === 'HEAD' || method === 'OPTIONS') return {};\n const csrfToken = this.getCookie('XSRF-TOKEN');\n if (!csrfToken) return {};\n return { 'X-XSRF-TOKEN': csrfToken };\n }\n\n private async getAuthHeaders(params: BshClientFnParams<any>): Promise<Record<string, string>> {\n const auth = this.authFn ? await this.authFn() : undefined;\n\n if (auth?.type === 'APIKEY') return { Authorization: auth.token };\n\n let authHeaders: Record<string, string> = auth?.type === 'JWT'\n ? { Authorization: `Bearer ${auth.token}` }\n : this.getCsrfHeaders(params);\n\n const refreshToken = await this.refreshTokenFn?.();\n if (refreshToken) authHeaders = { ...authHeaders, 'X-BSH-REFRESHTOKEN': refreshToken };\n\n return authHeaders;\n }\n\n private async getTenantHeaders(params: BshClientFnParams<any>): Promise<Record<string, string>> {\n const tenant = await this.tenantFn?.();\n if (!tenant) return {};\n return { 'X-Tenant-Id': tenant };\n }\n\n private getClientHeaders(): Record<string, string> {\n const clientName = this.bshEngine?.getClientName();\n if (!clientName) return {};\n return { 'X-Bsh-Client': clientName };\n }\n\n private async injectHeaders(params: BshClientFnParams<any>): Promise<Record<string, string>> {\n const authHeaders = await this.getAuthHeaders(params);\n const tenantHeaders = await this.getTenantHeaders(params);\n\n return {\n ...this.getClientHeaders(),\n ...authHeaders,\n ...tenantHeaders,\n };\n }\n\n private async applyPreInterceptors<T = unknown, R = T>(params: BshClientFnParams<T, R>): Promise<BshClientFnParams<T, R>> {\n const byPassPreInterceptors = params.bshOptions.byPass?.interceptors?.pre;\n if (byPassPreInterceptors == true || !this.bshEngine?.getPreInterceptors().length) return params;\n for (const interceptor of this.bshEngine.getPreInterceptors()) {\n const newParams = await interceptor(params as BshClientFnParams<unknown, unknown>);\n if (newParams) return newParams as BshClientFnParams<T, R>;\n }\n return params;\n }\n\n async get<T = unknown>(params: BshClientFnParams<T>): Promise<BshResponse<T> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'GET' } });\n\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'GET',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T>;\n\n clientParams = await this.applyPreInterceptors<T>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async post<T = unknown, R = T>(params: BshClientFnParams<T, R>): Promise<BshResponse<R> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'POST' } });\n\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'POST',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T, R>;\n\n clientParams = await this.applyPreInterceptors<T, R>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async put<T = unknown, R = T>(params: BshClientFnParams<T, R>): Promise<BshResponse<R> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'PUT' } });\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'PUT',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T, R>;\n\n clientParams = await this.applyPreInterceptors<T, R>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async delete<T = unknown>(params: BshClientFnParams<T>): Promise<BshResponse<T> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'DELETE' } });\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'DELETE',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T>;\n\n clientParams = await this.applyPreInterceptors<T>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async patch<T = unknown>(params: BshClientFnParams<T>): Promise<BshResponse<T> | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'PATCH' } });\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'PATCH',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T>;\n\n clientParams = await this.applyPreInterceptors<T>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'json');\n }\n\n async download<T = unknown>(params: BshClientFnParams<T>): Promise<Blob | undefined> {\n const authHeaders = await this.injectHeaders({ ...params, options: { ...params.options, method: 'GET' } });\n let clientParams = {\n ...params,\n path: `${this.host}${params.path}`,\n options: {\n ...params.options,\n method: 'GET',\n headers: {\n ...params.options.headers,\n ...authHeaders\n }\n }\n } as BshClientFnParams<T>;\n\n clientParams = await this.applyPreInterceptors<T>(clientParams);\n const response = await this.httpClient(clientParams);\n return this.handleResponse(response, clientParams, 'blob');\n }\n}\n","import { BshClientFn } from './types';\n\nexport * from './types';\nexport * from './bsh-client';\n\nexport const fetchClientFn: BshClientFn = async (params) => {\n return fetch(\n params.path,\n {\n method: params.options.method,\n body: params.options.requestFormat === 'form' ?\n params.options.body as BodyInit : params.options.body ?\n JSON.stringify(params.options.body) : undefined,\n headers: params.options.headers,\n }\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- export { BshClient, defaultClientFn, fetchClientFn } from '../chunk-I5DDZIGR.js';
2
- import '../chunk-7SPVM2YJ.js';
1
+ export { BshClient, defaultClientFn, fetchClientFn } from '../chunk-Q2AC5OLH.js';
2
+ import '../chunk-ARI3OLHJ.js';
3
3
  import '../chunk-BAUGZHUO.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { fetchClientFn, BshClient } from './chunk-I5DDZIGR.js';
1
+ import { fetchClientFn, BshClient } from './chunk-Q2AC5OLH.js';
2
2
  import { EntityService, AuthService, AuthSessionService, UserService, TenantService, SettingsService, ImageService, MailingService, BshUtilsService, CachingService, ApiKeyService } from './chunk-M7M65WTP.js';
3
- import './chunk-7SPVM2YJ.js';
3
+ import './chunk-ARI3OLHJ.js';
4
4
  import { CoreEntities } from './chunk-BAUGZHUO.js';
5
5
 
6
6
  // src/services/plugins/index.ts
@@ -655,7 +655,7 @@ type AuthTokens = {
655
655
  access: string;
656
656
  refresh: string;
657
657
  };
658
- type BshAuthSessionStatus = 'Active' | 'Expired' | 'Revoked' | 'LoggedOut' | 'Blocked';
658
+ type BshAuthSessionStatus = 'Active' | 'Expired' | 'Revoked' | 'LoggedOut';
659
659
  declare const BshSessionMetaData: {
660
660
  readonly browsers: readonly ["Edge", "Opera", "Samsung Internet", "Firefox", "Chrome", "Safari", "Postman", "curl", "axios", "node-fetch", "Java", "Python"];
661
661
  readonly os: readonly ["Windows", "iOS", "Android", "ChromeOS", "macOS", "Linux"];
@@ -682,7 +682,6 @@ type BshAuthSession = Omit<BshObject, 'persistenceId'> & {
682
682
  iat: BshDate;
683
683
  exp: BshDate;
684
684
  status: BshAuthSessionStatus;
685
- reason?: string;
686
685
  metadata?: BshAuthSessionMetadata;
687
686
  current: boolean;
688
687
  };
@@ -1,4 +1,4 @@
1
- export { AggregateFunctions, BshEntityPermissions, BshEntityTypes, BshError, BshInsertDuplicates, BshPKStrategies, BshPKTypes, BshSessionMetaData, BshUpdateStrategies, ComparisonOperators, LogicalOperators, PolicyActions, PrincipalType, defaultSettings, formatFileSize, isExpired, isOk } from '../chunk-7SPVM2YJ.js';
1
+ export { AggregateFunctions, BshEntityPermissions, BshEntityTypes, BshError, BshInsertDuplicates, BshPKStrategies, BshPKTypes, BshSessionMetaData, BshUpdateStrategies, ComparisonOperators, LogicalOperators, PolicyActions, PrincipalType, defaultSettings, formatFileSize, isExpired, isOk } from '../chunk-ARI3OLHJ.js';
2
2
  export { CoreEntities, PluginBasedEntities } from '../chunk-BAUGZHUO.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bshsolutions/sdk",
3
- "version": "0.0.40-beta.4",
3
+ "version": "0.0.41-beta",
4
4
  "description": "TypeScript SDK for integrating with BSH Engine <https://docs.bousalih.com>",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",