@23blocks/angular 1.0.3 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/assets/assets.service.js +43 -30
- package/dist/lib/assets/assets.service.js.map +1 -1
- package/dist/lib/authentication/authentication.service.js +49 -32
- package/dist/lib/authentication/authentication.service.js.map +1 -1
- package/dist/lib/campaigns/campaigns.service.js +51 -38
- package/dist/lib/campaigns/campaigns.service.js.map +1 -1
- package/dist/lib/company/company.service.js +50 -37
- package/dist/lib/company/company.service.js.map +1 -1
- package/dist/lib/content/content.service.js +52 -39
- package/dist/lib/content/content.service.js.map +1 -1
- package/dist/lib/conversations/conversations.service.js +59 -46
- package/dist/lib/conversations/conversations.service.js.map +1 -1
- package/dist/lib/crm/crm.service.js +69 -56
- package/dist/lib/crm/crm.service.js.map +1 -1
- package/dist/lib/files/files.service.js +42 -29
- package/dist/lib/files/files.service.js.map +1 -1
- package/dist/lib/forms/forms.service.js +45 -32
- package/dist/lib/forms/forms.service.js.map +1 -1
- package/dist/lib/geolocation/geolocation.service.js +78 -65
- package/dist/lib/geolocation/geolocation.service.js.map +1 -1
- package/dist/lib/index.js +4 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/jarvis/jarvis.service.js +54 -41
- package/dist/lib/jarvis/jarvis.service.js.map +1 -1
- package/dist/lib/onboarding/onboarding.service.js +45 -32
- package/dist/lib/onboarding/onboarding.service.js.map +1 -1
- package/dist/lib/products/products.service.js +80 -67
- package/dist/lib/products/products.service.js.map +1 -1
- package/dist/lib/rewards/rewards.service.js +47 -34
- package/dist/lib/rewards/rewards.service.js.map +1 -1
- package/dist/lib/sales/sales.service.js +47 -34
- package/dist/lib/sales/sales.service.js.map +1 -1
- package/dist/lib/search/search.service.js +31 -18
- package/dist/lib/search/search.service.js.map +1 -1
- package/dist/lib/simple-providers.js +96 -15
- package/dist/lib/simple-providers.js.map +1 -1
- package/dist/lib/tokens.js +26 -1
- package/dist/lib/tokens.js.map +1 -1
- package/dist/lib/university/university.service.js +58 -45
- package/dist/lib/university/university.service.js.map +1 -1
- package/dist/lib/wallet/wallet.service.js +39 -26
- package/dist/lib/wallet/wallet.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/search/search.service.ts"],"sourcesContent":["import { Injectable, Inject } from '@angular/core';\nimport { Observable, from } from 'rxjs';\nimport type { Transport } from '@23blocks/contracts';\nimport {\n createSearchBlock,\n type SearchBlock,\n type SearchBlockConfig,\n type SearchResult,\n type SearchQuery,\n type LastQuery,\n type FavoriteEntity,\n type EntityType,\n type SearchRequest,\n type SearchResponse,\n type AddFavoriteRequest,\n} from '@23blocks/block-search';\nimport { TRANSPORT, SEARCH_CONFIG } from '../tokens.js';\n\n/**\n * Angular service wrapping the Search block.\n * Converts Promise-based APIs to RxJS Observables.\n *\n * @example\n * ```typescript\n * @Component({...})\n * export class SearchComponent {\n * results$ = new BehaviorSubject<SearchResult[]>([]);\n *\n * constructor(private searchService: SearchService) {}\n *\n * onSearch(query: string) {\n * this.searchService.search({ query }).subscribe({\n * next: (response) => this.results$.next(response.results),\n * error: (err) => console.error('Search failed:', err),\n * });\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class SearchService {\n private readonly block: SearchBlock;\n\n constructor(\n @Inject(TRANSPORT)
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/search/search.service.ts"],"sourcesContent":["import { Injectable, Inject, Optional } from '@angular/core';\nimport { Observable, from } from 'rxjs';\nimport type { Transport } from '@23blocks/contracts';\nimport {\n createSearchBlock,\n type SearchBlock,\n type SearchBlockConfig,\n type SearchResult,\n type SearchQuery,\n type LastQuery,\n type FavoriteEntity,\n type EntityType,\n type SearchRequest,\n type SearchResponse,\n type AddFavoriteRequest,\n} from '@23blocks/block-search';\nimport { TRANSPORT, SEARCH_TRANSPORT, SEARCH_CONFIG } from '../tokens.js';\n\n/**\n * Angular service wrapping the Search block.\n * Converts Promise-based APIs to RxJS Observables.\n *\n * @example\n * ```typescript\n * @Component({...})\n * export class SearchComponent {\n * results$ = new BehaviorSubject<SearchResult[]>([]);\n *\n * constructor(private searchService: SearchService) {}\n *\n * onSearch(query: string) {\n * this.searchService.search({ query }).subscribe({\n * next: (response) => this.results$.next(response.results),\n * error: (err) => console.error('Search failed:', err),\n * });\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class SearchService {\n private readonly block: SearchBlock | null;\n\n constructor(\n @Optional() @Inject(SEARCH_TRANSPORT) serviceTransport: Transport | null,\n @Optional() @Inject(TRANSPORT) legacyTransport: Transport | null,\n @Inject(SEARCH_CONFIG) config: SearchBlockConfig\n ) {\n const transport = serviceTransport ?? legacyTransport;\n this.block = transport ? createSearchBlock(transport, config) : null;\n }\n\n /**\n * Ensure the service is configured, throw helpful error if not\n */\n private ensureConfigured(): SearchBlock {\n if (!this.block) {\n throw new Error(\n '[23blocks] SearchService is not configured. ' +\n \"Add 'urls.search' to your provideBlocks23() configuration.\"\n );\n }\n return this.block;\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Search Operations\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Perform a search query\n */\n search(request: SearchRequest): Observable<SearchResponse> {\n return from(this.ensureConfigured().search.search(request));\n }\n\n /**\n * Get search suggestions for autocomplete\n */\n suggest(query: string, limit?: number): Observable<SearchResult[]> {\n return from(this.ensureConfigured().search.suggest(query, limit));\n }\n\n /**\n * Get available entity types for filtering\n */\n getEntityTypes(): Observable<EntityType[]> {\n return from(this.ensureConfigured().search.entityTypes());\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Search History\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Get recent search queries\n */\n getLastQueries(limit?: number): Observable<LastQuery[]> {\n return from(this.ensureConfigured().history.getLastQueries(limit));\n }\n\n /**\n * Get the full history of search queries\n */\n getQueryHistory(params?: { page?: number; perPage?: number }): Observable<SearchQuery[]> {\n return from(this.ensureConfigured().history.getHistory(params));\n }\n\n /**\n * Clear search history\n */\n clearHistory(): Observable<void> {\n return from(this.ensureConfigured().history.clear());\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Favorites\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * List user's favorite entities\n */\n listFavorites(): Observable<FavoriteEntity[]> {\n return from(this.ensureConfigured().favorites.list());\n }\n\n /**\n * Add an entity to favorites\n */\n addFavorite(request: AddFavoriteRequest): Observable<FavoriteEntity> {\n return from(this.ensureConfigured().favorites.add(request));\n }\n\n /**\n * Remove an entity from favorites\n */\n removeFavorite(id: string): Observable<void> {\n return from(this.ensureConfigured().favorites.remove(id));\n }\n\n /**\n * Check if an entity is favorited\n */\n isFavorite(entityUniqueId: string): Observable<boolean> {\n return from(this.ensureConfigured().favorites.isFavorite(entityUniqueId));\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Direct Block Access (for advanced usage)\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Access the underlying block for advanced operations\n */\n get rawBlock(): SearchBlock {\n return this.ensureConfigured();\n }\n}\n"],"names":["Injectable","Inject","Optional","from","createSearchBlock","TRANSPORT","SEARCH_TRANSPORT","SEARCH_CONFIG","SearchService","ensureConfigured","block","Error","search","request","suggest","query","limit","getEntityTypes","entityTypes","getLastQueries","history","getQueryHistory","params","getHistory","clearHistory","clear","listFavorites","favorites","list","addFavorite","add","removeFavorite","id","remove","isFavorite","entityUniqueId","rawBlock","constructor","serviceTransport","legacyTransport","config","transport","providedIn"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;AAAA,SAASA,UAAU,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,gBAAgB;AAC7D,SAAqBC,IAAI,QAAQ,OAAO;AAExC,SACEC,iBAAiB,QAWZ,yBAAyB;AAChC,SAASC,SAAS,EAAEC,gBAAgB,EAAEC,aAAa,QAAQ,eAAe;AAwB1E,OAAO,MAAMC;IAYX;;GAEC,GACD,AAAQC,mBAAgC;QACtC,IAAI,CAAC,IAAI,CAACC,KAAK,EAAE;YACf,MAAM,IAAIC,MACR,iDACA;QAEJ;QACA,OAAO,IAAI,CAACD,KAAK;IACnB;IAEA,gFAAgF;IAChF,oBAAoB;IACpB,gFAAgF;IAEhF;;GAEC,GACDE,OAAOC,OAAsB,EAA8B;QACzD,OAAOV,KAAK,IAAI,CAACM,gBAAgB,GAAGG,MAAM,CAACA,MAAM,CAACC;IACpD;IAEA;;GAEC,GACDC,QAAQC,KAAa,EAAEC,KAAc,EAA8B;QACjE,OAAOb,KAAK,IAAI,CAACM,gBAAgB,GAAGG,MAAM,CAACE,OAAO,CAACC,OAAOC;IAC5D;IAEA;;GAEC,GACDC,iBAA2C;QACzC,OAAOd,KAAK,IAAI,CAACM,gBAAgB,GAAGG,MAAM,CAACM,WAAW;IACxD;IAEA,gFAAgF;IAChF,iBAAiB;IACjB,gFAAgF;IAEhF;;GAEC,GACDC,eAAeH,KAAc,EAA2B;QACtD,OAAOb,KAAK,IAAI,CAACM,gBAAgB,GAAGW,OAAO,CAACD,cAAc,CAACH;IAC7D;IAEA;;GAEC,GACDK,gBAAgBC,MAA4C,EAA6B;QACvF,OAAOnB,KAAK,IAAI,CAACM,gBAAgB,GAAGW,OAAO,CAACG,UAAU,CAACD;IACzD;IAEA;;GAEC,GACDE,eAAiC;QAC/B,OAAOrB,KAAK,IAAI,CAACM,gBAAgB,GAAGW,OAAO,CAACK,KAAK;IACnD;IAEA,gFAAgF;IAChF,YAAY;IACZ,gFAAgF;IAEhF;;GAEC,GACDC,gBAA8C;QAC5C,OAAOvB,KAAK,IAAI,CAACM,gBAAgB,GAAGkB,SAAS,CAACC,IAAI;IACpD;IAEA;;GAEC,GACDC,YAAYhB,OAA2B,EAA8B;QACnE,OAAOV,KAAK,IAAI,CAACM,gBAAgB,GAAGkB,SAAS,CAACG,GAAG,CAACjB;IACpD;IAEA;;GAEC,GACDkB,eAAeC,EAAU,EAAoB;QAC3C,OAAO7B,KAAK,IAAI,CAACM,gBAAgB,GAAGkB,SAAS,CAACM,MAAM,CAACD;IACvD;IAEA;;GAEC,GACDE,WAAWC,cAAsB,EAAuB;QACtD,OAAOhC,KAAK,IAAI,CAACM,gBAAgB,GAAGkB,SAAS,CAACO,UAAU,CAACC;IAC3D;IAEA,gFAAgF;IAChF,2CAA2C;IAC3C,gFAAgF;IAEhF;;GAEC,GACD,IAAIC,WAAwB;QAC1B,OAAO,IAAI,CAAC3B,gBAAgB;IAC9B;IAjHA4B,YACE,AAAsCC,gBAAkC,EACxE,AAA+BC,eAAiC,EAChE,AAAuBC,MAAyB,CAChD;QACA,MAAMC,YAAYH,2BAAAA,mBAAoBC;QACtC,IAAI,CAAC7B,KAAK,GAAG+B,YAAYrC,kBAAkBqC,WAAWD,UAAU;IAClE;AA2GF;AArHahC;IADZR,WAAW;QAAE0C,YAAY;IAAO;IAK5BxC,aAAAA;IAAYD,aAAAA,OAAOK;IACnBJ,aAAAA;IAAYD,aAAAA,OAAOI;IACnBJ,aAAAA,OAAOM;;;;;eAAuB,6CAAA;;GANtBC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
2
|
import { InjectionToken, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { createHttpTransport } from '@23blocks/transport-http';
|
|
4
|
-
import { TRANSPORT,
|
|
4
|
+
import { TRANSPORT, // Per-service transport tokens
|
|
5
|
+
AUTHENTICATION_TRANSPORT, SEARCH_TRANSPORT, PRODUCTS_TRANSPORT, CRM_TRANSPORT, CONTENT_TRANSPORT, GEOLOCATION_TRANSPORT, CONVERSATIONS_TRANSPORT, FILES_TRANSPORT, FORMS_TRANSPORT, ASSETS_TRANSPORT, CAMPAIGNS_TRANSPORT, COMPANY_TRANSPORT, REWARDS_TRANSPORT, SALES_TRANSPORT, WALLET_TRANSPORT, JARVIS_TRANSPORT, ONBOARDING_TRANSPORT, UNIVERSITY_TRANSPORT, // Config tokens
|
|
6
|
+
AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_CONFIG, CONTENT_CONFIG, GEOLOCATION_CONFIG, CONVERSATIONS_CONFIG, FILES_CONFIG, FORMS_CONFIG, ASSETS_CONFIG, CAMPAIGNS_CONFIG, COMPANY_CONFIG, REWARDS_CONFIG, SALES_CONFIG, WALLET_CONFIG, JARVIS_CONFIG, ONBOARDING_CONFIG, UNIVERSITY_CONFIG } from './tokens.js';
|
|
5
7
|
/**
|
|
6
8
|
* Injection token for the token manager (internal use)
|
|
7
9
|
*/ export const TOKEN_MANAGER = new InjectionToken('23blocks.token-manager');
|
|
@@ -137,11 +139,10 @@ import { TRANSPORT, AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_C
|
|
|
137
139
|
* This is the recommended way to set up 23blocks in new Angular applications.
|
|
138
140
|
* It automatically handles token storage and authentication headers.
|
|
139
141
|
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* with different URLs per service, use the advanced API with custom transports.
|
|
142
|
+
* Services are only available if their URL is configured. Accessing a service
|
|
143
|
+
* without a configured URL will throw an error.
|
|
143
144
|
*
|
|
144
|
-
* @example Basic usage
|
|
145
|
+
* @example Basic usage with multiple services
|
|
145
146
|
* ```typescript
|
|
146
147
|
* // app.config.ts
|
|
147
148
|
* import { ApplicationConfig } from '@angular/core';
|
|
@@ -153,7 +154,8 @@ import { TRANSPORT, AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_C
|
|
|
153
154
|
* appId: 'your-app-id',
|
|
154
155
|
* urls: {
|
|
155
156
|
* authentication: 'https://gateway.23blocks.com',
|
|
156
|
-
*
|
|
157
|
+
* crm: 'https://crm.23blocks.com',
|
|
158
|
+
* products: 'https://products.23blocks.com',
|
|
157
159
|
* },
|
|
158
160
|
* }),
|
|
159
161
|
* ],
|
|
@@ -169,6 +171,7 @@ import { TRANSPORT, AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_C
|
|
|
169
171
|
* authMode: 'cookie',
|
|
170
172
|
* urls: {
|
|
171
173
|
* authentication: 'https://gateway.23blocks.com',
|
|
174
|
+
* crm: 'https://crm.23blocks.com',
|
|
172
175
|
* },
|
|
173
176
|
* }),
|
|
174
177
|
* ],
|
|
@@ -180,8 +183,17 @@ import { TRANSPORT, AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_C
|
|
|
180
183
|
appId: config.appId,
|
|
181
184
|
tenantId: config.tenantId
|
|
182
185
|
};
|
|
183
|
-
//
|
|
184
|
-
const
|
|
186
|
+
// Helper to create transport provider for a service URL
|
|
187
|
+
const createTransportProvider = (token, url)=>({
|
|
188
|
+
provide: token,
|
|
189
|
+
useFactory: (tokenManager)=>{
|
|
190
|
+
if (!url) return null;
|
|
191
|
+
return createTransportWithAuth(url, config, tokenManager);
|
|
192
|
+
},
|
|
193
|
+
deps: [
|
|
194
|
+
TOKEN_MANAGER
|
|
195
|
+
]
|
|
196
|
+
});
|
|
185
197
|
const providers = [
|
|
186
198
|
// Store config for injection
|
|
187
199
|
{
|
|
@@ -197,12 +209,41 @@ import { TRANSPORT, AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_C
|
|
|
197
209
|
return createTokenManager(config.appId, storage, config.tenantId);
|
|
198
210
|
}
|
|
199
211
|
},
|
|
200
|
-
//
|
|
201
|
-
|
|
212
|
+
// Per-service transport factories (null if URL not configured)
|
|
213
|
+
createTransportProvider(AUTHENTICATION_TRANSPORT, config.urls.authentication),
|
|
214
|
+
createTransportProvider(SEARCH_TRANSPORT, config.urls.search),
|
|
215
|
+
createTransportProvider(PRODUCTS_TRANSPORT, config.urls.products),
|
|
216
|
+
createTransportProvider(CRM_TRANSPORT, config.urls.crm),
|
|
217
|
+
createTransportProvider(CONTENT_TRANSPORT, config.urls.content),
|
|
218
|
+
createTransportProvider(GEOLOCATION_TRANSPORT, config.urls.geolocation),
|
|
219
|
+
createTransportProvider(CONVERSATIONS_TRANSPORT, config.urls.conversations),
|
|
220
|
+
createTransportProvider(FILES_TRANSPORT, config.urls.files),
|
|
221
|
+
createTransportProvider(FORMS_TRANSPORT, config.urls.forms),
|
|
222
|
+
createTransportProvider(ASSETS_TRANSPORT, config.urls.assets),
|
|
223
|
+
createTransportProvider(CAMPAIGNS_TRANSPORT, config.urls.campaigns),
|
|
224
|
+
createTransportProvider(COMPANY_TRANSPORT, config.urls.company),
|
|
225
|
+
createTransportProvider(REWARDS_TRANSPORT, config.urls.rewards),
|
|
226
|
+
createTransportProvider(SALES_TRANSPORT, config.urls.sales),
|
|
227
|
+
createTransportProvider(WALLET_TRANSPORT, config.urls.wallet),
|
|
228
|
+
createTransportProvider(JARVIS_TRANSPORT, config.urls.jarvis),
|
|
229
|
+
createTransportProvider(ONBOARDING_TRANSPORT, config.urls.onboarding),
|
|
230
|
+
createTransportProvider(UNIVERSITY_TRANSPORT, config.urls.university),
|
|
231
|
+
// Backward compatibility: provide TRANSPORT token using auth URL if available
|
|
232
|
+
// (for advanced API users who still inject TRANSPORT directly)
|
|
202
233
|
{
|
|
203
234
|
provide: TRANSPORT,
|
|
204
235
|
useFactory: (tokenManager)=>{
|
|
205
|
-
|
|
236
|
+
// Use auth URL if available, otherwise create a dummy transport that throws
|
|
237
|
+
const url = config.urls.authentication;
|
|
238
|
+
if (url) {
|
|
239
|
+
return createTransportWithAuth(url, config, tokenManager);
|
|
240
|
+
}
|
|
241
|
+
// Return a transport that throws helpful errors
|
|
242
|
+
return {
|
|
243
|
+
request: ()=>{
|
|
244
|
+
throw new Error('[23blocks] TRANSPORT is not configured. ' + 'Use per-service transport tokens or configure urls.authentication.');
|
|
245
|
+
}
|
|
246
|
+
};
|
|
206
247
|
},
|
|
207
248
|
deps: [
|
|
208
249
|
TOKEN_MANAGER
|
|
@@ -287,6 +328,9 @@ import { TRANSPORT, AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_C
|
|
|
287
328
|
/**
|
|
288
329
|
* Get providers array for NgModule-based applications with simplified config.
|
|
289
330
|
*
|
|
331
|
+
* Services are only available if their URL is configured. Accessing a service
|
|
332
|
+
* without a configured URL will throw an error.
|
|
333
|
+
*
|
|
290
334
|
* @example
|
|
291
335
|
* ```typescript
|
|
292
336
|
* // app.module.ts
|
|
@@ -299,6 +343,7 @@ import { TRANSPORT, AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_C
|
|
|
299
343
|
* appId: 'your-app-id',
|
|
300
344
|
* urls: {
|
|
301
345
|
* authentication: 'https://gateway.23blocks.com',
|
|
346
|
+
* crm: 'https://crm.23blocks.com',
|
|
302
347
|
* },
|
|
303
348
|
* }),
|
|
304
349
|
* ],
|
|
@@ -311,8 +356,17 @@ import { TRANSPORT, AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_C
|
|
|
311
356
|
appId: config.appId,
|
|
312
357
|
tenantId: config.tenantId
|
|
313
358
|
};
|
|
314
|
-
//
|
|
315
|
-
const
|
|
359
|
+
// Helper to create transport provider for a service URL
|
|
360
|
+
const createTransportProvider = (token, url)=>({
|
|
361
|
+
provide: token,
|
|
362
|
+
useFactory: (tokenManager)=>{
|
|
363
|
+
if (!url) return null;
|
|
364
|
+
return createTransportWithAuth(url, config, tokenManager);
|
|
365
|
+
},
|
|
366
|
+
deps: [
|
|
367
|
+
TOKEN_MANAGER
|
|
368
|
+
]
|
|
369
|
+
});
|
|
316
370
|
return [
|
|
317
371
|
// Store config for injection
|
|
318
372
|
{
|
|
@@ -328,11 +382,38 @@ import { TRANSPORT, AUTHENTICATION_CONFIG, SEARCH_CONFIG, PRODUCTS_CONFIG, CRM_C
|
|
|
328
382
|
return createTokenManager(config.appId, storage, config.tenantId);
|
|
329
383
|
}
|
|
330
384
|
},
|
|
331
|
-
//
|
|
385
|
+
// Per-service transport factories (null if URL not configured)
|
|
386
|
+
createTransportProvider(AUTHENTICATION_TRANSPORT, config.urls.authentication),
|
|
387
|
+
createTransportProvider(SEARCH_TRANSPORT, config.urls.search),
|
|
388
|
+
createTransportProvider(PRODUCTS_TRANSPORT, config.urls.products),
|
|
389
|
+
createTransportProvider(CRM_TRANSPORT, config.urls.crm),
|
|
390
|
+
createTransportProvider(CONTENT_TRANSPORT, config.urls.content),
|
|
391
|
+
createTransportProvider(GEOLOCATION_TRANSPORT, config.urls.geolocation),
|
|
392
|
+
createTransportProvider(CONVERSATIONS_TRANSPORT, config.urls.conversations),
|
|
393
|
+
createTransportProvider(FILES_TRANSPORT, config.urls.files),
|
|
394
|
+
createTransportProvider(FORMS_TRANSPORT, config.urls.forms),
|
|
395
|
+
createTransportProvider(ASSETS_TRANSPORT, config.urls.assets),
|
|
396
|
+
createTransportProvider(CAMPAIGNS_TRANSPORT, config.urls.campaigns),
|
|
397
|
+
createTransportProvider(COMPANY_TRANSPORT, config.urls.company),
|
|
398
|
+
createTransportProvider(REWARDS_TRANSPORT, config.urls.rewards),
|
|
399
|
+
createTransportProvider(SALES_TRANSPORT, config.urls.sales),
|
|
400
|
+
createTransportProvider(WALLET_TRANSPORT, config.urls.wallet),
|
|
401
|
+
createTransportProvider(JARVIS_TRANSPORT, config.urls.jarvis),
|
|
402
|
+
createTransportProvider(ONBOARDING_TRANSPORT, config.urls.onboarding),
|
|
403
|
+
createTransportProvider(UNIVERSITY_TRANSPORT, config.urls.university),
|
|
404
|
+
// Backward compatibility: provide TRANSPORT token using auth URL if available
|
|
332
405
|
{
|
|
333
406
|
provide: TRANSPORT,
|
|
334
407
|
useFactory: (tokenManager)=>{
|
|
335
|
-
|
|
408
|
+
const url = config.urls.authentication;
|
|
409
|
+
if (url) {
|
|
410
|
+
return createTransportWithAuth(url, config, tokenManager);
|
|
411
|
+
}
|
|
412
|
+
return {
|
|
413
|
+
request: ()=>{
|
|
414
|
+
throw new Error('[23blocks] TRANSPORT is not configured. ' + 'Use per-service transport tokens or configure urls.authentication.');
|
|
415
|
+
}
|
|
416
|
+
};
|
|
336
417
|
},
|
|
337
418
|
deps: [
|
|
338
419
|
TOKEN_MANAGER
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/simple-providers.ts"],"sourcesContent":["import type { Provider, EnvironmentProviders } from '@angular/core';\nimport { InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { createHttpTransport } from '@23blocks/transport-http';\nimport type { Transport } from '@23blocks/contracts';\nimport {\n TRANSPORT,\n AUTHENTICATION_CONFIG,\n SEARCH_CONFIG,\n PRODUCTS_CONFIG,\n CRM_CONFIG,\n CONTENT_CONFIG,\n GEOLOCATION_CONFIG,\n CONVERSATIONS_CONFIG,\n FILES_CONFIG,\n FORMS_CONFIG,\n ASSETS_CONFIG,\n CAMPAIGNS_CONFIG,\n COMPANY_CONFIG,\n REWARDS_CONFIG,\n SALES_CONFIG,\n WALLET_CONFIG,\n JARVIS_CONFIG,\n ONBOARDING_CONFIG,\n UNIVERSITY_CONFIG,\n} from './tokens.js';\n\n/**\n * Authentication mode\n */\nexport type AuthMode = 'token' | 'cookie';\n\n/**\n * Storage type for token mode\n */\nexport type StorageType = 'localStorage' | 'sessionStorage' | 'memory';\n\n/**\n * Service URL configuration - each microservice has its own URL\n */\nexport interface ServiceUrls {\n /** Authentication service URL (required) */\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 * Configuration for providing 23blocks services\n */\nexport interface ProviderConfig {\n /**\n * Service URLs for each microservice.\n * At minimum, `authentication` URL is required.\n *\n * @example\n * ```typescript\n * provideBlocks23({\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 */\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 * @default 'localStorage'\n */\n storage?: StorageType;\n\n /**\n * Additional headers to include with every request\n */\n headers?: Record<string, string>;\n\n /**\n * Request timeout in milliseconds\n * @default 30000\n */\n timeout?: number;\n}\n\n/**\n * Injection token for the token manager (internal use)\n */\nexport const TOKEN_MANAGER = new InjectionToken<TokenManagerService>('23blocks.token-manager');\n\n/**\n * Injection token for provider config\n */\nexport const PROVIDER_CONFIG = new InjectionToken<ProviderConfig>('23blocks.provider-config');\n\n/** @deprecated Use PROVIDER_CONFIG instead */\nexport const SIMPLE_CONFIG = PROVIDER_CONFIG;\n\n/**\n * Token manager interface\n */\nexport interface TokenManagerService {\n getAccessToken(): string | null;\n getRefreshToken(): string | null;\n setTokens(accessToken: string, refreshToken?: string): void;\n clearTokens(): void;\n /**\n * Subscribe to storage changes from other tabs/windows.\n * Returns an unsubscribe function.\n */\n onStorageChange(callback: () => void): () => void;\n}\n\n/**\n * Generate storage key scoped to app and tenant\n */\nfunction getStorageKey(type: 'access' | 'refresh', appId: string, tenantId?: string): string {\n const scope = tenantId ? `${appId}_${tenantId}` : appId;\n return `23blocks_${scope}_${type}_token`;\n}\n\n/**\n * In-memory storage for SSR\n */\nclass MemoryStorage {\n private data = new Map<string, string>();\n getItem(key: string): string | null {\n return this.data.get(key) ?? null;\n }\n setItem(key: string, value: string): void {\n this.data.set(key, value);\n }\n removeItem(key: string): void {\n this.data.delete(key);\n }\n}\n\n/**\n * Create a token manager with scoped storage keys and cross-tab sync\n */\nfunction createTokenManager(\n appId: string,\n storageType: StorageType,\n tenantId?: string\n): TokenManagerService {\n const isBrowser = typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n\n const accessTokenKey = getStorageKey('access', appId, tenantId);\n const refreshTokenKey = getStorageKey('refresh', appId, tenantId);\n\n let storage: Storage | MemoryStorage;\n if (!isBrowser) {\n storage = new MemoryStorage();\n } else {\n switch (storageType) {\n case 'sessionStorage':\n storage = window.sessionStorage;\n break;\n case 'memory':\n storage = new MemoryStorage();\n break;\n default:\n storage = window.localStorage;\n }\n }\n\n return {\n getAccessToken(): string | null {\n try {\n return storage.getItem(accessTokenKey);\n } catch {\n return null;\n }\n },\n getRefreshToken(): string | null {\n try {\n return storage.getItem(refreshTokenKey);\n } catch {\n return null;\n }\n },\n setTokens(accessToken: string, refreshToken?: string): void {\n try {\n storage.setItem(accessTokenKey, accessToken);\n if (refreshToken) {\n storage.setItem(refreshTokenKey, refreshToken);\n }\n } catch {\n console.warn('[23blocks] Unable to store tokens');\n }\n },\n clearTokens(): void {\n try {\n storage.removeItem(accessTokenKey);\n storage.removeItem(refreshTokenKey);\n } catch {\n // Silently fail\n }\n },\n onStorageChange(callback: () => void): () => void {\n // Only works in browser with localStorage/sessionStorage\n if (!isBrowser || storageType === 'memory') {\n // Return no-op unsubscribe for SSR/memory storage\n return () => {};\n }\n\n const handler = (event: StorageEvent) => {\n // Only trigger if our keys changed\n if (event.key === accessTokenKey || event.key === refreshTokenKey) {\n callback();\n }\n };\n\n window.addEventListener('storage', handler);\n\n // Return unsubscribe function\n return () => {\n window.removeEventListener('storage', handler);\n };\n },\n };\n}\n\n/**\n * Create transport with automatic token handling for a specific URL\n */\nfunction createTransportWithAuth(\n baseUrl: string,\n config: ProviderConfig,\n tokenManager: TokenManagerService\n): Transport {\n return createHttpTransport({\n baseUrl,\n timeout: config.timeout,\n credentials: config.authMode === 'cookie' ? 'include' : undefined,\n headers: () => {\n const headers: Record<string, string> = {\n ...config.headers,\n appid: config.appId,\n };\n\n if (config.tenantId) {\n headers['tenant-id'] = config.tenantId;\n }\n\n // In token mode, add Authorization header if we have a token\n if (config.authMode !== 'cookie') {\n const token = tokenManager.getAccessToken();\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n }\n\n return headers;\n },\n });\n}\n\n/**\n * Provide 23blocks services with simplified configuration.\n *\n * This is the recommended way to set up 23blocks in new Angular applications.\n * It automatically handles token storage and authentication headers.\n *\n * **Note:** Currently, Angular uses a single shared transport for all services.\n * The `authentication` URL is used as the base URL. For full multi-URL support\n * with different URLs per service, use the advanced API with custom transports.\n *\n * @example Basic usage\n * ```typescript\n * // app.config.ts\n * import { ApplicationConfig } from '@angular/core';\n * import { provideBlocks23 } from '@23blocks/angular';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideBlocks23({\n * appId: 'your-app-id',\n * urls: {\n * authentication: 'https://gateway.23blocks.com',\n * // Additional URLs available for future per-service support\n * },\n * }),\n * ],\n * };\n * ```\n *\n * @example Cookie mode (recommended for security)\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideBlocks23({\n * appId: 'your-app-id',\n * authMode: 'cookie',\n * urls: {\n * authentication: 'https://gateway.23blocks.com',\n * },\n * }),\n * ],\n * };\n * ```\n */\nexport function provideBlocks23(config: ProviderConfig): EnvironmentProviders {\n // Block config for all services\n const blockConfig = { appId: config.appId, tenantId: config.tenantId };\n\n // Use authentication URL as the base (currently single transport for all services)\n const baseUrl = config.urls.authentication;\n\n const providers: Provider[] = [\n // Store config for injection\n { provide: PROVIDER_CONFIG, useValue: config },\n\n // Token manager factory - creates singleton within the injector\n {\n provide: TOKEN_MANAGER,\n useFactory: () => {\n const storage = config.storage ?? 'localStorage';\n return createTokenManager(config.appId, storage, config.tenantId);\n },\n },\n\n // Transport factory - depends on token manager\n // Note: Currently uses single transport (authentication URL) for all services\n {\n provide: TRANSPORT,\n useFactory: (tokenManager: TokenManagerService) => {\n return createTransportWithAuth(baseUrl, config, tokenManager);\n },\n deps: [TOKEN_MANAGER],\n },\n\n // Block configs\n { provide: AUTHENTICATION_CONFIG, useValue: blockConfig },\n { provide: SEARCH_CONFIG, useValue: blockConfig },\n { provide: PRODUCTS_CONFIG, useValue: blockConfig },\n { provide: CRM_CONFIG, useValue: blockConfig },\n { provide: CONTENT_CONFIG, useValue: blockConfig },\n { provide: GEOLOCATION_CONFIG, useValue: blockConfig },\n { provide: CONVERSATIONS_CONFIG, useValue: blockConfig },\n { provide: FILES_CONFIG, useValue: blockConfig },\n { provide: FORMS_CONFIG, useValue: blockConfig },\n { provide: ASSETS_CONFIG, useValue: blockConfig },\n { provide: CAMPAIGNS_CONFIG, useValue: blockConfig },\n { provide: COMPANY_CONFIG, useValue: blockConfig },\n { provide: REWARDS_CONFIG, useValue: blockConfig },\n { provide: SALES_CONFIG, useValue: blockConfig },\n { provide: WALLET_CONFIG, useValue: blockConfig },\n { provide: JARVIS_CONFIG, useValue: blockConfig },\n { provide: ONBOARDING_CONFIG, useValue: blockConfig },\n { provide: UNIVERSITY_CONFIG, useValue: blockConfig },\n ];\n\n return makeEnvironmentProviders(providers);\n}\n\n/**\n * Get providers array for NgModule-based applications with simplified config.\n *\n * @example\n * ```typescript\n * // app.module.ts\n * import { NgModule } from '@angular/core';\n * import { getBlocks23Providers } from '@23blocks/angular';\n *\n * @NgModule({\n * providers: [\n * ...getBlocks23Providers({\n * appId: 'your-app-id',\n * urls: {\n * authentication: 'https://gateway.23blocks.com',\n * },\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n */\nexport function getBlocks23Providers(config: ProviderConfig): Provider[] {\n // Block config for all services\n const blockConfig = { appId: config.appId, tenantId: config.tenantId };\n\n // Use authentication URL as the base\n const baseUrl = config.urls.authentication;\n\n return [\n // Store config for injection\n { provide: PROVIDER_CONFIG, useValue: config },\n\n // Token manager factory - creates singleton within the injector\n {\n provide: TOKEN_MANAGER,\n useFactory: () => {\n const storage = config.storage ?? 'localStorage';\n return createTokenManager(config.appId, storage, config.tenantId);\n },\n },\n\n // Transport factory - depends on token manager\n {\n provide: TRANSPORT,\n useFactory: (tokenManager: TokenManagerService) => {\n return createTransportWithAuth(baseUrl, config, tokenManager);\n },\n deps: [TOKEN_MANAGER],\n },\n\n // Block configs\n { provide: AUTHENTICATION_CONFIG, useValue: blockConfig },\n { provide: SEARCH_CONFIG, useValue: blockConfig },\n { provide: PRODUCTS_CONFIG, useValue: blockConfig },\n { provide: CRM_CONFIG, useValue: blockConfig },\n { provide: CONTENT_CONFIG, useValue: blockConfig },\n { provide: GEOLOCATION_CONFIG, useValue: blockConfig },\n { provide: CONVERSATIONS_CONFIG, useValue: blockConfig },\n { provide: FILES_CONFIG, useValue: blockConfig },\n { provide: FORMS_CONFIG, useValue: blockConfig },\n { provide: ASSETS_CONFIG, useValue: blockConfig },\n { provide: CAMPAIGNS_CONFIG, useValue: blockConfig },\n { provide: COMPANY_CONFIG, useValue: blockConfig },\n { provide: REWARDS_CONFIG, useValue: blockConfig },\n { provide: SALES_CONFIG, useValue: blockConfig },\n { provide: WALLET_CONFIG, useValue: blockConfig },\n { provide: JARVIS_CONFIG, useValue: blockConfig },\n { provide: ONBOARDING_CONFIG, useValue: blockConfig },\n { provide: UNIVERSITY_CONFIG, useValue: blockConfig },\n ];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Backward Compatibility Aliases (deprecated)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** @deprecated Use `ProviderConfig` instead */\nexport type Simple23BlocksConfig = ProviderConfig;\n"],"names":["InjectionToken","makeEnvironmentProviders","createHttpTransport","TRANSPORT","AUTHENTICATION_CONFIG","SEARCH_CONFIG","PRODUCTS_CONFIG","CRM_CONFIG","CONTENT_CONFIG","GEOLOCATION_CONFIG","CONVERSATIONS_CONFIG","FILES_CONFIG","FORMS_CONFIG","ASSETS_CONFIG","CAMPAIGNS_CONFIG","COMPANY_CONFIG","REWARDS_CONFIG","SALES_CONFIG","WALLET_CONFIG","JARVIS_CONFIG","ONBOARDING_CONFIG","UNIVERSITY_CONFIG","TOKEN_MANAGER","PROVIDER_CONFIG","SIMPLE_CONFIG","getStorageKey","type","appId","tenantId","scope","MemoryStorage","getItem","key","data","get","setItem","value","set","removeItem","delete","Map","createTokenManager","storageType","isBrowser","window","localStorage","accessTokenKey","refreshTokenKey","storage","sessionStorage","getAccessToken","getRefreshToken","setTokens","accessToken","refreshToken","console","warn","clearTokens","onStorageChange","callback","handler","event","addEventListener","removeEventListener","createTransportWithAuth","baseUrl","config","tokenManager","timeout","credentials","authMode","undefined","headers","appid","token","provideBlocks23","blockConfig","urls","authentication","providers","provide","useValue","useFactory","deps","getBlocks23Providers"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/simple-providers.ts"],"sourcesContent":["import type { Provider, EnvironmentProviders } from '@angular/core';\nimport { InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { createHttpTransport } from '@23blocks/transport-http';\nimport type { Transport } from '@23blocks/contracts';\nimport {\n TRANSPORT,\n // Per-service transport tokens\n AUTHENTICATION_TRANSPORT,\n SEARCH_TRANSPORT,\n PRODUCTS_TRANSPORT,\n CRM_TRANSPORT,\n CONTENT_TRANSPORT,\n GEOLOCATION_TRANSPORT,\n CONVERSATIONS_TRANSPORT,\n FILES_TRANSPORT,\n FORMS_TRANSPORT,\n ASSETS_TRANSPORT,\n CAMPAIGNS_TRANSPORT,\n COMPANY_TRANSPORT,\n REWARDS_TRANSPORT,\n SALES_TRANSPORT,\n WALLET_TRANSPORT,\n JARVIS_TRANSPORT,\n ONBOARDING_TRANSPORT,\n UNIVERSITY_TRANSPORT,\n // Config tokens\n AUTHENTICATION_CONFIG,\n SEARCH_CONFIG,\n PRODUCTS_CONFIG,\n CRM_CONFIG,\n CONTENT_CONFIG,\n GEOLOCATION_CONFIG,\n CONVERSATIONS_CONFIG,\n FILES_CONFIG,\n FORMS_CONFIG,\n ASSETS_CONFIG,\n CAMPAIGNS_CONFIG,\n COMPANY_CONFIG,\n REWARDS_CONFIG,\n SALES_CONFIG,\n WALLET_CONFIG,\n JARVIS_CONFIG,\n ONBOARDING_CONFIG,\n UNIVERSITY_CONFIG,\n} from './tokens.js';\n\n/**\n * Authentication mode\n */\nexport type AuthMode = 'token' | 'cookie';\n\n/**\n * Storage type for token mode\n */\nexport type StorageType = 'localStorage' | 'sessionStorage' | 'memory';\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 * Configuration for providing 23blocks services\n */\nexport interface ProviderConfig {\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 * provideBlocks23({\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 */\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 * @default 'localStorage'\n */\n storage?: StorageType;\n\n /**\n * Additional headers to include with every request\n */\n headers?: Record<string, string>;\n\n /**\n * Request timeout in milliseconds\n * @default 30000\n */\n timeout?: number;\n}\n\n/**\n * Injection token for the token manager (internal use)\n */\nexport const TOKEN_MANAGER = new InjectionToken<TokenManagerService>('23blocks.token-manager');\n\n/**\n * Injection token for provider config\n */\nexport const PROVIDER_CONFIG = new InjectionToken<ProviderConfig>('23blocks.provider-config');\n\n/** @deprecated Use PROVIDER_CONFIG instead */\nexport const SIMPLE_CONFIG = PROVIDER_CONFIG;\n\n/**\n * Token manager interface\n */\nexport interface TokenManagerService {\n getAccessToken(): string | null;\n getRefreshToken(): string | null;\n setTokens(accessToken: string, refreshToken?: string): void;\n clearTokens(): void;\n /**\n * Subscribe to storage changes from other tabs/windows.\n * Returns an unsubscribe function.\n */\n onStorageChange(callback: () => void): () => void;\n}\n\n/**\n * Generate storage key scoped to app and tenant\n */\nfunction getStorageKey(type: 'access' | 'refresh', appId: string, tenantId?: string): string {\n const scope = tenantId ? `${appId}_${tenantId}` : appId;\n return `23blocks_${scope}_${type}_token`;\n}\n\n/**\n * In-memory storage for SSR\n */\nclass MemoryStorage {\n private data = new Map<string, string>();\n getItem(key: string): string | null {\n return this.data.get(key) ?? null;\n }\n setItem(key: string, value: string): void {\n this.data.set(key, value);\n }\n removeItem(key: string): void {\n this.data.delete(key);\n }\n}\n\n/**\n * Create a token manager with scoped storage keys and cross-tab sync\n */\nfunction createTokenManager(\n appId: string,\n storageType: StorageType,\n tenantId?: string\n): TokenManagerService {\n const isBrowser = typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n\n const accessTokenKey = getStorageKey('access', appId, tenantId);\n const refreshTokenKey = getStorageKey('refresh', appId, tenantId);\n\n let storage: Storage | MemoryStorage;\n if (!isBrowser) {\n storage = new MemoryStorage();\n } else {\n switch (storageType) {\n case 'sessionStorage':\n storage = window.sessionStorage;\n break;\n case 'memory':\n storage = new MemoryStorage();\n break;\n default:\n storage = window.localStorage;\n }\n }\n\n return {\n getAccessToken(): string | null {\n try {\n return storage.getItem(accessTokenKey);\n } catch {\n return null;\n }\n },\n getRefreshToken(): string | null {\n try {\n return storage.getItem(refreshTokenKey);\n } catch {\n return null;\n }\n },\n setTokens(accessToken: string, refreshToken?: string): void {\n try {\n storage.setItem(accessTokenKey, accessToken);\n if (refreshToken) {\n storage.setItem(refreshTokenKey, refreshToken);\n }\n } catch {\n console.warn('[23blocks] Unable to store tokens');\n }\n },\n clearTokens(): void {\n try {\n storage.removeItem(accessTokenKey);\n storage.removeItem(refreshTokenKey);\n } catch {\n // Silently fail\n }\n },\n onStorageChange(callback: () => void): () => void {\n // Only works in browser with localStorage/sessionStorage\n if (!isBrowser || storageType === 'memory') {\n // Return no-op unsubscribe for SSR/memory storage\n return () => {};\n }\n\n const handler = (event: StorageEvent) => {\n // Only trigger if our keys changed\n if (event.key === accessTokenKey || event.key === refreshTokenKey) {\n callback();\n }\n };\n\n window.addEventListener('storage', handler);\n\n // Return unsubscribe function\n return () => {\n window.removeEventListener('storage', handler);\n };\n },\n };\n}\n\n/**\n * Create transport with automatic token handling for a specific URL\n */\nfunction createTransportWithAuth(\n baseUrl: string,\n config: ProviderConfig,\n tokenManager: TokenManagerService\n): Transport {\n return createHttpTransport({\n baseUrl,\n timeout: config.timeout,\n credentials: config.authMode === 'cookie' ? 'include' : undefined,\n headers: () => {\n const headers: Record<string, string> = {\n ...config.headers,\n appid: config.appId,\n };\n\n if (config.tenantId) {\n headers['tenant-id'] = config.tenantId;\n }\n\n // In token mode, add Authorization header if we have a token\n if (config.authMode !== 'cookie') {\n const token = tokenManager.getAccessToken();\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n }\n\n return headers;\n },\n });\n}\n\n/**\n * Provide 23blocks services with simplified configuration.\n *\n * This is the recommended way to set up 23blocks in new Angular applications.\n * It automatically handles token storage and authentication headers.\n *\n * Services are only available if their URL is configured. Accessing a service\n * without a configured URL will throw an error.\n *\n * @example Basic usage with multiple services\n * ```typescript\n * // app.config.ts\n * import { ApplicationConfig } from '@angular/core';\n * import { provideBlocks23 } from '@23blocks/angular';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideBlocks23({\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 * };\n * ```\n *\n * @example Cookie mode (recommended for security)\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideBlocks23({\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 * ```\n */\nexport function provideBlocks23(config: ProviderConfig): EnvironmentProviders {\n // Block config for all services\n const blockConfig = { appId: config.appId, tenantId: config.tenantId };\n\n // Helper to create transport provider for a service URL\n const createTransportProvider = (\n token: InjectionToken<Transport | null>,\n url: string | undefined\n ): Provider => ({\n provide: token,\n useFactory: (tokenManager: TokenManagerService) => {\n if (!url) return null;\n return createTransportWithAuth(url, config, tokenManager);\n },\n deps: [TOKEN_MANAGER],\n });\n\n const providers: Provider[] = [\n // Store config for injection\n { provide: PROVIDER_CONFIG, useValue: config },\n\n // Token manager factory - creates singleton within the injector\n {\n provide: TOKEN_MANAGER,\n useFactory: () => {\n const storage = config.storage ?? 'localStorage';\n return createTokenManager(config.appId, storage, config.tenantId);\n },\n },\n\n // Per-service transport factories (null if URL not configured)\n createTransportProvider(AUTHENTICATION_TRANSPORT, config.urls.authentication),\n createTransportProvider(SEARCH_TRANSPORT, config.urls.search),\n createTransportProvider(PRODUCTS_TRANSPORT, config.urls.products),\n createTransportProvider(CRM_TRANSPORT, config.urls.crm),\n createTransportProvider(CONTENT_TRANSPORT, config.urls.content),\n createTransportProvider(GEOLOCATION_TRANSPORT, config.urls.geolocation),\n createTransportProvider(CONVERSATIONS_TRANSPORT, config.urls.conversations),\n createTransportProvider(FILES_TRANSPORT, config.urls.files),\n createTransportProvider(FORMS_TRANSPORT, config.urls.forms),\n createTransportProvider(ASSETS_TRANSPORT, config.urls.assets),\n createTransportProvider(CAMPAIGNS_TRANSPORT, config.urls.campaigns),\n createTransportProvider(COMPANY_TRANSPORT, config.urls.company),\n createTransportProvider(REWARDS_TRANSPORT, config.urls.rewards),\n createTransportProvider(SALES_TRANSPORT, config.urls.sales),\n createTransportProvider(WALLET_TRANSPORT, config.urls.wallet),\n createTransportProvider(JARVIS_TRANSPORT, config.urls.jarvis),\n createTransportProvider(ONBOARDING_TRANSPORT, config.urls.onboarding),\n createTransportProvider(UNIVERSITY_TRANSPORT, config.urls.university),\n\n // Backward compatibility: provide TRANSPORT token using auth URL if available\n // (for advanced API users who still inject TRANSPORT directly)\n {\n provide: TRANSPORT,\n useFactory: (tokenManager: TokenManagerService) => {\n // Use auth URL if available, otherwise create a dummy transport that throws\n const url = config.urls.authentication;\n if (url) {\n return createTransportWithAuth(url, config, tokenManager);\n }\n // Return a transport that throws helpful errors\n return {\n request: () => {\n throw new Error(\n '[23blocks] TRANSPORT is not configured. ' +\n 'Use per-service transport tokens or configure urls.authentication.'\n );\n },\n };\n },\n deps: [TOKEN_MANAGER],\n },\n\n // Block configs\n { provide: AUTHENTICATION_CONFIG, useValue: blockConfig },\n { provide: SEARCH_CONFIG, useValue: blockConfig },\n { provide: PRODUCTS_CONFIG, useValue: blockConfig },\n { provide: CRM_CONFIG, useValue: blockConfig },\n { provide: CONTENT_CONFIG, useValue: blockConfig },\n { provide: GEOLOCATION_CONFIG, useValue: blockConfig },\n { provide: CONVERSATIONS_CONFIG, useValue: blockConfig },\n { provide: FILES_CONFIG, useValue: blockConfig },\n { provide: FORMS_CONFIG, useValue: blockConfig },\n { provide: ASSETS_CONFIG, useValue: blockConfig },\n { provide: CAMPAIGNS_CONFIG, useValue: blockConfig },\n { provide: COMPANY_CONFIG, useValue: blockConfig },\n { provide: REWARDS_CONFIG, useValue: blockConfig },\n { provide: SALES_CONFIG, useValue: blockConfig },\n { provide: WALLET_CONFIG, useValue: blockConfig },\n { provide: JARVIS_CONFIG, useValue: blockConfig },\n { provide: ONBOARDING_CONFIG, useValue: blockConfig },\n { provide: UNIVERSITY_CONFIG, useValue: blockConfig },\n ];\n\n return makeEnvironmentProviders(providers);\n}\n\n/**\n * Get providers array for NgModule-based applications with simplified config.\n *\n * Services are only available if their URL is configured. Accessing a service\n * without a configured URL will throw an error.\n *\n * @example\n * ```typescript\n * // app.module.ts\n * import { NgModule } from '@angular/core';\n * import { getBlocks23Providers } from '@23blocks/angular';\n *\n * @NgModule({\n * providers: [\n * ...getBlocks23Providers({\n * appId: 'your-app-id',\n * urls: {\n * authentication: 'https://gateway.23blocks.com',\n * crm: 'https://crm.23blocks.com',\n * },\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n */\nexport function getBlocks23Providers(config: ProviderConfig): Provider[] {\n // Block config for all services\n const blockConfig = { appId: config.appId, tenantId: config.tenantId };\n\n // Helper to create transport provider for a service URL\n const createTransportProvider = (\n token: InjectionToken<Transport | null>,\n url: string | undefined\n ): Provider => ({\n provide: token,\n useFactory: (tokenManager: TokenManagerService) => {\n if (!url) return null;\n return createTransportWithAuth(url, config, tokenManager);\n },\n deps: [TOKEN_MANAGER],\n });\n\n return [\n // Store config for injection\n { provide: PROVIDER_CONFIG, useValue: config },\n\n // Token manager factory - creates singleton within the injector\n {\n provide: TOKEN_MANAGER,\n useFactory: () => {\n const storage = config.storage ?? 'localStorage';\n return createTokenManager(config.appId, storage, config.tenantId);\n },\n },\n\n // Per-service transport factories (null if URL not configured)\n createTransportProvider(AUTHENTICATION_TRANSPORT, config.urls.authentication),\n createTransportProvider(SEARCH_TRANSPORT, config.urls.search),\n createTransportProvider(PRODUCTS_TRANSPORT, config.urls.products),\n createTransportProvider(CRM_TRANSPORT, config.urls.crm),\n createTransportProvider(CONTENT_TRANSPORT, config.urls.content),\n createTransportProvider(GEOLOCATION_TRANSPORT, config.urls.geolocation),\n createTransportProvider(CONVERSATIONS_TRANSPORT, config.urls.conversations),\n createTransportProvider(FILES_TRANSPORT, config.urls.files),\n createTransportProvider(FORMS_TRANSPORT, config.urls.forms),\n createTransportProvider(ASSETS_TRANSPORT, config.urls.assets),\n createTransportProvider(CAMPAIGNS_TRANSPORT, config.urls.campaigns),\n createTransportProvider(COMPANY_TRANSPORT, config.urls.company),\n createTransportProvider(REWARDS_TRANSPORT, config.urls.rewards),\n createTransportProvider(SALES_TRANSPORT, config.urls.sales),\n createTransportProvider(WALLET_TRANSPORT, config.urls.wallet),\n createTransportProvider(JARVIS_TRANSPORT, config.urls.jarvis),\n createTransportProvider(ONBOARDING_TRANSPORT, config.urls.onboarding),\n createTransportProvider(UNIVERSITY_TRANSPORT, config.urls.university),\n\n // Backward compatibility: provide TRANSPORT token using auth URL if available\n {\n provide: TRANSPORT,\n useFactory: (tokenManager: TokenManagerService) => {\n const url = config.urls.authentication;\n if (url) {\n return createTransportWithAuth(url, config, tokenManager);\n }\n return {\n request: () => {\n throw new Error(\n '[23blocks] TRANSPORT is not configured. ' +\n 'Use per-service transport tokens or configure urls.authentication.'\n );\n },\n };\n },\n deps: [TOKEN_MANAGER],\n },\n\n // Block configs\n { provide: AUTHENTICATION_CONFIG, useValue: blockConfig },\n { provide: SEARCH_CONFIG, useValue: blockConfig },\n { provide: PRODUCTS_CONFIG, useValue: blockConfig },\n { provide: CRM_CONFIG, useValue: blockConfig },\n { provide: CONTENT_CONFIG, useValue: blockConfig },\n { provide: GEOLOCATION_CONFIG, useValue: blockConfig },\n { provide: CONVERSATIONS_CONFIG, useValue: blockConfig },\n { provide: FILES_CONFIG, useValue: blockConfig },\n { provide: FORMS_CONFIG, useValue: blockConfig },\n { provide: ASSETS_CONFIG, useValue: blockConfig },\n { provide: CAMPAIGNS_CONFIG, useValue: blockConfig },\n { provide: COMPANY_CONFIG, useValue: blockConfig },\n { provide: REWARDS_CONFIG, useValue: blockConfig },\n { provide: SALES_CONFIG, useValue: blockConfig },\n { provide: WALLET_CONFIG, useValue: blockConfig },\n { provide: JARVIS_CONFIG, useValue: blockConfig },\n { provide: ONBOARDING_CONFIG, useValue: blockConfig },\n { provide: UNIVERSITY_CONFIG, useValue: blockConfig },\n ];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Backward Compatibility Aliases (deprecated)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** @deprecated Use `ProviderConfig` instead */\nexport type Simple23BlocksConfig = ProviderConfig;\n"],"names":["InjectionToken","makeEnvironmentProviders","createHttpTransport","TRANSPORT","AUTHENTICATION_TRANSPORT","SEARCH_TRANSPORT","PRODUCTS_TRANSPORT","CRM_TRANSPORT","CONTENT_TRANSPORT","GEOLOCATION_TRANSPORT","CONVERSATIONS_TRANSPORT","FILES_TRANSPORT","FORMS_TRANSPORT","ASSETS_TRANSPORT","CAMPAIGNS_TRANSPORT","COMPANY_TRANSPORT","REWARDS_TRANSPORT","SALES_TRANSPORT","WALLET_TRANSPORT","JARVIS_TRANSPORT","ONBOARDING_TRANSPORT","UNIVERSITY_TRANSPORT","AUTHENTICATION_CONFIG","SEARCH_CONFIG","PRODUCTS_CONFIG","CRM_CONFIG","CONTENT_CONFIG","GEOLOCATION_CONFIG","CONVERSATIONS_CONFIG","FILES_CONFIG","FORMS_CONFIG","ASSETS_CONFIG","CAMPAIGNS_CONFIG","COMPANY_CONFIG","REWARDS_CONFIG","SALES_CONFIG","WALLET_CONFIG","JARVIS_CONFIG","ONBOARDING_CONFIG","UNIVERSITY_CONFIG","TOKEN_MANAGER","PROVIDER_CONFIG","SIMPLE_CONFIG","getStorageKey","type","appId","tenantId","scope","MemoryStorage","getItem","key","data","get","setItem","value","set","removeItem","delete","Map","createTokenManager","storageType","isBrowser","window","localStorage","accessTokenKey","refreshTokenKey","storage","sessionStorage","getAccessToken","getRefreshToken","setTokens","accessToken","refreshToken","console","warn","clearTokens","onStorageChange","callback","handler","event","addEventListener","removeEventListener","createTransportWithAuth","baseUrl","config","tokenManager","timeout","credentials","authMode","undefined","headers","appid","token","provideBlocks23","blockConfig","createTransportProvider","url","provide","useFactory","deps","providers","useValue","urls","authentication","search","products","crm","content","geolocation","conversations","files","forms","assets","campaigns","company","rewards","sales","wallet","jarvis","onboarding","university","request","Error","getBlocks23Providers"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/dist/lib/tokens.js
CHANGED
|
@@ -1,7 +1,32 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
3
|
+
// Transport Tokens (per-service)
|
|
4
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
5
|
/**
|
|
3
|
-
*
|
|
6
|
+
* @deprecated Use per-service transport tokens (AUTHENTICATION_TRANSPORT, etc.)
|
|
7
|
+
* Shared transport token - only for backward compatibility with advanced API
|
|
4
8
|
*/ export const TRANSPORT = new InjectionToken('23blocks.transport');
|
|
9
|
+
/** Transport for Authentication service */ export const AUTHENTICATION_TRANSPORT = new InjectionToken('23blocks.authentication.transport');
|
|
10
|
+
/** Transport for Search service */ export const SEARCH_TRANSPORT = new InjectionToken('23blocks.search.transport');
|
|
11
|
+
/** Transport for Products service */ export const PRODUCTS_TRANSPORT = new InjectionToken('23blocks.products.transport');
|
|
12
|
+
/** Transport for CRM service */ export const CRM_TRANSPORT = new InjectionToken('23blocks.crm.transport');
|
|
13
|
+
/** Transport for Content service */ export const CONTENT_TRANSPORT = new InjectionToken('23blocks.content.transport');
|
|
14
|
+
/** Transport for Geolocation service */ export const GEOLOCATION_TRANSPORT = new InjectionToken('23blocks.geolocation.transport');
|
|
15
|
+
/** Transport for Conversations service */ export const CONVERSATIONS_TRANSPORT = new InjectionToken('23blocks.conversations.transport');
|
|
16
|
+
/** Transport for Files service */ export const FILES_TRANSPORT = new InjectionToken('23blocks.files.transport');
|
|
17
|
+
/** Transport for Forms service */ export const FORMS_TRANSPORT = new InjectionToken('23blocks.forms.transport');
|
|
18
|
+
/** Transport for Assets service */ export const ASSETS_TRANSPORT = new InjectionToken('23blocks.assets.transport');
|
|
19
|
+
/** Transport for Campaigns service */ export const CAMPAIGNS_TRANSPORT = new InjectionToken('23blocks.campaigns.transport');
|
|
20
|
+
/** Transport for Company service */ export const COMPANY_TRANSPORT = new InjectionToken('23blocks.company.transport');
|
|
21
|
+
/** Transport for Rewards service */ export const REWARDS_TRANSPORT = new InjectionToken('23blocks.rewards.transport');
|
|
22
|
+
/** Transport for Sales service */ export const SALES_TRANSPORT = new InjectionToken('23blocks.sales.transport');
|
|
23
|
+
/** Transport for Wallet service */ export const WALLET_TRANSPORT = new InjectionToken('23blocks.wallet.transport');
|
|
24
|
+
/** Transport for Jarvis service */ export const JARVIS_TRANSPORT = new InjectionToken('23blocks.jarvis.transport');
|
|
25
|
+
/** Transport for Onboarding service */ export const ONBOARDING_TRANSPORT = new InjectionToken('23blocks.onboarding.transport');
|
|
26
|
+
/** Transport for University service */ export const UNIVERSITY_TRANSPORT = new InjectionToken('23blocks.university.transport');
|
|
27
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
28
|
+
// Config Tokens (per-service)
|
|
29
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
30
|
/**
|
|
6
31
|
* Injection token for Authentication block configuration
|
|
7
32
|
*/ export const AUTHENTICATION_CONFIG = new InjectionToken('23blocks.authentication.config');
|
package/dist/lib/tokens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/tokens.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { Transport } from '@23blocks/contracts';\nimport type { AuthenticationBlockConfig } from '@23blocks/block-authentication';\nimport type { SearchBlockConfig } from '@23blocks/block-search';\nimport type { GeolocationBlockConfig } from '@23blocks/block-geolocation';\nimport type { ContentBlockConfig } from '@23blocks/block-content';\nimport type { CrmBlockConfig } from '@23blocks/block-crm';\nimport type { ProductsBlockConfig } from '@23blocks/block-products';\nimport type { ConversationsBlockConfig } from '@23blocks/block-conversations';\nimport type { FilesBlockConfig } from '@23blocks/block-files';\nimport type { AssetsBlockConfig } from '@23blocks/block-assets';\nimport type { FormsBlockConfig } from '@23blocks/block-forms';\nimport type { SalesBlockConfig } from '@23blocks/block-sales';\nimport type { CampaignsBlockConfig } from '@23blocks/block-campaigns';\nimport type { CompanyBlockConfig } from '@23blocks/block-company';\nimport type { RewardsBlockConfig } from '@23blocks/block-rewards';\nimport type { JarvisBlockConfig } from '@23blocks/block-jarvis';\nimport type { OnboardingBlockConfig } from '@23blocks/block-onboarding';\nimport type { UniversityBlockConfig } from '@23blocks/block-university';\nimport type { WalletBlockConfig } from '@23blocks/block-wallet';\n\n/**\n * Injection token for the Transport instance\n */\nexport const TRANSPORT = new InjectionToken<Transport>('23blocks.transport');\n\n/**\n * Injection token for Authentication block configuration\n */\nexport const AUTHENTICATION_CONFIG = new InjectionToken<AuthenticationBlockConfig>(\n '23blocks.authentication.config'\n);\n\n/**\n * Injection token for Search block configuration\n */\nexport const SEARCH_CONFIG = new InjectionToken<SearchBlockConfig>(\n '23blocks.search.config'\n);\n\n/**\n * Injection token for Geolocation block configuration\n */\nexport const GEOLOCATION_CONFIG = new InjectionToken<GeolocationBlockConfig>(\n '23blocks.geolocation.config'\n);\n\n/**\n * Injection token for Content block configuration\n */\nexport const CONTENT_CONFIG = new InjectionToken<ContentBlockConfig>(\n '23blocks.content.config'\n);\n\n/**\n * Injection token for CRM block configuration\n */\nexport const CRM_CONFIG = new InjectionToken<CrmBlockConfig>(\n '23blocks.crm.config'\n);\n\n/**\n * Injection token for Products block configuration\n */\nexport const PRODUCTS_CONFIG = new InjectionToken<ProductsBlockConfig>(\n '23blocks.products.config'\n);\n\n/**\n * Injection token for Conversations block configuration\n */\nexport const CONVERSATIONS_CONFIG = new InjectionToken<ConversationsBlockConfig>(\n '23blocks.conversations.config'\n);\n\n/**\n * Injection token for Files block configuration\n */\nexport const FILES_CONFIG = new InjectionToken<FilesBlockConfig>(\n '23blocks.files.config'\n);\n\n/**\n * Injection token for Assets block configuration\n */\nexport const ASSETS_CONFIG = new InjectionToken<AssetsBlockConfig>(\n '23blocks.assets.config'\n);\n\n/**\n * Injection token for Forms block configuration\n */\nexport const FORMS_CONFIG = new InjectionToken<FormsBlockConfig>(\n '23blocks.forms.config'\n);\n\n/**\n * Injection token for Sales block configuration\n */\nexport const SALES_CONFIG = new InjectionToken<SalesBlockConfig>(\n '23blocks.sales.config'\n);\n\n/**\n * Injection token for Campaigns block configuration\n */\nexport const CAMPAIGNS_CONFIG = new InjectionToken<CampaignsBlockConfig>(\n '23blocks.campaigns.config'\n);\n\n/**\n * Injection token for Company block configuration\n */\nexport const COMPANY_CONFIG = new InjectionToken<CompanyBlockConfig>(\n '23blocks.company.config'\n);\n\n/**\n * Injection token for Rewards block configuration\n */\nexport const REWARDS_CONFIG = new InjectionToken<RewardsBlockConfig>(\n '23blocks.rewards.config'\n);\n\n/**\n * Injection token for Jarvis block configuration\n */\nexport const JARVIS_CONFIG = new InjectionToken<JarvisBlockConfig>(\n '23blocks.jarvis.config'\n);\n\n/**\n * Injection token for Onboarding block configuration\n */\nexport const ONBOARDING_CONFIG = new InjectionToken<OnboardingBlockConfig>(\n '23blocks.onboarding.config'\n);\n\n/**\n * Injection token for University block configuration\n */\nexport const UNIVERSITY_CONFIG = new InjectionToken<UniversityBlockConfig>(\n '23blocks.university.config'\n);\n\n/**\n * Injection token for Wallet block configuration\n */\nexport const WALLET_CONFIG = new InjectionToken<WalletBlockConfig>(\n '23blocks.wallet.config'\n);\n"],"names":["InjectionToken","TRANSPORT","AUTHENTICATION_CONFIG","SEARCH_CONFIG","GEOLOCATION_CONFIG","CONTENT_CONFIG","CRM_CONFIG","PRODUCTS_CONFIG","CONVERSATIONS_CONFIG","FILES_CONFIG","ASSETS_CONFIG","FORMS_CONFIG","SALES_CONFIG","CAMPAIGNS_CONFIG","COMPANY_CONFIG","REWARDS_CONFIG","JARVIS_CONFIG","ONBOARDING_CONFIG","UNIVERSITY_CONFIG","WALLET_CONFIG"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,cAAc,QAAQ,gBAAgB;AAqB/C;;CAEC,GACD,OAAO,MAAMC,YAAY,IAAID,eAA0B,sBAAsB;AAE7E;;CAEC,GACD,OAAO,MAAME,wBAAwB,IAAIF,eACvC,kCACA;AAEF;;CAEC,GACD,OAAO,MAAMG,gBAAgB,IAAIH,eAC/B,0BACA;AAEF;;CAEC,GACD,OAAO,MAAMI,qBAAqB,IAAIJ,eACpC,+BACA;AAEF;;CAEC,GACD,OAAO,MAAMK,iBAAiB,IAAIL,eAChC,2BACA;AAEF;;CAEC,GACD,OAAO,MAAMM,aAAa,IAAIN,eAC5B,uBACA;AAEF;;CAEC,GACD,OAAO,MAAMO,kBAAkB,IAAIP,eACjC,4BACA;AAEF;;CAEC,GACD,OAAO,MAAMQ,uBAAuB,IAAIR,eACtC,iCACA;AAEF;;CAEC,GACD,OAAO,MAAMS,eAAe,IAAIT,eAC9B,yBACA;AAEF;;CAEC,GACD,OAAO,MAAMU,gBAAgB,IAAIV,eAC/B,0BACA;AAEF;;CAEC,GACD,OAAO,MAAMW,eAAe,IAAIX,eAC9B,yBACA;AAEF;;CAEC,GACD,OAAO,MAAMY,eAAe,IAAIZ,eAC9B,yBACA;AAEF;;CAEC,GACD,OAAO,MAAMa,mBAAmB,IAAIb,eAClC,6BACA;AAEF;;CAEC,GACD,OAAO,MAAMc,iBAAiB,IAAId,eAChC,2BACA;AAEF;;CAEC,GACD,OAAO,MAAMe,iBAAiB,IAAIf,eAChC,2BACA;AAEF;;CAEC,GACD,OAAO,MAAMgB,gBAAgB,IAAIhB,eAC/B,0BACA;AAEF;;CAEC,GACD,OAAO,MAAMiB,oBAAoB,IAAIjB,eACnC,8BACA;AAEF;;CAEC,GACD,OAAO,MAAMkB,oBAAoB,IAAIlB,eACnC,8BACA;AAEF;;CAEC,GACD,OAAO,MAAMmB,gBAAgB,IAAInB,eAC/B,0BACA"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/tokens.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { Transport } from '@23blocks/contracts';\nimport type { AuthenticationBlockConfig } from '@23blocks/block-authentication';\nimport type { SearchBlockConfig } from '@23blocks/block-search';\nimport type { GeolocationBlockConfig } from '@23blocks/block-geolocation';\nimport type { ContentBlockConfig } from '@23blocks/block-content';\nimport type { CrmBlockConfig } from '@23blocks/block-crm';\nimport type { ProductsBlockConfig } from '@23blocks/block-products';\nimport type { ConversationsBlockConfig } from '@23blocks/block-conversations';\nimport type { FilesBlockConfig } from '@23blocks/block-files';\nimport type { AssetsBlockConfig } from '@23blocks/block-assets';\nimport type { FormsBlockConfig } from '@23blocks/block-forms';\nimport type { SalesBlockConfig } from '@23blocks/block-sales';\nimport type { CampaignsBlockConfig } from '@23blocks/block-campaigns';\nimport type { CompanyBlockConfig } from '@23blocks/block-company';\nimport type { RewardsBlockConfig } from '@23blocks/block-rewards';\nimport type { JarvisBlockConfig } from '@23blocks/block-jarvis';\nimport type { OnboardingBlockConfig } from '@23blocks/block-onboarding';\nimport type { UniversityBlockConfig } from '@23blocks/block-university';\nimport type { WalletBlockConfig } from '@23blocks/block-wallet';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Transport Tokens (per-service)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * @deprecated Use per-service transport tokens (AUTHENTICATION_TRANSPORT, etc.)\n * Shared transport token - only for backward compatibility with advanced API\n */\nexport const TRANSPORT = new InjectionToken<Transport>('23blocks.transport');\n\n/** Transport for Authentication service */\nexport const AUTHENTICATION_TRANSPORT = new InjectionToken<Transport | null>('23blocks.authentication.transport');\n\n/** Transport for Search service */\nexport const SEARCH_TRANSPORT = new InjectionToken<Transport | null>('23blocks.search.transport');\n\n/** Transport for Products service */\nexport const PRODUCTS_TRANSPORT = new InjectionToken<Transport | null>('23blocks.products.transport');\n\n/** Transport for CRM service */\nexport const CRM_TRANSPORT = new InjectionToken<Transport | null>('23blocks.crm.transport');\n\n/** Transport for Content service */\nexport const CONTENT_TRANSPORT = new InjectionToken<Transport | null>('23blocks.content.transport');\n\n/** Transport for Geolocation service */\nexport const GEOLOCATION_TRANSPORT = new InjectionToken<Transport | null>('23blocks.geolocation.transport');\n\n/** Transport for Conversations service */\nexport const CONVERSATIONS_TRANSPORT = new InjectionToken<Transport | null>('23blocks.conversations.transport');\n\n/** Transport for Files service */\nexport const FILES_TRANSPORT = new InjectionToken<Transport | null>('23blocks.files.transport');\n\n/** Transport for Forms service */\nexport const FORMS_TRANSPORT = new InjectionToken<Transport | null>('23blocks.forms.transport');\n\n/** Transport for Assets service */\nexport const ASSETS_TRANSPORT = new InjectionToken<Transport | null>('23blocks.assets.transport');\n\n/** Transport for Campaigns service */\nexport const CAMPAIGNS_TRANSPORT = new InjectionToken<Transport | null>('23blocks.campaigns.transport');\n\n/** Transport for Company service */\nexport const COMPANY_TRANSPORT = new InjectionToken<Transport | null>('23blocks.company.transport');\n\n/** Transport for Rewards service */\nexport const REWARDS_TRANSPORT = new InjectionToken<Transport | null>('23blocks.rewards.transport');\n\n/** Transport for Sales service */\nexport const SALES_TRANSPORT = new InjectionToken<Transport | null>('23blocks.sales.transport');\n\n/** Transport for Wallet service */\nexport const WALLET_TRANSPORT = new InjectionToken<Transport | null>('23blocks.wallet.transport');\n\n/** Transport for Jarvis service */\nexport const JARVIS_TRANSPORT = new InjectionToken<Transport | null>('23blocks.jarvis.transport');\n\n/** Transport for Onboarding service */\nexport const ONBOARDING_TRANSPORT = new InjectionToken<Transport | null>('23blocks.onboarding.transport');\n\n/** Transport for University service */\nexport const UNIVERSITY_TRANSPORT = new InjectionToken<Transport | null>('23blocks.university.transport');\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Config Tokens (per-service)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Injection token for Authentication block configuration\n */\nexport const AUTHENTICATION_CONFIG = new InjectionToken<AuthenticationBlockConfig>(\n '23blocks.authentication.config'\n);\n\n/**\n * Injection token for Search block configuration\n */\nexport const SEARCH_CONFIG = new InjectionToken<SearchBlockConfig>(\n '23blocks.search.config'\n);\n\n/**\n * Injection token for Geolocation block configuration\n */\nexport const GEOLOCATION_CONFIG = new InjectionToken<GeolocationBlockConfig>(\n '23blocks.geolocation.config'\n);\n\n/**\n * Injection token for Content block configuration\n */\nexport const CONTENT_CONFIG = new InjectionToken<ContentBlockConfig>(\n '23blocks.content.config'\n);\n\n/**\n * Injection token for CRM block configuration\n */\nexport const CRM_CONFIG = new InjectionToken<CrmBlockConfig>(\n '23blocks.crm.config'\n);\n\n/**\n * Injection token for Products block configuration\n */\nexport const PRODUCTS_CONFIG = new InjectionToken<ProductsBlockConfig>(\n '23blocks.products.config'\n);\n\n/**\n * Injection token for Conversations block configuration\n */\nexport const CONVERSATIONS_CONFIG = new InjectionToken<ConversationsBlockConfig>(\n '23blocks.conversations.config'\n);\n\n/**\n * Injection token for Files block configuration\n */\nexport const FILES_CONFIG = new InjectionToken<FilesBlockConfig>(\n '23blocks.files.config'\n);\n\n/**\n * Injection token for Assets block configuration\n */\nexport const ASSETS_CONFIG = new InjectionToken<AssetsBlockConfig>(\n '23blocks.assets.config'\n);\n\n/**\n * Injection token for Forms block configuration\n */\nexport const FORMS_CONFIG = new InjectionToken<FormsBlockConfig>(\n '23blocks.forms.config'\n);\n\n/**\n * Injection token for Sales block configuration\n */\nexport const SALES_CONFIG = new InjectionToken<SalesBlockConfig>(\n '23blocks.sales.config'\n);\n\n/**\n * Injection token for Campaigns block configuration\n */\nexport const CAMPAIGNS_CONFIG = new InjectionToken<CampaignsBlockConfig>(\n '23blocks.campaigns.config'\n);\n\n/**\n * Injection token for Company block configuration\n */\nexport const COMPANY_CONFIG = new InjectionToken<CompanyBlockConfig>(\n '23blocks.company.config'\n);\n\n/**\n * Injection token for Rewards block configuration\n */\nexport const REWARDS_CONFIG = new InjectionToken<RewardsBlockConfig>(\n '23blocks.rewards.config'\n);\n\n/**\n * Injection token for Jarvis block configuration\n */\nexport const JARVIS_CONFIG = new InjectionToken<JarvisBlockConfig>(\n '23blocks.jarvis.config'\n);\n\n/**\n * Injection token for Onboarding block configuration\n */\nexport const ONBOARDING_CONFIG = new InjectionToken<OnboardingBlockConfig>(\n '23blocks.onboarding.config'\n);\n\n/**\n * Injection token for University block configuration\n */\nexport const UNIVERSITY_CONFIG = new InjectionToken<UniversityBlockConfig>(\n '23blocks.university.config'\n);\n\n/**\n * Injection token for Wallet block configuration\n */\nexport const WALLET_CONFIG = new InjectionToken<WalletBlockConfig>(\n '23blocks.wallet.config'\n);\n"],"names":["InjectionToken","TRANSPORT","AUTHENTICATION_TRANSPORT","SEARCH_TRANSPORT","PRODUCTS_TRANSPORT","CRM_TRANSPORT","CONTENT_TRANSPORT","GEOLOCATION_TRANSPORT","CONVERSATIONS_TRANSPORT","FILES_TRANSPORT","FORMS_TRANSPORT","ASSETS_TRANSPORT","CAMPAIGNS_TRANSPORT","COMPANY_TRANSPORT","REWARDS_TRANSPORT","SALES_TRANSPORT","WALLET_TRANSPORT","JARVIS_TRANSPORT","ONBOARDING_TRANSPORT","UNIVERSITY_TRANSPORT","AUTHENTICATION_CONFIG","SEARCH_CONFIG","GEOLOCATION_CONFIG","CONTENT_CONFIG","CRM_CONFIG","PRODUCTS_CONFIG","CONVERSATIONS_CONFIG","FILES_CONFIG","ASSETS_CONFIG","FORMS_CONFIG","SALES_CONFIG","CAMPAIGNS_CONFIG","COMPANY_CONFIG","REWARDS_CONFIG","JARVIS_CONFIG","ONBOARDING_CONFIG","UNIVERSITY_CONFIG","WALLET_CONFIG"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|