TSServer suggestion performance issues (4+ seconds) despite fast compilation

Performance Report
🔎 Search Terms
"tsserver slow performance" and the likes.
I've gone through the steps mentioned in https://github.com/microsoft/TypeScript/wiki/Performance but they haven't made a difference.
I've checked the vscode process explorer, while waiting for the suggestions tsserver takes about 11% cpu and 275MB. I have plenty of CPU and memory left too.
🕗 Version & Regression Information
Windows, Typescript 4.4.4 (Project uses workspace Typescript). The compilation is done in Docker. The issue is that the autocomplete suggestions in VSCode are seriously slow for me, often 4+ seconds, despite compilation being much quicker (couple of seconds).
Since I'm not able to provide code you'll probably be unable to help me which is understandable.
Here's a relevant tsserver log, I'm hoping that there might be something in there that could give a pointer in the right direction which I can then investigate. Took it on a fresh vscode instance, made sure to wait a minute for everything to be fully loaded. Typed "req.", where req is a Express request, and waited until the autocomplete suggestions came up. In particular I'm curious why there's a 2 second gap between "Different program with same set of files" and "response". Is this just the compilation taking 2 seconds? Especially as it says "canceled: true" (Info 188). And then the autocomplete takes another 2 seconds, adding up to 4 seconds?
Info 181  [18:54:02.512] request:
    {"seq":37,"type":"request","command":"updateOpen","arguments":{"changedFiles":[{"fileName":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","textChanges":[{"newText":"\r\n      ","start":{"line":27,"offset":21},"end":{"line":27,"offset":21}}]}],"closedFiles":[],"openFiles":[]}}
Perf 182  [18:54:02.512] 37::updateOpen: elapsed time (in milliseconds) 0.5430
Info 183  [18:54:02.512] response:
    {"seq":0,"type":"response","command":"updateOpen","request_seq":37,"success":true,"body":true}
Info 184  [18:54:02.513] request:
    {"seq":38,"type":"request","command":"encodedSemanticClassifications-full","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","start":0,"length":2171,"format":"2020"}}
Info 185  [18:54:02.513] Starting updateGraphWorker: Project: c:/Users/PC/Developer/work-project/tsconfig.json
Info 186  [18:54:02.532] Finishing updateGraphWorker: Project: c:/Users/PC/Developer/work-project/tsconfig.json Version: 2 structureChanged: false structureIsReused:: Completely Elapsed: 18.714800000190735ms
Info 187  [18:54:02.532] Different program with same set of files
Info 188  [18:54:04.548] response:
    {"seq":0,"type":"response","command":"encodedSemanticClassifications-full","request_seq":38,"success":true,"performanceData":{"updateGraphDurationMs":18.714800000190735},"body":{"canceled":true}}
Info 189  [18:54:04.553] request:
    {"seq":39,"type":"request","command":"updateOpen","arguments":{"changedFiles":[{"fileName":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","textChanges":[{"newText":"r","start":{"line":28,"offset":7},"end":{"line":28,"offset":7}}]}],"closedFiles":[],"openFiles":[]}}
Perf 190  [18:54:04.553] 39::updateOpen: elapsed time (in milliseconds) 0.3743
Info 191  [18:54:04.553] response:
    {"seq":0,"type":"response","command":"updateOpen","request_seq":39,"success":true,"body":true}
Info 192  [18:54:04.554] request:
    {"seq":41,"type":"request","command":"updateOpen","arguments":{"changedFiles":[{"fileName":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","textChanges":[{"newText":"e","start":{"line":28,"offset":8},"end":{"line":28,"offset":8}}]}],"closedFiles":[],"openFiles":[]}}
Perf 193  [18:54:04.554] 41::updateOpen: elapsed time (in milliseconds) 0.3945
Info 194  [18:54:04.554] response:
    {"seq":0,"type":"response","command":"updateOpen","request_seq":41,"success":true,"body":true}
Info 195  [18:54:04.555] request:
    {"seq":42,"type":"request","command":"updateOpen","arguments":{"changedFiles":[{"fileName":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","textChanges":[{"newText":"q","start":{"line":28,"offset":9},"end":{"line":28,"offset":9}}]}],"closedFiles":[],"openFiles":[]}}
Perf 196  [18:54:04.555] 42::updateOpen: elapsed time (in milliseconds) 0.3048
Info 197  [18:54:04.555] response:
    {"seq":0,"type":"response","command":"updateOpen","request_seq":42,"success":true,"body":true}
Info 198  [18:54:04.555] request:
    {"seq":43,"type":"request","command":"updateOpen","arguments":{"changedFiles":[{"fileName":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","textChanges":[{"newText":".","start":{"line":28,"offset":10},"end":{"line":28,"offset":10}}]}],"closedFiles":[],"openFiles":[]}}
Perf 199  [18:54:04.556] 43::updateOpen: elapsed time (in milliseconds) 0.2716
Info 200  [18:54:04.556] response:
    {"seq":0,"type":"response","command":"updateOpen","request_seq":43,"success":true,"body":true}
Info 201  [18:54:04.556] request:
    {"seq":44,"type":"request","command":"completionInfo","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","line":28,"offset":11,"includeExternalModuleExports":true,"includeInsertTextCompletions":true,"triggerCharacter":".","triggerKind":2}}
Info 202  [18:54:04.557] Starting updateGraphWorker: Project: c:/Users/PC/Developer/work-project/tsconfig.json
Info 203  [18:54:04.576] Finishing updateGraphWorker: Project: c:/Users/PC/Developer/work-project/tsconfig.json Version: 3 structureChanged: false structureIsReused:: Completely Elapsed: 19.604499995708466ms
Info 204  [18:54:04.576] Different program with same set of files
Info 205  [18:54:04.580] getCompletionData: Get current token: 0.0754999965429306
Info 206  [18:54:04.580] getCompletionData: Is inside comment: 0.181099995970726
Info 207  [18:54:04.580] getCompletionData: Get previous token: 0.08460000157356262
Info 208  [18:54:04.581] getCompletionsAtPosition: isCompletionListBlocker: 0.2557999938726425
Info 209  [18:54:05.819] getCompletionData: Semantic work: 1238.143700003624
Info 210  [18:54:05.826] getCompletionsAtPosition: getCompletionEntriesFromSymbols: 5.646999999880791
Perf 211  [18:54:05.828] 44::completionInfo: elapsed time (in milliseconds) 1271.5201
Info 212  [18:54:05.828] response:
    {"seq":0,"type":"response","command":"completionInfo","request_seq":44,"success":true,"performanceData":{"updateGraphDurationMs":19.604499995708466},"body":{"isGlobalCompletion":false,"isMemberCompletion":true,"isNewIdentifierLocation":false,"entries":[{"name":"_construct","kind":"method","kindModifiers":"declare,optional","sortText":"11"},{"name":"_destroy","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"_read","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"aborted","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"accepted","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"accepts","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"acceptsCharsets","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"acceptsEncodings","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"acceptsLanguages","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"addListener","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"app","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"baseUrl","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"body","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"complete","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"connection","kind":"property","kindModifiers":"deprecated,declare","sortText":"19"},{"name":"cookies","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"destroy","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"destroyed","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"emit","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"eventNames","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"fresh","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"get","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"getMaxListeners","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"header","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"headers","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"host","kind":"property","kindModifiers":"deprecated,declare","sortText":"19"},{"name":"hostname","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"httpVersion","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"httpVersionMajor","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"httpVersionMinor","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"ip","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"ips","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"is","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"isPaused","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"listenerCount","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"listeners","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"method","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"next","kind":"property","kindModifiers":"declare,optional","sortText":"11"},{"name":"off","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"on","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"once","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"originalUrl","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"param","kind":"method","kindModifiers":"deprecated,declare","sortText":"19"},{"name":"params","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"path","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"pause","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"pipe","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"prependListener","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"prependOnceListener","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"protocol","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"push","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"query","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"range","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"rawHeaders","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"rawListeners","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"rawTrailers","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"read","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"readable","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"readableAborted","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"readableDidRead","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"readableEncoding","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"readableEnded","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"readableFlowing","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"readableHighWaterMark","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"readableLength","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"readableObjectMode","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"removeAllListeners","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"removeListener","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"res","kind":"property","kindModifiers":"declare,optional","sortText":"11"},{"name":"resume","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"route","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"secure","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"setEncoding","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"setMaxListeners","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"setTimeout","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"signedCookies","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"socket","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"stale","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"statusCode","kind":"property","kindModifiers":"declare,optional","sortText":"11"},{"name":"statusMessage","kind":"property","kindModifiers":"declare,optional","sortText":"11"},{"name":"subdomains","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"Symbol","kind":"var","kindModifiers":"declare","sortText":"11","insertText":"[Symbol]","replacementSpan":{"start":{"line":28,"offset":10},"end":{"line":28,"offset":11}}},{"name":"trailers","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"unpipe","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"unshift","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"url","kind":"property","kindModifiers":"declare","sortText":"11"},{"name":"wrap","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"xhr","kind":"property","kindModifiers":"declare","sortText":"11"}]}}
Info 213  [18:54:05.829] request:
    {"seq":45,"type":"request","command":"encodedSemanticClassifications-full","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","start":0,"length":2175,"format":"2020"}}
Perf 214  [18:54:05.969] 45::encodedSemanticClassifications-full: elapsed time (in milliseconds) 140.1043
Info 215  [18:54:05.969] response:
    {"seq":0,"type":"response","command":"encodedSemanticClassifications-full","request_seq":45,"success":true,"body":{"spans":[433,6,2057,442,6,2816,455,6,2056,462,3,3072,478,15,2816,501,3,1793,534,10,3072,561,6,2056,568,3,3072,587,15,2816,618,6,2561,628,6,2824,646,2,2561,650,10,2056,661,14,2560,676,6,3072,686,10,2056,697,11,2560,742,3,1793,759,3,1792,789,10,3072,800,3,1792,804,6,2560,835,6,2056,842,3,3072,869,15,2816,885,13,2056,899,12,2560,920,3,1793,953,13,3072,967,7,2816,975,3,1792,995,6,2056,1002,3,3072,1027,15,2816,1058,6,2561,1068,6,2824,1086,2,2561,1090,10,2056,1101,14,2560,1116,6,3072,1126,10,2056,1137,11,2560,1169,5,2561,1178,6,2824,1196,4,2561,1204,10,2824,1215,9,512,1226,7,3072,1234,9,512,1244,7,2312,1285,3,1793,1290,3,1793,1313,5,2089,1338,11,3072,1350,3,1792,1354,6,2560,1365,3,1792,1369,5,2560,1395,10,2089,1408,22,2816,1431,5,2088,1458,7,272,1467,7,2817,1490,3,1792,1494,9,3072,1580,5,2088,1586,6,2584,1620,10,2088,1631,5,2560,1665,10,2088,1676,6,2560,1706,3,1792,1710,3,3072,1714,5,2088,1740,7,2816,1883,6,2056,1890,3,3072,1914,15,2816,1937,3,1793,1942,3,1793,2102,4,3072],"endOfLineState":0}}
Info 216  [18:54:05.970] request:
    {"seq":48,"type":"request","command":"provideInlayHints","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","start":0,"length":2203}}
Perf 217  [18:54:06.001] 48::provideInlayHints: elapsed time (in milliseconds) 31.0457
Info 218  [18:54:06.001] response:
    {"seq":0,"type":"response","command":"provideInlayHints","request_seq":48,"success":true,"body":[{"text":"path:","position":{"line":13,"offset":3},"kind":"Parameter","whitespaceAfter":true},{"text":"path:","position":{"line":20,"offset":3},"kind":"Parameter","whitespaceAfter":true},{"text":"path:","position":{"line":35,"offset":3},"kind":"Parameter","whitespaceAfter":true},{"text":"path:","position":{"line":42,"offset":3},"kind":"Parameter","whitespaceAfter":true},{"text":"statusCode:","position":{"line":57,"offset":23},"kind":"Parameter","whitespaceAfter":true},{"text":"value:","position":{"line":64,"offset":19},"kind":"Parameter","whitespaceAfter":true},{"text":"path:","position":{"line":72,"offset":3},"kind":"Parameter","whitespaceAfter":true}]}
Info 219  [18:54:06.002] request:
    {"seq":49,"type":"request","command":"getApplicableRefactors","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","startLine":28,"startOffset":11,"endLine":28,"endOffset":11}}
Perf 220  [18:54:06.003] 49::getApplicableRefactors: elapsed time (in milliseconds) 0.8239
Info 221  [18:54:06.003] response:
    {"seq":0,"type":"response","command":"getApplicableRefactors","request_seq":49,"success":true,"body":[{"name":"Convert export","description":"Convert default export to named export","actions":[{"name":"Convert default export to named export","description":"Convert default export to named export","kind":"refactor.rewrite.export.named","notApplicableReason":"Could not find export statement"},{"name":"Convert named export to default export","description":"Convert named export to default export","kind":"refactor.rewrite.export.default","notApplicableReason":"Could not find export statement"}]},{"name":"Convert import","description":"Convert namespace import to named imports","actions":[{"name":"Convert namespace import to named imports","description":"Convert namespace import to named imports","kind":"refactor.rewrite.import.named","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Convert import","description":"Convert named imports to namespace import","actions":[{"name":"Convert named imports to namespace import","description":"Convert named imports to namespace import","kind":"refactor.rewrite.import.namespace","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Extract Symbol","description":"Extract function","actions":[{"name":"Extract Function","description":"Extract function","kind":"refactor.extract.function","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract Symbol","description":"Extract constant","actions":[{"name":"Extract Constant","description":"Extract constant","kind":"refactor.extract.constant","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract type","description":"Extract type","actions":[{"name":"Extract to typedef","description":"Extract to typedef","kind":"refactor.extract.typedef","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to type alias","description":"Extract to type alias","kind":"refactor.extract.type","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to interface","description":"Extract to interface","kind":"refactor.extract.interface","notApplicableReason":"Selection is not a valid type node"}]},{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","actions":[{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","kind":"refactor.rewrite.property.generateAccessors","notApplicableReason":"Could not find property for which to generate accessor"}]},{"name":"Move to a new file","description":"Move to a new file","actions":[{"name":"Move to a new file","description":"Move to a new file","kind":"refactor.move.newFile","notApplicableReason":"Selection is not a valid statement or statements"}]},{"name":"Convert to template string","description":"Convert to template string","actions":[{"name":"Convert to template string","description":"Convert to template string","kind":"refactor.rewrite.string","notApplicableReason":"Can only convert string concatenation"}]},{"name":"Infer function return type","description":"Infer function return type","actions":[{"name":"Infer function return type","description":"Infer function return type","kind":"refactor.rewrite.function.returnType","notApplicableReason":"Return type must be inferred from a function"}]}]}
Info 222  [18:54:06.003] request:
    {"seq":51,"type":"request","command":"completionEntryDetails","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","line":28,"offset":11,"entryNames":["params"]}}
Info 223  [18:54:06.004] getCompletionData: Get current token: 0.0341000109910965
Info 224  [18:54:06.004] getCompletionData: Is inside comment: 0.06009998917579651
Info 225  [18:54:06.004] getCompletionData: Get previous token: 0.05040000379085541
Info 226  [18:54:06.004] getCompletionsAtPosition: isCompletionListBlocker: 0.0031999945640563965
Info 227  [18:54:06.005] getCompletionData: Semantic work: 0.4302999973297119
Perf 228  [18:54:06.020] 51::completionEntryDetails: elapsed time (in milliseconds) 17.0060
Info 229  [18:54:06.020] response:
    {"seq":0,"type":"response","command":"completionEntryDetails","request_seq":51,"success":true,"body":[{"name":"params","kindModifiers":"declare","kind":"property","displayParts":[{"text":"(","kind":"punctuation"},{"text":"property","kind":"text"},{"text":")","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"Request","kind":"interfaceName"},{"text":"<","kind":"punctuation"},{"text":"{","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"id","kind":"propertyName"},{"text":":","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"number","kind":"keyword"},{"text":";","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"}","kind":"punctuation"},{"text":",","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"any","kind":"keyword"},{"text":",","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"unknown","kind":"keyword"},{"text":",","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"unknown","kind":"keyword"},{"text":",","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"Record","kind":"aliasName"},{"text":"<","kind":"punctuation"},{"text":"string","kind":"keyword"},{"text":",","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"any","kind":"keyword"},{"text":">","kind":"punctuation"},{"text":">","kind":"punctuation"},{"text":".","kind":"punctuation"},{"text":"params","kind":"propertyName"},{"text":":","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"{","kind":"punctuation"},{"text":"\n","kind":"lineBreak"},{"text":"    ","kind":"space"},{"text":"id","kind":"propertyName"},{"text":":","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"number","kind":"keyword"},{"text":";","kind":"punctuation"},{"text":"\n","kind":"lineBreak"},{"text":"}","kind":"punctuation"}],"documentation":[],"tags":[]}]}
Info 230  [18:54:06.097] request:
    {"seq":52,"type":"request","command":"geterr","arguments":{"delay":0,"files":["c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts"]}}
Perf 231  [18:54:06.097] 52::geterr: async elapsed time (in milliseconds) 0.3917
Info 232  [18:54:06.112] event:
    {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","diagnostics":[{"start":{"line":28,"offset":11},"end":{"line":28,"offset":11},"text":"Identifier expected.","code":1003,"category":"error"}]}}
Info 233  [18:54:07.099] event:
    {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":52}}
Info 234  [18:54:07.101] request:
    {"seq":53,"type":"request","command":"getApplicableRefactors","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","startLine":28,"startOffset":11,"endLine":28,"endOffset":11}}
Perf 235  [18:54:07.104] 53::getApplicableRefactors: elapsed time (in milliseconds) 2.7228
Info 236  [18:54:07.104] response:
    {"seq":0,"type":"response","command":"getApplicableRefactors","request_seq":53,"success":true,"body":[{"name":"Convert export","description":"Convert default export to named export","actions":[{"name":"Convert default export to named export","description":"Convert default export to named export","kind":"refactor.rewrite.export.named","notApplicableReason":"Could not find export statement"},{"name":"Convert named export to default export","description":"Convert named export to default export","kind":"refactor.rewrite.export.default","notApplicableReason":"Could not find export statement"}]},{"name":"Convert import","description":"Convert namespace import to named imports","actions":[{"name":"Convert namespace import to named imports","description":"Convert namespace import to named imports","kind":"refactor.rewrite.import.named","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Convert import","description":"Convert named imports to namespace import","actions":[{"name":"Convert named imports to namespace import","description":"Convert named imports to namespace import","kind":"refactor.rewrite.import.namespace","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Extract Symbol","description":"Extract function","actions":[{"name":"Extract Function","description":"Extract function","kind":"refactor.extract.function","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract Symbol","description":"Extract constant","actions":[{"name":"Extract Constant","description":"Extract constant","kind":"refactor.extract.constant","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract type","description":"Extract type","actions":[{"name":"Extract to typedef","description":"Extract to typedef","kind":"refactor.extract.typedef","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to type alias","description":"Extract to type alias","kind":"refactor.extract.type","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to interface","description":"Extract to interface","kind":"refactor.extract.interface","notApplicableReason":"Selection is not a valid type node"}]},{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","actions":[{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","kind":"refactor.rewrite.property.generateAccessors","notApplicableReason":"Could not find property for which to generate accessor"}]},{"name":"Move to a new file","description":"Move to a new file","actions":[{"name":"Move to a new file","description":"Move to a new file","kind":"refactor.move.newFile","notApplicableReason":"Selection is not a valid statement or statements"}]},{"name":"Convert to template string","description":"Convert to template string","actions":[{"name":"Convert to template string","description":"Convert to template string","kind":"refactor.rewrite.string","notApplicableReason":"Can only convert string concatenation"}]},{"name":"Infer function return type","description":"Infer function return type","actions":[{"name":"Infer function return type","description":"Infer function return type","kind":"refactor.rewrite.function.returnType","notApplicableReason":"Return type must be inferred from a function"}]}]}
Info 237  [18:54:07.106] request:
    {"seq":54,"type":"request","command":"getCodeFixes","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","startLine":28,"startOffset":11,"endLine":28,"endOffset":11,"errorCodes":[1003]}}
Perf 238  [18:54:08.332] 54::getCodeFixes: elapsed time (in milliseconds) 1226.3076
Info 239  [18:54:08.332] response:
    {"seq":0,"type":"response","command":"getCodeFixes","request_seq":54,"success":true,"body":[]}
Info 240  [18:54:08.332] request:
    {"seq":55,"type":"request","command":"geterr","arguments":{"delay":0,"files":["c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts"]}}
Perf 241  [18:54:08.333] 55::geterr: async elapsed time (in milliseconds) 0.3035
Info 242  [18:54:08.337] event:
    {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","diagnostics":[{"start":{"line":28,"offset":11},"end":{"line":28,"offset":11},"text":"Identifier expected.","code":1003,"category":"error"}]}}
Info 243  [18:54:08.337] event:
    {"seq":0,"type":"event","event":"semanticDiag","body":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","diagnostics":[]}}
Info 244  [18:54:08.338] event:
    {"seq":0,"type":"event","event":"suggestionDiag","body":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","diagnostics":[{"start":{"line":14,"offset":26},"end":{"line":14,"offset":29},"text":"'req' is declared but its value is never read.","code":6133,"category":"suggestion","reportsUnnecessary":true},{"start":{"line":73,"offset":26},"end":{"line":73,"offset":29},"text":"'req' is declared but its value is never read.","code":6133,"category":"suggestion","reportsUnnecessary":true},{"start":{"line":73,"offset":31},"end":{"line":73,"offset":34},"text":"'res' is declared but its value is never read.","code":6133,"category":"suggestion","reportsUnnecessary":true}]}}
Info 245  [18:54:08.338] event:
    {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":55}}
Info 246  [18:54:08.657] request:
    {"seq":56,"type":"request","command":"getApplicableRefactors","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","startLine":28,"startOffset":11,"endLine":28,"endOffset":11}}
Perf 247  [18:54:08.658] 56::getApplicableRefactors: elapsed time (in milliseconds) 1.1175
Info 248  [18:54:08.658] response:
    {"seq":0,"type":"response","command":"getApplicableRefactors","request_seq":56,"success":true,"body":[{"name":"Convert export","description":"Convert default export to named export","actions":[{"name":"Convert default export to named export","description":"Convert default export to named export","kind":"refactor.rewrite.export.named","notApplicableReason":"Could not find export statement"},{"name":"Convert named export to default export","description":"Convert named export to default export","kind":"refactor.rewrite.export.default","notApplicableReason":"Could not find export statement"}]},{"name":"Convert import","description":"Convert namespace import to named imports","actions":[{"name":"Convert namespace import to named imports","description":"Convert namespace import to named imports","kind":"refactor.rewrite.import.named","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Convert import","description":"Convert named imports to namespace import","actions":[{"name":"Convert named imports to namespace import","description":"Convert named imports to namespace import","kind":"refactor.rewrite.import.namespace","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Extract Symbol","description":"Extract function","actions":[{"name":"Extract Function","description":"Extract function","kind":"refactor.extract.function","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract Symbol","description":"Extract constant","actions":[{"name":"Extract Constant","description":"Extract constant","kind":"refactor.extract.constant","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract type","description":"Extract type","actions":[{"name":"Extract to typedef","description":"Extract to typedef","kind":"refactor.extract.typedef","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to type alias","description":"Extract to type alias","kind":"refactor.extract.type","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to interface","description":"Extract to interface","kind":"refactor.extract.interface","notApplicableReason":"Selection is not a valid type node"}]},{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","actions":[{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","kind":"refactor.rewrite.property.generateAccessors","notApplicableReason":"Could not find property for which to generate accessor"}]},{"name":"Move to a new file","description":"Move to a new file","actions":[{"name":"Move to a new file","description":"Move to a new file","kind":"refactor.move.newFile","notApplicableReason":"Selection is not a valid statement or statements"}]},{"name":"Convert to template string","description":"Convert to template string","actions":[{"name":"Convert to template string","description":"Convert to template string","kind":"refactor.rewrite.string","notApplicableReason":"Can only convert string concatenation"}]},{"name":"Infer function return type","description":"Infer function return type","actions":[{"name":"Infer function return type","description":"Infer function return type","kind":"refactor.rewrite.function.returnType","notApplicableReason":"Return type must be inferred from a function"}]}]}
Info 249  [18:54:08.659] request:
    {"seq":57,"type":"request","command":"getCodeFixes","arguments":{"file":"c:/Users/PC/Developer/work-project/src/components/map/map.controller.ts","startLine":28,"startOffset":11,"endLine":28,"endOffset":11,"errorCodes":[1003]}}
Perf 250  [18:54:08.659] 57::getCodeFixes: elapsed time (in milliseconds) 0.7306
Info 251  [18:54:08.660] response:
    {"seq":0,"type":"response","command":"getCodeFixes","request_seq":57,"success":true,"body":[]}

@JeongJuhyeon Thanks for reaching out!  You're right that not having a repro will make it much harder for us to investigate, but there are still some things you can try on your own.
One feature that can affect the performance of completion is auto-imports.  As an experiment, you may wish to try disabling it:
"typescript.suggest.autoImports": false

Some people also find that semantic classification slows down their editor experience:
"editor.semanticHighlighting.enabled": false

Of course, both of these features provide valuable functionality, so you'll have to decide for yourself whether your experience is better without them.  Either way, please let us know what you find.
More directly, you can investigate using server tracing:
"typescript.tsserver.enableTracing": true

The tooling is less mature than for command-line tracing, but it tends to provide enough information to extract a useful repro.
My hunch is that you're probably dotting into a very large union - listing all the possible members is slower than confirming that a particular member is available, which would explain why tsc is faster than completion.

@JeongJuhyeon please let us know if you find anything that we can investigate further.

@amcasey, sorry for commenting here but I can't find this info:
Where info from "typescript.tsserver.enableTracing" is saved?

@SrBrahma If you look in the "TypeScript" tab of the Output window, it will give a directory.


Fonts updates in the KEEP token dashboard

Closes: #2065
This PR updates the fonts styles in the KEEP token dashboard based on the KEEP Design System.

These bold 0s look very aggressive lol:  The bold zeros in general feel a little in-your-face. /cc @liz-shinn

Think it will look more balanced when the unit is there as well, for example:

Also, the addresses shouldn't be in all caps case since we ran into issue with case sensitivity with addresses

I'll resolve this all issue in followup work, because almost all screens have changed so I'll go through page by page and update. In this PR, I focused on font updates on the css side.


Path is getting logged

Stray debug statement?  https://github.com/jpdevries/blockdown/blob/master/core/components/blockdown/elements/plugins/blockdown.plugin.php#L11

whoops

Hey @jpdevries could you push a tag/release to blockdown? Kinda annoying, as it happens on any page that has ContentBlocks on it ;)


Update reboot docs

Fixes #2108

@bboreham please take a quick look at my commit. If you are happy I will do some squashing and merge.

LGTM


🐛 Move to top gap between content and icon

fixed https://github.com/nunocoracao/blowfish/issues/696

@DanWiseProgramming thanks for this. Do you mind opening a new ticket? (Not near the computer)

@nunocoracao Sure, will do. Thank you.


Add revault command

Closes #126

I broke the unit tests in my last push (with the change of db_cancel_transaction)

Pushed the fix.

With the current logic, a vault for which the Spend transaction was just broadcast and then revaulted (the Cancel comes RBF'ing) would never be marked as canceling.
Going to push a qa commit soon but wanted to share this one so we can think of a solution.

With the current logic, a vault for which the Spend transaction was just broadcast and then revaulted (the Cancel comes RBF'ing) would never be marked as canceling.
Going to push a qa commit soon but wanted to share this one so we can think of a solution.

Not trivial IMHO. I would mark it as canceling/spending, because even though the Cancel is RBF'ing, it's not assured that it will be mined (maybe a miner finds a block before the cancel reaches him, for example)

Yes, but that's true for any unconfirmed (or lightly confirmed) transaction. :)
I think it's reasonable to keep it as spending on a first-seen basis for now (though it'd be cleaner to eventually have it marked as canceling if the Cancel is deemed prioritized by our bitcoind), until one of them gets mined.
However the current logic would not notice a confirmed Cancel if it saw an unconfirmed Spend beforehand.

Found more bugs not introduced here while testing, will push some drive-by fixups. Sorry for polluting your PR :/

Pushed some fixes for the reorg handling, and a commit with functional tests that exercise some edge cases, including the aforementioned one.

Also, the "deposit vanished" log isn't accurate anymore. Forgot to fix it
diff --git a/src/daemon/bitcoind/actions.rs b/src/daemon/bitcoind/actions.rs
index e9626e1..67d1735 100644
--- a/src/daemon/bitcoind/actions.rs
+++ b/src/daemon/bitcoind/actions.rs
@@ -1182,12 +1182,12 @@ fn update_utxos(
             // TODO: handle bypass and emergency
             if utxo.is_confirmed {
                 log::warn!(
-                    "The deposit utxo created via '{}' just vanished. Maybe a reorg is ongoing?",
+                    "The deposit utxo created via '{}' just vanished.",
                     &deposit_outpoint
                 );
             } else {
                 log::debug!(
-                    "The unconfirmed deposit utxo created via '{}' just vanished",
+                    "The unconfirmed deposit utxo created via '{}' just vanished.",
                     &deposit_outpoint
                 );
             }

test_reorged_deposit_status is failing:
test_misc.py::test_reorged_deposit_status
--------------------------------------- live log setup ---------------------------------------
INFO     root:bitcoind.py:101 BitcoinD started
FAILED                                                                                [100%]

========================================== FAILURES ==========================================
________________________________ test_reorged_deposit_status _________________________________

revault_network = <test_framework.revault_network.RevaultNetwork object at 0x7fe1cdf0d6d0>
bitcoind = <test_framework.bitcoind.BitcoinD object at 0x7fe1cdf0d690>

    @pytest.mark.skipif(not POSTGRES_IS_SETUP, reason="Needs Postgres for servers db")
    def test_reorged_deposit_status(revault_network, bitcoind):
        # A csv of 2 because bitcoind would discard updating the mempool if the reorg is >10
        # blocks long.
        revault_network.deploy(4, 2, csv=2)
        vault = revault_network.fund(0.14)
        revault_network.secure_vault(vault)
        deposit = f"{vault['txid']}:{vault['vout']}"

        # Reorg the deposit. This should not affect us as the transaction did not
        # shift
        bitcoind.simple_reorg(vault["blockheight"])
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_logs(
                [
                    "Detected reorg",
                    # 7 because simple_reorg() adds a block
                    f"Vault deposit '{deposit}' still has '7' confirmations",
                ]
            )

        # Now actually shift it (7 + 1 - 3 == 5)
        bitcoind.simple_reorg(vault["blockheight"], shift=3)
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_logs(
                [
                    "Detected reorg",
                    f"Vault deposit '{deposit}' ended up with '5' confirmations",
                    "Rescan of all vaults in db done.",
                ]
            )
            wait_for(lambda: len(w.rpc.listvaults(["unconfirmed"], [deposit])) == 1)

        # All presigned transactions must have been removed from the db,
        # if we get it confirmed again, it will re-create the pre-signed
        # transactions. But they are the very same than previously to the
        # signatures on the coordinator are still valid therefore the signature
        # fetcher thread will add them all and the vault will be back to 'secured'
        # again
        bitcoind.generate_block(1)
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_secured_vaults([deposit])

        # TODO: eventually try with tx malleation

        # Now do the same dance with the 'active' status
        revault_network.activate_vault(vault)
        bitcoind.simple_reorg(vault["blockheight"] + 3)
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_logs(
                [
                    "Detected reorg",
                    # 7 because simple_reorg() adds a block
                    f"Vault deposit '{deposit}' still has '7' confirmations",
                ]
            )
        bitcoind.simple_reorg(vault["blockheight"] + 3, shift=3)
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_logs(
                [
                    "Detected reorg",
                    f"Vault deposit '{deposit}' ended up with '5' confirmations",
                    "Rescan of all vaults in db done.",
                ]
            )
            wait_for(lambda: len(w.rpc.listvaults(["unconfirmed"], [deposit])) > 0)
        bitcoind.generate_block(1)
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_active_vaults([deposit])

        # If we are stopped during the reorg, we recover in the same way at startup
        revault_network.stop_wallets()
        bitcoind.simple_reorg(vault["blockheight"] + 3 + 3)
        revault_network.start_wallets()
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_logs(
                [
                    "Detected reorg",
                    # 7 because simple_reorg() adds a block
                    f"Vault deposit '{deposit}' still has '7' confirmations",
                ]
            )

        revault_network.stop_wallets()
        bitcoind.simple_reorg(vault["blockheight"] + 3 + 3, shift=3)
        revault_network.start_wallets()
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_logs(
                [
                    "Detected reorg",
                    f"Vault deposit '{deposit}' ended up with '5' confirmations",
                    "Rescan of all vaults in db done.",
                ]
            )
            wait_for(lambda: len(w.rpc.listvaults(["unconfirmed"], [deposit])) > 0)
        revault_network.stop_wallets()
        bitcoind.generate_block(1)
        revault_network.start_wallets()
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_active_vaults([deposit])

        # Now do the same dance with a spent vault

        # Keep track of the deposit transaction for later use as we'll reorg deeply enough that
        # bitcoind won't add the transactions back to mempool.
        deposit_tx = revault_network.stk_wallets[0].rpc.listonchaintransactions([deposit])[
            "onchain_transactions"
        ][0]["deposit"]["hex"]

        # If the deposit is not unconfirmed, it's fine
        revault_network.spend_vaults_anyhow([vault])
        for w in revault_network.man_wallets:
            assert len(w.rpc.listspendtxs()["spend_txs"]) == 1
        bitcoind.simple_reorg(vault["blockheight"] + 3 + 3 + 3)
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_logs(
                [
                    "Detected reorg",
                    f"Vault deposit '{deposit}' still has .* confirmations",
                    "Rescan of all vaults in db done.",
                ]
            )

        # If it is then we'll mark it as spending since the Unvault transaction is
        # still valid and in the mempool, and bitcoind's wallet considers the Spend
        # transaction to still be as well (spoiler: it's not).
        bitcoind.simple_reorg(vault["blockheight"] + 3 + 3 + 3, shift=-1)
        for w in revault_network.stk_wallets + revault_network.man_wallets:
            w.wait_for_logs(
                [
                    "Detected reorg",
                    f"Vault deposit '{deposit}' ended up without confirmation",
                    "Rescan of all vaults in db done.",
                ]
            )
            wait_for(lambda: len(w.rpc.listvaults(["spending"])["vaults"]) == 1)

        # Now the same dance with a canceled vault

        # Re-confirm the vault, get it active, then unvault and cancel it.
        bitcoind.rpc.sendrawtransaction(deposit_tx)
        bitcoind.generate_block(1, wait_for_mempool=2)
        vault = revault_network.stk_wallets[0].rpc.listvaults(
            # NB: 'spending' because we reuse a vault that was previously spent!
            ["spending"]
        )["vaults"][0]
>       revault_network.cancel_vault(vault)

test_misc.py:819:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_framework/revault_network.py:465: in cancel_vault
    lambda: len(w.rpc.listvaults(["canceling"], [deposit])["vaults"]) == 1
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

success = <function RevaultNetwork.cancel_vault.<locals>.<lambda> at 0x7fe1a45fedd0>
timeout = 60

    def wait_for(success, timeout=TIMEOUT):
        start_time = time.time()
        interval = 0.25
        while not success() and time.time() < start_time + timeout:
            time.sleep(interval)
            interval *= 2
            if interval > 5:
                interval = 5
        if time.time() > start_time + timeout:
>           raise ValueError("Error waiting for {}", success)
E           ValueError: ('Error waiting for {}', <function RevaultNetwork.cancel_vault.<locals>.<lambda> at 0x7fe1a45fedd0>)

test_framework/utils.py:44: ValueError
----------------------------------- Captured stdout setup ------------------------------------
Running tests in /tmp/revaultd-tests-7pf52nyg
------------------------------------- Captured log setup -------------------------------------
INFO     root:bitcoind.py:101 BitcoinD started
---------------------------------- Captured stdout teardown ----------------------------------
Test failed, leaving directory '/tmp/revaultd-tests-7pf52nyg/test_reorged_deposit_status_1' intact
Leaving base dir '/tmp/revaultd-tests-7pf52nyg' as it still contains ['test_reorged_deposit_status_1']

test_reorged_deposit_status is failing:

That's the point. https://github.com/revault/revaultd/pull/144#issuecomment-815019490

ACK 932af70a689a2f1194975af3aa874be66bfd2208

Arg i didn't press enter:
ACK  932af70


API View for .NET should not show AsyncIteratorStateMachine attributes

Today, APIView shows AsyncIteratorStateMachine attributes on methods returning async enumerables. These attributes are irrelevant plumbing. We should not show them.

@KrzysztofCwalina : Can you please share more info on expected result here? Are you asking to hide methods with attribute AsyncIteratorStateMachine which in this case is GetAsyncEnumerator

No, just hide the attribute.


Id class entity views

Description

Related Issue

Motivation and Context

By the way, for now you can probably best put getIdentifierPathExpressionValueMapping as a static method in the JpaMetamodelUtil.


Example with hooks not working

Following the example using hooks I am getting the follow error
TypeError: showConfirm is not a function
My IDE is also complaining TS2721: Cannot invoke an object which is possibly 'null'

@AshotN as mounting the modal/alert is an async task that is the reason initially value of showConfirm will be null, and once it is mounted it will have a function as the value.


LTS version

Do you plan a LTS version?

@hypery2k Hi, I will add it! Give me a while :)

Thanks ;)

@hypery2k Just pushed update that adds a new tag lts. Just give it a while, please. It needs to be built. You can see the progress here: https://hub.docker.com/r/shimmi/jenkins/builds/


Release v1.112.0 - release → staging

Description 📝
Changelog
[2024-02-12] - v1.112.0
Fixed:

EditableText interaction styling (#10132)
Unit tests Button enabled assertions (#10142)
Error when enabling backups for Linodes in regions with $0 pricing (#10153)
Allow IPv6 ranges transfers (#10156)
Error notices for $0 regions in LKE Resize and Add Node Pools drawers (#10157)
Error in Enable All Backups drawer when one or more Linode is in a $0 region (#10161)
Display $0.00 prices in Linode Migration dialog (#10166)

Tech Stories:

DC Get Well - Cleanup/Remove feature flag logic (#10146)
Clean up regionDropdown feature flag (#10148)
Update react-router-dom in preparation for React 18 (#10154)
Remove Enzyme (#10160)
Update launchdarkly-react-client-sdk (#10165)

Tests:

Add integration test coverage for Account Login History (#10125)
Add test to check proxy user disabled username/email field (#10139)
Add Cypress tests for OBJ Multicluster access key operations (#10144)
Fix billing contact Cypress test by narrowing element selection scope (#10150)

Upcoming Features:

Create Placement Groups Select component (#10100)
Cleanup files to use profile to get user_type (#10102)
"Save" button in Edit Access Key drawer disabled unless field values are changed (#10118)
Add Placement Group Linodes List (#10123)
Improve restricted access Login History experience for child and restricted users (#10125)
Add AssignLinodesToPlacementGroup drawer (#10140)

Closing this PR, Since we are only releasing VPC IPV4.


Improve MeshletMesh::from_mesh performance further

This change updates meshopt-rs to 0.3 to take advantage of the newly added sparse simplification mode: by default, simplifier assumes that the entire mesh is simplified and runs a set of calculations that are O(vertex count), but in our case we simplify many small mesh subsets which is inefficient.
Sparse mode instead assumes that the simplified subset is only using a portion of the vertex buffer, and optimizes accordingly. This changes the meaning of the error (as it becomes relative to the subset, in our case a meshlet group); to ensure consistent error selection, we also use the ErrorAbsolute mode which allows us to operate in mesh coordinate space.
Additionally, meshopt 0.3 runs optimizeMeshlet automatically as part of build_meshlets so we no longer need to call it ourselves.
This reduces the time to build meshlet representation for Stanford Bunny mesh from ~1.65s to ~0.45s (3.7x) in optimized builds.

Here's a perf capture of from_mesh after this change (note, all percentages are "absolute" so they add up to ~10%, not ~100%...):

The cost to partition meshlets is a little large (it's slower than triangle->meshlet partitioning despite having much less data to process - then again it does it optimally), but overall with this change the different parts of the process are relatively balanced.

I'm on board with that. Can you tag all of them, and then send a list over to @mockersf to cherrypick?

Fantastic, thanks!


Layout is entirely broken, what am I doing wrong?

Version

3.4.0
Development Environment

Ubuntu 18.04
Nuxt.js v2.3.4
Vuetify v1.3.15
Current Behavior

I loaded the editor into my Nuxt.js application but the layout is entirely broken.

My initialization code with a hardcoded image for testing
// Write example code
import Vue from 'vue'
import whiteTheme from 'tui-image-editor/examples/js/theme/white-theme'
var ImageEditor = require('tui-image-editor');

var instance = new ImageEditor(document.querySelector('#tui-image-editor'), {
     includeUI: {
         loadImage: {
             path: 'https://images.pexels.com/photos/814499/pexels-photo-814499.jpeg?auto=compress&cs=tinysrgb&dpr=1&fit=crop&h=1200&w=1200',
             name: 'SampleImage'
         },
         theme: whiteTheme,
         initMenu: 'filter',
         menuBarPosition: 'bottom'
     },
    cssMaxWidth: 700,
    cssMaxHeight: 500,
    selectionStyle: {
        cornerSize: 20,
        rotatingPointOffset: 70
    }
});

Vue.prototype.$imageEditor = instance

Expected Behavior

A layout working like it is shown in the docs

For Nuxtjs import as a Global CSS in nuxt.config.js
  /*
   ** Global CSS
   */
  css: [
    'tui-image-editor/dist/tui-image-editor.css',
  ],


The web3.utils.datastructures.AttributeDict should offer an API for recursive converstion to attribute dicts.

What was wrong?
>>> x = AttributeDict({'y': {'z': 3}})
>>> x.y
{'z': 3}
>>> x.y.z
AttributeError(...)

This behavior is correct because we don't want to magically convert everything because explicit is better than implicit, but, it would be good to have an API to allow recursive attribute dict creation.
How can it be fixed?
New api AttributeDict.recursive(value) which recursively walks down into the value and converts things to attribute dicts.
This should probably be done in two pieces, a classmethod on the AttributeDict object and a stand-alone function that does the heavy lifting.
import collections

from eth_utils import (
    is_dict,
    is_list_like,
)

def wrap_dicts_with_attrdict(value, _type):
    if isinstance(value, _type):
        return value
    elif is_dict(value):
        return _type({
            key: wrap_dicts_with_attrdict(item, _type)
            for key, item
            in value.items()
        })
    elif is_list_like(value) or isinstance(value, collections.Set):
        return type(value)(
            wrap_dicts_with_attrdict(item, _type) for item in value
        )
    else:
        return value

Then in the base classReadableAttributeDict class, add a method that looks like this.
class ReadableAttributeDict(...):
    @classmethod
    def recursive(cls, value):
        return wrap_dicts_with_attrdict(value, cls)

You will also need to write tests for this which which can be done using the simple example from above with a single nested dictionary as a starting point, and then expanding to be sure that values with nested lists, tuples, sets, strings, and integers are all converted as expected.

There shouldn't be any circular references in normal operation, but I'll add a test for that too


Set Up Integration Suite Trial

Tutorial URL: https://developers.sap.com/tutorials/cp-starter-isuite-onboard-subscribe.html
In step 5.2 we are not getting the following roles as mentioned in the tutorial:

APIPortal.Administrator
APIManagement.Selfservice.Administrator
trial-content-developer

Expected:

Actual:

Please tell us what to do as we are not able to proceed further.
Note: This issue is faced in EU and US landscape.

Hi @AkankshaKullu ,
With reference to your concern, please check that you would have activated the relevant capabilities.
Regards,
VIkram Kulkarni

Hi @Vikramkulkarni01
Yes,got all the roles.
We just followed the tutorial and in step 4.3 it was just showing 2 checkbox so selected those. If we select all the checkboxes for capabilities then we will be able to get the required roles as mentioned in the document.

Hi @AkankshaKullu,
Thanks for the confirmation.
Regards,
Vikram Kulkarni

@Vikramkulkarni01 Can I close this one?

hi @MichaelCzcz,
yes, please close this.


Version tracking implied match not picking up size or struct def

I have file 1 elf with full debug
File 2 hex with nothing
When using version tracking I often get implied matches (which are 100% correct) however the source file will be size 24 and a struct and the destination file size 1 with a length delta of 23. How can I get apply markup to copy the data type and struct size? Or better yet determine it is the same type of struct?
Same goes for the above but the implied match is in ram but with no ram dump available.

Implied matches are created when function matches are applied from other correlators and two items referenced by those functions also appear to be matches based on their locations/usage in the two matching functions. It is up to the user to corroborate whether the implied matches are good matches or not, either by inspection by eye  or by running other correlators (in your case if the structures are defined in program memory you could try running the exact or similar data correlators to see if they match).  If you determine they are matches, you can choose to accept and apply the implied match which should apply the data type to the other program. Make sure you are using the "Apply Markup" (big green checkmark) action instead of only the "Apply Match" action. The first will apply the match and the markup, the second will only apply the match and (assuming the default settings are used) will apply a matching label only. If this isn't happening, it could be there is conflicting data in the other program and it won't overwrite it by default. You can change the apply data options using the "Adjust Apply Markup Settings for Applying Matches" icon (smaller green checkmark in black box.)


Lesson 7 : Parser error

Hello everyone, this is in reference to the brownie run scripts/deployLottery.py @7:34:25. When I tried to run it the solc is throwing me the following error. I tried to edit the source files by changing ^ to >= which resulted in even more errors.
My remote version for compile is 0.6.6. I've tried to get past it by looking here and there on some websites but this doesn't seem to go away. Any help is appreciated. Thank you!
Brownie v1.17.2 - Python development framework for Ethereum

Compiling contracts...
  Solc version: 0.6.6
  Optimizer: Enabled  Runs: 200
  EVM Version: Istanbul
CompilerError: solc returned the following errors:

/home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.4/ERC677Token.sol:1:1: ParserError: Source file requires different compiler version (current compiler is 0.6.6+commit.6c089d02.Linux.g++ - note that nightly builds are considered to be strictly less than the released version
pragma solidity ^0.4.11;
^----------------------^

/home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.4/vendor/StandardToken.sol:1:1: ParserError: Source file requires different compiler version (current compiler is 0.6.6+commit.6c089d02.Linux.g++ - note that nightly builds are considered to be strictly less than the released version
pragma solidity ^0.4.11;

Hello @bot-eth-dev give a check to your brownie config.yaml and check which version are you using, use the 1.1.1. And also delete the .browniefolder on your home, and compile again.

In the config file I have
dependencies:
  -<EMAIL_ADDRESS>
compiler:
  solc:
    remappings:
      - '<EMAIL_ADDRESS>
And in the Lottery.json I found the compiler details
"compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.6.6+commit.6c089d02"
  },

And the remappings are
{
    "python.defaultInterpreterPath": "/bin/python",
    "solidity.compileUsingRemoteVersion": "v0.6.6+commit.6c089d02",
    "editor.formatOnSave": true,
    "python.formatting.provider": "black",
    "bracketPairColorizer.depreciation-notice": false,
    "solidity.remappings": [
        "<EMAIL_ADDRESS>        "<EMAIL_ADDRESS>    ]
}

After deleting the .brownie I am unable to do anything cause it is in the remappings. what do I do now

So, What I have learned is my vs code was unable to load directly from GitHub so I downloaded<EMAIL_ADDRESS>locally in the past. How do I go about that ?

UPDATE *
The files are importing successfully but I am still getting a lot of errors

Brownie v1.17.2 - Python development framework for Ethereum

Compiling contracts...
  Solc version: 0.8.11
  Optimizer: Enabled  Runs: 200
  EVM Version: Istanbul
CompilerError: solc returned the following errors:

ParserError: Source file requires different compiler version (current compiler is 0.8.11+commit.d7f03943.Linux.g++) - note that nightly builds are considered to be strictly less than the released version
 --> /home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.6/VRFConsumerBase.sol:2:1:
  |
2 | pragma solidity ^0.6.0;
  | ^^^^^^^^^^^^^^^^^^^^^^^

ParserError: Source file requires different compiler version (current compiler is 0.8.11+commit.d7f03943.Linux.g++) - note that nightly builds are considered to be strictly less than the released version
 --> /home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.4/ERC677Token.sol:1:1:
  |
1 | pragma solidity ^0.4.11;
  | ^^^^^^^^^^^^^^^^^^^^^^^^

ParserError: Source file requires different compiler version (current compiler is 0.8.11+commit.d7f03943.Linux.g++) - note that nightly builds are considered to be strictly less than the released version
 --> /home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.4/vendor/StandardToken.sol:1:1:
  |
1 | pragma solidity ^0.4.11;
  | ^^^^^^^^^^^^^^^^^^^^^^^^

ParserError: Source file requires different compiler version (current compiler is 0.8.11+commit.d7f03943.Linux.g++) - note that nightly builds are considered to be strictly less than the released version
 --> /home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.6/interfaces/LinkTokenInterface.sol:2:1:
  |
2 | pragma solidity ^0.6.0;
  | ^^^^^^^^^^^^^^^^^^^^^^^

I have set the compiler to load the remote version and I've set it to v0.6.6 But it is still showing these errors and even the current compiler is showing 0.8.11?

Ok let's try something here:

On vscode change both, global and workspace compiler versions to 0.6.0.
Also on your contract, be sure the import has the v0.6 identifier.
just for curiosity, which vscode extension are you using? (should be the one by Juan Blanco)

hello @cromewar
1)After doing what you said at least 3 times again and again to make sure it was set to 0.6.0
brownie compile

gave me
Brownie v1.17.2 - Python development framework for Ethereum

New compatible solc version available: 0.6.6
Compiling contracts...
  Solc version: 0.6.6
  Optimizer: Enabled  Runs: 200
  EVM Version: Istanbul
CompilerError: solc returned the following errors:

/home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.4/ERC677Token.sol:1:1: ParserError: Source file requires different compiler version (current compiler is 0.6.6+commit.6c089d02.Linux.g++ - note that nightly builds are considered to be strictly less than the released version
pragma solidity ^0.4.11;
^----------------------^

/home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.4/vendor/StandardToken.sol:1:1: ParserError: Source file requires different compiler version (current compiler is 0.6.6+commit.6c089d02.Linux.g++ - note that nightly builds are considered to be strictly less than the released version
pragma solidity ^0.4.11;
^----------------------^

I have

//SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>

in my Lottery.sol
3) I am using v0.0.136 Solidity by Juan Blanco

@PatrickAlphaC any idea about this?

@cromewar I did manage to get it to v0.6.0 but now I have
Brownie v1.17.2 - Python development framework for Ethereum

Compiling contracts...
  Solc version: 0.6.0
  Optimizer: Enabled  Runs: 200
  EVM Version: Istanbul
CompilerError: solc returned the following errors:

/home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.6/VRFConsumerBase.sol:176:22: ParserError: Expected identifier but got reserved keyword 'immutable'
  LinkTokenInterface immutable internal LINK;
                     ^-------^

/home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.4/ERC677Token.sol:1:1: ParserError: Source file requires different compiler version (current compiler is 0.6.0+commit.26b70077.Linux.g++ - note that nightly builds are considered to be strictly less than the released version
pragma solidity ^0.4.11;
^----------------------^

/home/botvenom/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.4/vendor/StandardToken.sol:1:1: ParserError: Source file requires different compiler version (current compiler is 0.6.0+commit.26b70077.Linux.g++ - note that nightly builds are considered to be strictly less than the released version
pragma solidity ^0.4.11;
^----------------------^

this error xD

@cromewar Do you think  if I degrade all the pragma in my lottery and test contracts to 0.4.11 it might run?

@cromewar
I copy pasted my lottery.sol file on remix ide and set the compiler to v0.6.0 and there too the following error shows up
@chainlink/contracts/src/v0.6/VRFConsumerBase.sol:176:22: ParserError: Expected identifier but got reserved keyword 'immutable'
  LinkTokenInterface immutable internal LINK;
                     ^-------^

It shouldn't be as that, because the compiler should use anything above that version, let me make some research on this I'll try to reproduce the error.

@cromewar thank you for helping me out :)

Well I wasn't able to reproduce the error, I have a question tough.
"What I have learned is my vs code was unable to load directly from GitHub" what you refer to this? adding the remappings to your brownie-config.yaml should be enough to get it done.
Just for curiosity, could you try cloning the course repo lesson and try to compile it?

In the tutorial at first even after doing the remappings I still couldn't get the import to work and I searched here and there where I stumbled upon brownie pm install so it manually downloaded the chainlink v1.1.1 and configured in the settings.json to remap the @chainlink to the directory.

Well, I downloaded the Lesson 7 repo and ran it. Works smoothly with no errors. I have started to go through the lesson again anyways. I must have messed up somewhere during the lesson, hence the errors.  Thank you so much for cooperating @cromewar. Best Regards, Bot.

Don't worry about it, I really hope you to find the error now your are taking the lesson again.

I have the exact same issue, and I have been trying to find an answer. I've restarted the lesson all over again to make sure I didn't miss anything and I eventually got to this same error when I enter 'brownie compile' or 'brownie run scripts/deploy_lottery.py' . my error code shows:
'Brownie v1.16.4 - Python development framework for Ethereum
Compiling contracts...
Solc version: 0.6.0
Optimizer: Enabled  Runs: 200
EVM Version: Istanbul
CompilerError: solc returned the following errors:
/Users/mrandmrsbush/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.6/VRFConsumerBase.sol:186:33: ParserError: Expected identifier but got reserved keyword 'immutable'
LinkTokenInterface internal immutable LINK;
^---------^
'
helpful_scripts.py
`from brownie import (
network,
config,
accounts,
MockV3Aggregator,
VRFCoordinatorMock,
LinkToken,
Contract,
)
FORKED_LOCAL_ENVIRONMENTS = ["mainnet-fork"]
LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["development", "ganache-cli"]
def get_account(index=None, id=None):
if index:
return accounts[index]
if id:
return accounts.load(id)
if (
network.show_active() in LOCAL_BLOCKCHAIN_ENVIRONMENTS
or network.show_active() in FORKED_LOCAL_ENVIRONMENTS
):
return accounts[0]
return accounts.add(config["wallets"]["from_key"])
contract_to_mock = {
"eth_usd_price_feed": MockV3Aggregator,
"vrf_coordinator": VRFCoordinatorMock,
"link_token": LinkToken,
}
def get_contract(contract_name):
"""This function will grab the contact addresses from the brownie config if
defined, otherwise it will deploy a mock version of that contract and return
that mock contract.
    Args:
        contract_name (string)

    Returns:
        brownie.network.contract.ProjectContract: The most recently deployed
        version of this contract.
"""
contract_type = contract_to_mock[contract_name]
if network.show_active() in LOCAL_BLOCKCHAIN_ENVIRONMENTS:
    if len(contract_type) <= 0:
        deploy_mocks()
    contract = contract_type[-1]
else:
    contract_address = config["networks"][network.show_active()][contract_name]
    contract = Contract.from_abi(
        contract_type._name, contract_address, contract_type.abi
    )
return contract

DECIMALS = 8
INITIAL_VALUE =<PHONE_NUMBER>00
def deploy_mocks(decimals=DECIMALS, initial_value=INITIAL_VALUE):
account = get_account()
MockV3Aggregator.deploy(decimals, initial_value, {"from": account})
link_token = LinkToken.deploy({"from": account})
VRFCoordinatorMock.deploy(link_token.address, {"from": account})
print("Mocks deployed!")
`
brownie-config.yaml
'compiler:
solc:
version: 0.6.0
dependencies:

<EMAIL_ADDRESS><EMAIL_ADDRESS>compiler:
solc:
remappings:

'<EMAIL_ADDRESS>'<EMAIL_ADDRESS>networks:
default: development
development:
keyhash: '0x2ed0feb3e7fd2022120aa84fab1945545a9f2ffc9076fd6156fa96eaff4c1311'
fee:<PHONE_NUMBER>00000000
rinkeby:
vrf_coordinator: '0xb3dCcb4Cf7a26f6cf6B120Cf5A73875B7BBc655B'
eth_usd_price_feed: '0x8A753747A1Fa494EC906cE90E9f37563A8AF630e'
link_token: '0x01BE23585060835E02B77ef475b0Cc51aA1e0709'
keyhash: '0x2ed0feb3e7fd2022120aa84fab1945545a9f2ffc9076fd6156fa96eaff4c1311'
fee:<PHONE_NUMBER>00000000
verify: True
mainnet-fork:
eth_usd_price_feed: '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419'
wallets:
from_key: ${PRIVATE_KEY}
'

deploy_lottery.py
'from scripts.helpful_scripts import get_account, get_contract
from brownie import Lottery, network, config
def deploy_lottery():
account = get_account()
Lottery.deploy(
get_contract("eth_usd_price_feed").address,
get_contract("vrf_coordinator").address,
get_contract("link_token").address,
config["networks"][network.show_active()]["fee"],
config["networks"][network.show_active()]["keyhash"],
{"from": account},
publish_source=config["networks"][network.show_active()].get("verify", False),
)
print("Deployed lottery!")
def main():
deploy_lottery()
'
.env
'export PRIVATE_KEY=
export WEB3_INFURA_PROJECT_ID=
export ETHERSCAN_TOKEN=
'
ultimately I'm trying to test the contract on a development ganache-cli. The problem is the 'immutable' identifier in the VRFConsumerBase.sol source code. I would like to continue the course, and I do not want to redo all the work I've done so far for a third time. Thank you for the guidance!

It's likely just an issue with the package versions you're using... Could you try the 0.3.1 version of chainlink-brownie-contracts?


Fix: require complete pincode reentry on second pin not matching

Description
A follow up to #2593. After merging into main even though the displays an error text when the pins don't match test was passing it became apparent that the incorrect behavior was occurring; this change largely reverts https://github.com/valora-inc/wallet/pull/2593/commits/5e4ea9fb550d0d31114d3918bd1ee4a6a77be679 and uses ref instead. After a user enters a non matching second pin The PINs didn't match error should display and users should have to reenter a new first and second pin.
Other changes

Update Tests in https://github.com/valora-inc/wallet/pull/2608/commits/13dc685d0c0ebcfd45ce14388a541e4775dd1160

Tested
Tested locally on iOS
How others should test
Perquisites: When creating a pin or changing a pin

Enter the first pin.
Enter a non-matching second pin.
Observe error message should be 'The PINs didn't match'
Should be redirected to the first step if second pin doesn't match.

Related issues
N/A
Backwards compatibility
Yes

Closing in favor of https://github.com/valora-inc/wallet/pull/2629.


Unexpected tag  inside pages

Pagespeed currend stable i386
On a provisioning system, echoing an XML file, after mod_pagespeed was activated i have a tag  inserted after  head:
<?xml version="1.0" encoding="utf-8" ?><head/><settings>
This caused invalidation of XML file and unexpected errors in system. Disabling mod_pagespeed solve the issue.

@michelep what do the response headers look like for the xml response? Can you post them here?

Also: what does the config file-look like?  For example, in our default configuration template, we have:
`    # Direct Apache to send all HTML output to the mod_pagespeed
# output handler.
AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html
# If you want mod_pagespeed process XHTML as well, please uncomment this
# line.
# AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER application/xhtml+xml

`
So mod_pagespeed should not be running on XML at all, only HTML and maybe XHTML.

Head with mod_pagespeed enabled:
<?xml version="1.0" encoding="utf-8" ?><head/><settings>
Head without mod_pagespeed:
<?xml version="1.0" encoding="utf-8" ?><settings>
However i'll try with jmaranz suggestions to config file, disabling module for xml documents.

I think Otto was asking for the HTTP response-headers, rather than the first few bytes of HTML.
For example, you can type:
wget -S http://yoursite

Here are:
HTTP/1.1 200 OK   Date: Tue, 27 Sep 2016 13:41:39 GMT   Server: Apache/2.4.10 (Debian)   Expires: Thu, 19 Nov 1981 08:52:00 GMT   Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0   Pragma: no-cache   Vary: Accept-Encoding   Content-Length: 4565   Content-Type: text/html; charset=UTF-8   Set-Cookie: php-console-server=5; path=/   Set-Cookie: PHPSESSID=xxxxxxxxxxxxxxxxxx; path=/   Keep-Alive: timeout=5, max=100   Connection: Keep-Alive

You might want to take a quick look at your Apache configuration, and set up an XML content-type when serving XML.  That way PageSpeed will know not to treat it as XML.

Is this a real xml file, processed by something that's expecting xml?  If so, serving it with the proper xml content type as @jmarantz says is the right way to do it.
The caution I have, is that if this is actually xhtml intended to be processed by a browser, switching from an html content type to an xml one can turn minor xml violations that the browser would quietly ignore into page load blocking errors.

@michelep : did adjusting the content-type served for your XML files solve the problem?

@jmarantz yes, and works perfectly !

@jeffkaufman Same problem for me...
This morning i stayed 4 hours in front of stackoverflow to find WHY my wp_ajax actions (ajax calls on Wordpress on url wp-admin/admin-ajax.php) had this strange  tag on the beginning of the html response... then i remembered in production i installed the Core Rules of pagespeed, and well... i disabled the add_head filter and all returned to work good.
I believe the section "Risks" in here https://developers.google.com/speed/pagespeed/module/filter-head-add needs to be updated :D
I'm wondering if i can filter all these requests in pagespeed.conf and disable mod_pagespeed add_head only there.

I don't think disabling add_head is the best way to go, because other filters rely on that.  Just make sure you are sending an XML content-type when you are sending XML, rather than using content-type:text/html for your XML.

Eh?
Maybe @jmarantz you didn't read what i wrote... i had the same problem with AJAX, not xml in specific... i would need to remove this filter on all wp-admin/admin-ajax.php .

I see.  You are not the first to find this problem.  Can you do a workaround of
ModPagespeedDisallow /wp-admin/
At one point I think we had that disabled in our default settings but felt it was no longer needed, and now I think maybe it is.

A possible fix for this problem in the code is to disable all structure-modifying filters in an ajax response, but allow the filters that modify URLs and minify css/js/html.
Currently we have this (in rewrite_query.cc):
  if (request_headers != NULL && request_headers->IsXmlHttpRequest()) {
    if (options_.get() == NULL) {
      options_.reset(factory->NewRewriteOptionsForQuery());
    }
    options_->DisableFiltersRequiringScriptExecution();
    options_->DisableFilter(RewriteOptions::kPrioritizeCriticalCss);
  }

We could add another broad disable to that if-clause.

@jmarantz i like the first solution... i can try that, but i suggest you to go with a new version update with that rule set on it... in the end wp-admin (except for ajax requests) is entirely the Wordpress backend, and i don't think there's any need to have js and css and images optimized right there...
i cannot ensure you about the correctness of the second fix, as i should read the source code to understand what you've done :)

I agree.  I'm definitely going to put the 'Disallow' back.


Lilbussygirl Fansly Leaked - New Lilbussygirl Leaks OF and Fansly Files! (efb74925)

57 minutes ago - Lilbussygirl Leaked - Lilbussygirl Leaks Onlyfans and Fansly Files! (083d77db)
👉👉👉 CLICK # HERE
lilbussygirl Leaked Viral Video on Social media, lilbussygirl Leaked Video 2024, lilbussygirl Leaks 2024, lilbussygirl Leak 2024
Lilbussygirl's recent video has gone viral across social media platforms, captivating audiences and sparking widespread discussion. The young digital creator has gained significant attention for her engaging content, particularly her latest Spiderman-themed video, which has taken the internet by storm. Viewers are eager to find out where they can watch the full video, with many turning to platforms like Instagram, Twitter (X), and Discord for access.
As the buzz around Lilbussygirl continues to grow, fans are sharing their excitement and reactions online. The viral nature of her video highlights the power of social media in propelling creators into the spotlight. With her unique style and creativity, Katherinne has quickly become a notable figure in the digital landscape, leaving many curious about her future projects and content.
👉👉👉 Lilbussygirl New FILES - CLICK # HERE

您好，邮件已收到，尽快给您回复。


Ability to set type for inline edit

Ex. if inline edit should only support numbers, email etc.

See inline edit property for more info in the wiki


Remove composer.lock

You should not commit your composer.lock file to the repository.

Brilliant, I didn't know this - thank you Mark!

👍

I've been Googling it a little, why is it good to remove the composer.lock for packages? When we work on big projects (e.g a Laravel app) we will include the composer.lock - is there a difference when it comes to composer packages?

Yes, when you are working on project you want to ensure you are installing the exact same dependencies to ensure the app is working as you would expect.
For packages it is more up the user land. Still you should take care of the composer.json file. That will tell another developer what you are requiring for your package to work.


Autocrafting with Fluids on SMP hanging indefinitely

Issue description:
Autocrafting with Fluids hanging on Multiplayer server
What happens:
Refined Storage attempts to create, recognizes it has everything it needs, but crafting is 'in progress' indefinitely
What you expected to happen:
crafting of items
Steps to reproduce:

set up Crafter with recipe that includes fluid
attempt to use this recipe to craft with

Issue #670 is resolved, in that it no longer consumes all fluids, however it still won't actually craft. It seems to recognize that it has everything it needs, including bucket in network, and will recognize when it needs a bucket in the network to process, however in the Crafting Monitor, it shows a status of 'crafting' indefinitely, over a period of ten minutes. This was tested with Treated Wood from Immersive Engineering.
This is only appearing on multiplayer, and does not occur in SSP.
...
Version (Make sure you are on the latest version before reporting):

Minecraft: 1.10.2
Forge: 2151
Refined Storage:1.2.5

Does this issue occur on a server? [yes/no] Yes (only)

Might be related to #680

In that bug, the item is being crafted, but it doesn't detect that it is. In this bug, the item is simply not being crafted. Might be related, but two different issues.
Also have had some strangeness in autocrafting of sticks when multiple wood types are present in the system and oredict is set to true on the recipe, where it will attempt and hang and not create sticks. This again only happens SMP, in SSP it works just fine. I'm wondering if the two issues aren't related, because both issues involve oredict and multiple types of wood present in the system and autocrafting is hanging in both cases.

Try and update RS, that multiple wood type was fixed some time ago, on mobile so can't find the issue or commit right now

As of 1.2.8 this bug still persists

This appears to be an OreDict problem. Recipe in Crafter is set to OreDict, but uses Oak Wood Planks in the recipe. When Oak Wood Planks are present in the system, it crafts without issue. When they are not, even when there are nearly 2k jungle wood planks in the system, it will hang indefinitely.
This is as of Refined Storage 1.2.8 for SMP

Could you share some screenshots of your setup/patterns?

I'll do you one better. Have a video https://youtu.be/cAxUV51xg_M showing
my setup, patterns, demonstrating the bug in question with both treated
wood and with sticks, and also a couple of minor things to do eventually.
Roughly 10 minute video.
On Fri, Dec 2, 2016 at 5:11 AM, way2muchnoise<EMAIL_ADDRESS>wrote:

Could you share some screenshots of your setup/patterns?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/raoulvdberge/refinedstorage/issues/683#issuecomment-264431221,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEgbk_9W8ljUkfUiu1qWFvGrWEE5Kx0tks5rD_zZgaJpZM4K8_GR
.

I just tried it on a server in my dev env with acania wood like in the video and it all works. I can't for the life of me reproduce it :/

Odd.
Here's what I have done in the meantime. I've removed the recipes, and turned off oredict. Now it properly requests oak log to make planks to make sticks and treated wood, no problem.
Not sure what is happening here or why, but I'll use this workaround until the reason can be found.

Is this still an issue with later versions?

@ShneekeyTheLost have you had a change to test with a later build?


Sign-in with custom token

Feature request
Is your feature request related to a problem? Please describe.
To support special cases for authentification like signing in by scanning a qr code on the web (e.g. Whatsapp Web) it should be possible to create a custom Token for authentification serverside using the gotrue-js package.
This is currently not possible to implement in supabase using the api directly.
Describe the solution you'd like
A function in the gotrueapi like .api.createCustomToken(userId: string, adittionalClaims): Promise<string>. On the client side there would be
a function like .auth.signInWithCustomToken(customToken:string): Promise<session>.
AdditionalClaims would contain things like an expiration time for the token.
This is a feature I really liked in Firebase Auth (see Additional context).
Describe alternatives you've considered
This might be able to do by signing your own refreshToken or accessToken, but I think it would be better to have it directly implemented into the Api.
Additional context
The Firebase Auth Docs: https://firebase.google.com/docs/auth/admin/create-custom-tokens

Transferred to gotrue and changed title to reflect the feature request better. Adding to our backlog too.

This would definitely make life much easier for anyone dealing with multiple auth systems.

Any updates? This will definitely solve a lot of problems when dealing with many types of auth system and also simplify and standardize integration with other providers.

As I'm switching to Supabase, we have users in an existing authentication provider. Until we deprecate that old system, I want to authenticate my users to that system, and create an auth token for the supabase api for that user.
Something similar to this: https://www.mongodb.com/docs/atlas/app-services/authentication/custom-function/
Hoping something like this could solve my problem.