@underpostnet/cyberia 3.3.77 → 3.4.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/.env.example +1 -0
- package/.github/workflows/coverall.cyberia.ci.yml +12 -3
- package/.github/workflows/cyberia-client.cd.yml +2 -1
- package/.github/workflows/cyberia-server.cd.yml +2 -1
- package/.github/workflows/docker-image.cyberia-client.ci.yml +1 -1
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +1 -1
- package/.github/workflows/docker-image.cyberia-server.ci.yml +1 -1
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +1 -1
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +1 -1
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +1 -1
- package/.github/workflows/engine-cyberia.ci.yml +6 -0
- package/.github/workflows/ghpkg.ci.yml +19 -2
- package/.github/workflows/gitlab.ci.yml +8 -6
- package/.github/workflows/hardhat.ci.yml +4 -1
- package/.github/workflows/npmpkg.ci.yml +9 -5
- package/.github/workflows/publish.ci.yml +21 -12
- package/.github/workflows/publish.cyberia.ci.yml +25 -14
- package/.github/workflows/pwa-microservices-template-page.cd.yml +4 -2
- package/CHANGELOG.md +75 -140
- package/CLI-HELP.md +28 -1
- package/Dockerfile +1 -1
- package/Dockerfile.dev +1 -1
- package/Dockerfile.test +1 -1
- package/README.md +1 -1
- package/bin/build.js +2 -4
- package/bin/cyberia.js +4 -4
- package/bin/index.js +4 -4
- package/compose.env +1 -0
- package/conf.js +1 -1042
- package/deploy/cyberia-client/deploy.sh +13 -11
- package/deploy/cyberia-server/deploy.sh +13 -11
- package/deploy/dd-cyberia/sync-deploy.sh +7 -28
- package/deploy/lib/config.sh +1 -1
- package/deploy/lib/github-actions-logging.sh +3 -2
- package/deploy/pwa-microservices-template/deploy.sh +7 -1
- package/deployment.yaml +1 -1
- package/docker-compose.yml +7 -7
- package/docs/coverage/cyberia/api/cyberia-instance/cyberia-fallback-capture.js.html +1 -1
- package/docs/coverage/cyberia/api/cyberia-instance/index.html +1 -1
- package/docs/coverage/cyberia/api/cyberia-server-defaults/cyberia-server-defaults.js.html +1 -1
- package/docs/coverage/cyberia/api/cyberia-server-defaults/index.html +1 -1
- package/docs/coverage/cyberia/api/object-layer/index.html +1 -1
- package/docs/coverage/cyberia/api/object-layer/object-layer.model.js.html +1 -1
- package/docs/coverage/cyberia/index.html +1 -1
- package/docs/coverage/cyberia/projects/cyberia/atlas-sprite-sheet-generator.js.html +1 -1
- package/docs/coverage/cyberia/projects/cyberia/index.html +1 -1
- package/docs/coverage/cyberia/projects/cyberia/instance-backup.js.html +1 -1
- package/docs/coverage/cyberia/projects/cyberia/instance-data.js.html +1 -1
- package/docs/coverage/cyberia/projects/cyberia/shape-generator.js.html +1 -1
- package/docs/coverage/cyberia/projects/cyberia/stat-balance.js.html +1 -1
- package/hardhat/package-lock.json +6 -6
- package/hardhat/package.json +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +1 -1
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +1 -1
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/package.json +19 -17
- package/scripts/test-monitor.sh +1 -1
- package/src/api/file/file.router.js +7 -1
- package/src/cli/baremetal.js +1 -1
- package/src/cli/docker-compose.js +1 -1
- package/src/cli/index.js +36 -0
- package/src/cli/kubectl.js +4 -3
- package/src/cli/release.js +2 -0
- package/src/cli/repository.js +7 -2
- package/src/cli/run.js +1 -1
- package/src/cli/secrets.js +393 -200
- package/src/cli/socketsecurity.js +260 -0
- package/src/client/components/core/CssCore.js +3 -0
- package/src/client/components/core/Modal.js +160 -36
- package/src/client/components/core/SearchBox.js +0 -1
- package/src/client/components/underpost/AppShellUnderpost.js +13 -1
- package/src/client/components/underpost/CssUnderpost.js +15 -2
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +8 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +1 -1
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +54 -56
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +30 -29
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +54 -25
- package/src/client/ssr/head/Css.js +12 -10
- package/src/client/ssr/views/Cyberia404.js +6 -10
- package/src/client/ssr/views/NotFound.js +75 -0
- package/src/client-builder/client-bundle.js +2 -2
- package/src/index.js +13 -1
- package/src/runtime/engine-cyberia/Dockerfile +1 -1
- package/src/runtime/engine-cyberia/Dockerfile.dev +1 -1
- package/src/runtime/engine-cyberia/Dockerfile.test +1 -1
- package/src/runtime/engine-cyberia/compose.env +1 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +7 -7
- package/src/server/build/catalog.js +1 -0
- package/src/server/build/execution.js +19 -5
- package/src/server/build/package.js +166 -3
- package/src/server/build/testing.js +2 -1
- package/src/server/runtime/conf.js +21 -0
- package/src/server/runtime/config-scope.js +2 -0
- package/src/server/runtime/process.js +4 -3
- package/src/server/security/socketsecurity.js +1735 -0
- package/test/integration/infra/1-security/config-scope.test.js +3 -0
- package/test/integration/infra/1-security/socketsecurity.test.js +1041 -0
- package/test/integration/infra/1-security/sops-secret-store.test.js +201 -71
- package/test/unit/build-template.test.js +24 -0
- package/test/unit/deploy-log-table.test.js +38 -0
- package/test/unit/execution-profiles.test.js +1 -0
- package/test/unit/package.test.js +118 -0
|
@@ -4,6 +4,7 @@ import shell from 'shelljs';
|
|
|
4
4
|
import { program } from '../../src/cli/index.js';
|
|
5
5
|
import {
|
|
6
6
|
STAGED_CLI_PACKAGE,
|
|
7
|
+
auditRuntimeDependencies,
|
|
7
8
|
deployDependencySpecsFactory,
|
|
8
9
|
packageRepositoryFactory,
|
|
9
10
|
renamePackage,
|
|
@@ -12,9 +13,11 @@ import {
|
|
|
12
13
|
buildProductPackageJson,
|
|
13
14
|
deployPackageNameFactory,
|
|
14
15
|
deployPackagePathFactory,
|
|
16
|
+
importPackageNameFactory,
|
|
15
17
|
productDevDependenciesFactory,
|
|
16
18
|
productPackageOptionsFactory,
|
|
17
19
|
publishedProductPackageJson,
|
|
20
|
+
runtimeImportGraphFactory,
|
|
18
21
|
stagePackageArchive,
|
|
19
22
|
syncDeployPackages,
|
|
20
23
|
} from '../../src/server/build/package.js';
|
|
@@ -328,6 +331,15 @@ describe('the manifest a product publishes to npm', () => {
|
|
|
328
331
|
).to.deep.equal({ underpost: '^4.0.0' });
|
|
329
332
|
});
|
|
330
333
|
|
|
334
|
+
it('lets a GitHub Packages publish pin the engine under its scoped package name', () => {
|
|
335
|
+
expect(
|
|
336
|
+
publishedProductPackageJson({
|
|
337
|
+
packageJson: { version: '3.3.73' },
|
|
338
|
+
underpostPackageName: '@underpost/underpost',
|
|
339
|
+
}).dependencies,
|
|
340
|
+
).to.deep.equal({ '@underpost/underpost': '^3.3.73' });
|
|
341
|
+
});
|
|
342
|
+
|
|
331
343
|
it('refuses a manifest it cannot pin the engine CLI from', () => {
|
|
332
344
|
expect(() => publishedProductPackageJson()).to.throw('packageJson');
|
|
333
345
|
expect(() => publishedProductPackageJson({ packageJson: { name: 'cyberia' } })).to.throw('version');
|
|
@@ -455,3 +467,109 @@ describe('package identity is written in one place', () => {
|
|
|
455
467
|
expect(() => setPackageRepository({})).to.throw('slug');
|
|
456
468
|
});
|
|
457
469
|
});
|
|
470
|
+
|
|
471
|
+
describe('runtime dependency audit', () => {
|
|
472
|
+
const tree = () => {
|
|
473
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'underpost-runtime-graph-'));
|
|
474
|
+
fs.outputJsonSync(path.join(root, 'package.json'), {
|
|
475
|
+
dependencies: { express: '^5.0.0', 'fs-extra': '^11.0.0' },
|
|
476
|
+
devDependencies: { vitest: '5.0.0', bumpp: '^12.0.0' },
|
|
477
|
+
});
|
|
478
|
+
fs.outputFileSync(path.join(root, 'bin/index.js'), "import '../src/cli.js';\n");
|
|
479
|
+
fs.outputFileSync(
|
|
480
|
+
path.join(root, 'src/cli.js'),
|
|
481
|
+
[
|
|
482
|
+
"import express from 'express';",
|
|
483
|
+
"import { helper } from './lib';",
|
|
484
|
+
"/** @type {import('typedoc').Options} */",
|
|
485
|
+
"// import legacy from 'legacy-tool';",
|
|
486
|
+
"export const bump = () => import('bumpp');",
|
|
487
|
+
"export * from './lib/index.js';",
|
|
488
|
+
// A module chosen at runtime from a directory this tree does not ship.
|
|
489
|
+
'export const grpc = (name) => import(`./grpc/${name}/grpc-server.js`);',
|
|
490
|
+
// Source text a command writes to disk and runs elsewhere; not an import of this module.
|
|
491
|
+
'export const script = `',
|
|
492
|
+
" import hre from 'hardhat';",
|
|
493
|
+
'`;',
|
|
494
|
+
].join('\n'),
|
|
495
|
+
);
|
|
496
|
+
fs.outputFileSync(
|
|
497
|
+
path.join(root, 'src/lib/index.js'),
|
|
498
|
+
"import fs from 'fs-extra';\nimport nodePath from 'node:path';\nimport { readFileSync } from 'fs';\nexport const helper = 1;\n",
|
|
499
|
+
);
|
|
500
|
+
fs.outputFileSync(
|
|
501
|
+
path.join(root, 'src/api/user/user.router.js'),
|
|
502
|
+
"import { run } from 'vitest';\nimport sharp from 'sharp';\n",
|
|
503
|
+
);
|
|
504
|
+
return root;
|
|
505
|
+
};
|
|
506
|
+
|
|
507
|
+
it('names the package a specifier imports', () => {
|
|
508
|
+
expect(importPackageNameFactory('express')).to.equal('express');
|
|
509
|
+
expect(importPackageNameFactory('@grpc/grpc-js/build/x.js')).to.equal('@grpc/grpc-js');
|
|
510
|
+
expect(importPackageNameFactory('socket.io/client-dist/socket.io.esm.min.js')).to.equal('socket.io');
|
|
511
|
+
for (const specifier of [
|
|
512
|
+
'./x.js',
|
|
513
|
+
'../y.js',
|
|
514
|
+
'/abs.js',
|
|
515
|
+
'node:fs',
|
|
516
|
+
'fs',
|
|
517
|
+
'path',
|
|
518
|
+
'data:text/javascript,1',
|
|
519
|
+
'https://cdn/x.js',
|
|
520
|
+
])
|
|
521
|
+
expect(importPackageNameFactory(specifier), specifier).to.equal('');
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
it('walks the static graph from the entry points and records dynamic imports as lazy', async () => {
|
|
525
|
+
const root = tree();
|
|
526
|
+
try {
|
|
527
|
+
const graph = await runtimeImportGraphFactory({ root });
|
|
528
|
+
expect(graph.files).to.deep.equal([
|
|
529
|
+
'bin/index.js',
|
|
530
|
+
'src/api/user/user.router.js',
|
|
531
|
+
'src/cli.js',
|
|
532
|
+
'src/lib/index.js',
|
|
533
|
+
]);
|
|
534
|
+
expect(graph.packages).to.deep.equal({
|
|
535
|
+
express: ['src/cli.js'],
|
|
536
|
+
'fs-extra': ['src/lib/index.js'],
|
|
537
|
+
sharp: ['src/api/user/user.router.js'],
|
|
538
|
+
vitest: ['src/api/user/user.router.js'],
|
|
539
|
+
});
|
|
540
|
+
expect(graph.lazyPackages).to.deep.equal({ bumpp: ['src/cli.js'] });
|
|
541
|
+
} finally {
|
|
542
|
+
fs.removeSync(root);
|
|
543
|
+
}
|
|
544
|
+
});
|
|
545
|
+
|
|
546
|
+
it('flags a runtime import declared outside dependencies and accepts a catalog pin', async () => {
|
|
547
|
+
const root = tree();
|
|
548
|
+
try {
|
|
549
|
+
const audit = await auditRuntimeDependencies({ root, catalogs: [{ packageDependencies: { sharp: '^0.35.0' } }] });
|
|
550
|
+
expect(audit).to.include({ dependencies: 2, devDependencies: 2 });
|
|
551
|
+
expect(audit.runtime).to.deep.equal(['express', 'fs-extra', 'sharp', 'vitest']);
|
|
552
|
+
expect(audit.lazy).to.deep.equal(['bumpp (devDependencies)']);
|
|
553
|
+
expect(audit.misplaced).to.deep.equal([
|
|
554
|
+
{ name: 'vitest', declaredIn: 'devDependencies', importers: ['src/api/user/user.router.js'] },
|
|
555
|
+
]);
|
|
556
|
+
const unpinned = await auditRuntimeDependencies({ root, catalogs: [] });
|
|
557
|
+
expect(unpinned.misplaced.map(({ name, declaredIn }) => `${name}:${declaredIn}`)).to.deep.equal([
|
|
558
|
+
'sharp:none',
|
|
559
|
+
'vitest:devDependencies',
|
|
560
|
+
]);
|
|
561
|
+
} finally {
|
|
562
|
+
fs.removeSync(root);
|
|
563
|
+
}
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
it('keeps every package this engine imports at runtime in dependencies', async () => {
|
|
567
|
+
// A production install omits devDependencies, so a runtime import from there breaks the
|
|
568
|
+
// published CLI at load time. This bundles the whole engine from its real entry points
|
|
569
|
+
// with esbuild, which comfortably clears the 5s default on a slower CI runner.
|
|
570
|
+
const audit = await auditRuntimeDependencies();
|
|
571
|
+
expect(audit.misplaced).to.deep.equal([]);
|
|
572
|
+
expect(audit.runtime).to.include.members(['commander', 'esbuild', 'express', 'mongoose']);
|
|
573
|
+
expect(audit.runtime).to.not.include.members(['vitest', 'chai', 'nodemon', 'bumpp']);
|
|
574
|
+
}, 30000);
|
|
575
|
+
});
|