@@ -169,6 +169,7 @@ export class DatabaseConnection extends events.EventEmitter {
169169 } catch ( error ) {
170170 console . error ( error ) ;
171171 }
172+ Logger . instanse . info ( "supports_watch: " + Config . supports_watch ) ;
172173 if ( Config . supports_watch ) {
173174 let collections = await DatabaseConnection . toArray ( this . db . listCollections ( ) ) ;
174175 collections = collections . filter ( x => x . name . indexOf ( "system." ) === - 1 ) ;
@@ -1097,8 +1098,7 @@ export class DatabaseConnection extends events.EventEmitter {
10971098 if ( ! user . HasRoleName ( "customer admins" ) && ! user . HasRoleName ( "admins" ) ) throw new Error ( "Access denied (not admin) to customer with id " + user2 . customerid ) ;
10981099 }
10991100 customer = await this . getbyid < Customer > ( user2 . customerid , "users" , jwt , span )
1100- if ( customer == null ) throw new Error ( "Access denied to customer with id " + user2 . customerid ) ;
1101- // if (!user.HasRoleName(customer.name + " admins")) throw new Error("Access denied to customer with " + customer.name);
1101+ if ( customer == null ) throw new Error ( "Access denied to customer with id " + user2 . customerid + " when updating " + user2 . _id ) ;
11021102 } else if ( user . HasRoleName ( "customer admins" ) && ! NoderedUtil . IsNullEmpty ( user . customerid ) ) {
11031103 // user2.customerid = user.customerid;
11041104 if ( NoderedUtil . IsNullEmpty ( user2 . selectedcustomerid ) ) {
@@ -1547,7 +1547,7 @@ export class DatabaseConnection extends events.EventEmitter {
15471547 // User can update, just not created ?
15481548 // if (!user.HasRoleName("customer admins") && !user.HasRoleName("admins")) throw new Error("Access denied (not admin) to customer with id " + user2.customerid);
15491549 customer = await this . getbyid < Customer > ( user2 . customerid , "users" , q . jwt , span )
1550- if ( customer == null ) throw new Error ( "Access denied to customer with id " + user2 . customerid ) ;
1550+ if ( customer == null ) throw new Error ( "Access denied to customer with id " + user2 . customerid + " when updating " + user2 . _id ) ;
15511551 } else if ( user . HasRoleName ( "customer admins" ) && ! NoderedUtil . IsNullEmpty ( user . customerid ) ) {
15521552 customer = null ;
15531553 if ( ! NoderedUtil . IsNullEmpty ( user . selectedcustomerid ) ) {
@@ -1560,7 +1560,7 @@ export class DatabaseConnection extends events.EventEmitter {
15601560 customer = await this . getbyid < Customer > ( user2 . customerid , "users" , q . jwt , span ) ;
15611561 if ( customer != null ) user2 . customerid = user . customerid ;
15621562 if ( customer == null ) {
1563- throw new Error ( "Access denied to customer with id " + user2 . customerid ) ;
1563+ throw new Error ( "Access denied to customer with id " + user2 . customerid + " when updating " + user2 . _id ) ;
15641564 }
15651565 }
15661566 }
@@ -1692,18 +1692,31 @@ export class DatabaseConnection extends events.EventEmitter {
16921692 }
16931693 }
16941694 var _oldversion = 0 ;
1695+ var _skiphistory = false ;
16951696 if ( original != null ) _oldversion = original . _version ;
16961697 if ( q . item . hasOwnProperty ( "_skiphistory" ) ) {
16971698 delete ( q . item as any ) . _skiphistory ;
16981699 if ( ! Config . allow_skiphistory ) {
16991700 q . item . _version = await this . SaveDiff ( q . collectionname , original , q . item , span ) ;
1701+ } else {
1702+ _skiphistory = true ;
17001703 }
17011704 } else {
17021705 q . item . _version = await this . SaveDiff ( q . collectionname , original , q . item , span ) ;
17031706 }
1704- if ( _oldversion == q . item . _version ) {
1705- q . opresult = { modifiedCount : 1 , result : { ok : 1 } } ;
1706- return q ;
1707+ if ( _oldversion == q . item . _version && _skiphistory == false ) {
1708+ if ( q . item . _type === 'instance' && q . collectionname === 'workflows' ) {
1709+ } else {
1710+ const _skip_array : string [ ] = Config . skip_history_collections . split ( "," ) ;
1711+ const skip_array : string [ ] = [ ] ;
1712+ _skip_array . forEach ( x => skip_array . push ( x . trim ( ) ) ) ;
1713+ if ( skip_array . indexOf ( q . collectionname ) > - 1 ) {
1714+ } else {
1715+ q . result = q . item ;
1716+ q . opresult = { modifiedCount : 1 , result : { ok : 1 } } ;
1717+ return q ;
1718+ }
1719+ }
17071720 }
17081721 } else {
17091722 let json : string = q . item as any ;
@@ -1809,19 +1822,25 @@ export class DatabaseConnection extends events.EventEmitter {
18091822 await this . db . collection ( q . collectionname ) . deleteOne ( { _id : safeid } ) ;
18101823 }
18111824 }
1812- if ( q . opresult . matchedCount == 0 && ( q . w != 0 ) ) {
1825+ if ( q . opresult && q . opresult . matchedCount == 0 && ( q . w != 0 ) ) {
18131826 throw new Error ( "ReplaceOne failed, matched 0 documents with query {_id: '" + q . item . _id + "'}" ) ;
18141827 }
1828+ if ( q . opresult == null ) {
1829+ Logger . instanse . error ( "[" + user . username + "][" + q . collectionname + "] opresult is null !!" ) ;
1830+ }
18151831 } else {
18161832 const fsc = Config . db . db . collection ( q . collectionname ) ;
18171833 const ot_end = Logger . otel . startTimer ( ) ;
18181834 const mongodbspan : Span = Logger . otel . startSubSpan ( "mongodb.replaceOne" , span ) ;
18191835 q . opresult = await fsc . updateOne ( _query , { $set : { metadata : ( q . item as any ) . metadata } } ) ;
18201836 Logger . otel . endSpan ( mongodbspan ) ;
18211837 Logger . otel . endTimer ( ot_end , DatabaseConnection . mongodb_update , { collection : q . collectionname } ) ;
1822- if ( q . opresult . matchedCount == 0 && ( q . w != 0 ) ) {
1838+ if ( ( q . opresult && q . opresult . matchedCount == 0 ) && ( q . w != 0 ) ) {
18231839 throw new Error ( "ReplaceOne failed, matched 0 documents with query {_id: '" + q . item . _id + "'}" ) ;
18241840 }
1841+ if ( q . opresult == null ) {
1842+ Logger . instanse . error ( "[" + user . username + "][" + q . collectionname + "] opresult is null !!" ) ;
1843+ }
18251844 }
18261845 } else {
18271846 if ( ( q . item [ "$set" ] ) === undefined ) { ( q . item [ "$set" ] ) = { } } ;
@@ -2783,7 +2802,6 @@ export class DatabaseConnection extends events.EventEmitter {
27832802 return ( Math . floor ( num / precision ) * precision ) ;
27842803 } ;
27852804 if ( item . _type === 'instance' && collectionname === 'workflows' ) return 0 ;
2786- if ( item . _type === 'instance' && collectionname === 'workflows' ) return 0 ;
27872805
27882806 if ( ! original && item . _id ) {
27892807 const rootjwt = Crypt . rootToken ( )
0 commit comments