@23blocks/sdk 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,53 +30,54 @@ import { createTokenManager } from './token-manager.js';
30
30
  * @param config - Client configuration
31
31
  * @returns A configured client with all blocks and automatic auth management
32
32
  *
33
- * @example Token mode (default)
33
+ * @example Basic usage with multiple services
34
34
  * ```typescript
35
35
  * const client = create23BlocksClient({
36
- * baseUrl: 'https://api.yourapp.com',
37
36
  * appId: 'your-app-id',
37
+ * urls: {
38
+ * authentication: 'https://gateway.23blocks.com',
39
+ * crm: 'https://crm.23blocks.com',
40
+ * products: 'https://products.23blocks.com',
41
+ * },
38
42
  * });
39
43
  *
40
44
  * // Sign in - tokens are stored automatically
41
45
  * await client.auth.signIn({ email: 'user@example.com', password: 'password' });
42
46
  *
43
- * // All subsequent requests include the token automatically
47
+ * // Each service uses its own URL
44
48
  * const products = await client.products.products.list();
45
- * const user = await client.auth.getCurrentUser();
49
+ * const contacts = await client.crm.contacts.list();
46
50
  *
47
51
  * // Sign out - tokens are cleared automatically
48
52
  * await client.auth.signOut();
49
53
  * ```
50
54
  *
51
- * @example Cookie mode (recommended for new projects)
55
+ * @example Cookie mode (recommended for security)
52
56
  * ```typescript
53
57
  * const client = create23BlocksClient({
54
- * baseUrl: 'https://api.yourapp.com',
55
58
  * appId: 'your-app-id',
56
59
  * authMode: 'cookie',
60
+ * urls: {
61
+ * authentication: 'https://gateway.23blocks.com',
62
+ * crm: 'https://crm.23blocks.com',
63
+ * },
57
64
  * });
58
- *
59
- * // Sign in - backend sets httpOnly cookie
60
- * await client.auth.signIn({ email: 'user@example.com', password: 'password' });
61
- *
62
- * // Requests automatically include cookies
63
- * const products = await client.products.products.list();
64
65
  * ```
65
66
  *
66
67
  * @example SSR with token forwarding
67
68
  * ```typescript
68
- * // On the server
69
69
  * const client = create23BlocksClient({
70
- * baseUrl: 'https://api.yourapp.com',
71
70
  * appId: 'your-app-id',
72
71
  * storage: 'memory',
73
- * headers: {
74
- * Authorization: `Bearer ${tokenFromRequest}`,
72
+ * headers: { Authorization: `Bearer ${tokenFromRequest}` },
73
+ * urls: {
74
+ * authentication: 'https://gateway.23blocks.com',
75
+ * crm: 'https://crm.23blocks.com',
75
76
  * },
76
77
  * });
77
78
  * ```
78
79
  */ export function create23BlocksClient(config) {
79
- const { baseUrl, appId, tenantId, authMode = 'token', storage = isBrowser() ? 'localStorage' : 'memory', headers: staticHeaders = {}, timeout } = config;
80
+ const { urls, appId, tenantId, authMode = 'token', storage = isBrowser() ? 'localStorage' : 'memory', headers: staticHeaders = {}, timeout } = config;
80
81
  // Create token manager for token mode
81
82
  let tokenManager = null;
82
83
  if (authMode === 'token') {
@@ -86,57 +87,66 @@ import { createTokenManager } from './token-manager.js';
86
87
  storage
87
88
  });
88
89
  }
89
- // Create transport with appropriate auth strategy
90
- const transport = createHttpTransport({
91
- baseUrl,
92
- timeout,
93
- credentials: authMode === 'cookie' ? 'include' : undefined,
94
- headers: ()=>{
95
- const headers = _extends({}, staticHeaders, {
96
- appid: appId
97
- });
98
- if (tenantId) {
99
- headers['tenant-id'] = tenantId;
100
- }
101
- // In token mode, add Authorization header if we have a token
102
- if (authMode === 'token' && tokenManager) {
103
- const token = tokenManager.getAccessToken();
104
- if (token) {
105
- headers['Authorization'] = `Bearer ${token}`;
90
+ // Factory to create transport for a specific service URL
91
+ function createServiceTransport(baseUrl) {
92
+ return createHttpTransport({
93
+ baseUrl,
94
+ timeout,
95
+ credentials: authMode === 'cookie' ? 'include' : undefined,
96
+ headers: ()=>{
97
+ const headers = _extends({}, staticHeaders, {
98
+ appid: appId
99
+ });
100
+ if (tenantId) {
101
+ headers['tenant-id'] = tenantId;
106
102
  }
103
+ // In token mode, add Authorization header if we have a token
104
+ if (authMode === 'token' && tokenManager) {
105
+ const token = tokenManager.getAccessToken();
106
+ if (token) {
107
+ headers['Authorization'] = `Bearer ${token}`;
108
+ }
109
+ }
110
+ return headers;
107
111
  }
108
- return headers;
109
- }
110
- });
111
- // Create all blocks
112
+ });
113
+ }
114
+ // Helper to create a proxy that throws when accessing unconfigured service
115
+ function createUnconfiguredServiceProxy(serviceName, urlKey) {
116
+ return new Proxy({}, {
117
+ get (_target, prop) {
118
+ throw new Error(`[23blocks] Cannot access '${serviceName}.${String(prop)}': ` + `The ${serviceName} service URL is not configured. ` + `Add 'urls.${urlKey}' to your client configuration.`);
119
+ }
120
+ });
121
+ }
122
+ // Create block config
112
123
  const blockConfig = {
113
124
  appId,
114
125
  tenantId
115
126
  };
116
- const authenticationBlock = createAuthenticationBlock(transport, blockConfig);
117
- const searchBlock = createSearchBlock(transport, blockConfig);
118
- const productsBlock = createProductsBlock(transport, blockConfig);
119
- const crmBlock = createCrmBlock(transport, blockConfig);
120
- const contentBlock = createContentBlock(transport, blockConfig);
121
- const geolocationBlock = createGeolocationBlock(transport, blockConfig);
122
- const conversationsBlock = createConversationsBlock(transport, blockConfig);
123
- const filesBlock = createFilesBlock(transport, blockConfig);
124
- const formsBlock = createFormsBlock(transport, blockConfig);
125
- const assetsBlock = createAssetsBlock(transport, blockConfig);
126
- const campaignsBlock = createCampaignsBlock(transport, blockConfig);
127
- const companyBlock = createCompanyBlock(transport, blockConfig);
128
- const rewardsBlock = createRewardsBlock(transport, blockConfig);
129
- const salesBlock = createSalesBlock(transport, blockConfig);
130
- const walletBlock = createWalletBlock(transport, blockConfig);
131
- const jarvisBlock = createJarvisBlock(transport, blockConfig);
132
- const onboardingBlock = createOnboardingBlock(transport, blockConfig);
133
- const universityBlock = createUniversityBlock(transport, blockConfig);
134
- // Create managed auth service with automatic token handling
135
- const managedAuth = {
136
- // Wrapped methods that handle tokens
127
+ // Create blocks only if their URL is provided
128
+ const authenticationBlock = urls.authentication ? createAuthenticationBlock(createServiceTransport(urls.authentication), blockConfig) : null;
129
+ const searchBlock = urls.search ? createSearchBlock(createServiceTransport(urls.search), blockConfig) : null;
130
+ const productsBlock = urls.products ? createProductsBlock(createServiceTransport(urls.products), blockConfig) : null;
131
+ const crmBlock = urls.crm ? createCrmBlock(createServiceTransport(urls.crm), blockConfig) : null;
132
+ const contentBlock = urls.content ? createContentBlock(createServiceTransport(urls.content), blockConfig) : null;
133
+ const geolocationBlock = urls.geolocation ? createGeolocationBlock(createServiceTransport(urls.geolocation), blockConfig) : null;
134
+ const conversationsBlock = urls.conversations ? createConversationsBlock(createServiceTransport(urls.conversations), blockConfig) : null;
135
+ const filesBlock = urls.files ? createFilesBlock(createServiceTransport(urls.files), blockConfig) : null;
136
+ const formsBlock = urls.forms ? createFormsBlock(createServiceTransport(urls.forms), blockConfig) : null;
137
+ const assetsBlock = urls.assets ? createAssetsBlock(createServiceTransport(urls.assets), blockConfig) : null;
138
+ const campaignsBlock = urls.campaigns ? createCampaignsBlock(createServiceTransport(urls.campaigns), blockConfig) : null;
139
+ const companyBlock = urls.company ? createCompanyBlock(createServiceTransport(urls.company), blockConfig) : null;
140
+ const rewardsBlock = urls.rewards ? createRewardsBlock(createServiceTransport(urls.rewards), blockConfig) : null;
141
+ const salesBlock = urls.sales ? createSalesBlock(createServiceTransport(urls.sales), blockConfig) : null;
142
+ const walletBlock = urls.wallet ? createWalletBlock(createServiceTransport(urls.wallet), blockConfig) : null;
143
+ const jarvisBlock = urls.jarvis ? createJarvisBlock(createServiceTransport(urls.jarvis), blockConfig) : null;
144
+ const onboardingBlock = urls.onboarding ? createOnboardingBlock(createServiceTransport(urls.onboarding), blockConfig) : null;
145
+ const universityBlock = urls.university ? createUniversityBlock(createServiceTransport(urls.university), blockConfig) : null;
146
+ // Create managed auth service with automatic token handling (only if auth URL configured)
147
+ const managedAuth = authenticationBlock ? {
137
148
  async signIn (request) {
138
149
  const response = await authenticationBlock.auth.signIn(request);
139
- // In token mode, store the tokens
140
150
  if (authMode === 'token' && tokenManager && response.accessToken) {
141
151
  tokenManager.setTokens(response.accessToken, response.refreshToken);
142
152
  }
@@ -144,7 +154,6 @@ import { createTokenManager } from './token-manager.js';
144
154
  },
145
155
  async signUp (request) {
146
156
  const response = await authenticationBlock.auth.signUp(request);
147
- // Store token if returned (some flows auto-confirm)
148
157
  if (authMode === 'token' && tokenManager && response.accessToken) {
149
158
  tokenManager.setTokens(response.accessToken);
150
159
  }
@@ -152,7 +161,6 @@ import { createTokenManager } from './token-manager.js';
152
161
  },
153
162
  async signOut () {
154
163
  await authenticationBlock.auth.signOut();
155
- // Clear tokens in token mode
156
164
  if (authMode === 'token' && tokenManager) {
157
165
  tokenManager.clearTokens();
158
166
  }
@@ -171,7 +179,6 @@ import { createTokenManager } from './token-manager.js';
171
179
  }
172
180
  return response;
173
181
  },
174
- // Pass-through methods
175
182
  validateToken: authenticationBlock.auth.validateToken.bind(authenticationBlock.auth),
176
183
  getCurrentUser: authenticationBlock.auth.getCurrentUser.bind(authenticationBlock.auth),
177
184
  requestPasswordReset: authenticationBlock.auth.requestPasswordReset.bind(authenticationBlock.auth),
@@ -181,32 +188,33 @@ import { createTokenManager } from './token-manager.js';
181
188
  sendInvitation: authenticationBlock.auth.sendInvitation.bind(authenticationBlock.auth),
182
189
  confirmEmail: authenticationBlock.auth.confirmEmail.bind(authenticationBlock.auth),
183
190
  resendConfirmation: authenticationBlock.auth.resendConfirmation.bind(authenticationBlock.auth)
184
- };
191
+ } : createUnconfiguredServiceProxy('auth', 'authentication');
192
+ var _authenticationBlock_users, _authenticationBlock_roles, _authenticationBlock_apiKeys;
185
193
  return {
186
194
  // Authentication with managed tokens
187
195
  auth: managedAuth,
188
- users: authenticationBlock.users,
189
- roles: authenticationBlock.roles,
190
- apiKeys: authenticationBlock.apiKeys,
191
- authentication: authenticationBlock,
192
- // All other blocks
193
- search: searchBlock,
194
- products: productsBlock,
195
- crm: crmBlock,
196
- content: contentBlock,
197
- geolocation: geolocationBlock,
198
- conversations: conversationsBlock,
199
- files: filesBlock,
200
- forms: formsBlock,
201
- assets: assetsBlock,
202
- campaigns: campaignsBlock,
203
- company: companyBlock,
204
- rewards: rewardsBlock,
205
- sales: salesBlock,
206
- wallet: walletBlock,
207
- jarvis: jarvisBlock,
208
- onboarding: onboardingBlock,
209
- university: universityBlock,
196
+ users: (_authenticationBlock_users = authenticationBlock == null ? void 0 : authenticationBlock.users) != null ? _authenticationBlock_users : createUnconfiguredServiceProxy('users', 'authentication'),
197
+ roles: (_authenticationBlock_roles = authenticationBlock == null ? void 0 : authenticationBlock.roles) != null ? _authenticationBlock_roles : createUnconfiguredServiceProxy('roles', 'authentication'),
198
+ apiKeys: (_authenticationBlock_apiKeys = authenticationBlock == null ? void 0 : authenticationBlock.apiKeys) != null ? _authenticationBlock_apiKeys : createUnconfiguredServiceProxy('apiKeys', 'authentication'),
199
+ authentication: authenticationBlock != null ? authenticationBlock : createUnconfiguredServiceProxy('authentication', 'authentication'),
200
+ // All blocks - use proxy if not configured
201
+ search: searchBlock != null ? searchBlock : createUnconfiguredServiceProxy('search', 'search'),
202
+ products: productsBlock != null ? productsBlock : createUnconfiguredServiceProxy('products', 'products'),
203
+ crm: crmBlock != null ? crmBlock : createUnconfiguredServiceProxy('crm', 'crm'),
204
+ content: contentBlock != null ? contentBlock : createUnconfiguredServiceProxy('content', 'content'),
205
+ geolocation: geolocationBlock != null ? geolocationBlock : createUnconfiguredServiceProxy('geolocation', 'geolocation'),
206
+ conversations: conversationsBlock != null ? conversationsBlock : createUnconfiguredServiceProxy('conversations', 'conversations'),
207
+ files: filesBlock != null ? filesBlock : createUnconfiguredServiceProxy('files', 'files'),
208
+ forms: formsBlock != null ? formsBlock : createUnconfiguredServiceProxy('forms', 'forms'),
209
+ assets: assetsBlock != null ? assetsBlock : createUnconfiguredServiceProxy('assets', 'assets'),
210
+ campaigns: campaignsBlock != null ? campaignsBlock : createUnconfiguredServiceProxy('campaigns', 'campaigns'),
211
+ company: companyBlock != null ? companyBlock : createUnconfiguredServiceProxy('company', 'company'),
212
+ rewards: rewardsBlock != null ? rewardsBlock : createUnconfiguredServiceProxy('rewards', 'rewards'),
213
+ sales: salesBlock != null ? salesBlock : createUnconfiguredServiceProxy('sales', 'sales'),
214
+ wallet: walletBlock != null ? walletBlock : createUnconfiguredServiceProxy('wallet', 'wallet'),
215
+ jarvis: jarvisBlock != null ? jarvisBlock : createUnconfiguredServiceProxy('jarvis', 'jarvis'),
216
+ onboarding: onboardingBlock != null ? onboardingBlock : createUnconfiguredServiceProxy('onboarding', 'onboarding'),
217
+ university: universityBlock != null ? universityBlock : createUnconfiguredServiceProxy('university', 'university'),
210
218
  // Utilities
211
219
  getAccessToken () {
212
220
  if (authMode !== 'token' || !tokenManager) return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/client.ts"],"sourcesContent":["import { createHttpTransport } from '@23blocks/transport-http';\nimport {\n createAuthenticationBlock,\n type AuthenticationBlock,\n type SignInRequest,\n type SignInResponse,\n type SignUpRequest,\n type SignUpResponse,\n type MagicLinkVerifyRequest,\n type AcceptInvitationRequest,\n} from '@23blocks/block-authentication';\nimport { createSearchBlock, type SearchBlock } from '@23blocks/block-search';\nimport { createProductsBlock, type ProductsBlock } from '@23blocks/block-products';\nimport { createCrmBlock, type CrmBlock } from '@23blocks/block-crm';\nimport { createContentBlock, type ContentBlock } from '@23blocks/block-content';\nimport { createGeolocationBlock, type GeolocationBlock } from '@23blocks/block-geolocation';\nimport { createConversationsBlock, type ConversationsBlock } from '@23blocks/block-conversations';\nimport { createFilesBlock, type FilesBlock } from '@23blocks/block-files';\nimport { createFormsBlock, type FormsBlock } from '@23blocks/block-forms';\nimport { createAssetsBlock, type AssetsBlock } from '@23blocks/block-assets';\nimport { createCampaignsBlock, type CampaignsBlock } from '@23blocks/block-campaigns';\nimport { createCompanyBlock, type CompanyBlock } from '@23blocks/block-company';\nimport { createRewardsBlock, type RewardsBlock } from '@23blocks/block-rewards';\nimport { createSalesBlock, type SalesBlock } from '@23blocks/block-sales';\nimport { createWalletBlock, type WalletBlock } from '@23blocks/block-wallet';\nimport { createJarvisBlock, type JarvisBlock } from '@23blocks/block-jarvis';\nimport { createOnboardingBlock, type OnboardingBlock } from '@23blocks/block-onboarding';\nimport { createUniversityBlock, type UniversityBlock } from '@23blocks/block-university';\n\nimport { createTokenManager, type StorageType, type TokenManager, type TokenManagerConfig } from './token-manager.js';\n\n/**\n * Authentication mode\n * - 'token': Store tokens in browser storage, attach Authorization header\n * - 'cookie': Use httpOnly cookies set by backend (recommended for new projects)\n */\nexport type AuthMode = 'token' | 'cookie';\n\n/**\n * Client configuration\n */\nexport interface ClientConfig {\n /**\n * Base URL for the 23blocks API\n * @example 'https://api.yourapp.com'\n */\n baseUrl: string;\n\n /**\n * Application ID\n */\n appId: string;\n\n /**\n * Tenant ID (optional, for multi-tenant setups)\n */\n tenantId?: string;\n\n /**\n * Authentication mode\n * - 'token' (default): SDK stores tokens in localStorage/sessionStorage/memory\n * - 'cookie': Backend manages auth via httpOnly cookies\n */\n authMode?: AuthMode;\n\n /**\n * Storage type for token mode\n * Only applicable when authMode is 'token'\n * @default 'localStorage' in browser, 'memory' in SSR\n */\n storage?: StorageType;\n\n /**\n * Additional headers to include with every request\n * Useful for SSR cookie forwarding\n */\n headers?: Record<string, string>;\n\n /**\n * Request timeout in milliseconds\n * @default 30000\n */\n timeout?: number;\n}\n\n/**\n * Auth service wrapper with automatic token management\n */\nexport interface ManagedAuthService extends Omit<AuthenticationBlock['auth'], 'signIn' | 'signUp' | 'signOut' | 'verifyMagicLink' | 'acceptInvitation'> {\n /**\n * Sign in and automatically store tokens (token mode) or let backend set cookies (cookie mode)\n */\n signIn(request: SignInRequest): Promise<SignInResponse>;\n\n /**\n * Sign up and optionally store tokens if returned\n */\n signUp(request: SignUpRequest): Promise<SignUpResponse>;\n\n /**\n * Sign out and clear stored tokens/session\n */\n signOut(): Promise<void>;\n\n /**\n * Verify magic link and store tokens\n */\n verifyMagicLink(request: MagicLinkVerifyRequest): Promise<SignInResponse>;\n\n /**\n * Accept invitation and store tokens\n */\n acceptInvitation(request: AcceptInvitationRequest): Promise<SignInResponse>;\n}\n\n/**\n * 23blocks client interface\n */\nexport interface Blocks23Client {\n // ─────────────────────────────────────────────────────────────────────────────\n // Blocks\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Authentication operations with automatic token management\n */\n auth: ManagedAuthService;\n\n /**\n * User management operations\n */\n users: AuthenticationBlock['users'];\n\n /**\n * Role and permission management\n */\n roles: AuthenticationBlock['roles'];\n\n /**\n * API key management\n */\n apiKeys: AuthenticationBlock['apiKeys'];\n\n /**\n * Full authentication block (advanced access)\n */\n authentication: AuthenticationBlock;\n\n /**\n * Search and favorites\n */\n search: SearchBlock;\n\n /**\n * Products, cart, and catalog\n */\n products: ProductsBlock;\n\n /**\n * CRM - contacts, organizations, deals\n */\n crm: CrmBlock;\n\n /**\n * Content management\n */\n content: ContentBlock;\n\n /**\n * Geolocation - addresses, places\n */\n geolocation: GeolocationBlock;\n\n /**\n * Messaging and conversations\n */\n conversations: ConversationsBlock;\n\n /**\n * File uploads and storage\n */\n files: FilesBlock;\n\n /**\n * Form builder and submissions\n */\n forms: FormsBlock;\n\n /**\n * Asset management\n */\n assets: AssetsBlock;\n\n /**\n * Marketing campaigns\n */\n campaigns: CampaignsBlock;\n\n /**\n * Company settings\n */\n company: CompanyBlock;\n\n /**\n * Rewards and loyalty\n */\n rewards: RewardsBlock;\n\n /**\n * Sales, orders, invoices\n */\n sales: SalesBlock;\n\n /**\n * Digital wallet\n */\n wallet: WalletBlock;\n\n /**\n * AI assistant\n */\n jarvis: JarvisBlock;\n\n /**\n * User onboarding\n */\n onboarding: OnboardingBlock;\n\n /**\n * Learning management\n */\n university: UniversityBlock;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Utilities\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Get the current access token (token mode only)\n * Returns null if in cookie mode or no token stored\n */\n getAccessToken(): string | null;\n\n /**\n * Get the current refresh token (token mode only)\n * Returns null if in cookie mode or no token stored\n */\n getRefreshToken(): string | null;\n\n /**\n * Manually set tokens (token mode only)\n * Useful for SSR hydration\n */\n setTokens(accessToken: string, refreshToken?: string): void;\n\n /**\n * Clear the current session (tokens or signal backend to clear cookie)\n */\n clearSession(): void;\n\n /**\n * Check if user is likely authenticated\n * In token mode: checks if token exists\n * In cookie mode: always returns null (check with validateToken instead)\n */\n isAuthenticated(): boolean | null;\n}\n\n/**\n * Detect browser environment\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n}\n\n/**\n * Create a 23blocks client instance\n *\n * @param config - Client configuration\n * @returns A configured client with all blocks and automatic auth management\n *\n * @example Token mode (default)\n * ```typescript\n * const client = create23BlocksClient({\n * baseUrl: 'https://api.yourapp.com',\n * appId: 'your-app-id',\n * });\n *\n * // Sign in - tokens are stored automatically\n * await client.auth.signIn({ email: 'user@example.com', password: 'password' });\n *\n * // All subsequent requests include the token automatically\n * const products = await client.products.products.list();\n * const user = await client.auth.getCurrentUser();\n *\n * // Sign out - tokens are cleared automatically\n * await client.auth.signOut();\n * ```\n *\n * @example Cookie mode (recommended for new projects)\n * ```typescript\n * const client = create23BlocksClient({\n * baseUrl: 'https://api.yourapp.com',\n * appId: 'your-app-id',\n * authMode: 'cookie',\n * });\n *\n * // Sign in - backend sets httpOnly cookie\n * await client.auth.signIn({ email: 'user@example.com', password: 'password' });\n *\n * // Requests automatically include cookies\n * const products = await client.products.products.list();\n * ```\n *\n * @example SSR with token forwarding\n * ```typescript\n * // On the server\n * const client = create23BlocksClient({\n * baseUrl: 'https://api.yourapp.com',\n * appId: 'your-app-id',\n * storage: 'memory',\n * headers: {\n * Authorization: `Bearer ${tokenFromRequest}`,\n * },\n * });\n * ```\n */\nexport function create23BlocksClient(config: ClientConfig): Blocks23Client {\n const {\n baseUrl,\n appId,\n tenantId,\n authMode = 'token',\n storage = isBrowser() ? 'localStorage' : 'memory',\n headers: staticHeaders = {},\n timeout,\n } = config;\n\n // Create token manager for token mode\n let tokenManager: TokenManager | null = null;\n if (authMode === 'token') {\n tokenManager = createTokenManager({\n appId,\n tenantId,\n storage,\n });\n }\n\n // Create transport with appropriate auth strategy\n const transport = createHttpTransport({\n baseUrl,\n timeout,\n credentials: authMode === 'cookie' ? 'include' : undefined,\n headers: () => {\n const headers: Record<string, string> = {\n ...staticHeaders,\n appid: appId,\n };\n\n if (tenantId) {\n headers['tenant-id'] = tenantId;\n }\n\n // In token mode, add Authorization header if we have a token\n if (authMode === 'token' && tokenManager) {\n const token = tokenManager.getAccessToken();\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n }\n\n return headers;\n },\n });\n\n // Create all blocks\n const blockConfig = { appId, tenantId };\n\n const authenticationBlock = createAuthenticationBlock(transport, blockConfig);\n const searchBlock = createSearchBlock(transport, blockConfig);\n const productsBlock = createProductsBlock(transport, blockConfig);\n const crmBlock = createCrmBlock(transport, blockConfig);\n const contentBlock = createContentBlock(transport, blockConfig);\n const geolocationBlock = createGeolocationBlock(transport, blockConfig);\n const conversationsBlock = createConversationsBlock(transport, blockConfig);\n const filesBlock = createFilesBlock(transport, blockConfig);\n const formsBlock = createFormsBlock(transport, blockConfig);\n const assetsBlock = createAssetsBlock(transport, blockConfig);\n const campaignsBlock = createCampaignsBlock(transport, blockConfig);\n const companyBlock = createCompanyBlock(transport, blockConfig);\n const rewardsBlock = createRewardsBlock(transport, blockConfig);\n const salesBlock = createSalesBlock(transport, blockConfig);\n const walletBlock = createWalletBlock(transport, blockConfig);\n const jarvisBlock = createJarvisBlock(transport, blockConfig);\n const onboardingBlock = createOnboardingBlock(transport, blockConfig);\n const universityBlock = createUniversityBlock(transport, blockConfig);\n\n // Create managed auth service with automatic token handling\n const managedAuth: ManagedAuthService = {\n // Wrapped methods that handle tokens\n async signIn(request: SignInRequest): Promise<SignInResponse> {\n const response = await authenticationBlock.auth.signIn(request);\n\n // In token mode, store the tokens\n if (authMode === 'token' && tokenManager && response.accessToken) {\n tokenManager.setTokens(response.accessToken, response.refreshToken);\n }\n\n return response;\n },\n\n async signUp(request: SignUpRequest): Promise<SignUpResponse> {\n const response = await authenticationBlock.auth.signUp(request);\n\n // Store token if returned (some flows auto-confirm)\n if (authMode === 'token' && tokenManager && response.accessToken) {\n tokenManager.setTokens(response.accessToken);\n }\n\n return response;\n },\n\n async signOut(): Promise<void> {\n await authenticationBlock.auth.signOut();\n\n // Clear tokens in token mode\n if (authMode === 'token' && tokenManager) {\n tokenManager.clearTokens();\n }\n },\n\n async verifyMagicLink(request: MagicLinkVerifyRequest): Promise<SignInResponse> {\n const response = await authenticationBlock.auth.verifyMagicLink(request);\n\n if (authMode === 'token' && tokenManager && response.accessToken) {\n tokenManager.setTokens(response.accessToken, response.refreshToken);\n }\n\n return response;\n },\n\n async acceptInvitation(request: AcceptInvitationRequest): Promise<SignInResponse> {\n const response = await authenticationBlock.auth.acceptInvitation(request);\n\n if (authMode === 'token' && tokenManager && response.accessToken) {\n tokenManager.setTokens(response.accessToken, response.refreshToken);\n }\n\n return response;\n },\n\n // Pass-through methods\n validateToken: authenticationBlock.auth.validateToken.bind(authenticationBlock.auth),\n getCurrentUser: authenticationBlock.auth.getCurrentUser.bind(authenticationBlock.auth),\n requestPasswordReset: authenticationBlock.auth.requestPasswordReset.bind(authenticationBlock.auth),\n updatePassword: authenticationBlock.auth.updatePassword.bind(authenticationBlock.auth),\n refreshToken: authenticationBlock.auth.refreshToken.bind(authenticationBlock.auth),\n requestMagicLink: authenticationBlock.auth.requestMagicLink.bind(authenticationBlock.auth),\n sendInvitation: authenticationBlock.auth.sendInvitation.bind(authenticationBlock.auth),\n confirmEmail: authenticationBlock.auth.confirmEmail.bind(authenticationBlock.auth),\n resendConfirmation: authenticationBlock.auth.resendConfirmation.bind(authenticationBlock.auth),\n };\n\n return {\n // Authentication with managed tokens\n auth: managedAuth,\n users: authenticationBlock.users,\n roles: authenticationBlock.roles,\n apiKeys: authenticationBlock.apiKeys,\n authentication: authenticationBlock,\n\n // All other blocks\n search: searchBlock,\n products: productsBlock,\n crm: crmBlock,\n content: contentBlock,\n geolocation: geolocationBlock,\n conversations: conversationsBlock,\n files: filesBlock,\n forms: formsBlock,\n assets: assetsBlock,\n campaigns: campaignsBlock,\n company: companyBlock,\n rewards: rewardsBlock,\n sales: salesBlock,\n wallet: walletBlock,\n jarvis: jarvisBlock,\n onboarding: onboardingBlock,\n university: universityBlock,\n\n // Utilities\n getAccessToken(): string | null {\n if (authMode !== 'token' || !tokenManager) return null;\n return tokenManager.getAccessToken();\n },\n\n getRefreshToken(): string | null {\n if (authMode !== 'token' || !tokenManager) return null;\n return tokenManager.getRefreshToken();\n },\n\n setTokens(accessToken: string, refreshToken?: string): void {\n if (authMode === 'token' && tokenManager) {\n tokenManager.setTokens(accessToken, refreshToken);\n }\n },\n\n clearSession(): void {\n if (authMode === 'token' && tokenManager) {\n tokenManager.clearTokens();\n }\n },\n\n isAuthenticated(): boolean | null {\n if (authMode === 'cookie') {\n // Can't know without calling validateToken\n return null;\n }\n return tokenManager ? !!tokenManager.getAccessToken() : false;\n },\n };\n}\n\n// Re-export types\nexport type { StorageType, TokenManager } from './token-manager.js';\n"],"names":["createHttpTransport","createAuthenticationBlock","createSearchBlock","createProductsBlock","createCrmBlock","createContentBlock","createGeolocationBlock","createConversationsBlock","createFilesBlock","createFormsBlock","createAssetsBlock","createCampaignsBlock","createCompanyBlock","createRewardsBlock","createSalesBlock","createWalletBlock","createJarvisBlock","createOnboardingBlock","createUniversityBlock","createTokenManager","isBrowser","window","localStorage","create23BlocksClient","config","baseUrl","appId","tenantId","authMode","storage","headers","staticHeaders","timeout","tokenManager","transport","credentials","undefined","appid","token","getAccessToken","blockConfig","authenticationBlock","searchBlock","productsBlock","crmBlock","contentBlock","geolocationBlock","conversationsBlock","filesBlock","formsBlock","assetsBlock","campaignsBlock","companyBlock","rewardsBlock","salesBlock","walletBlock","jarvisBlock","onboardingBlock","universityBlock","managedAuth","signIn","request","response","auth","accessToken","setTokens","refreshToken","signUp","signOut","clearTokens","verifyMagicLink","acceptInvitation","validateToken","bind","getCurrentUser","requestPasswordReset","updatePassword","requestMagicLink","sendInvitation","confirmEmail","resendConfirmation","users","roles","apiKeys","authentication","search","products","crm","content","geolocation","conversations","files","forms","assets","campaigns","company","rewards","sales","wallet","jarvis","onboarding","university","getRefreshToken","clearSession","isAuthenticated"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAAA,SAASA,mBAAmB,QAAQ,2BAA2B;AAC/D,SACEC,yBAAyB,QAQpB,iCAAiC;AACxC,SAASC,iBAAiB,QAA0B,yBAAyB;AAC7E,SAASC,mBAAmB,QAA4B,2BAA2B;AACnF,SAASC,cAAc,QAAuB,sBAAsB;AACpE,SAASC,kBAAkB,QAA2B,0BAA0B;AAChF,SAASC,sBAAsB,QAA+B,8BAA8B;AAC5F,SAASC,wBAAwB,QAAiC,gCAAgC;AAClG,SAASC,gBAAgB,QAAyB,wBAAwB;AAC1E,SAASC,gBAAgB,QAAyB,wBAAwB;AAC1E,SAASC,iBAAiB,QAA0B,yBAAyB;AAC7E,SAASC,oBAAoB,QAA6B,4BAA4B;AACtF,SAASC,kBAAkB,QAA2B,0BAA0B;AAChF,SAASC,kBAAkB,QAA2B,0BAA0B;AAChF,SAASC,gBAAgB,QAAyB,wBAAwB;AAC1E,SAASC,iBAAiB,QAA0B,yBAAyB;AAC7E,SAASC,iBAAiB,QAA0B,yBAAyB;AAC7E,SAASC,qBAAqB,QAA8B,6BAA6B;AACzF,SAASC,qBAAqB,QAA8B,6BAA6B;AAEzF,SAASC,kBAAkB,QAAsE,qBAAqB;AA+OtH;;CAEC,GACD,SAASC;IACP,OAAO,OAAOC,WAAW,eAAe,OAAOA,OAAOC,YAAY,KAAK;AACzE;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDC,GACD,OAAO,SAASC,qBAAqBC,MAAoB;IACvD,MAAM,EACJC,OAAO,EACPC,KAAK,EACLC,QAAQ,EACRC,WAAW,OAAO,EAClBC,UAAUT,cAAc,iBAAiB,QAAQ,EACjDU,SAASC,gBAAgB,CAAC,CAAC,EAC3BC,OAAO,EACR,GAAGR;IAEJ,sCAAsC;IACtC,IAAIS,eAAoC;IACxC,IAAIL,aAAa,SAAS;QACxBK,eAAed,mBAAmB;YAChCO;YACAC;YACAE;QACF;IACF;IAEA,kDAAkD;IAClD,MAAMK,YAAYlC,oBAAoB;QACpCyB;QACAO;QACAG,aAAaP,aAAa,WAAW,YAAYQ;QACjDN,SAAS;YACP,MAAMA,UAAkC,aACnCC;gBACHM,OAAOX;;YAGT,IAAIC,UAAU;gBACZG,OAAO,CAAC,YAAY,GAAGH;YACzB;YAEA,6DAA6D;YAC7D,IAAIC,aAAa,WAAWK,cAAc;gBACxC,MAAMK,QAAQL,aAAaM,cAAc;gBACzC,IAAID,OAAO;oBACTR,OAAO,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAEQ,MAAM,CAAC;gBAC9C;YACF;YAEA,OAAOR;QACT;IACF;IAEA,oBAAoB;IACpB,MAAMU,cAAc;QAAEd;QAAOC;IAAS;IAEtC,MAAMc,sBAAsBxC,0BAA0BiC,WAAWM;IACjE,MAAME,cAAcxC,kBAAkBgC,WAAWM;IACjD,MAAMG,gBAAgBxC,oBAAoB+B,WAAWM;IACrD,MAAMI,WAAWxC,eAAe8B,WAAWM;IAC3C,MAAMK,eAAexC,mBAAmB6B,WAAWM;IACnD,MAAMM,mBAAmBxC,uBAAuB4B,WAAWM;IAC3D,MAAMO,qBAAqBxC,yBAAyB2B,WAAWM;IAC/D,MAAMQ,aAAaxC,iBAAiB0B,WAAWM;IAC/C,MAAMS,aAAaxC,iBAAiByB,WAAWM;IAC/C,MAAMU,cAAcxC,kBAAkBwB,WAAWM;IACjD,MAAMW,iBAAiBxC,qBAAqBuB,WAAWM;IACvD,MAAMY,eAAexC,mBAAmBsB,WAAWM;IACnD,MAAMa,eAAexC,mBAAmBqB,WAAWM;IACnD,MAAMc,aAAaxC,iBAAiBoB,WAAWM;IAC/C,MAAMe,cAAcxC,kBAAkBmB,WAAWM;IACjD,MAAMgB,cAAcxC,kBAAkBkB,WAAWM;IACjD,MAAMiB,kBAAkBxC,sBAAsBiB,WAAWM;IACzD,MAAMkB,kBAAkBxC,sBAAsBgB,WAAWM;IAEzD,4DAA4D;IAC5D,MAAMmB,cAAkC;QACtC,qCAAqC;QACrC,MAAMC,QAAOC,OAAsB;YACjC,MAAMC,WAAW,MAAMrB,oBAAoBsB,IAAI,CAACH,MAAM,CAACC;YAEvD,kCAAkC;YAClC,IAAIjC,aAAa,WAAWK,gBAAgB6B,SAASE,WAAW,EAAE;gBAChE/B,aAAagC,SAAS,CAACH,SAASE,WAAW,EAAEF,SAASI,YAAY;YACpE;YAEA,OAAOJ;QACT;QAEA,MAAMK,QAAON,OAAsB;YACjC,MAAMC,WAAW,MAAMrB,oBAAoBsB,IAAI,CAACI,MAAM,CAACN;YAEvD,oDAAoD;YACpD,IAAIjC,aAAa,WAAWK,gBAAgB6B,SAASE,WAAW,EAAE;gBAChE/B,aAAagC,SAAS,CAACH,SAASE,WAAW;YAC7C;YAEA,OAAOF;QACT;QAEA,MAAMM;YACJ,MAAM3B,oBAAoBsB,IAAI,CAACK,OAAO;YAEtC,6BAA6B;YAC7B,IAAIxC,aAAa,WAAWK,cAAc;gBACxCA,aAAaoC,WAAW;YAC1B;QACF;QAEA,MAAMC,iBAAgBT,OAA+B;YACnD,MAAMC,WAAW,MAAMrB,oBAAoBsB,IAAI,CAACO,eAAe,CAACT;YAEhE,IAAIjC,aAAa,WAAWK,gBAAgB6B,SAASE,WAAW,EAAE;gBAChE/B,aAAagC,SAAS,CAACH,SAASE,WAAW,EAAEF,SAASI,YAAY;YACpE;YAEA,OAAOJ;QACT;QAEA,MAAMS,kBAAiBV,OAAgC;YACrD,MAAMC,WAAW,MAAMrB,oBAAoBsB,IAAI,CAACQ,gBAAgB,CAACV;YAEjE,IAAIjC,aAAa,WAAWK,gBAAgB6B,SAASE,WAAW,EAAE;gBAChE/B,aAAagC,SAAS,CAACH,SAASE,WAAW,EAAEF,SAASI,YAAY;YACpE;YAEA,OAAOJ;QACT;QAEA,uBAAuB;QACvBU,eAAe/B,oBAAoBsB,IAAI,CAACS,aAAa,CAACC,IAAI,CAAChC,oBAAoBsB,IAAI;QACnFW,gBAAgBjC,oBAAoBsB,IAAI,CAACW,cAAc,CAACD,IAAI,CAAChC,oBAAoBsB,IAAI;QACrFY,sBAAsBlC,oBAAoBsB,IAAI,CAACY,oBAAoB,CAACF,IAAI,CAAChC,oBAAoBsB,IAAI;QACjGa,gBAAgBnC,oBAAoBsB,IAAI,CAACa,cAAc,CAACH,IAAI,CAAChC,oBAAoBsB,IAAI;QACrFG,cAAczB,oBAAoBsB,IAAI,CAACG,YAAY,CAACO,IAAI,CAAChC,oBAAoBsB,IAAI;QACjFc,kBAAkBpC,oBAAoBsB,IAAI,CAACc,gBAAgB,CAACJ,IAAI,CAAChC,oBAAoBsB,IAAI;QACzFe,gBAAgBrC,oBAAoBsB,IAAI,CAACe,cAAc,CAACL,IAAI,CAAChC,oBAAoBsB,IAAI;QACrFgB,cAActC,oBAAoBsB,IAAI,CAACgB,YAAY,CAACN,IAAI,CAAChC,oBAAoBsB,IAAI;QACjFiB,oBAAoBvC,oBAAoBsB,IAAI,CAACiB,kBAAkB,CAACP,IAAI,CAAChC,oBAAoBsB,IAAI;IAC/F;IAEA,OAAO;QACL,qCAAqC;QACrCA,MAAMJ;QACNsB,OAAOxC,oBAAoBwC,KAAK;QAChCC,OAAOzC,oBAAoByC,KAAK;QAChCC,SAAS1C,oBAAoB0C,OAAO;QACpCC,gBAAgB3C;QAEhB,mBAAmB;QACnB4C,QAAQ3C;QACR4C,UAAU3C;QACV4C,KAAK3C;QACL4C,SAAS3C;QACT4C,aAAa3C;QACb4C,eAAe3C;QACf4C,OAAO3C;QACP4C,OAAO3C;QACP4C,QAAQ3C;QACR4C,WAAW3C;QACX4C,SAAS3C;QACT4C,SAAS3C;QACT4C,OAAO3C;QACP4C,QAAQ3C;QACR4C,QAAQ3C;QACR4C,YAAY3C;QACZ4C,YAAY3C;QAEZ,YAAY;QACZnB;YACE,IAAIX,aAAa,WAAW,CAACK,cAAc,OAAO;YAClD,OAAOA,aAAaM,cAAc;QACpC;QAEA+D;YACE,IAAI1E,aAAa,WAAW,CAACK,cAAc,OAAO;YAClD,OAAOA,aAAaqE,eAAe;QACrC;QAEArC,WAAUD,WAAmB,EAAEE,YAAqB;YAClD,IAAItC,aAAa,WAAWK,cAAc;gBACxCA,aAAagC,SAAS,CAACD,aAAaE;YACtC;QACF;QAEAqC;YACE,IAAI3E,aAAa,WAAWK,cAAc;gBACxCA,aAAaoC,WAAW;YAC1B;QACF;QAEAmC;YACE,IAAI5E,aAAa,UAAU;gBACzB,2CAA2C;gBAC3C,OAAO;YACT;YACA,OAAOK,eAAe,CAAC,CAACA,aAAaM,cAAc,KAAK;QAC1D;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/lib/client.ts"],"sourcesContent":["import { createHttpTransport } from '@23blocks/transport-http';\nimport {\n createAuthenticationBlock,\n type AuthenticationBlock,\n type SignInRequest,\n type SignInResponse,\n type SignUpRequest,\n type SignUpResponse,\n type MagicLinkVerifyRequest,\n type AcceptInvitationRequest,\n} from '@23blocks/block-authentication';\nimport { createSearchBlock, type SearchBlock } from '@23blocks/block-search';\nimport { createProductsBlock, type ProductsBlock } from '@23blocks/block-products';\nimport { createCrmBlock, type CrmBlock } from '@23blocks/block-crm';\nimport { createContentBlock, type ContentBlock } from '@23blocks/block-content';\nimport { createGeolocationBlock, type GeolocationBlock } from '@23blocks/block-geolocation';\nimport { createConversationsBlock, type ConversationsBlock } from '@23blocks/block-conversations';\nimport { createFilesBlock, type FilesBlock } from '@23blocks/block-files';\nimport { createFormsBlock, type FormsBlock } from '@23blocks/block-forms';\nimport { createAssetsBlock, type AssetsBlock } from '@23blocks/block-assets';\nimport { createCampaignsBlock, type CampaignsBlock } from '@23blocks/block-campaigns';\nimport { createCompanyBlock, type CompanyBlock } from '@23blocks/block-company';\nimport { createRewardsBlock, type RewardsBlock } from '@23blocks/block-rewards';\nimport { createSalesBlock, type SalesBlock } from '@23blocks/block-sales';\nimport { createWalletBlock, type WalletBlock } from '@23blocks/block-wallet';\nimport { createJarvisBlock, type JarvisBlock } from '@23blocks/block-jarvis';\nimport { createOnboardingBlock, type OnboardingBlock } from '@23blocks/block-onboarding';\nimport { createUniversityBlock, type UniversityBlock } from '@23blocks/block-university';\n\nimport { createTokenManager, type StorageType, type TokenManager, type TokenManagerConfig } from './token-manager.js';\n\n/**\n * Authentication mode\n * - 'token': Store tokens in browser storage, attach Authorization header\n * - 'cookie': Use httpOnly cookies set by backend (recommended for new projects)\n */\nexport type AuthMode = 'token' | 'cookie';\n\n/**\n * Service URL configuration - each microservice has its own URL.\n * All URLs are optional - only configure the services you need.\n */\nexport interface ServiceUrls {\n /** Authentication service URL */\n authentication?: string;\n /** Search service URL */\n search?: string;\n /** Products service URL */\n products?: string;\n /** CRM service URL */\n crm?: string;\n /** Content service URL */\n content?: string;\n /** Geolocation service URL */\n geolocation?: string;\n /** Conversations service URL */\n conversations?: string;\n /** Files service URL */\n files?: string;\n /** Forms service URL */\n forms?: string;\n /** Assets service URL */\n assets?: string;\n /** Campaigns service URL */\n campaigns?: string;\n /** Company service URL */\n company?: string;\n /** Rewards service URL */\n rewards?: string;\n /** Sales service URL */\n sales?: string;\n /** Wallet service URL */\n wallet?: string;\n /** Jarvis (AI) service URL */\n jarvis?: string;\n /** Onboarding service URL */\n onboarding?: string;\n /** University (LMS) service URL */\n university?: string;\n}\n\n/**\n * Client configuration\n */\nexport interface ClientConfig {\n /**\n * Service URLs for each microservice.\n * Only configure the services you need - accessing a service without\n * a configured URL will throw an error.\n *\n * @example\n * ```typescript\n * urls: {\n * authentication: 'https://gateway.23blocks.com',\n * crm: 'https://crm.23blocks.com',\n * products: 'https://products.23blocks.com',\n * }\n * ```\n */\n urls: ServiceUrls;\n\n /**\n * Application ID\n */\n appId: string;\n\n /**\n * Tenant ID (optional, for multi-tenant setups)\n */\n tenantId?: string;\n\n /**\n * Authentication mode\n * - 'token' (default): SDK stores tokens in localStorage/sessionStorage/memory\n * - 'cookie': Backend manages auth via httpOnly cookies\n */\n authMode?: AuthMode;\n\n /**\n * Storage type for token mode\n * Only applicable when authMode is 'token'\n * @default 'localStorage' in browser, 'memory' in SSR\n */\n storage?: StorageType;\n\n /**\n * Additional headers to include with every request\n * Useful for SSR cookie forwarding\n */\n headers?: Record<string, string>;\n\n /**\n * Request timeout in milliseconds\n * @default 30000\n */\n timeout?: number;\n}\n\n/**\n * Auth service wrapper with automatic token management\n */\nexport interface ManagedAuthService extends Omit<AuthenticationBlock['auth'], 'signIn' | 'signUp' | 'signOut' | 'verifyMagicLink' | 'acceptInvitation'> {\n /**\n * Sign in and automatically store tokens (token mode) or let backend set cookies (cookie mode)\n */\n signIn(request: SignInRequest): Promise<SignInResponse>;\n\n /**\n * Sign up and optionally store tokens if returned\n */\n signUp(request: SignUpRequest): Promise<SignUpResponse>;\n\n /**\n * Sign out and clear stored tokens/session\n */\n signOut(): Promise<void>;\n\n /**\n * Verify magic link and store tokens\n */\n verifyMagicLink(request: MagicLinkVerifyRequest): Promise<SignInResponse>;\n\n /**\n * Accept invitation and store tokens\n */\n acceptInvitation(request: AcceptInvitationRequest): Promise<SignInResponse>;\n}\n\n/**\n * 23blocks client interface.\n *\n * Services are only available if their URL was configured.\n * Accessing a service without a configured URL will throw an error.\n */\nexport interface Blocks23Client {\n // ─────────────────────────────────────────────────────────────────────────────\n // Blocks (available only if URL configured)\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Authentication operations with automatic token management.\n * Requires `urls.authentication` to be configured.\n */\n auth: ManagedAuthService;\n\n /**\n * User management operations.\n * Requires `urls.authentication` to be configured.\n */\n users: AuthenticationBlock['users'];\n\n /**\n * Role and permission management.\n * Requires `urls.authentication` to be configured.\n */\n roles: AuthenticationBlock['roles'];\n\n /**\n * API key management.\n * Requires `urls.authentication` to be configured.\n */\n apiKeys: AuthenticationBlock['apiKeys'];\n\n /**\n * Full authentication block (advanced access).\n * Requires `urls.authentication` to be configured.\n */\n authentication: AuthenticationBlock;\n\n /**\n * Search and favorites.\n * Requires `urls.search` to be configured.\n */\n search: SearchBlock;\n\n /**\n * Products, cart, and catalog.\n * Requires `urls.products` to be configured.\n */\n products: ProductsBlock;\n\n /**\n * CRM - contacts, organizations, deals.\n * Requires `urls.crm` to be configured.\n */\n crm: CrmBlock;\n\n /**\n * Content management.\n * Requires `urls.content` to be configured.\n */\n content: ContentBlock;\n\n /**\n * Geolocation - addresses, places.\n * Requires `urls.geolocation` to be configured.\n */\n geolocation: GeolocationBlock;\n\n /**\n * Messaging and conversations.\n * Requires `urls.conversations` to be configured.\n */\n conversations: ConversationsBlock;\n\n /**\n * File uploads and storage.\n * Requires `urls.files` to be configured.\n */\n files: FilesBlock;\n\n /**\n * Form builder and submissions.\n * Requires `urls.forms` to be configured.\n */\n forms: FormsBlock;\n\n /**\n * Asset management.\n * Requires `urls.assets` to be configured.\n */\n assets: AssetsBlock;\n\n /**\n * Marketing campaigns.\n * Requires `urls.campaigns` to be configured.\n */\n campaigns: CampaignsBlock;\n\n /**\n * Company settings.\n * Requires `urls.company` to be configured.\n */\n company: CompanyBlock;\n\n /**\n * Rewards and loyalty.\n * Requires `urls.rewards` to be configured.\n */\n rewards: RewardsBlock;\n\n /**\n * Sales, orders, invoices.\n * Requires `urls.sales` to be configured.\n */\n sales: SalesBlock;\n\n /**\n * Digital wallet.\n * Requires `urls.wallet` to be configured.\n */\n wallet: WalletBlock;\n\n /**\n * AI assistant.\n * Requires `urls.jarvis` to be configured.\n */\n jarvis: JarvisBlock;\n\n /**\n * User onboarding.\n * Requires `urls.onboarding` to be configured.\n */\n onboarding: OnboardingBlock;\n\n /**\n * Learning management.\n * Requires `urls.university` to be configured.\n */\n university: UniversityBlock;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Utilities\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Get the current access token (token mode only)\n * Returns null if in cookie mode or no token stored\n */\n getAccessToken(): string | null;\n\n /**\n * Get the current refresh token (token mode only)\n * Returns null if in cookie mode or no token stored\n */\n getRefreshToken(): string | null;\n\n /**\n * Manually set tokens (token mode only)\n * Useful for SSR hydration\n */\n setTokens(accessToken: string, refreshToken?: string): void;\n\n /**\n * Clear the current session (tokens or signal backend to clear cookie)\n */\n clearSession(): void;\n\n /**\n * Check if user is likely authenticated\n * In token mode: checks if token exists\n * In cookie mode: always returns null (check with validateToken instead)\n */\n isAuthenticated(): boolean | null;\n}\n\n/**\n * Detect browser environment\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n}\n\n/**\n * Create a 23blocks client instance\n *\n * @param config - Client configuration\n * @returns A configured client with all blocks and automatic auth management\n *\n * @example Basic usage with multiple services\n * ```typescript\n * const client = create23BlocksClient({\n * appId: 'your-app-id',\n * urls: {\n * authentication: 'https://gateway.23blocks.com',\n * crm: 'https://crm.23blocks.com',\n * products: 'https://products.23blocks.com',\n * },\n * });\n *\n * // Sign in - tokens are stored automatically\n * await client.auth.signIn({ email: 'user@example.com', password: 'password' });\n *\n * // Each service uses its own URL\n * const products = await client.products.products.list();\n * const contacts = await client.crm.contacts.list();\n *\n * // Sign out - tokens are cleared automatically\n * await client.auth.signOut();\n * ```\n *\n * @example Cookie mode (recommended for security)\n * ```typescript\n * const client = create23BlocksClient({\n * appId: 'your-app-id',\n * authMode: 'cookie',\n * urls: {\n * authentication: 'https://gateway.23blocks.com',\n * crm: 'https://crm.23blocks.com',\n * },\n * });\n * ```\n *\n * @example SSR with token forwarding\n * ```typescript\n * const client = create23BlocksClient({\n * appId: 'your-app-id',\n * storage: 'memory',\n * headers: { Authorization: `Bearer ${tokenFromRequest}` },\n * urls: {\n * authentication: 'https://gateway.23blocks.com',\n * crm: 'https://crm.23blocks.com',\n * },\n * });\n * ```\n */\nexport function create23BlocksClient(config: ClientConfig): Blocks23Client {\n const {\n urls,\n appId,\n tenantId,\n authMode = 'token',\n storage = isBrowser() ? 'localStorage' : 'memory',\n headers: staticHeaders = {},\n timeout,\n } = config;\n\n // Create token manager for token mode\n let tokenManager: TokenManager | null = null;\n if (authMode === 'token') {\n tokenManager = createTokenManager({\n appId,\n tenantId,\n storage,\n });\n }\n\n // Factory to create transport for a specific service URL\n function createServiceTransport(baseUrl: string) {\n return createHttpTransport({\n baseUrl,\n timeout,\n credentials: authMode === 'cookie' ? 'include' : undefined,\n headers: () => {\n const headers: Record<string, string> = {\n ...staticHeaders,\n appid: appId,\n };\n\n if (tenantId) {\n headers['tenant-id'] = tenantId;\n }\n\n // In token mode, add Authorization header if we have a token\n if (authMode === 'token' && tokenManager) {\n const token = tokenManager.getAccessToken();\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n }\n\n return headers;\n },\n });\n }\n\n // Helper to create a proxy that throws when accessing unconfigured service\n function createUnconfiguredServiceProxy<T>(serviceName: string, urlKey: string): T {\n return new Proxy({} as T, {\n get(_target, prop) {\n throw new Error(\n `[23blocks] Cannot access '${serviceName}.${String(prop)}': ` +\n `The ${serviceName} service URL is not configured. ` +\n `Add 'urls.${urlKey}' to your client configuration.`\n );\n },\n });\n }\n\n // Create block config\n const blockConfig = { appId, tenantId };\n\n // Create blocks only if their URL is provided\n const authenticationBlock = urls.authentication\n ? createAuthenticationBlock(createServiceTransport(urls.authentication), blockConfig)\n : null;\n\n const searchBlock = urls.search\n ? createSearchBlock(createServiceTransport(urls.search), blockConfig)\n : null;\n\n const productsBlock = urls.products\n ? createProductsBlock(createServiceTransport(urls.products), blockConfig)\n : null;\n\n const crmBlock = urls.crm\n ? createCrmBlock(createServiceTransport(urls.crm), blockConfig)\n : null;\n\n const contentBlock = urls.content\n ? createContentBlock(createServiceTransport(urls.content), blockConfig)\n : null;\n\n const geolocationBlock = urls.geolocation\n ? createGeolocationBlock(createServiceTransport(urls.geolocation), blockConfig)\n : null;\n\n const conversationsBlock = urls.conversations\n ? createConversationsBlock(createServiceTransport(urls.conversations), blockConfig)\n : null;\n\n const filesBlock = urls.files\n ? createFilesBlock(createServiceTransport(urls.files), blockConfig)\n : null;\n\n const formsBlock = urls.forms\n ? createFormsBlock(createServiceTransport(urls.forms), blockConfig)\n : null;\n\n const assetsBlock = urls.assets\n ? createAssetsBlock(createServiceTransport(urls.assets), blockConfig)\n : null;\n\n const campaignsBlock = urls.campaigns\n ? createCampaignsBlock(createServiceTransport(urls.campaigns), blockConfig)\n : null;\n\n const companyBlock = urls.company\n ? createCompanyBlock(createServiceTransport(urls.company), blockConfig)\n : null;\n\n const rewardsBlock = urls.rewards\n ? createRewardsBlock(createServiceTransport(urls.rewards), blockConfig)\n : null;\n\n const salesBlock = urls.sales\n ? createSalesBlock(createServiceTransport(urls.sales), blockConfig)\n : null;\n\n const walletBlock = urls.wallet\n ? createWalletBlock(createServiceTransport(urls.wallet), blockConfig)\n : null;\n\n const jarvisBlock = urls.jarvis\n ? createJarvisBlock(createServiceTransport(urls.jarvis), blockConfig)\n : null;\n\n const onboardingBlock = urls.onboarding\n ? createOnboardingBlock(createServiceTransport(urls.onboarding), blockConfig)\n : null;\n\n const universityBlock = urls.university\n ? createUniversityBlock(createServiceTransport(urls.university), blockConfig)\n : null;\n\n // Create managed auth service with automatic token handling (only if auth URL configured)\n const managedAuth: ManagedAuthService = authenticationBlock\n ? {\n async signIn(request: SignInRequest): Promise<SignInResponse> {\n const response = await authenticationBlock.auth.signIn(request);\n if (authMode === 'token' && tokenManager && response.accessToken) {\n tokenManager.setTokens(response.accessToken, response.refreshToken);\n }\n return response;\n },\n\n async signUp(request: SignUpRequest): Promise<SignUpResponse> {\n const response = await authenticationBlock.auth.signUp(request);\n if (authMode === 'token' && tokenManager && response.accessToken) {\n tokenManager.setTokens(response.accessToken);\n }\n return response;\n },\n\n async signOut(): Promise<void> {\n await authenticationBlock.auth.signOut();\n if (authMode === 'token' && tokenManager) {\n tokenManager.clearTokens();\n }\n },\n\n async verifyMagicLink(request: MagicLinkVerifyRequest): Promise<SignInResponse> {\n const response = await authenticationBlock.auth.verifyMagicLink(request);\n if (authMode === 'token' && tokenManager && response.accessToken) {\n tokenManager.setTokens(response.accessToken, response.refreshToken);\n }\n return response;\n },\n\n async acceptInvitation(request: AcceptInvitationRequest): Promise<SignInResponse> {\n const response = await authenticationBlock.auth.acceptInvitation(request);\n if (authMode === 'token' && tokenManager && response.accessToken) {\n tokenManager.setTokens(response.accessToken, response.refreshToken);\n }\n return response;\n },\n\n validateToken: authenticationBlock.auth.validateToken.bind(authenticationBlock.auth),\n getCurrentUser: authenticationBlock.auth.getCurrentUser.bind(authenticationBlock.auth),\n requestPasswordReset: authenticationBlock.auth.requestPasswordReset.bind(authenticationBlock.auth),\n updatePassword: authenticationBlock.auth.updatePassword.bind(authenticationBlock.auth),\n refreshToken: authenticationBlock.auth.refreshToken.bind(authenticationBlock.auth),\n requestMagicLink: authenticationBlock.auth.requestMagicLink.bind(authenticationBlock.auth),\n sendInvitation: authenticationBlock.auth.sendInvitation.bind(authenticationBlock.auth),\n confirmEmail: authenticationBlock.auth.confirmEmail.bind(authenticationBlock.auth),\n resendConfirmation: authenticationBlock.auth.resendConfirmation.bind(authenticationBlock.auth),\n }\n : createUnconfiguredServiceProxy<ManagedAuthService>('auth', 'authentication');\n\n return {\n // Authentication with managed tokens\n auth: managedAuth,\n users: authenticationBlock?.users ?? createUnconfiguredServiceProxy('users', 'authentication'),\n roles: authenticationBlock?.roles ?? createUnconfiguredServiceProxy('roles', 'authentication'),\n apiKeys: authenticationBlock?.apiKeys ?? createUnconfiguredServiceProxy('apiKeys', 'authentication'),\n authentication: authenticationBlock ?? createUnconfiguredServiceProxy('authentication', 'authentication'),\n\n // All blocks - use proxy if not configured\n search: searchBlock ?? createUnconfiguredServiceProxy('search', 'search'),\n products: productsBlock ?? createUnconfiguredServiceProxy('products', 'products'),\n crm: crmBlock ?? createUnconfiguredServiceProxy('crm', 'crm'),\n content: contentBlock ?? createUnconfiguredServiceProxy('content', 'content'),\n geolocation: geolocationBlock ?? createUnconfiguredServiceProxy('geolocation', 'geolocation'),\n conversations: conversationsBlock ?? createUnconfiguredServiceProxy('conversations', 'conversations'),\n files: filesBlock ?? createUnconfiguredServiceProxy('files', 'files'),\n forms: formsBlock ?? createUnconfiguredServiceProxy('forms', 'forms'),\n assets: assetsBlock ?? createUnconfiguredServiceProxy('assets', 'assets'),\n campaigns: campaignsBlock ?? createUnconfiguredServiceProxy('campaigns', 'campaigns'),\n company: companyBlock ?? createUnconfiguredServiceProxy('company', 'company'),\n rewards: rewardsBlock ?? createUnconfiguredServiceProxy('rewards', 'rewards'),\n sales: salesBlock ?? createUnconfiguredServiceProxy('sales', 'sales'),\n wallet: walletBlock ?? createUnconfiguredServiceProxy('wallet', 'wallet'),\n jarvis: jarvisBlock ?? createUnconfiguredServiceProxy('jarvis', 'jarvis'),\n onboarding: onboardingBlock ?? createUnconfiguredServiceProxy('onboarding', 'onboarding'),\n university: universityBlock ?? createUnconfiguredServiceProxy('university', 'university'),\n\n // Utilities\n getAccessToken(): string | null {\n if (authMode !== 'token' || !tokenManager) return null;\n return tokenManager.getAccessToken();\n },\n\n getRefreshToken(): string | null {\n if (authMode !== 'token' || !tokenManager) return null;\n return tokenManager.getRefreshToken();\n },\n\n setTokens(accessToken: string, refreshToken?: string): void {\n if (authMode === 'token' && tokenManager) {\n tokenManager.setTokens(accessToken, refreshToken);\n }\n },\n\n clearSession(): void {\n if (authMode === 'token' && tokenManager) {\n tokenManager.clearTokens();\n }\n },\n\n isAuthenticated(): boolean | null {\n if (authMode === 'cookie') {\n // Can't know without calling validateToken\n return null;\n }\n return tokenManager ? !!tokenManager.getAccessToken() : false;\n },\n };\n}\n\n// Re-export types\nexport type { StorageType, TokenManager } from './token-manager.js';\n"],"names":["createHttpTransport","createAuthenticationBlock","createSearchBlock","createProductsBlock","createCrmBlock","createContentBlock","createGeolocationBlock","createConversationsBlock","createFilesBlock","createFormsBlock","createAssetsBlock","createCampaignsBlock","createCompanyBlock","createRewardsBlock","createSalesBlock","createWalletBlock","createJarvisBlock","createOnboardingBlock","createUniversityBlock","createTokenManager","isBrowser","window","localStorage","create23BlocksClient","config","urls","appId","tenantId","authMode","storage","headers","staticHeaders","timeout","tokenManager","createServiceTransport","baseUrl","credentials","undefined","appid","token","getAccessToken","createUnconfiguredServiceProxy","serviceName","urlKey","Proxy","get","_target","prop","Error","String","blockConfig","authenticationBlock","authentication","searchBlock","search","productsBlock","products","crmBlock","crm","contentBlock","content","geolocationBlock","geolocation","conversationsBlock","conversations","filesBlock","files","formsBlock","forms","assetsBlock","assets","campaignsBlock","campaigns","companyBlock","company","rewardsBlock","rewards","salesBlock","sales","walletBlock","wallet","jarvisBlock","jarvis","onboardingBlock","onboarding","universityBlock","university","managedAuth","signIn","request","response","auth","accessToken","setTokens","refreshToken","signUp","signOut","clearTokens","verifyMagicLink","acceptInvitation","validateToken","bind","getCurrentUser","requestPasswordReset","updatePassword","requestMagicLink","sendInvitation","confirmEmail","resendConfirmation","users","roles","apiKeys","getRefreshToken","clearSession","isAuthenticated"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/sdk.ts"],"sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// Client Factory (Recommended API)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport {\n create23BlocksClient,\n type AuthMode,\n type ClientConfig,\n type Blocks23Client,\n type ManagedAuthService,\n type StorageType,\n type TokenManager,\n} from './client.js';\n\nexport { createTokenManager } from './token-manager.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport * from '@23blocks/contracts';\nexport * from '@23blocks/jsonapi-codec';\nexport * from '@23blocks/transport-http';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Blocks (for advanced users who need custom transport)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport * from '@23blocks/block-authentication';\nexport * from '@23blocks/block-search';\nexport * from '@23blocks/block-products';\nexport * from '@23blocks/block-crm';\nexport * from '@23blocks/block-content';\nexport * from '@23blocks/block-geolocation';\nexport * from '@23blocks/block-conversations';\nexport * from '@23blocks/block-files';\nexport * from '@23blocks/block-forms';\nexport * from '@23blocks/block-assets';\nexport * from '@23blocks/block-campaigns';\nexport * from '@23blocks/block-company';\nexport * from '@23blocks/block-rewards';\nexport * from '@23blocks/block-sales';\nexport * from '@23blocks/block-wallet';\nexport * from '@23blocks/block-jarvis';\nexport * from '@23blocks/block-onboarding';\nexport * from '@23blocks/block-university';\n"],"names":["create23BlocksClient","createTokenManager"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,gFAAgF;AAChF,mCAAmC;AACnC,gFAAgF;AAEhF,SACEA,oBAAoB,QAOf,cAAc;AAErB,SAASC,kBAAkB,QAAQ,qBAAqB;AAExD,gFAAgF;AAChF,OAAO;AACP,gFAAgF;AAEhF,cAAc,sBAAsB;AACpC,cAAc,0BAA0B;AACxC,cAAc,2BAA2B;AAEzC,gFAAgF;AAChF,wDAAwD;AACxD,gFAAgF;AAEhF,cAAc,iCAAiC;AAC/C,cAAc,yBAAyB;AACvC,cAAc,2BAA2B;AACzC,cAAc,sBAAsB;AACpC,cAAc,0BAA0B;AACxC,cAAc,8BAA8B;AAC5C,cAAc,gCAAgC;AAC9C,cAAc,wBAAwB;AACtC,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,4BAA4B;AAC1C,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,yBAAyB;AACvC,cAAc,6BAA6B;AAC3C,cAAc,6BAA6B"}
1
+ {"version":3,"sources":["../../src/lib/sdk.ts"],"sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// Client Factory (Recommended API)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport {\n create23BlocksClient,\n type AuthMode,\n type ClientConfig,\n type ServiceUrls,\n type Blocks23Client,\n type ManagedAuthService,\n type StorageType,\n type TokenManager,\n} from './client.js';\n\nexport { createTokenManager } from './token-manager.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport * from '@23blocks/contracts';\nexport * from '@23blocks/jsonapi-codec';\nexport * from '@23blocks/transport-http';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Blocks (for advanced users who need custom transport)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport * from '@23blocks/block-authentication';\nexport * from '@23blocks/block-search';\nexport * from '@23blocks/block-products';\nexport * from '@23blocks/block-crm';\nexport * from '@23blocks/block-content';\nexport * from '@23blocks/block-geolocation';\nexport * from '@23blocks/block-conversations';\nexport * from '@23blocks/block-files';\nexport * from '@23blocks/block-forms';\nexport * from '@23blocks/block-assets';\nexport * from '@23blocks/block-campaigns';\nexport * from '@23blocks/block-company';\nexport * from '@23blocks/block-rewards';\nexport * from '@23blocks/block-sales';\nexport * from '@23blocks/block-wallet';\nexport * from '@23blocks/block-jarvis';\nexport * from '@23blocks/block-onboarding';\nexport * from '@23blocks/block-university';\n"],"names":["create23BlocksClient","createTokenManager"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,gFAAgF;AAChF,mCAAmC;AACnC,gFAAgF;AAEhF,SACEA,oBAAoB,QAQf,cAAc;AAErB,SAASC,kBAAkB,QAAQ,qBAAqB;AAExD,gFAAgF;AAChF,OAAO;AACP,gFAAgF;AAEhF,cAAc,sBAAsB;AACpC,cAAc,0BAA0B;AACxC,cAAc,2BAA2B;AAEzC,gFAAgF;AAChF,wDAAwD;AACxD,gFAAgF;AAEhF,cAAc,iCAAiC;AAC/C,cAAc,yBAAyB;AACvC,cAAc,2BAA2B;AACzC,cAAc,sBAAsB;AACpC,cAAc,0BAA0B;AACxC,cAAc,8BAA8B;AAC5C,cAAc,gCAAgC;AAC9C,cAAc,wBAAwB;AACtC,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,4BAA4B;AAC1C,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,yBAAyB;AACvC,cAAc,6BAA6B;AAC3C,cAAc,6BAA6B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@23blocks/sdk",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "23blocks SDK - unified meta-package re-exporting all blocks and utilities",
5
5
  "license": "MIT",
6
6
  "author": "23blocks <hello@23blocks.com>",