cyberia 3.1.3 → 3.2.5
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 +0 -2
- package/.github/workflows/engine-cyberia.cd.yml +10 -8
- package/.github/workflows/engine-cyberia.ci.yml +12 -29
- package/.github/workflows/ghpkg.ci.yml +4 -4
- package/.github/workflows/npmpkg.ci.yml +28 -11
- package/.github/workflows/publish.ci.yml +21 -2
- package/.github/workflows/pwa-microservices-template-page.cd.yml +4 -5
- package/.github/workflows/pwa-microservices-template-test.ci.yml +3 -3
- package/.github/workflows/release.cd.yml +13 -8
- package/CHANGELOG.md +433 -1
- package/CLI-HELP.md +57 -7
- package/Dockerfile +4 -2
- package/README.md +347 -22
- package/bin/build.js +5 -2
- package/bin/cyberia.js +1789 -112
- package/bin/deploy.js +177 -124
- package/bin/file.js +3 -0
- package/bin/index.js +1789 -112
- package/conf.js +64 -8
- package/deployment.yaml +92 -20
- package/hardhat/hardhat.config.js +13 -13
- package/hardhat/ignition/modules/ObjectLayerToken.js +1 -1
- package/hardhat/package-lock.json +2554 -5859
- package/hardhat/package.json +13 -22
- package/hardhat/scripts/deployObjectLayerToken.js +1 -1
- package/hardhat/test/ObjectLayerToken.js +4 -2
- package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
- package/hardhat/types/ethers-contracts/common.ts +92 -0
- package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
- package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
- package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
- package/hardhat/types/ethers-contracts/index.ts +6 -0
- package/jsdoc.dd-cyberia.json +64 -55
- package/jsdoc.json +64 -55
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +5 -4
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +5 -4
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +92 -20
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +54 -18
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-test-development/deployment.yaml +88 -74
- package/manifests/deployment/dd-test-development/proxy.yaml +13 -4
- package/manifests/deployment/playwright/deployment.yaml +1 -1
- package/nodemon.json +1 -1
- package/package.json +22 -16
- package/proxy.yaml +54 -18
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +44 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +16 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +5 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +80 -7
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +93 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +29 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +51 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +74 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +24 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +27 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +368 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +92 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +84 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +63 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +191 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +486 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +74 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +413 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +228 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +27 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +42 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +79 -0
- package/src/api/cyberia-map/cyberia-map.model.js +30 -0
- package/src/api/cyberia-map/cyberia-map.router.js +40 -0
- package/src/api/cyberia-map/cyberia-map.service.js +74 -0
- package/src/api/file/file.ref.json +18 -0
- package/src/api/ipfs/ipfs.controller.js +4 -25
- package/src/api/ipfs/ipfs.model.js +43 -34
- package/src/api/ipfs/ipfs.router.js +8 -13
- package/src/api/ipfs/ipfs.service.js +54 -102
- package/src/api/object-layer/README.md +347 -22
- package/src/api/object-layer/object-layer.router.js +30 -0
- package/src/api/object-layer/object-layer.service.js +114 -31
- package/src/api/user/user.service.js +8 -7
- package/src/cli/cluster.js +7 -7
- package/src/cli/db.js +710 -827
- package/src/cli/deploy.js +151 -93
- package/src/cli/env.js +29 -0
- package/src/cli/fs.js +5 -2
- package/src/cli/index.js +48 -2
- package/src/cli/kubectl.js +211 -0
- package/src/cli/release.js +284 -0
- package/src/cli/repository.js +438 -75
- package/src/cli/run.js +195 -35
- package/src/cli/secrets.js +73 -0
- package/src/cli/test.js +3 -3
- package/src/client/Cryptokoyn.index.js +3 -4
- package/src/client/CyberiaPortal.index.js +3 -4
- package/src/client/Default.index.js +3 -4
- package/src/client/Itemledger.index.js +3 -4
- package/src/client/Underpost.index.js +3 -4
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/CalendarCore.js +2 -2
- package/src/client/components/core/DropDown.js +137 -17
- package/src/client/components/core/Keyboard.js +2 -2
- package/src/client/components/core/LogIn.js +2 -2
- package/src/client/components/core/LogOut.js +2 -2
- package/src/client/components/core/Modal.js +0 -1
- package/src/client/components/core/Panel.js +0 -1
- package/src/client/components/core/PanelForm.js +19 -19
- package/src/client/components/core/SocketIo.js +82 -29
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +143 -95
- package/src/client/components/core/Webhook.js +40 -7
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +3 -3
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +2 -2
- package/src/client/components/cryptokoyn/MenuCryptokoyn.js +3 -3
- package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +3 -51
- package/src/client/components/cyberia/InstanceEngineCyberia.js +700 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1359 -2
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +17 -6
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +92 -54
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +216 -30
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +3 -3
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +40 -7
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +4 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +3 -49
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/LogInDefault.js +3 -3
- package/src/client/components/default/LogOutDefault.js +2 -2
- package/src/client/components/default/MenuDefault.js +5 -5
- package/src/client/components/default/SocketIoDefault.js +3 -51
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/LogInItemledger.js +3 -3
- package/src/client/components/itemledger/LogOutItemledger.js +2 -2
- package/src/client/components/itemledger/MenuItemledger.js +3 -3
- package/src/client/components/itemledger/SocketIoItemledger.js +3 -51
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- package/src/client/components/underpost/LogInUnderpost.js +3 -3
- package/src/client/components/underpost/LogOutUnderpost.js +2 -2
- package/src/client/components/underpost/MenuUnderpost.js +5 -5
- package/src/client/components/underpost/SocketIoUnderpost.js +3 -51
- package/src/client/services/core/core.service.js +20 -8
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +105 -0
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +105 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +122 -0
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +105 -0
- package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
- package/src/client/services/cyberia-map/cyberia-map.service.js +126 -0
- package/src/client/services/instance/instance.management.js +2 -2
- package/src/client/services/ipfs/ipfs.service.js +3 -23
- package/src/client/services/object-layer/object-layer.management.js +3 -3
- package/src/client/services/object-layer/object-layer.service.js +21 -0
- package/src/client/services/user/user.management.js +2 -2
- package/src/client/ssr/pages/CyberiaServerMetrics.js +1 -1
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +305 -0
- package/src/grpc/cyberia/README.md +326 -0
- package/src/grpc/cyberia/grpc-server.js +530 -0
- package/src/index.js +24 -1
- package/src/runtime/express/Dockerfile +4 -0
- package/src/runtime/express/Express.js +18 -1
- package/src/runtime/lampp/Dockerfile +13 -2
- package/src/runtime/lampp/Lampp.js +27 -4
- package/src/runtime/wp/Dockerfile +68 -0
- package/src/runtime/wp/Wp.js +639 -0
- package/src/server/auth.js +24 -1
- package/src/server/backup.js +37 -9
- package/src/server/client-build-docs.js +9 -2
- package/src/server/client-build.js +31 -31
- package/src/server/client-formatted.js +109 -57
- package/src/server/conf.js +24 -9
- package/src/server/cron.js +25 -23
- package/src/server/dns.js +2 -1
- package/src/server/ipfs-client.js +24 -1
- package/src/server/object-layer.js +149 -108
- package/src/server/peer.js +8 -0
- package/src/server/runtime.js +25 -1
- package/src/server/semantic-layer-generator-floor.js +359 -0
- package/src/server/semantic-layer-generator-skin.js +1294 -0
- package/src/server/semantic-layer-generator.js +116 -555
- package/src/server/start.js +2 -2
- package/src/ws/IoInterface.js +1 -10
- package/src/ws/IoServer.js +14 -33
- package/src/ws/core/channels/core.ws.chat.js +65 -20
- package/src/ws/core/channels/core.ws.mailer.js +113 -32
- package/src/ws/core/channels/core.ws.stream.js +90 -31
- package/src/ws/core/core.ws.connection.js +12 -33
- package/src/ws/core/core.ws.emit.js +10 -26
- package/src/ws/core/core.ws.server.js +25 -58
- package/src/ws/default/channels/default.ws.main.js +53 -12
- package/src/ws/default/default.ws.connection.js +26 -13
- package/src/ws/default/default.ws.server.js +30 -12
- package/src/client/components/cryptokoyn/CommonCryptokoyn.js +0 -29
- package/src/client/components/cryptokoyn/ElementsCryptokoyn.js +0 -38
- package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +0 -38
- package/src/client/components/default/ElementsDefault.js +0 -38
- package/src/client/components/itemledger/CommonItemledger.js +0 -29
- package/src/client/components/itemledger/ElementsItemledger.js +0 -38
- package/src/client/components/underpost/CommonUnderpost.js +0 -29
- package/src/client/components/underpost/ElementsUnderpost.js +0 -38
- package/src/ws/core/management/core.ws.chat.js +0 -8
- package/src/ws/core/management/core.ws.mailer.js +0 -16
- package/src/ws/core/management/core.ws.stream.js +0 -8
- package/src/ws/default/management/default.ws.main.js +0 -8
|
@@ -182,29 +182,66 @@ const ObjectLayerService = {
|
|
|
182
182
|
return objectLayer;
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
// create object layer from body
|
|
185
|
+
// create object layer from body – cut-over consistency: stage all CIDs before writing to DB
|
|
186
186
|
const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
|
|
187
187
|
const ObjectLayerRenderFrames =
|
|
188
188
|
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayerRenderFrames;
|
|
189
|
-
let newObjectLayer = await new ObjectLayer(req.body).save();
|
|
190
189
|
|
|
191
|
-
|
|
190
|
+
const bodyData = { ...req.body };
|
|
191
|
+
if (!bodyData.data) bodyData.data = {};
|
|
192
|
+
if (!bodyData.data.render) bodyData.data.render = {};
|
|
193
|
+
bodyData.data.render.cid = '';
|
|
194
|
+
bodyData.data.render.metadataCid = '';
|
|
195
|
+
|
|
196
|
+
// If has render frames, generate atlas + CIDs BEFORE creating the ObjectLayer
|
|
197
|
+
if (bodyData.objectLayerRenderFramesId) {
|
|
198
|
+
const renderFramesDoc = await ObjectLayerRenderFrames.findById(bodyData.objectLayerRenderFramesId);
|
|
199
|
+
if (renderFramesDoc) {
|
|
200
|
+
try {
|
|
201
|
+
const stagingOL = {
|
|
202
|
+
data: bodyData.data,
|
|
203
|
+
objectLayerRenderFramesId: renderFramesDoc,
|
|
204
|
+
};
|
|
205
|
+
const result = await AtlasSpriteSheetService.generate(
|
|
206
|
+
{ objectLayer: stagingOL, auth: req.auth },
|
|
207
|
+
res,
|
|
208
|
+
options,
|
|
209
|
+
{ skipObjectLayerSave: true },
|
|
210
|
+
);
|
|
211
|
+
bodyData.data.render.cid = result.atlasCid;
|
|
212
|
+
bodyData.data.render.metadataCid = result.atlasMetadataCid;
|
|
213
|
+
bodyData.atlasSpriteSheetId = result.atlasDoc._id;
|
|
214
|
+
} catch (atlasError) {
|
|
215
|
+
logger.error('Failed to auto-generate atlas for new ObjectLayer:', atlasError);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Compute final SHA-256 with all CIDs
|
|
221
|
+
bodyData.sha256 = ObjectLayerEngine.computeSha256(bodyData.data);
|
|
222
|
+
|
|
223
|
+
// Pin data JSON to IPFS
|
|
192
224
|
try {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
225
|
+
const itemId = bodyData.data.item.id;
|
|
226
|
+
const mfsPath = `/object-layer/${itemId}/${itemId}_data.json`;
|
|
227
|
+
const ipfsResult = await IpfsClient.addJsonToIpfs(bodyData.data, `${itemId}_data.json`, mfsPath);
|
|
228
|
+
if (ipfsResult) {
|
|
229
|
+
bodyData.cid = ipfsResult.cid;
|
|
230
|
+
await createPinRecord({ cid: ipfsResult.cid, resourceType: 'object-layer-data', mfsPath, options });
|
|
231
|
+
}
|
|
232
|
+
} catch (ipfsError) {
|
|
233
|
+
logger.warn('Failed to pin data JSON to IPFS:', ipfsError.message);
|
|
196
234
|
}
|
|
197
235
|
|
|
198
|
-
//
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
});
|
|
236
|
+
// Atomic create/replace – ObjectLayer is fully populated with all CIDs
|
|
237
|
+
let newObjectLayer;
|
|
238
|
+
const existingByItemId = await ObjectLayer.findOne({ 'data.item.id': bodyData.data.item.id });
|
|
239
|
+
if (existingByItemId) {
|
|
240
|
+
newObjectLayer = await ObjectLayer.findByIdAndUpdate(existingByItemId._id, bodyData, {
|
|
241
|
+
returnDocument: 'after',
|
|
242
|
+
}).populate('objectLayerRenderFramesId');
|
|
243
|
+
} else {
|
|
244
|
+
newObjectLayer = await (await new ObjectLayer(bodyData).save()).populate('objectLayerRenderFramesId');
|
|
208
245
|
}
|
|
209
246
|
|
|
210
247
|
return newObjectLayer;
|
|
@@ -235,6 +272,22 @@ const ObjectLayerService = {
|
|
|
235
272
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
236
273
|
const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
|
|
237
274
|
|
|
275
|
+
// GET /search-item-ids?q=<partial> - Fast partial match search on data.item.id
|
|
276
|
+
if (req.path.startsWith('/search-item-ids')) {
|
|
277
|
+
const q = (req.query.q || '').trim();
|
|
278
|
+
if (!q) return { itemIds: [] };
|
|
279
|
+
// Escape regex special characters for safe partial matching
|
|
280
|
+
const escaped = q.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
281
|
+
const results = await ObjectLayer.find(
|
|
282
|
+
{ 'data.item.id': { $regex: escaped, $options: 'i' } },
|
|
283
|
+
{ 'data.item.id': 1, _id: 0 },
|
|
284
|
+
)
|
|
285
|
+
.limit(20)
|
|
286
|
+
.lean();
|
|
287
|
+
const itemIds = [...new Set(results.map((r) => r.data.item.id))];
|
|
288
|
+
return { itemIds };
|
|
289
|
+
}
|
|
290
|
+
|
|
238
291
|
// GET /frame-counts/:id - Get frame counts for each direction using numeric codes
|
|
239
292
|
if (req.path.startsWith('/frame-counts/')) {
|
|
240
293
|
const objectLayer = await ObjectLayer.findById(req.params.id)
|
|
@@ -667,30 +720,60 @@ const ObjectLayerService = {
|
|
|
667
720
|
return objectLayer;
|
|
668
721
|
}
|
|
669
722
|
|
|
670
|
-
// PUT /:id - Standard update
|
|
671
|
-
|
|
723
|
+
// PUT /:id - Standard update with cut-over consistency
|
|
724
|
+
const existingOL = await ObjectLayer.findById(req.params.id).populate('objectLayerRenderFramesId');
|
|
725
|
+
if (!existingOL) {
|
|
726
|
+
throw new Error('ObjectLayer not found');
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
// Apply body updates to staging data in memory
|
|
730
|
+
const updateData = { ...req.body };
|
|
731
|
+
const stagingData = updateData.data || existingOL.data.toObject();
|
|
732
|
+
if (!stagingData.render) stagingData.render = {};
|
|
672
733
|
|
|
673
|
-
if
|
|
674
|
-
|
|
734
|
+
// Use existing render frames if available
|
|
735
|
+
const renderFramesData = existingOL.objectLayerRenderFramesId;
|
|
736
|
+
if (renderFramesData) {
|
|
675
737
|
try {
|
|
676
|
-
|
|
738
|
+
const stagingOL = {
|
|
739
|
+
data: stagingData,
|
|
740
|
+
objectLayerRenderFramesId: renderFramesData,
|
|
741
|
+
};
|
|
742
|
+
const result = await AtlasSpriteSheetService.generate(
|
|
743
|
+
{ objectLayer: stagingOL, auth: req.auth },
|
|
744
|
+
res,
|
|
745
|
+
options,
|
|
746
|
+
{ skipObjectLayerSave: true },
|
|
747
|
+
);
|
|
748
|
+
stagingData.render.cid = result.atlasCid;
|
|
749
|
+
stagingData.render.metadataCid = result.atlasMetadataCid;
|
|
750
|
+
updateData.atlasSpriteSheetId = result.atlasDoc._id;
|
|
677
751
|
} catch (atlasError) {
|
|
678
752
|
logger.error('Failed to auto-update atlas for ObjectLayer:', atlasError);
|
|
679
753
|
}
|
|
754
|
+
}
|
|
680
755
|
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
756
|
+
updateData.data = stagingData;
|
|
757
|
+
updateData.sha256 = ObjectLayerEngine.computeSha256(stagingData);
|
|
758
|
+
|
|
759
|
+
// Pin data JSON to IPFS
|
|
760
|
+
try {
|
|
761
|
+
const itemId = stagingData.item.id;
|
|
762
|
+
const mfsPath = `/object-layer/${itemId}/${itemId}_data.json`;
|
|
763
|
+
const ipfsResult = await IpfsClient.addJsonToIpfs(stagingData, `${itemId}_data.json`, mfsPath);
|
|
764
|
+
if (ipfsResult) {
|
|
765
|
+
updateData.cid = ipfsResult.cid;
|
|
766
|
+
await createPinRecord({ cid: ipfsResult.cid, resourceType: 'object-layer-data', mfsPath, options });
|
|
691
767
|
}
|
|
768
|
+
} catch (ipfsError) {
|
|
769
|
+
logger.warn('Failed to pin data JSON to IPFS:', ipfsError.message);
|
|
692
770
|
}
|
|
693
771
|
|
|
772
|
+
// Atomic update with all CIDs populated
|
|
773
|
+
let updatedObjectLayer = await ObjectLayer.findByIdAndUpdate(req.params.id, updateData, {
|
|
774
|
+
returnDocument: 'after',
|
|
775
|
+
}).populate('objectLayerRenderFramesId');
|
|
776
|
+
|
|
694
777
|
return updatedObjectLayer;
|
|
695
778
|
},
|
|
696
779
|
|
|
@@ -13,8 +13,7 @@ import {
|
|
|
13
13
|
validatePasswordMiddleware,
|
|
14
14
|
} from '../../server/auth.js';
|
|
15
15
|
import { MailerProvider } from '../../mailer/MailerProvider.js';
|
|
16
|
-
import {
|
|
17
|
-
import { CoreWsEmit } from '../../ws/core/core.ws.emit.js';
|
|
16
|
+
import { CoreWsEmitter } from '../../ws/core/core.ws.emit.js';
|
|
18
17
|
import { CoreWsMailerChannel } from '../../ws/core/channels/core.ws.mailer.js';
|
|
19
18
|
import validator from 'validator';
|
|
20
19
|
import { DataBaseProvider } from '../../db/DataBaseProvider.js';
|
|
@@ -319,11 +318,13 @@ const UserService = {
|
|
|
319
318
|
{
|
|
320
319
|
const user = await User.findByIdAndUpdate(_id, { emailConfirmed: true }, { runValidators: true });
|
|
321
320
|
}
|
|
322
|
-
const userWsId =
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
321
|
+
const userWsId = CoreWsMailerChannel.getUserWsId(`${options.host}${options.path}`, user._id.toString());
|
|
322
|
+
if (userWsId && CoreWsMailerChannel.client[userWsId]) {
|
|
323
|
+
CoreWsEmitter.emit(CoreWsMailerChannel.channel, CoreWsMailerChannel.client[userWsId], {
|
|
324
|
+
status: 'email-confirmed',
|
|
325
|
+
id: userWsId,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
327
328
|
options.png.header(res, req);
|
|
328
329
|
return options.png.buffer['check'];
|
|
329
330
|
} else {
|
package/src/cli/cluster.js
CHANGED
|
@@ -111,7 +111,7 @@ class UnderpostCluster {
|
|
|
111
111
|
const npmRoot = getNpmRootPath();
|
|
112
112
|
const underpostRoot = options.dev ? '.' : `${npmRoot}/underpost`;
|
|
113
113
|
|
|
114
|
-
if (options.listPods) return console.table(Underpost.
|
|
114
|
+
if (options.listPods) return console.table(Underpost.kubectl.get(podName ?? undefined));
|
|
115
115
|
// Set default namespace if not specified
|
|
116
116
|
if (!options.namespace) options.namespace = 'default';
|
|
117
117
|
|
|
@@ -146,10 +146,10 @@ class UnderpostCluster {
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
// Check if a cluster (Kind, Kubeadm, or K3s) is already initialized
|
|
149
|
-
const alreadyKubeadmCluster = Underpost.
|
|
150
|
-
const alreadyKindCluster = Underpost.
|
|
149
|
+
const alreadyKubeadmCluster = Underpost.kubectl.get('calico-kube-controllers')[0];
|
|
150
|
+
const alreadyKindCluster = Underpost.kubectl.get('kube-apiserver-kind-control-plane')[0];
|
|
151
151
|
// K3s pods often contain 'svclb-traefik' in the kube-system namespace
|
|
152
|
-
const alreadyK3sCluster = Underpost.
|
|
152
|
+
const alreadyK3sCluster = Underpost.kubectl.get('svclb-traefik')[0];
|
|
153
153
|
|
|
154
154
|
// --- Kubeadm/Kind/K3s Cluster Initialization ---
|
|
155
155
|
if (!alreadyKubeadmCluster && !alreadyKindCluster && !alreadyK3sCluster) {
|
|
@@ -299,7 +299,7 @@ EOF
|
|
|
299
299
|
members: [{ _id: 0, host: `${options.mongoDbHost}:27017` }],
|
|
300
300
|
};
|
|
301
301
|
|
|
302
|
-
const [pod] = Underpost.
|
|
302
|
+
const [pod] = Underpost.kubectl.get(deploymentName);
|
|
303
303
|
|
|
304
304
|
shellExec(
|
|
305
305
|
`sudo kubectl exec -i ${pod.NAME} -- mongo --quiet \
|
|
@@ -351,7 +351,7 @@ EOF
|
|
|
351
351
|
}
|
|
352
352
|
|
|
353
353
|
if (options.certManager) {
|
|
354
|
-
if (!Underpost.
|
|
354
|
+
if (!Underpost.kubectl.get('cert-manager').find((p) => p.STATUS === 'Running')) {
|
|
355
355
|
shellExec(`helm repo add jetstack https://charts.jetstack.io --force-update`);
|
|
356
356
|
shellExec(
|
|
357
357
|
`helm install cert-manager jetstack/cert-manager \
|
|
@@ -641,7 +641,7 @@ net.ipv4.ip_forward = 1' | sudo tee ${iptableConfPath}`,
|
|
|
641
641
|
const resources = {};
|
|
642
642
|
const nodeName = node
|
|
643
643
|
? node
|
|
644
|
-
: Underpost.
|
|
644
|
+
: Underpost.kubectl.get('kind-control-plane', 'node').length > 0
|
|
645
645
|
? 'kind-control-plane'
|
|
646
646
|
: os.hostname();
|
|
647
647
|
const info = shellExec(`kubectl describe node ${nodeName} | grep -E '(Allocatable:|Capacity:)' -A 6`, {
|