@solidxai/core 0.1.13-beta.16 → 0.1.13-beta.17

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/CHANGELOG.md CHANGED
@@ -1,5 +1,582 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.13-beta.17] - 2026-08-10
4
+
5
+ ### Added
6
+
7
+ - add security header options for iframe embedding and customize frame-ancestors
8
+ - add createdAt field to PostChatterMessageDto and set default in service
9
+ - implement transaction handling for unpublishing records and restore previous version
10
+ - add progress reporting functionality to test runner and reporters
11
+ - add viewWidget attribute for fileSize in metadata
12
+ - add configurable UI timeouts for testing steps and update documentation
13
+ - enhance internationalisation by adding applyCreateDefaults method for localeName on create DTOs
14
+ - implement promoteRecoveredDraftPublishVersion method and integrate with CRUDService for soft-deleted records
15
+ - add default locale name for internationalised entries in test data seeding
16
+ - implement draft/publish versioning support and refactor related services
17
+ - add DraftPublishHelperService for managing draft and publish workflows
18
+ - add workflow field data provider support and related interfaces
19
+ - add asynchronous execution for workflows and enhance execution status retrieval
20
+ - implement WorkflowSecret management with CRUD operations and integrate into workflow execution
21
+ - enhance workflow definition management and add Python runtime node
22
+ - add SolidX integration nodes for login, email, and SMS
23
+ - add support for versioning and publishing in CRUD operations, including new fields in entities and filters
24
+ - enhance http.request node with query parameters and body modes
25
+ - refactor node structure and add sequential and switch nodes
26
+ - update workflow execution and definition handling
27
+ - implement workflow execution services and nodes
28
+ - implement API key generation for system admin users in ModuleMetadataSeederService
29
+ - enhance ModuleMetadataSeederService to generate and store API keys for system admin users
30
+ - add fieldConfig property to DatasourceIntrospectionMappingColumnDto and enhance field sanitization in DatasourceIntrospectionService
31
+ - enhance migration process with build and seed commands
32
+ - enhance datasource introspection with primary key detection and migration support
33
+ - enhance role creation with module linkage and resolve module metadata
34
+ - enhance action, role, and view metadata services with change detection and JSON normalization
35
+ - add introspection services for MSSQL, MySQL, and PostgreSQL
36
+ - add new dashboard controller actions to permissions
37
+ - simplify queue health permissions by consolidating patterns
38
+ - implement explicit widget permissions and unauthorized response handling
39
+ - enhance widget permission checks and add unauthorized response handling
40
+ - add Queue SLA heatmap provider and update metadata
41
+ - update queue health menu item and reorder messages
42
+ - add various dashboard providers and runtime services
43
+ - implement WhatsApp Cloud API integration
44
+ - add gupshup whatsapp provider
45
+ - add deleteByMediaRecord method to MediaStorageProvider implementations
46
+ - add updateCustomNoteMessage action to ChatterMessageController
47
+ - add secure custom-note edit API with attachment add/remove support
48
+ - implemented social media oath for facebook and microsoft
49
+ - add partialUpdate endpoint to menu-item-metadata controller and update metadata seeder relation field name
50
+ - implemented social media oath for facebook and microsoft
51
+ - add Message Tree Action and corresponding view for mqMessage
52
+ - implement processing timeout for RabbitMQ subscriber
53
+ - Add a composite index to `ChatterMessage` on `coModelName` and `coModelEntityId`, and an index to `chatterMessage` in `ChatterMessageDetails`.
54
+ - Migrate date/time transformers to UtcDateTimeTransformer.
55
+ - simplify S3 URL resolution DTO, and remove unused S3 resolution logic.
56
+
57
+ ### Fixed
58
+
59
+ - make currentValue optional in CreateModelSequenceDto and update seeding logic to exclude it
60
+ - change matched column type from bit to default nullable boolean
61
+ - improve error message for media deletion restriction
62
+ - use transactions entitymanager for all subscribers only for embedded db projects
63
+ - update consuming project name resolution to use parent directory
64
+ - update solidx directory path to include consuming project name
65
+ - correct package name in model generation command and update error handling in module metadata retrieval
66
+ - username
67
+ - remove type specification for encrypted column in Setting entity, to work in mssql also
68
+ - handle null or empty security rule configuration strings in repository
69
+
70
+ ### Changed
71
+
72
+ - update media type handling in CreateFieldMetadataDto and FieldMetadataService
73
+ - remove onDelete cascade option from ManyToOne relationships in entity definitions
74
+ - unify datetime column types across entities using helper function
75
+ - remove explicit timestamp type for nullable date columns across entities
76
+ - update CommonEntity properties to be optional and adjust types in WorkflowTriggerExecution
77
+ - rename create-draft-publish-helper.service to draft-publish-helper.service and update imports
78
+ - inject InternationalisationHelperService in ModuleTestDataService and CrudHelperService
79
+ - separate generic delete from draft-publish and i18n cleanup in CRUDService
80
+ - remove unused boolean type and related system column definitions from DatasourceIntrospectionService
81
+ - update CrudHelperService to initialize DraftPublishHelperService directly in the class refactor: remove publishedAt sorting logic from getLayout method in ViewMetadataService
82
+ - simplify published version filtering in CRUDService
83
+ - remove handleSeedLocales method to streamline locale seeding process
84
+ - remove legacy dashboard files and add new dashboarding architecture guide
85
+ - remove unused dashboard question and variable providers, SQL expression resolver, and related subscribers
86
+ - remove redundant null check in resolveSecurityRuleConfig
87
+ - update body column type to longText using getColumnType helper in SmsTemplate entity
88
+ - update legacy entity fields to be nullable and support null types
89
+ - replace DTO introspection with explicit isUpdate flag in MediaFieldCrudManager
90
+ - make password scheme and failed login attempt columns non-nullable in UserEntity.
91
+ - make passwordScheme, passwordSchemeVersion, and failedLoginAttempts fields nullable in the User entity.
92
+
93
+ ### Documentation
94
+
95
+ - update expired discord link
96
+
97
+ ### Other
98
+
99
+ - fixed the request body limit to keep it as 10mb instead of 25mb by default
100
+ - changes around files name sanitization and normalization
101
+ - changes to handle variations in extension while uploading dangerous extension files
102
+ - change request body max to 25mb
103
+ - Comment out countGroupedRecords method implementation for refactoring
104
+ - show theme toggle
105
+ - changes to support passing an explicit createdAt while posting a chatter message
106
+ - Enhance countGroupedRecords and passed internationalisation and draft publish workflow parameters in executeGroupPipeline
107
+ - rename theme registry
108
+ - remove add permisson from permisson-list-view
109
+ - removed indexes on username and mobile since it is a conditional index and it breaks for mssql since multiple nulls are not allowed on unique columns
110
+ - readme changes
111
+ - removed hardcoded type against a boolean type
112
+ - changes to the default testing setting timeout to pick from env as well
113
+ - remove duplicate code
114
+ - refactoring around chatter media security fix
115
+ - add media extension support for post chatter
116
+ - Add media upload action and validation in MediaService
117
+ - add media extension support for post chatter
118
+ - changes to ensure only id and field are returned while populating the user in chatter
119
+ - Update defaultValue types in solid-core-metadata.json to strings
120
+ - 1. changes to ensure user populated for chatter and createdBy/updatedBy has only id and fullName populate 2. Added Exclude at property level on user to exclude sensitive fields by default without having to add an exclude at the class level
121
+ - Add getMentionableUsers permission
122
+ - Add endpoint to retrieve mentionable users with search and limit options
123
+ - Add error handling nodes and enhance workflow node definitions
124
+ - Add skipHooks option to seed command and related services
125
+ - Remove type specification for matched column in WorkflowTriggerExecution entity
126
+ - Enhance workflow node definitions and runtime context handling
127
+ - remvoing redundent code
128
+ - Remove onDelete cascade option from ManyToOne relationships in SavedFilters entity
129
+ - changes
130
+ - changes
131
+ - sql injection vulnerability closed in filter queries
132
+ - Remove LocalPath
133
+ - revert changes
134
+ - revert changes
135
+ - revert changes
136
+ - re revert
137
+ - revert changes
138
+ - private-file-cleanup
139
+ - add downlaodurl
140
+ - changes to allow overriding the is allowed api keys flag thru extension user
141
+ - Revert "user enumeration"
142
+ - remove validation from username and mobile
143
+ - user create validation bugs
144
+ - add normalize for otp based also
145
+ - Disable metadata pruning by default in seed command configuration
146
+ - Update seed command to enable metadata pruning by default
147
+ - handle-case-sensitive-for-email
148
+ - Add delete permissions for ImportTransactionController in solid-core metadata
149
+ - Add permissions for import/export functionality in solid-core metadata
150
+ - Refactor role assignment for admin users to handle capability roles individually
151
+ - discard changes
152
+ - add support for static file
153
+ - Add capability roles for admin users in module metadata seeder
154
+ - Enhance module metadata seeder with event emission for start and finish; add options interface for seeding configuration
155
+ - attachment
156
+ - Add new roles and permissions for import/export functionality; refactor role permission handling
157
+ - make isPublic default true
158
+ - changes to show the image inline
159
+ - cleanup againts media's
160
+ - inline role crate false
161
+ - Implement chatter mention notification system with email templates and queue handling
162
+ - Add messageBodyMentions field to chatter message DTOs and entity
163
+ - fix-audit-bug
164
+ - changes to include signed url token for private media
165
+ - Revert "Revert "rename function name""
166
+ - Revert "Revert "add private media support""
167
+ - Add media file type constants and enhance security for media uploads
168
+ - remove some unusable code
169
+ - some changes
170
+ - handle technical error messages due to missing resource in static resources folder
171
+ - Revert "add private media support"
172
+ - Revert "rename function name"
173
+ - rename function name
174
+ - add private media support
175
+ - some fixes
176
+ - solidx session invalid changes
177
+ - add validation on get chatter message
178
+ - updatedAt value is updating now
179
+ - fix to allow linking a userKey belonging to the parent model while seeding a child model
180
+ - add security against chatter
181
+ - chatter message endpoint made public
182
+ - removed embedded db support
183
+ - Add default sorting by ID if not explicitly specified in order options
184
+ - solidx theme settings
185
+ - add icons across all the models in solid core
186
+ - media upload added behind auth
187
+ - Refactor module path resolution to use kebab-case and extract migration file writing logic into a separate method
188
+ - Implement cleanup for TypeORM datasource entities and enhance file handling in SolidTsMorphService
189
+ - class serializer interceptor added for impact of Exclude and Expose
190
+ - Enhance datasource introspection with primary key validation and user key resolution
191
+ - Concurrent Login Feature
192
+ - user enumeration
193
+ - add helper text key on settings object .........
194
+ - changes to handle case insenstive filter operations if the values are other than string by casting
195
+ - menus item fix
196
+ - changes to ensure entity manager does not get serialized as part of the message for the computed field queue
197
+ - added nodemon heartbeat to allow in-process db query execution for code generation for embedded db
198
+ - display name changed
199
+ - name changed
200
+ - added settings for configure the row click on solid list view
201
+ - Revert "Fix for this issue > stop applying lower for numeric fields."
202
+ - fixed legacy entity files names
203
+ - view metadata type field - selection static and roles required false from menu-item
204
+ - Fix for this issue > stop applying lower for numeric fields.
205
+ - refactor and add migration command
206
+ - Handling for audit subscriber to defer audit publish when in embedded db mode
207
+ - Fixed the one genuine mid-transaction second-connection case and hardened the latent spots (for embedded db)
208
+ - changes to take in option for seeding with modules in current seed method
209
+ - Fix validation logic to parse string field values as integers before applying validations
210
+ - remove computed field from instruction add one remove field command fix many-to-many on chatter log
211
+ - ad changes
212
+ - Add locale seeding functionality and enhance locale management
213
+ - subscribers now use the event’s own transaction connection instead of a second pooled one (helpful for embedded db)
214
+ - changes to avoid extra module checks before dynamically loading it
215
+ - defaulted to modulemetadataseederservice if no seeder provided
216
+ - Add Date field in Instructions Response
217
+ - ai interaction cleanup changes
218
+ - enabling create,edit,import,export on permission and lov modules
219
+ - added module to rolemetadata list view
220
+ - roles group by module changes
221
+ - Refactor dashboard providers to utilize new bucket expression and normalization functions
222
+ - Implement Datasource Management functionality with controller, service, and DTO
223
+ - added index to fields newly added as sortable and searchable
224
+ - Add archiver package to dependencies
225
+ - removed unnecessary seed file
226
+ - Add TypeORM migration helper functions and export in index
227
+ - fixes
228
+ - reverted accidental removal of the layout builder root menu
229
+ - pending cleanup of solid core menu items
230
+ - Refactor metadata: remove standalone menu items and add scheduled jobs and saved filters tree views
231
+ - Remove ChatterMessageDetails and ImportTransactionErrorLog menu items; add Chatter Messages tree view and action. Other menu sub menus cleanup done
232
+ - Add model sequence and list of values tree views to metadata, other cleanup changes
233
+ - changes for IAM
234
+ - Add clearPackageRuntime functionality and corresponding metadata action
235
+ - Add archiver dependency and implement module package export functionality
236
+ - Refactor menu cleanup logic in ModelMetadataService and ModuleMetadataService; improve error handling for file deletion and update build commands in ModulePackageService to use solidctl.
237
+ - Update solid-core-metadata.json to disable create, edit, and delete actions, and set searchable attributes to false for specific fields for media storage provider
238
+ - Add media tree view and action & media view cleanup, enhance file storage provider with file size tracking, implemented storeStreams for s3
239
+ - Remove cleanup procedures for module metadata across all SQL dialects and implement menu and action cleanup in the service layer.
240
+ - Remove unused database bootstrap service and related SQL cleanup procedures
241
+ - cleanup
242
+ - Add view and action metadata tree views with updated permissions and searchable fields
243
+ - Add view and action metadata tree views with updated permissions and searchable fields
244
+ - menu item model cleanup
245
+ - Add resumable import handling and transaction management in module package service
246
+ - Add method to retrieve Solid UI module path and enhance cleanup logging
247
+ - Enhance module metadata seeder: add validation for module name, streamline array handling for scheduled jobs, saved filters, list of values, security rules, sms templates, email templates, menus, actions, views, users, roles, media storage providers, model sequences, and models metadata.
248
+ - Implement module package management: add controller, service, and DTOs for import, export, and build operations.
249
+ - many to one left join issue fixed
250
+ - Refactor field metadata actions and views: update action types, enhance searchability, and adjust permissions for create, edit, and delete operations.
251
+ - Refactor CRUD and model metadata services to enhance group filtering and pagination; streamline response handling and improve query structure. configuration changes to support tree view in model metadata
252
+ - Update solid-core metadata: remove import/export options, rename fields, and add sortable attribute
253
+ - Enhance solid-core metadata structure for module mdtadata by removing import/export options and adding sortable attributes for fields
254
+ - Implement module metadata explorer with CRUD operations and search functionality
255
+ - Refactor module metadata paths to use a consistent directory structure and improve file resolution logic
256
+ - Bug fixs
257
+ - added frontend base url as well to the default settings
258
+ - minor cleanup
259
+ - changes to cleanup legacy table related fields
260
+ - changes for new dashboards functionality
261
+ - always print server startup line regardless of log level
262
+ - Add field quality checks and fixes checklist for backend validation
263
+ - typeo issue
264
+ - Agent table clean up
265
+ - Add manual interaction step for Playwright and update README
266
+ - provision made to unlink data rather than having to teardown everything
267
+ - provision made to unlink data rather than having to teardown everything
268
+ - changes to colour the server startup line
269
+ - Agent table clean up
270
+ - changes to avoid too many initialization logs. controlled thru the verboseBootstrap option to the boostrap helper
271
+ - removed id command options and retained the singular name option only for consistency purposes
272
+ - changes to route genertion commands thru solidctl. The refresh-module & refresh-model commands are what are eventually called and end up calling the services only, keeping calling consistent and ensuring everything is route thru solidctl generate
273
+ - got rid of fieldNamesForRefresh and fieldIdsForRefresh dead chain since it is not used now, due to fields being read in the code builder from the metadata json directly
274
+ - MCP table solid changes
275
+ - playwrite added as dependency instead
276
+ - changes to the test runner
277
+ - chatter message user resolution chagnes
278
+ - bug fix in chatter message user resolution after we moved to queues.
279
+ - moved back to beta3
280
+ - failed login attempts field added to the json and update dto and exposed in entity
281
+ - removed un-necessary index on newvalue display
282
+ - ts changes error: any
283
+ - auto addition of menus happens at the bottom now. list view layout changes for security access rules + enabled delete made welcome email & sms SystemAdminEditable
284
+ - changed model metadata service default form layout to be single column
285
+ - added typing to catch blocks + authentication service bug fixes for private registration flow
286
+ - added typing to catch blocks + authentication service bug fixes for private registration flow
287
+ - normalised @ApiTags
288
+ - enum for passwordless modes
289
+ - bug fix in how alternative actions are rendered
290
+ - queue related bug fixes
291
+ - changes to add a websocket adaptor to the bootstrap server routine
292
+ - license changes
293
+ - type fixes
294
+ - removed min and max from long text mapping
295
+ - bug fix for shortext field mapping
296
+ - changes to post the testing results to a webhook api with a test payload
297
+ - added import multer this fixes un-necessary ts errors in vscode
298
+ - ts errors fixed
299
+ - bug fix in rabbitmq subscriber optimisation in all subscribers to default to role both if not specified
300
+ - formatting changes
301
+ - facebook oauth
302
+ - Status required false
303
+ - updated gitignore
304
+ - dleete un-necessary docs
305
+ - deleted un-necessary files
306
+ - changes related to more grooming
307
+ - api added in cors
308
+ - refactor Oauth strategy
309
+ - Revert "Ft social media login"
310
+ - bug fix
311
+ - bug fix
312
+ - add new api me endpoint and role based settings
313
+ - setting changes for new ui architecture
314
+ - changes for new settings structure
315
+ - chatter task subtype and related changes
316
+ - bug fix
317
+ - fixes
318
+ - changes to get rid of angular schematics for helping with string case transformation for consistency purpose i.e (lodash is being used on frontend too) and avoid edge cases
319
+ - changes to handle import logs as well, thru configured winston log level
320
+ - change isMultiSelect to true in solid-core-metadata.json
321
+ - change isMultiSelect to false and set visibility for cronExpression, dayOfWeek, and dayOfMonth fields to false
322
+ - tightened up queue subscriber interface + fixed core subscribers that were not returning anything. all subscribers must either return a promise or if not async then the actual value
323
+ - removed authTheme setting, auth pages dark - light is now controlled by the same local storage as the rest of the app shell
324
+ - bug fix: passwordless registration should create a user with active false
325
+ - apikeys attribute was not exposed
326
+ - refactor Oauth strategy
327
+ - changes to avoid sending out encrypted setting in api responses. also removed menu item and action entries for ai settings. (temporary fix, since setting ui to be revamped soon)
328
+ - bug fix
329
+ - null check on role
330
+ - made provision to seed custom permissions
331
+ - handled seed scenario too
332
+ - upload File and expectHidden changes
333
+ - extension user cleanup and checks added
334
+ - fixed types for cleanup
335
+ - added tsc-alias as well to ensure clean imports in dist as an extra cleanup measure
336
+ - fixes bare shell imports with relative imports
337
+ - dynamic import fix
338
+ - removed unnecessary file
339
+ - fixes for 1. throw exception if extension user and no provider configured 2. fixed roles method in the extensionUserProvider interface to make it mandatory
340
+ - removed base abstract class
341
+ - added interface too
342
+ - changes
343
+ - changes to test data seeding & fixed the type for authenticationService.signup method
344
+ - changes to user dto to include the api keys toggle
345
+ - add default role to the user only if there are no roles resolved against a user
346
+ - changes to replace current extension user custom user creation logic with the use of dynamic extension user provider. cleans up creation of an extension user
347
+ - Only forward --debug when explicitly enabled.
348
+ - toolOutput field changes to json
349
+ - adding user api key entity to export
350
+ - minor optimisation to how dynamic modules are loaded
351
+ - Add Discord badge to top of README
352
+ - Fix broken BSL license link and add Discord link to README
353
+ - Add BSL 1.1 license and update package.json license field
354
+ - Seed user and roles in testing data
355
+ - removed readme.txt
356
+ - moved type and interfaces in interfaces.ts and refactored accordingly
357
+ - changed to md
358
+ - added readme
359
+ - Ai setting model change
360
+ - changes to allow encrypting setting keys
361
+ - form view clean up
362
+ - Agent table list view changes
363
+ - synchronize false
364
+ - changes to resolve the selection dynamic provider by name and token both
365
+ - changes to bypass swagger urls from csp policy
366
+ - changes to create a seperate endpoint for admin users to generate api key + custom repository created for userApiKey
367
+ - changes to fix issue around isAllowedToGenerateApiKeys not getting saved during user creation
368
+ - changes to implement the sso code and sso exchange use cases
369
+ - removed orm types / exported api key entity
370
+ - added provision to control if api key creation is allowed for the user
371
+ - api key changes for backend
372
+ - changes to bootstrap helper to read from standard env variables and avoid redundantly passing swagger options
373
+ - fix to call addRoles only if role names are present
374
+ - Revert "revert: refactor: update legacy entity fields to be nullable and support null types"
375
+ - refactor: update legacy entity fields to be nullable and support null types
376
+ - Json structure change
377
+ - Agent table metadata clean up changes
378
+ - longtext
379
+ - longtext changes
380
+ - Agent tables clean up
381
+ - fixes to seed many-to-many relation for tests
382
+ - changes to seed media in testing data
383
+ - Chatter modelUserkey and excel many to one issue
384
+ - keeping the default selectionValueType as string since this is a good default
385
+ - bug fixes around how media is done
386
+ - bug fixes
387
+ - try catch inside logEvent
388
+ - media has card based metadata
389
+ - Refresh token activity
390
+ - changes to implement the sso code and sso exchange use cases
391
+ - cleanup
392
+ - enabled kanban view on mq message
393
+ - Agent table changes
394
+ - changes to disallow deleting a model or module in production
395
+ - changelog version bumped
396
+ - changelog added
397
+ - changes to control the logging using env variables & set appropriate defaults basis environment
398
+ - chnages for logging
399
+ - Chatter queue fixs
400
+ - one more "beta" for ozzy
401
+ - additional loggging in cors helper
402
+ - changes
403
+ - Redis Queue component and rabbitMQ folder changes
404
+ - changes to track old and new fields as part of the delete entity operation
405
+ - optimizations done for audit subcriber
406
+ - changes to optimize audit subscriber code to use background jobs entirely instead of partially
407
+ - changes to push all work/processing to the chatter queue subscriber to better manage workloads & db pooling utilization
408
+ - formatting changes
409
+ - performance optimisations 1. created by updated by subscriber is not querying users again and again 2. rabbit pub / sub can now optinally switch off db persistence
410
+ - qs depth config increased
411
+ - changes to move the shouldTrackAudit check into registry to avoid unnecessary checks during runtime
412
+ - cached model metadata queries
413
+ - changse
414
+ - disabled extra loggign
415
+ - chagnes
416
+ - reduced concurrency in computed fields
417
+ - additional loggign
418
+ - added indexes to mobile & email since those are frequently queries upon
419
+ - changes to optimize the permission service methods used in the hotspot load paths within auth and access token guards
420
+ - Redis background job changes
421
+ - Chatter Rationalizing
422
+ - changes
423
+ - changes
424
+ - changes to merge the entityId sequence computed provider into the existing sequence number provider
425
+ - changes to export bootstrap helpers for server & cli nest applications
426
+ - changes to toggle the validation for selection dynamic provider. Also changes to export a bootstrap helper function
427
+ - registered the EntityIdSequenceNumComputedFieldProvider computation provider as a nest provider
428
+ - Added EntityIdSequenceNumComputedFieldProvider as an alternative simpler provider which uses the modelSequence configuration and relies on the id persisted during creation for an entity
429
+ - added index on message id in mq message table
430
+ - changes around sequence num computed field being a post computation provider error logging in rabbit mq
431
+ - changes to save model sequence id as part of post compute instead of pre compute
432
+ - changse
433
+ - Revert "High concurrency fix for alpha num and sequence num computed fields"
434
+ - High concurrency fix for alpha num and sequence num computed fields
435
+ - bug fix in cron evalutaion
436
+ - tighter logging around roles
437
+ - scheduler now supports env based specific jobs starting and others not
438
+ - reverting back to text (i.e since it is good enough for mysql too) i.e 64kb for these fields
439
+ - revert cross db changes for view-metadata-entity
440
+ - fixes
441
+ - changes to handle cross-db compatibility
442
+ - added type as simple-json
443
+ - Remove isValidateForUpdate hack that relied on checking dto.id !== undefined
444
+ - Revert "Merge branch 'media-update' into 'main'"
445
+ - Mysql related changes
446
+ - ts-morph and media storage fix
447
+ - dashboard layout menu item added
448
+ - dashboard changes
449
+ - scheduler bug fix
450
+ - made provision to execute scheduled jobs manually
451
+ - changes
452
+ - cleanup
453
+ - logging related changes and made user activity history tree view
454
+ - changes to return the wall clock time as utc for chatter as well to keep it...
455
+ - changes around dashboard question refactoring
456
+ - default tree view and action added on code generation
457
+ - Date time format changes in audit
458
+ - user activity history on otp login
459
+ - changes
460
+ - changelog added
461
+ - reverted legacy and common entity to use local date time transformer only
462
+ - added changelog
463
+ - made playwright dependency lazy
464
+ - ai interaction table user is nullable now
465
+ - rabbitmq subscriber does a prefetch now allowing for more concurrency
466
+ - formatting changes
467
+ - Version info changes
468
+ - dummy otp can now be enabled on a per user basis
469
+ - jwt token optimisation
470
+ - optimised the authentication flow in microservice adapter to cache access token
471
+ - deleted file containing secrets
472
+ - changes
473
+ - optimisation around how dummy otp is managed
474
+ - isSeeded added
475
+ - bug fix for fetch layouts
476
+ - view modes added in layout
477
+ - One to many crud manager fixes
478
+ - one-to-many-crud-manager-fixes
479
+ - Many to many crud field manager fixes
480
+ - patch endpoint added in role controller
481
+ - many-to-many field fixes
482
+ - modelSequenceFormViewChangeHandler added on field change
483
+ - changes to convert the passwordlessRegistrationValidateWhat from array to string
484
+ - changes to format group values consistently
485
+ - fixes for normalizing group values
486
+ - Revert "changes to return groupValue in the group meta response as well. groupValue is..."
487
+ - changes to return groupValue in the group meta response as well. groupValue is...
488
+ - changes to return groupValue in the group meta response as well. groupValue is...
489
+ - filter_field_granularity_supported_added_for_date_fields
490
+ - password registration/login cleanup + max failed login attempts checks added
491
+ - removed unsafe inline from CSP
492
+ - removed incorrect comment
493
+ - changes
494
+ - Revert "replaced playwright with lazy dependency"
495
+ - replaced playwright with lazy dependency
496
+ - count and average
497
+ - fixes to solid core metadata configuration
498
+ - make `s3Key` and `isPrivate` properties mandatory in `ResolveS3UrlDto`.
499
+ - solid seed now prints proper exception stack trace
500
+ - added playwright dependencies as peer dependencies
501
+ - changed playwright import to make it lazy
502
+ - issue fixes
503
+ - formatting changes
504
+ - formatting changes
505
+ - changes for test setup
506
+ - package changes
507
+ - Changes to generate an SA user with the default password for simpler experience during setup
508
+ - more changes to support form data based uploads
509
+ - changes
510
+ - changes around testing workflow
511
+ - unified testing utitlities
512
+ - added comments to the slug code
513
+ - refactored queue namespacign
514
+ - queue namespacing related chanes
515
+ - removed todo
516
+ - queue name related changes
517
+ - cag
518
+ - changrs
519
+ - queues names are now namespaced by service naem
520
+ - enabled logs
521
+ - debug logs
522
+ - testing docs updated
523
+ - changes
524
+ - cleanup
525
+ - removed old testing related fiels
526
+ - testing infra now supports data based interpolation
527
+ - testing changes: now we support fully custom test specs
528
+ - changes for test automation
529
+ - changes to tsconfig for playwright tests
530
+ - exporting typeorm db helper
531
+ - removed the files section
532
+ - changes for playwright testing
533
+ - changes to disable service controller seed method
534
+ - formatting changes
535
+ - oom issue
536
+ - logger added for chatter
537
+ - changed arg to kebab case instead of came case in schematic service
538
+ - default menu icons added
539
+ - rabbitmq subscriber: add retries, DLX queues, reconnects, and docs
540
+ - removed un-necessary log
541
+ - fix for handling non existence of fieldNamesForRemoval arg
542
+ - foirmatting canges
543
+ - Archived/solidstarters main
544
+ - version changes
545
+ - changed org : @solidstarters -> @solidxai
546
+ - removed publish script, since it is replaced with solidctl release
547
+ - chanes
548
+ - Revert "@solidstarters namespace changed to @solidx"
549
+ - @solidstarters namespace changed to @solidx
550
+ - file service interface changes
551
+ - CR in s3 file service, url options now supports isPrivateBucket allowing one to generate signed and un-signed URLs using the getUrl method
552
+ - changes to the publish script to support: 1.reverse merging main to dev to ensure latest package version is synced with dev post publish. 2. added guardrail to allow publishing from main branch only 3. added dry run option and force option i.e (in case we want to publish from another branch, but is hidden) 4. script now pushes the git version tags as well
553
+ - changes to pass minimal parameters to the schematics project and pick the rest from the metadata configuration json file (avoid long shell commands)
554
+ - test data workflow
555
+ - test-data command
556
+ - seed command updated
557
+ - changes
558
+ - changes
559
+ - seed command changes to support pruning, test-data-setup and test-data-teardown.
560
+ - seeding now supports seedData allowing us to seed fixtures for testing.
561
+ - precomputations now skip computation if value is already provided
562
+ - added utility for findOneByUserKey
563
+ - pruning related chagnes
564
+ - changes
565
+ - more changes related to pruning metadata
566
+ - pruen logs added
567
+ - module metadata seeder now does prune also
568
+ - reformatting to improve readability
569
+ - changes
570
+ - file type not allowed. Allowed: image, document, pdf. Received mimetype: application/pdf (mapped to file)
571
+ - bug fixes
572
+ - changes to cleanup the implementation by having the write method of file service return the url post write
573
+ - changes to support using the region specified in a media storage provider, instead only the default while creating an s3 client
574
+ - fixes for using the default-aws-s3 bucket for storing the settings media if default file service is s3
575
+ - changes to settings media storage logic i.e copy multer path to file service implementation write
576
+ - file service abstraction cleanup
577
+ - chagnes
578
+ - Dashboard Question Responsive
579
+
3
580
  ## [0.1.13-beta.16] - 2026-08-10
4
581
 
5
582
  ### Added
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/bootstrap.helper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAalE,OAAO,EAGL,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAyB3B,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IAEpC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;IAEtC,0BAA0B,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAE9D,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAEhC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAM3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAeD,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACpC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAgJjC;AAgBD,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAwCf"}
1
+ {"version":3,"file":"bootstrap.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/bootstrap.helper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAalE,OAAO,EAGL,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAyB3B,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IAEpC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;IAEtC,0BAA0B,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAE9D,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAEhC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAU3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAeD,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACpC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAgJjC;AAgBD,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAwCf"}
@@ -36,7 +36,7 @@ function registerGlobalProcessHandlers() {
36
36
  }
37
37
  async function bootstrapSolidApp(appModuleFactory, options = {}) {
38
38
  registerGlobalProcessHandlers();
39
- const { globalPrefix = 'api', swagger = {}, permissionsPolicyOverrides = {}, security = {}, verboseBootstrap = false, bodyLimit = '25mb', } = options;
39
+ const { globalPrefix = 'api', swagger = {}, permissionsPolicyOverrides = {}, security = {}, verboseBootstrap = false, bodyLimit = '10mb', } = options;
40
40
  const startTime = Date.now();
41
41
  const appModule = await appModuleFactory();
42
42
  const app = await core_1.NestFactory.create(appModule, {
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.helper.js","sourceRoot":"","sources":["../../src/helpers/bootstrap.helper.ts"],"names":[],"mappings":"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","sourcesContent":["import { ClassSerializerInterceptor, ValidationPipe } from '@nestjs/common';\nimport { NestFactory, Reflector } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport { WsAdapter } from '@nestjs/platform-ws';\nimport { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';\nimport { NextFunction, Request, Response } from 'express';\nimport helmet from 'helmet';\nimport qs from 'qs';\nimport { existsSync } from 'fs';\nimport { resolve } from 'path';\nimport { WINSTON_MODULE_NEST_PROVIDER, WinstonModule } from 'nest-winston';\nimport { CommandFactory } from 'nest-commander';\nimport { createWinstonLoggerConfig } from '../winston.logger';\nimport { WrapResponseInterceptor } from '../interceptors/wrap-response.interceptor';\nimport { buildDefaultCorsOptions } from './cors.helper';\nimport {\n buildDefaultSecurityHeaderOptions,\n buildPermissionsPolicyHeader,\n PermissionsPolicyConfig,\n SolidSecurityOptions,\n} from './security.helper';\nimport { parseBooleanEnv } from './environment.helper';\n\n// ---- Shared process handlers ----\n\nfunction registerGlobalProcessHandlers() {\n process.on('unhandledRejection', (reason, promise) => {\n console.error('Unhandled Rejection at:', promise, 'reason:', reason);\n });\n\n process.on('uncaughtException', (err) => {\n console.error('Uncaught Exception thrown:', err);\n });\n\n // Suppress pg deprecation warning caused by TypeORM's internal query scheduling\n process.on('warning', (warning) => {\n if (warning.name === 'DeprecationWarning' && (warning.message.includes('client.query()') || warning.message.includes('punycode'))) {\n return;\n }\n console.warn(warning);\n });\n}\n\n// ---- HTTP server bootstrap ----\n\nexport interface SolidSwaggerOptions {\n title?: string;\n description?: string;\n version?: string;\n}\n\nexport interface SolidBootstrapOptions {\n /** Global API prefix. Defaults to 'api'. Set to '' to disable. */\n globalPrefix?: string;\n /** Swagger configuration. Set to false to disable Swagger entirely. */\n swagger?: SolidSwaggerOptions | false;\n /** Permissions-Policy header overrides (merged with defaults). */\n permissionsPolicyOverrides?: Partial<PermissionsPolicyConfig>;\n /** Security header overrides, including iframe frame-ancestor allowlists. */\n security?: SolidSecurityOptions;\n /** Show full NestJS init logs during bootstrap (route mapping, module deps, pollers). Defaults to false. */\n verboseBootstrap?: boolean;\n /**\n * Max request body size for JSON and urlencoded payloads, as a `bytes`-compatible\n * string (e.g. '25mb', '512kb'). Defaults to '25mb'.\n * Note: does not apply to multipart uploads — those are governed by Multer.\n */\n bodyLimit?: string;\n}\n\n/**\n * Bootstraps a SolidX NestJS HTTP application with sensible defaults:\n * security headers, CORS, Winston logger, ValidationPipe,\n * WrapResponseInterceptor, qs deep query parsing, Swagger, and the\n * pg BIGINT type parser.\n *\n * @example\n * // main.ts\n * bootstrapSolidApp(() => AppModule.forRoot(), {\n * swagger: { title: 'My API', description: 'My API description' },\n * security: { frameAncestors: [\"'self'\", 'https://portal.example.com'] },\n * });\n */\nexport async function bootstrapSolidApp(\n appModuleFactory: () => Promise<any>,\n options: SolidBootstrapOptions = {},\n): Promise<NestExpressApplication> {\n registerGlobalProcessHandlers();\n\n const {\n globalPrefix = 'api',\n swagger = {},\n permissionsPolicyOverrides = {},\n security = {},\n verboseBootstrap = false,\n bodyLimit = '25mb',\n } = options;\n\n const startTime = Date.now();\n const appModule = await appModuleFactory();\n const app = await NestFactory.create<NestExpressApplication>(appModule, {\n // Nest's default parsers are registered during init() with a 100kb limit, ahead of\n // any module middleware. Disable them so the parsers below own the limit outright.\n bodyParser: false,\n logger: WinstonModule.createLogger({ ...createWinstonLoggerConfig(), level: verboseBootstrap ? 'debug' : 'error' }),\n });\n\n const apiEnabled = parseBooleanEnv('API_ENABLED', true);\n\n if (!apiEnabled) {\n await app.init();\n app\n .get(WINSTON_MODULE_NEST_PROVIDER)\n .log('API server disabled via API_ENABLED=false. Skipping HTTP listen.', 'Bootstrap');\n return app;\n }\n\n // Health check at root path\n const server = app.getHttpAdapter().getInstance();\n server.get('/', (_req, res) => res.status(200).send('SOLID OK'));\n\n // Security headers\n app.use(helmet(buildDefaultSecurityHeaderOptions(security)));\n\n // Nest's Swagger UI HTML injects inline styles; keep CSP strict elsewhere.\n const isSwaggerPath = (path: string) =>\n path === '/docs' ||\n path === '/docs/' ||\n path.startsWith('/docs/') ||\n path === '/docs-json' ||\n path === '/docs-yaml';\n\n app.use((req: Request, res: Response, next: NextFunction) => {\n if (isSwaggerPath(req.path)) {\n res.removeHeader('Content-Security-Policy');\n }\n next();\n });\n\n // Permissions-Policy header\n app.use((_req: Request, res: Response, next: NextFunction) => {\n res.setHeader('Permissions-Policy', buildPermissionsPolicyHeader(permissionsPolicyOverrides));\n next();\n });\n\n const port = process.env.PORT || 3000;\n\n if (globalPrefix) {\n app.setGlobalPrefix(globalPrefix);\n }\n\n // qs-based deep query parsing (dot notation, nested objects, arrays)\n app.use((req: Request, _res: Response, next: NextFunction) => {\n if (req.query) {\n req.query = qs.parse(req.url.split('?')[1], {\n allowDots: true,\n depth: 20,\n arrayLimit: 100,\n });\n }\n next();\n });\n\n // Body parsers — replaces Nest's default 100kb parsers (disabled via bodyParser: false).\n // Registered here so the middleware order Nest applied by default is preserved:\n // helmet -> CSP -> Permissions-Policy -> qs -> body parsers -> routes.\n app.useBodyParser('json', { limit: bodyLimit });\n app.useBodyParser('urlencoded', { limit: bodyLimit, extended: true });\n\n // Global ValidationPipe\n app.useGlobalPipes(\n new ValidationPipe({\n transform: true,\n transformOptions: { enableImplicitConversion: true },\n }),\n );\n\n // Swagger\n if (swagger !== false) {\n const { title = process.env.SOLID_APP_NAME, description = process.env.SOLID_APP_DESCRIPTION, version = '1.0' } = swagger;\n const swaggerConfig = new DocumentBuilder()\n .setTitle(title)\n .setDescription(description)\n .setVersion(version)\n .setExternalDoc('Postman Collection', '/docs-json')\n .addBearerAuth(\n {\n description: 'Please enter token in following format: Bearer <JWT>',\n name: 'Authorization',\n bearerFormat: 'Bearer',\n scheme: 'Bearer',\n type: 'http',\n in: 'Header',\n },\n 'jwt',\n )\n .build();\n const document = SwaggerModule.createDocument(app, swaggerConfig);\n SwaggerModule.setup('/docs', app, document);\n }\n\n // Global interceptor\n app.useGlobalInterceptors(\n new ClassSerializerInterceptor(app.get(Reflector), {\n enableImplicitConversion: true, // optional but handy\n // groups: ['client'], // if you use groups\n }),\n new WrapResponseInterceptor()\n );\n\n // CORS\n app.enableCors(buildDefaultCorsOptions());\n\n // Fix pg returning BIGINT columns as strings\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const types = require('pg').types;\n types.setTypeParser(types.builtins.INT8, (val: string) => parseInt(val));\n\n app.useWebSocketAdapter(new WsAdapter(app));\n\n await app.listen(port);\n\n // Wire up Winston as the runtime logger only AFTER listen — this suppresses all\n // framework init noise (route mapping, module deps, onModuleInit) during boot.\n app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER));\n\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);\n process.stdout.write(`\\x1b[32mServer started on port ${port} in ${elapsed}s\\x1b[0m\\n`);\n\n return app;\n}\n\n// ---- CLI bootstrap ----\n\n/**\n * Bootstraps a SolidX NestJS CLI application using nest-commander.\n * Handles verbose flag stripping, project root validation, and clean process exit.\n *\n * @example\n * // main-cli.ts\n * #!/usr/bin/env node\n * import { bootstrapSolidCli } from '@solidxai/core';\n * import { AppModule } from './app.module';\n *\n * bootstrapSolidCli(() => AppModule.forRoot());\n */\nexport async function bootstrapSolidCli(\n appModuleFactory: () => Promise<any>,\n): Promise<void> {\n registerGlobalProcessHandlers();\n\n process.on('exit', (code) => {\n if (code !== 0) {\n console.error(`Exiting with error status code: ${code}`);\n }\n });\n\n // Validate that cwd is a valid Solid API project\n const packageJsonPath = resolve(process.cwd(), 'package.json');\n if (!existsSync(packageJsonPath)) {\n console.error('Does not seem to be a valid solid-api project.');\n console.error('Exit reason: missing package.json in the current directory.');\n process.exit(1);\n }\n\n // Strip --verbose / -v before nest-commander processes argv\n const showLogs = process.argv.includes('--verbose') || process.argv.includes('-v');\n for (const flag of ['--verbose', '-v']) {\n const idx = process.argv.indexOf(flag);\n if (idx !== -1) process.argv.splice(idx, 1);\n }\n\n const appModule = await appModuleFactory();\n process.env.SOLID_CLI_RUNNING = 'true';\n\n // @ts-ignore\n const app = await CommandFactory.createWithoutRunning(appModule, {\n logger: showLogs ? ['debug', 'error', 'fatal', 'log', 'verbose', 'warn'] : false,\n });\n\n try {\n await CommandFactory.runApplication(app);\n } catch (e) {\n console.error('CLI exited abruptly due to an error:', e);\n process.exit(1);\n }\n\n process.exit(0);\n}\n"]}
1
+ {"version":3,"file":"bootstrap.helper.js","sourceRoot":"","sources":["../../src/helpers/bootstrap.helper.ts"],"names":[],"mappings":"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","sourcesContent":["import { ClassSerializerInterceptor, ValidationPipe } from '@nestjs/common';\nimport { NestFactory, Reflector } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport { WsAdapter } from '@nestjs/platform-ws';\nimport { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';\nimport { NextFunction, Request, Response } from 'express';\nimport helmet from 'helmet';\nimport qs from 'qs';\nimport { existsSync } from 'fs';\nimport { resolve } from 'path';\nimport { WINSTON_MODULE_NEST_PROVIDER, WinstonModule } from 'nest-winston';\nimport { CommandFactory } from 'nest-commander';\nimport { createWinstonLoggerConfig } from '../winston.logger';\nimport { WrapResponseInterceptor } from '../interceptors/wrap-response.interceptor';\nimport { buildDefaultCorsOptions } from './cors.helper';\nimport {\n buildDefaultSecurityHeaderOptions,\n buildPermissionsPolicyHeader,\n PermissionsPolicyConfig,\n SolidSecurityOptions,\n} from './security.helper';\nimport { parseBooleanEnv } from './environment.helper';\n\n// ---- Shared process handlers ----\n\nfunction registerGlobalProcessHandlers() {\n process.on('unhandledRejection', (reason, promise) => {\n console.error('Unhandled Rejection at:', promise, 'reason:', reason);\n });\n\n process.on('uncaughtException', (err) => {\n console.error('Uncaught Exception thrown:', err);\n });\n\n // Suppress pg deprecation warning caused by TypeORM's internal query scheduling\n process.on('warning', (warning) => {\n if (warning.name === 'DeprecationWarning' && (warning.message.includes('client.query()') || warning.message.includes('punycode'))) {\n return;\n }\n console.warn(warning);\n });\n}\n\n// ---- HTTP server bootstrap ----\n\nexport interface SolidSwaggerOptions {\n title?: string;\n description?: string;\n version?: string;\n}\n\nexport interface SolidBootstrapOptions {\n /** Global API prefix. Defaults to 'api'. Set to '' to disable. */\n globalPrefix?: string;\n /** Swagger configuration. Set to false to disable Swagger entirely. */\n swagger?: SolidSwaggerOptions | false;\n /** Permissions-Policy header overrides (merged with defaults). */\n permissionsPolicyOverrides?: Partial<PermissionsPolicyConfig>;\n /** Security header overrides, including iframe frame-ancestor allowlists. */\n security?: SolidSecurityOptions;\n /** Show full NestJS init logs during bootstrap (route mapping, module deps, pollers). Defaults to false. */\n verboseBootstrap?: boolean;\n /**\n * Max request body size for JSON and urlencoded payloads, as a `bytes`-compatible\n * string (e.g. '10mb', '512kb'). Defaults to '10mb'.\n *\n * Does NOT apply to multipart/form-data uploads: body-parser matches on Content-Type,\n * so multipart requests skip these parsers entirely and are handled by Multer. Raise\n * this only for large structured JSON (e.g. /bulk arrays), bearing in mind the parsed\n * object graph can retain several times the raw byte size.\n */\n bodyLimit?: string;\n}\n\n/**\n * Bootstraps a SolidX NestJS HTTP application with sensible defaults:\n * security headers, CORS, Winston logger, ValidationPipe,\n * WrapResponseInterceptor, qs deep query parsing, Swagger, and the\n * pg BIGINT type parser.\n *\n * @example\n * // main.ts\n * bootstrapSolidApp(() => AppModule.forRoot(), {\n * swagger: { title: 'My API', description: 'My API description' },\n * security: { frameAncestors: [\"'self'\", 'https://portal.example.com'] },\n * });\n */\nexport async function bootstrapSolidApp(\n appModuleFactory: () => Promise<any>,\n options: SolidBootstrapOptions = {},\n): Promise<NestExpressApplication> {\n registerGlobalProcessHandlers();\n\n const {\n globalPrefix = 'api',\n swagger = {},\n permissionsPolicyOverrides = {},\n security = {},\n verboseBootstrap = false,\n bodyLimit = '10mb',\n } = options;\n\n const startTime = Date.now();\n const appModule = await appModuleFactory();\n const app = await NestFactory.create<NestExpressApplication>(appModule, {\n // Nest's default parsers are registered during init() with a 100kb limit, ahead of\n // any module middleware. Disable them so the parsers below own the limit outright.\n bodyParser: false,\n logger: WinstonModule.createLogger({ ...createWinstonLoggerConfig(), level: verboseBootstrap ? 'debug' : 'error' }),\n });\n\n const apiEnabled = parseBooleanEnv('API_ENABLED', true);\n\n if (!apiEnabled) {\n await app.init();\n app\n .get(WINSTON_MODULE_NEST_PROVIDER)\n .log('API server disabled via API_ENABLED=false. Skipping HTTP listen.', 'Bootstrap');\n return app;\n }\n\n // Health check at root path\n const server = app.getHttpAdapter().getInstance();\n server.get('/', (_req, res) => res.status(200).send('SOLID OK'));\n\n // Security headers\n app.use(helmet(buildDefaultSecurityHeaderOptions(security)));\n\n // Nest's Swagger UI HTML injects inline styles; keep CSP strict elsewhere.\n const isSwaggerPath = (path: string) =>\n path === '/docs' ||\n path === '/docs/' ||\n path.startsWith('/docs/') ||\n path === '/docs-json' ||\n path === '/docs-yaml';\n\n app.use((req: Request, res: Response, next: NextFunction) => {\n if (isSwaggerPath(req.path)) {\n res.removeHeader('Content-Security-Policy');\n }\n next();\n });\n\n // Permissions-Policy header\n app.use((_req: Request, res: Response, next: NextFunction) => {\n res.setHeader('Permissions-Policy', buildPermissionsPolicyHeader(permissionsPolicyOverrides));\n next();\n });\n\n const port = process.env.PORT || 3000;\n\n if (globalPrefix) {\n app.setGlobalPrefix(globalPrefix);\n }\n\n // qs-based deep query parsing (dot notation, nested objects, arrays)\n app.use((req: Request, _res: Response, next: NextFunction) => {\n if (req.query) {\n req.query = qs.parse(req.url.split('?')[1], {\n allowDots: true,\n depth: 20,\n arrayLimit: 100,\n });\n }\n next();\n });\n\n // Body parsers — replaces Nest's default 100kb parsers (disabled via bodyParser: false).\n // Registered here so the middleware order Nest applied by default is preserved:\n // helmet -> CSP -> Permissions-Policy -> qs -> body parsers -> routes.\n app.useBodyParser('json', { limit: bodyLimit });\n app.useBodyParser('urlencoded', { limit: bodyLimit, extended: true });\n\n // Global ValidationPipe\n app.useGlobalPipes(\n new ValidationPipe({\n transform: true,\n transformOptions: { enableImplicitConversion: true },\n }),\n );\n\n // Swagger\n if (swagger !== false) {\n const { title = process.env.SOLID_APP_NAME, description = process.env.SOLID_APP_DESCRIPTION, version = '1.0' } = swagger;\n const swaggerConfig = new DocumentBuilder()\n .setTitle(title)\n .setDescription(description)\n .setVersion(version)\n .setExternalDoc('Postman Collection', '/docs-json')\n .addBearerAuth(\n {\n description: 'Please enter token in following format: Bearer <JWT>',\n name: 'Authorization',\n bearerFormat: 'Bearer',\n scheme: 'Bearer',\n type: 'http',\n in: 'Header',\n },\n 'jwt',\n )\n .build();\n const document = SwaggerModule.createDocument(app, swaggerConfig);\n SwaggerModule.setup('/docs', app, document);\n }\n\n // Global interceptor\n app.useGlobalInterceptors(\n new ClassSerializerInterceptor(app.get(Reflector), {\n enableImplicitConversion: true, // optional but handy\n // groups: ['client'], // if you use groups\n }),\n new WrapResponseInterceptor()\n );\n\n // CORS\n app.enableCors(buildDefaultCorsOptions());\n\n // Fix pg returning BIGINT columns as strings\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const types = require('pg').types;\n types.setTypeParser(types.builtins.INT8, (val: string) => parseInt(val));\n\n app.useWebSocketAdapter(new WsAdapter(app));\n\n await app.listen(port);\n\n // Wire up Winston as the runtime logger only AFTER listen — this suppresses all\n // framework init noise (route mapping, module deps, onModuleInit) during boot.\n app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER));\n\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);\n process.stdout.write(`\\x1b[32mServer started on port ${port} in ${elapsed}s\\x1b[0m\\n`);\n\n return app;\n}\n\n// ---- CLI bootstrap ----\n\n/**\n * Bootstraps a SolidX NestJS CLI application using nest-commander.\n * Handles verbose flag stripping, project root validation, and clean process exit.\n *\n * @example\n * // main-cli.ts\n * #!/usr/bin/env node\n * import { bootstrapSolidCli } from '@solidxai/core';\n * import { AppModule } from './app.module';\n *\n * bootstrapSolidCli(() => AppModule.forRoot());\n */\nexport async function bootstrapSolidCli(\n appModuleFactory: () => Promise<any>,\n): Promise<void> {\n registerGlobalProcessHandlers();\n\n process.on('exit', (code) => {\n if (code !== 0) {\n console.error(`Exiting with error status code: ${code}`);\n }\n });\n\n // Validate that cwd is a valid Solid API project\n const packageJsonPath = resolve(process.cwd(), 'package.json');\n if (!existsSync(packageJsonPath)) {\n console.error('Does not seem to be a valid solid-api project.');\n console.error('Exit reason: missing package.json in the current directory.');\n process.exit(1);\n }\n\n // Strip --verbose / -v before nest-commander processes argv\n const showLogs = process.argv.includes('--verbose') || process.argv.includes('-v');\n for (const flag of ['--verbose', '-v']) {\n const idx = process.argv.indexOf(flag);\n if (idx !== -1) process.argv.splice(idx, 1);\n }\n\n const appModule = await appModuleFactory();\n process.env.SOLID_CLI_RUNNING = 'true';\n\n // @ts-ignore\n const app = await CommandFactory.createWithoutRunning(appModule, {\n logger: showLogs ? ['debug', 'error', 'fatal', 'log', 'verbose', 'warn'] : false,\n });\n\n try {\n await CommandFactory.runApplication(app);\n } catch (e) {\n console.error('CLI exited abruptly due to an error:', e);\n process.exit(1);\n }\n\n process.exit(0);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidxai/core",
3
- "version": "0.1.13-beta.16",
3
+ "version": "0.1.13-beta.17",
4
4
  "description": "This module is a NestJS module containing all the required core providers required by a Solid application",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -62,8 +62,12 @@ export interface SolidBootstrapOptions {
62
62
  verboseBootstrap?: boolean;
63
63
  /**
64
64
  * Max request body size for JSON and urlencoded payloads, as a `bytes`-compatible
65
- * string (e.g. '25mb', '512kb'). Defaults to '25mb'.
66
- * Note: does not apply to multipart uploads — those are governed by Multer.
65
+ * string (e.g. '10mb', '512kb'). Defaults to '10mb'.
66
+ *
67
+ * Does NOT apply to multipart/form-data uploads: body-parser matches on Content-Type,
68
+ * so multipart requests skip these parsers entirely and are handled by Multer. Raise
69
+ * this only for large structured JSON (e.g. /bulk arrays), bearing in mind the parsed
70
+ * object graph can retain several times the raw byte size.
67
71
  */
68
72
  bodyLimit?: string;
69
73
  }
@@ -93,7 +97,7 @@ export async function bootstrapSolidApp(
93
97
  permissionsPolicyOverrides = {},
94
98
  security = {},
95
99
  verboseBootstrap = false,
96
- bodyLimit = '25mb',
100
+ bodyLimit = '10mb',
97
101
  } = options;
98
102
 
99
103
  const startTime = Date.now();