@arken/node 1.5.1 → 1.5.3
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/.rush/temp/shrinkwrap-deps.json +39 -82
- package/build/api.js.map +1 -0
- package/build/array.js.map +1 -0
- package/build/browser.js.map +1 -0
- package/build/codebase.js.map +1 -0
- package/build/config.js.map +1 -0
- package/build/db.d.ts +41 -0
- package/build/db.js +234 -0
- package/build/db.js.map +1 -0
- package/build/{util/decoder.js → decoder.js} +3 -3
- package/build/decoder.js.map +1 -0
- package/build/format.js.map +1 -0
- package/build/guid.js.map +1 -0
- package/build/index.d.ts +70 -18
- package/build/index.js +216 -18
- package/build/index.js.map +1 -1
- package/build/json.js.map +1 -0
- package/build/legacy/data/items.js +1 -1
- package/build/legacy/data/items.js.map +1 -1
- package/build/log.d.ts +5 -0
- package/build/log.js +28 -0
- package/build/log.js.map +1 -0
- package/build/math.js.map +1 -0
- package/build/{util/merkle.js → merkle.js} +1 -1
- package/build/merkle.js.map +1 -0
- package/build/{util/mongo.js → mongo.js} +1 -1
- package/build/mongo.js.map +1 -0
- package/build/number.js.map +1 -0
- package/build/object.js.map +1 -0
- package/build/otp.js.map +1 -0
- package/build/package.json +3 -3
- package/build/physics.js.map +1 -0
- package/build/{util/process.js → process.js} +1 -1
- package/build/process.js.map +1 -0
- package/build/rpc.js.map +1 -0
- package/build/schema.d.ts +42 -51
- package/build/seer.js.map +1 -0
- package/build/string.js.map +1 -0
- package/build/text.js.map +1 -0
- package/build/time/date.js.map +1 -0
- package/build/time/fancyTimeFormat.js.map +1 -0
- package/build/time/index.js.map +1 -0
- package/build/time/now.js.map +1 -0
- package/build/trpc/socketLink.d.ts +62 -0
- package/build/trpc/socketLink.js +261 -0
- package/build/trpc/socketLink.js.map +1 -0
- package/build/trpc/socketServer.d.ts +15 -0
- package/build/trpc/socketServer.js +47 -0
- package/build/trpc/socketServer.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/util.d.ts +1 -0
- package/build/util.js +2 -0
- package/build/util.js.map +1 -0
- package/build/web3/httpProvider.js.map +1 -0
- package/build/{util/web3.js → web3.js} +1 -1
- package/build/web3.js.map +1 -0
- package/build/{util/websocket.js → websocket.js} +1 -1
- package/build/websocket.js.map +1 -0
- package/build/zk.js.map +1 -0
- package/build/{util/zod.d.ts → zod.d.ts} +2 -0
- package/build/{util/zod.js → zod.js} +1 -0
- package/build/zod.js.map +1 -0
- package/db.ts +76 -1
- package/{util/decoder.ts → decoder.ts} +3 -3
- package/index.ts +306 -18
- package/legacy/data/items.ts +1 -1
- package/log.ts +51 -0
- package/{util/merkle.ts → merkle.ts} +3 -1
- package/{util/mongo.ts → mongo.ts} +1 -1
- package/package.json +3 -3
- package/{util/process.ts → process.ts} +1 -1
- package/trpc/socketLink.ts +2 -2
- package/trpc/socketServer.ts +1 -1
- package/tsconfig.json +35 -6
- package/util.ts +1 -0
- package/{util/web3.ts → web3.ts} +2 -1
- package/{util/websocket.ts → websocket.ts} +1 -1
- package/{util/zod.ts → zod.ts} +2 -0
- package/build/modules/area/area.models.d.ts +0 -6
- package/build/modules/area/area.models.js +0 -11
- package/build/modules/area/area.models.js.map +0 -1
- package/build/modules/area/area.router.d.ts +0 -274
- package/build/modules/area/area.router.js +0 -59
- package/build/modules/area/area.router.js.map +0 -1
- package/build/modules/area/area.schema.d.ts +0 -245
- package/build/modules/area/area.schema.js +0 -13
- package/build/modules/area/area.schema.js.map +0 -1
- package/build/modules/area/area.service.d.ts +0 -12
- package/build/modules/area/area.service.js +0 -95
- package/build/modules/area/area.service.js.map +0 -1
- package/build/modules/area/area.types.d.ts +0 -20
- package/build/modules/area/area.types.js +0 -2
- package/build/modules/area/area.types.js.map +0 -1
- package/build/modules/area/index.d.ts +0 -5
- package/build/modules/area/index.js +0 -6
- package/build/modules/area/index.js.map +0 -1
- package/build/modules/asset/asset.models.d.ts +0 -5
- package/build/modules/asset/asset.models.js +0 -44
- package/build/modules/asset/asset.models.js.map +0 -1
- package/build/modules/asset/asset.router.d.ts +0 -189
- package/build/modules/asset/asset.router.js +0 -41
- package/build/modules/asset/asset.router.js.map +0 -1
- package/build/modules/asset/asset.schema.d.ts +0 -207
- package/build/modules/asset/asset.schema.js +0 -19
- package/build/modules/asset/asset.schema.js.map +0 -1
- package/build/modules/asset/asset.service.d.ts +0 -9
- package/build/modules/asset/asset.service.js +0 -68
- package/build/modules/asset/asset.service.js.map +0 -1
- package/build/modules/asset/asset.types.d.ts +0 -17
- package/build/modules/asset/asset.types.js +0 -2
- package/build/modules/asset/asset.types.js.map +0 -1
- package/build/modules/asset/index.d.ts +0 -5
- package/build/modules/asset/index.js +0 -6
- package/build/modules/asset/index.js.map +0 -1
- package/build/modules/chain/chain.models.d.ts +0 -6
- package/build/modules/chain/chain.models.js +0 -42
- package/build/modules/chain/chain.models.js.map +0 -1
- package/build/modules/chain/chain.router.d.ts +0 -364
- package/build/modules/chain/chain.router.js +0 -84
- package/build/modules/chain/chain.router.js.map +0 -1
- package/build/modules/chain/chain.schema.d.ts +0 -323
- package/build/modules/chain/chain.schema.js +0 -41
- package/build/modules/chain/chain.schema.js.map +0 -1
- package/build/modules/chain/chain.service.d.ts +0 -15
- package/build/modules/chain/chain.service.js +0 -115
- package/build/modules/chain/chain.service.js.map +0 -1
- package/build/modules/chain/chain.types.d.ts +0 -20
- package/build/modules/chain/chain.types.js +0 -2
- package/build/modules/chain/chain.types.js.map +0 -1
- package/build/modules/chain/index.d.ts +0 -5
- package/build/modules/chain/index.js +0 -6
- package/build/modules/chain/index.js.map +0 -1
- package/build/modules/character/character.models.d.ts +0 -14
- package/build/modules/character/character.models.js +0 -123
- package/build/modules/character/character.models.js.map +0 -1
- package/build/modules/character/character.router.d.ts +0 -945
- package/build/modules/character/character.router.js +0 -246
- package/build/modules/character/character.router.js.map +0 -1
- package/build/modules/character/character.schema.d.ts +0 -1239
- package/build/modules/character/character.schema.js +0 -67
- package/build/modules/character/character.schema.js.map +0 -1
- package/build/modules/character/character.service.d.ts +0 -73
- package/build/modules/character/character.service.js +0 -533
- package/build/modules/character/character.service.js.map +0 -1
- package/build/modules/character/character.types.d.ts +0 -48
- package/build/modules/character/character.types.js +0 -2
- package/build/modules/character/character.types.js.map +0 -1
- package/build/modules/character/index.d.ts +0 -5
- package/build/modules/character/index.js +0 -6
- package/build/modules/character/index.js.map +0 -1
- package/build/modules/chat/chat.models.d.ts +0 -4
- package/build/modules/chat/chat.models.js +0 -35
- package/build/modules/chat/chat.models.js.map +0 -1
- package/build/modules/chat/chat.router.d.ts +0 -223
- package/build/modules/chat/chat.router.js +0 -51
- package/build/modules/chat/chat.router.js.map +0 -1
- package/build/modules/chat/chat.schema.d.ts +0 -183
- package/build/modules/chat/chat.schema.js +0 -29
- package/build/modules/chat/chat.schema.js.map +0 -1
- package/build/modules/chat/chat.service.d.ts +0 -12
- package/build/modules/chat/chat.service.js +0 -85
- package/build/modules/chat/chat.service.js.map +0 -1
- package/build/modules/chat/chat.types.d.ts +0 -14
- package/build/modules/chat/chat.types.js +0 -2
- package/build/modules/chat/chat.types.js.map +0 -1
- package/build/modules/chat/index.d.ts +0 -5
- package/build/modules/chat/index.js +0 -6
- package/build/modules/chat/index.js.map +0 -1
- package/build/modules/collection/collection.models.d.ts +0 -9
- package/build/modules/collection/collection.models.js +0 -69
- package/build/modules/collection/collection.models.js.map +0 -1
- package/build/modules/collection/collection.router.d.ts +0 -361
- package/build/modules/collection/collection.router.js +0 -71
- package/build/modules/collection/collection.router.js.map +0 -1
- package/build/modules/collection/collection.schema.d.ts +0 -676
- package/build/modules/collection/collection.schema.js +0 -70
- package/build/modules/collection/collection.schema.js.map +0 -1
- package/build/modules/collection/collection.service.d.ts +0 -15
- package/build/modules/collection/collection.service.js +0 -117
- package/build/modules/collection/collection.service.js.map +0 -1
- package/build/modules/collection/collection.types.d.ts +0 -29
- package/build/modules/collection/collection.types.js +0 -2
- package/build/modules/collection/collection.types.js.map +0 -1
- package/build/modules/collection/index.d.ts +0 -5
- package/build/modules/collection/index.js +0 -6
- package/build/modules/collection/index.js.map +0 -1
- package/build/modules/core/core.models.d.ts +0 -123
- package/build/modules/core/core.models.js +0 -811
- package/build/modules/core/core.models.js.map +0 -1
- package/build/modules/core/core.router.d.ts +0 -5297
- package/build/modules/core/core.router.js +0 -1372
- package/build/modules/core/core.router.js.map +0 -1
- package/build/modules/core/core.schema.d.ts +0 -5918
- package/build/modules/core/core.schema.js +0 -519
- package/build/modules/core/core.schema.js.map +0 -1
- package/build/modules/core/core.service.d.ts +0 -270
- package/build/modules/core/core.service.js +0 -2515
- package/build/modules/core/core.service.js.map +0 -1
- package/build/modules/core/core.types.d.ts +0 -251
- package/build/modules/core/core.types.js +0 -2
- package/build/modules/core/core.types.js.map +0 -1
- package/build/modules/core/index.d.ts +0 -5
- package/build/modules/core/index.js +0 -6
- package/build/modules/core/index.js.map +0 -1
- package/build/modules/core/mail/applyPatchesOrMail.d.ts +0 -72
- package/build/modules/core/mail/applyPatchesOrMail.js +0 -416
- package/build/modules/core/mail/applyPatchesOrMail.js.map +0 -1
- package/build/modules/core/mail/mailClaimablePatchesBatch.d.ts +0 -51
- package/build/modules/core/mail/mailClaimablePatchesBatch.js +0 -239
- package/build/modules/core/mail/mailClaimablePatchesBatch.js.map +0 -1
- package/build/modules/game/game.models.d.ts +0 -6
- package/build/modules/game/game.models.js +0 -29
- package/build/modules/game/game.models.js.map +0 -1
- package/build/modules/game/game.router.d.ts +0 -428
- package/build/modules/game/game.router.js +0 -90
- package/build/modules/game/game.router.js.map +0 -1
- package/build/modules/game/game.schema.d.ts +0 -344
- package/build/modules/game/game.schema.js +0 -14
- package/build/modules/game/game.schema.js.map +0 -1
- package/build/modules/game/game.service.d.ts +0 -16
- package/build/modules/game/game.service.js +0 -111
- package/build/modules/game/game.service.js.map +0 -1
- package/build/modules/game/game.types.d.ts +0 -20
- package/build/modules/game/game.types.js +0 -2
- package/build/modules/game/game.types.js.map +0 -1
- package/build/modules/game/index.d.ts +0 -5
- package/build/modules/game/index.js +0 -5
- package/build/modules/game/index.js.map +0 -1
- package/build/modules/interface/index.d.ts +0 -5
- package/build/modules/interface/index.js +0 -6
- package/build/modules/interface/index.js.map +0 -1
- package/build/modules/interface/interface.canonicalize.d.ts +0 -2
- package/build/modules/interface/interface.canonicalize.js +0 -241
- package/build/modules/interface/interface.canonicalize.js.map +0 -1
- package/build/modules/interface/interface.models.d.ts +0 -6
- package/build/modules/interface/interface.models.js +0 -30
- package/build/modules/interface/interface.models.js.map +0 -1
- package/build/modules/interface/interface.router.d.ts +0 -472
- package/build/modules/interface/interface.router.js +0 -113
- package/build/modules/interface/interface.router.js.map +0 -1
- package/build/modules/interface/interface.schema.d.ts +0 -313
- package/build/modules/interface/interface.schema.js +0 -36
- package/build/modules/interface/interface.schema.js.map +0 -1
- package/build/modules/interface/interface.service.d.ts +0 -19
- package/build/modules/interface/interface.service.js +0 -168
- package/build/modules/interface/interface.service.js.map +0 -1
- package/build/modules/interface/interface.types.d.ts +0 -19
- package/build/modules/interface/interface.types.js +0 -2
- package/build/modules/interface/interface.types.js.map +0 -1
- package/build/modules/item/index.d.ts +0 -5
- package/build/modules/item/index.js +0 -6
- package/build/modules/item/index.js.map +0 -1
- package/build/modules/item/item.models.d.ts +0 -16
- package/build/modules/item/item.models.js +0 -101
- package/build/modules/item/item.models.js.map +0 -1
- package/build/modules/item/item.router.d.ts +0 -263
- package/build/modules/item/item.router.js +0 -70
- package/build/modules/item/item.router.js.map +0 -1
- package/build/modules/item/item.schema.d.ts +0 -778
- package/build/modules/item/item.schema.js +0 -56
- package/build/modules/item/item.schema.js.map +0 -1
- package/build/modules/item/item.service.d.ts +0 -13
- package/build/modules/item/item.service.js +0 -116
- package/build/modules/item/item.service.js.map +0 -1
- package/build/modules/item/item.types.d.ts +0 -55
- package/build/modules/item/item.types.js +0 -2
- package/build/modules/item/item.types.js.map +0 -1
- package/build/modules/job/index.d.ts +0 -5
- package/build/modules/job/index.js +0 -6
- package/build/modules/job/index.js.map +0 -1
- package/build/modules/job/job.models.d.ts +0 -3
- package/build/modules/job/job.models.js +0 -9
- package/build/modules/job/job.models.js.map +0 -1
- package/build/modules/job/job.router.d.ts +0 -146
- package/build/modules/job/job.router.js +0 -32
- package/build/modules/job/job.router.js.map +0 -1
- package/build/modules/job/job.schema.d.ts +0 -67
- package/build/modules/job/job.schema.js +0 -7
- package/build/modules/job/job.schema.js.map +0 -1
- package/build/modules/job/job.service.d.ts +0 -7
- package/build/modules/job/job.service.js +0 -144
- package/build/modules/job/job.service.js.map +0 -1
- package/build/modules/job/job.types.d.ts +0 -16
- package/build/modules/job/job.types.js +0 -2
- package/build/modules/job/job.types.js.map +0 -1
- package/build/modules/market/index.d.ts +0 -5
- package/build/modules/market/index.js +0 -6
- package/build/modules/market/index.js.map +0 -1
- package/build/modules/market/market.models.d.ts +0 -14
- package/build/modules/market/market.models.js +0 -98
- package/build/modules/market/market.models.js.map +0 -1
- package/build/modules/market/market.router.d.ts +0 -230
- package/build/modules/market/market.router.js +0 -56
- package/build/modules/market/market.router.js.map +0 -1
- package/build/modules/market/market.schema.d.ts +0 -949
- package/build/modules/market/market.schema.js +0 -101
- package/build/modules/market/market.schema.js.map +0 -1
- package/build/modules/market/market.service.d.ts +0 -12
- package/build/modules/market/market.service.js +0 -88
- package/build/modules/market/market.service.js.map +0 -1
- package/build/modules/market/market.types.d.ts +0 -49
- package/build/modules/market/market.types.js +0 -2
- package/build/modules/market/market.types.js.map +0 -1
- package/build/modules/product/index.d.ts +0 -5
- package/build/modules/product/index.js +0 -6
- package/build/modules/product/index.js.map +0 -1
- package/build/modules/product/product.models.d.ts +0 -4
- package/build/modules/product/product.models.js +0 -113
- package/build/modules/product/product.models.js.map +0 -1
- package/build/modules/product/product.router.d.ts +0 -447
- package/build/modules/product/product.router.js +0 -71
- package/build/modules/product/product.router.js.map +0 -1
- package/build/modules/product/product.schema.d.ts +0 -654
- package/build/modules/product/product.schema.js +0 -117
- package/build/modules/product/product.schema.js.map +0 -1
- package/build/modules/product/product.service.d.ts +0 -15
- package/build/modules/product/product.service.js +0 -115
- package/build/modules/product/product.service.js.map +0 -1
- package/build/modules/product/product.types.d.ts +0 -28
- package/build/modules/product/product.types.js +0 -2
- package/build/modules/product/product.types.js.map +0 -1
- package/build/modules/profile/index.d.ts +0 -5
- package/build/modules/profile/index.js +0 -6
- package/build/modules/profile/index.js.map +0 -1
- package/build/modules/profile/profile.models.d.ts +0 -2
- package/build/modules/profile/profile.models.js +0 -165
- package/build/modules/profile/profile.models.js.map +0 -1
- package/build/modules/profile/profile.router.d.ts +0 -163
- package/build/modules/profile/profile.router.js +0 -54
- package/build/modules/profile/profile.router.js.map +0 -1
- package/build/modules/profile/profile.schema.d.ts +0 -1
- package/build/modules/profile/profile.schema.js +0 -138
- package/build/modules/profile/profile.schema.js.map +0 -1
- package/build/modules/profile/profile.service.d.ts +0 -11
- package/build/modules/profile/profile.service.js +0 -120
- package/build/modules/profile/profile.service.js.map +0 -1
- package/build/modules/profile/profile.types.d.ts +0 -16
- package/build/modules/profile/profile.types.js +0 -2
- package/build/modules/profile/profile.types.js.map +0 -1
- package/build/modules/raffle/index.d.ts +0 -5
- package/build/modules/raffle/index.js +0 -6
- package/build/modules/raffle/index.js.map +0 -1
- package/build/modules/raffle/raffle.models.d.ts +0 -6
- package/build/modules/raffle/raffle.models.js +0 -36
- package/build/modules/raffle/raffle.models.js.map +0 -1
- package/build/modules/raffle/raffle.router.d.ts +0 -299
- package/build/modules/raffle/raffle.router.js +0 -71
- package/build/modules/raffle/raffle.router.js.map +0 -1
- package/build/modules/raffle/raffle.schema.d.ts +0 -265
- package/build/modules/raffle/raffle.schema.js +0 -21
- package/build/modules/raffle/raffle.schema.js.map +0 -1
- package/build/modules/raffle/raffle.service.d.ts +0 -15
- package/build/modules/raffle/raffle.service.js +0 -115
- package/build/modules/raffle/raffle.service.js.map +0 -1
- package/build/modules/raffle/raffle.types.d.ts +0 -25
- package/build/modules/raffle/raffle.types.js +0 -2
- package/build/modules/raffle/raffle.types.js.map +0 -1
- package/build/modules/skill/index.d.ts +0 -5
- package/build/modules/skill/index.js +0 -6
- package/build/modules/skill/index.js.map +0 -1
- package/build/modules/skill/skill.models.d.ts +0 -9
- package/build/modules/skill/skill.models.js +0 -9
- package/build/modules/skill/skill.models.js.map +0 -1
- package/build/modules/skill/skill.router.d.ts +0 -659
- package/build/modules/skill/skill.router.js +0 -152
- package/build/modules/skill/skill.router.js.map +0 -1
- package/build/modules/skill/skill.schema.d.ts +0 -548
- package/build/modules/skill/skill.schema.js +0 -26
- package/build/modules/skill/skill.schema.js.map +0 -1
- package/build/modules/skill/skill.service.d.ts +0 -32
- package/build/modules/skill/skill.service.js +0 -279
- package/build/modules/skill/skill.service.js.map +0 -1
- package/build/modules/skill/skill.types.d.ts +0 -29
- package/build/modules/skill/skill.types.js +0 -2
- package/build/modules/skill/skill.types.js.map +0 -1
- package/build/modules/video/index.d.ts +0 -5
- package/build/modules/video/index.js +0 -6
- package/build/modules/video/index.js.map +0 -1
- package/build/modules/video/video.models.d.ts +0 -7
- package/build/modules/video/video.models.js +0 -19
- package/build/modules/video/video.models.js.map +0 -1
- package/build/modules/video/video.router.d.ts +0 -563
- package/build/modules/video/video.router.js +0 -112
- package/build/modules/video/video.router.js.map +0 -1
- package/build/modules/video/video.schema.d.ts +0 -456
- package/build/modules/video/video.schema.js +0 -31
- package/build/modules/video/video.schema.js.map +0 -1
- package/build/modules/video/video.service.d.ts +0 -23
- package/build/modules/video/video.service.js +0 -197
- package/build/modules/video/video.service.js.map +0 -1
- package/build/modules/video/video.types.d.ts +0 -28
- package/build/modules/video/video.types.js +0 -2
- package/build/modules/video/video.types.js.map +0 -1
- package/build/router.d.ts +0 -10406
- package/build/router.js +0 -44
- package/build/router.js.map +0 -1
- package/build/types.d.ts +0 -164
- package/build/types.js +0 -19
- package/build/types.js.map +0 -1
- package/build/util/api.js.map +0 -1
- package/build/util/array.js.map +0 -1
- package/build/util/browser.js.map +0 -1
- package/build/util/codebase.js.map +0 -1
- package/build/util/config.js.map +0 -1
- package/build/util/db/index.d.ts +0 -5
- package/build/util/db/index.js +0 -7
- package/build/util/db/index.js.map +0 -1
- package/build/util/db/isPostgresError.d.ts +0 -2
- package/build/util/db/isPostgresError.js +0 -8
- package/build/util/db/isPostgresError.js.map +0 -1
- package/build/util/db/isUniqueConstraintViolation.d.ts +0 -2
- package/build/util/db/isUniqueConstraintViolation.js +0 -3
- package/build/util/db/isUniqueConstraintViolation.js.map +0 -1
- package/build/util/db.d.ts +0 -6
- package/build/util/db.js +0 -51
- package/build/util/db.js.map +0 -1
- package/build/util/decoder.js.map +0 -1
- package/build/util/decoder.test.d.ts +0 -1
- package/build/util/decoder.test.js +0 -7
- package/build/util/decoder.test.js.map +0 -1
- package/build/util/format.js.map +0 -1
- package/build/util/guid.js.map +0 -1
- package/build/util/index.d.ts +0 -74
- package/build/util/index.js +0 -239
- package/build/util/index.js.map +0 -1
- package/build/util/json.js.map +0 -1
- package/build/util/log.d.ts +0 -1
- package/build/util/log.js +0 -6
- package/build/util/log.js.map +0 -1
- package/build/util/math.js.map +0 -1
- package/build/util/merkle.js.map +0 -1
- package/build/util/mongo.js.map +0 -1
- package/build/util/number.js.map +0 -1
- package/build/util/object.js.map +0 -1
- package/build/util/otp.js.map +0 -1
- package/build/util/physics.js.map +0 -1
- package/build/util/process.js.map +0 -1
- package/build/util/rpc.js.map +0 -1
- package/build/util/seer.js.map +0 -1
- package/build/util/string.js.map +0 -1
- package/build/util/text.js.map +0 -1
- package/build/util/time/date.js.map +0 -1
- package/build/util/time/fancyTimeFormat.js.map +0 -1
- package/build/util/time/index.js.map +0 -1
- package/build/util/time/now.js.map +0 -1
- package/build/util/web3/httpProvider.js.map +0 -1
- package/build/util/web3.js.map +0 -1
- package/build/util/websocket.js.map +0 -1
- package/build/util/zk.js.map +0 -1
- package/build/util/zod.js.map +0 -1
- package/modules/area/area.models.ts +0 -15
- package/modules/area/area.router.ts +0 -74
- package/modules/area/area.schema.ts +0 -22
- package/modules/area/area.service.ts +0 -124
- package/modules/area/area.types.ts +0 -26
- package/modules/area/index.ts +0 -5
- package/modules/asset/asset.models.ts +0 -59
- package/modules/asset/asset.router.ts +0 -55
- package/modules/asset/asset.schema.ts +0 -27
- package/modules/asset/asset.service.ts +0 -85
- package/modules/asset/asset.types.ts +0 -22
- package/modules/asset/index.ts +0 -5
- package/modules/chain/chain.models.ts +0 -50
- package/modules/chain/chain.router.ts +0 -104
- package/modules/chain/chain.schema.ts +0 -52
- package/modules/chain/chain.service.ts +0 -167
- package/modules/chain/chain.types.ts +0 -24
- package/modules/chain/index.ts +0 -5
- package/modules/character/character.models.ts +0 -174
- package/modules/character/character.router.ts +0 -314
- package/modules/character/character.schema.ts +0 -147
- package/modules/character/character.service.ts +0 -876
- package/modules/character/character.types.ts +0 -64
- package/modules/character/index.ts +0 -5
- package/modules/chat/chat.models.ts +0 -43
- package/modules/chat/chat.router.ts +0 -67
- package/modules/chat/chat.schema.ts +0 -36
- package/modules/chat/chat.service.ts +0 -128
- package/modules/chat/chat.types.ts +0 -20
- package/modules/chat/index.ts +0 -5
- package/modules/collection/collection.models.ts +0 -76
- package/modules/collection/collection.router.ts +0 -91
- package/modules/collection/collection.schema.ts +0 -90
- package/modules/collection/collection.service.ts +0 -192
- package/modules/collection/collection.types.ts +0 -36
- package/modules/collection/index.ts +0 -5
- package/modules/core/core.models.ts +0 -1380
- package/modules/core/core.router.ts +0 -1781
- package/modules/core/core.schema.ts +0 -847
- package/modules/core/core.service.ts +0 -2824
- package/modules/core/core.types.ts +0 -340
- package/modules/core/index.ts +0 -5
- package/modules/core/mail/applyPatchesOrMail.ts +0 -568
- package/modules/core/mail/mailClaimablePatchesBatch.ts +0 -381
- package/modules/game/game.models.ts +0 -53
- package/modules/game/game.router.ts +0 -110
- package/modules/game/game.schema.ts +0 -23
- package/modules/game/game.service.ts +0 -143
- package/modules/game/game.types.ts +0 -28
- package/modules/game/index.ts +0 -5
- package/modules/interface/index.ts +0 -5
- package/modules/interface/interface.canonicalize.ts +0 -279
- package/modules/interface/interface.models.ts +0 -40
- package/modules/interface/interface.router.ts +0 -175
- package/modules/interface/interface.schema.ts +0 -59
- package/modules/interface/interface.service.ts +0 -356
- package/modules/interface/interface.types.ts +0 -25
- package/modules/item/index.ts +0 -5
- package/modules/item/item.models.ts +0 -124
- package/modules/item/item.router.ts +0 -103
- package/modules/item/item.schema.ts +0 -120
- package/modules/item/item.service.ts +0 -167
- package/modules/item/item.types.ts +0 -74
- package/modules/job/index.ts +0 -5
- package/modules/job/job.models.ts +0 -14
- package/modules/job/job.router.ts +0 -44
- package/modules/job/job.schema.ts +0 -9
- package/modules/job/job.service.ts +0 -243
- package/modules/job/job.types.ts +0 -23
- package/modules/market/index.ts +0 -5
- package/modules/market/market.models.ts +0 -113
- package/modules/market/market.router.ts +0 -73
- package/modules/market/market.schema.ts +0 -140
- package/modules/market/market.service.ts +0 -122
- package/modules/market/market.types.ts +0 -56
- package/modules/product/index.ts +0 -5
- package/modules/product/product.models.ts +0 -166
- package/modules/product/product.router.ts +0 -93
- package/modules/product/product.schema.ts +0 -149
- package/modules/product/product.service.ts +0 -160
- package/modules/product/product.types.ts +0 -33
- package/modules/profile/index.ts +0 -5
- package/modules/profile/profile.models.ts +0 -214
- package/modules/profile/profile.router.ts +0 -72
- package/modules/profile/profile.schema.ts +0 -156
- package/modules/profile/profile.service.ts +0 -149
- package/modules/profile/profile.types.ts +0 -22
- package/modules/raffle/index.ts +0 -5
- package/modules/raffle/raffle.models.ts +0 -44
- package/modules/raffle/raffle.router.ts +0 -90
- package/modules/raffle/raffle.schema.ts +0 -32
- package/modules/raffle/raffle.service.ts +0 -167
- package/modules/raffle/raffle.types.ts +0 -30
- package/modules/skill/index.ts +0 -5
- package/modules/skill/skill.models.ts +0 -16
- package/modules/skill/skill.router.ts +0 -201
- package/modules/skill/skill.schema.ts +0 -40
- package/modules/skill/skill.service.ts +0 -390
- package/modules/skill/skill.types.ts +0 -33
- package/modules/video/index.ts +0 -5
- package/modules/video/video.models.ts +0 -25
- package/modules/video/video.router.ts +0 -143
- package/modules/video/video.schema.ts +0 -46
- package/modules/video/video.service.ts +0 -274
- package/modules/video/video.types.ts +0 -33
- package/router.ts +0 -49
- package/types.ts +0 -183
- package/util/db/index.ts +0 -7
- package/util/db/isPostgresError.ts +0 -9
- package/util/db/isUniqueConstraintViolation.ts +0 -3
- package/util/db.ts +0 -62
- package/util/index.ts +0 -351
- package/util/log.ts +0 -5
- /package/{util/api.ts → api.ts} +0 -0
- /package/{util/array.ts → array.ts} +0 -0
- /package/{util/browser.ts → browser.ts} +0 -0
- /package/build/{util/api.d.ts → api.d.ts} +0 -0
- /package/build/{util/api.js → api.js} +0 -0
- /package/build/{util/array.d.ts → array.d.ts} +0 -0
- /package/build/{util/array.js → array.js} +0 -0
- /package/build/{util/browser.d.ts → browser.d.ts} +0 -0
- /package/build/{util/browser.js → browser.js} +0 -0
- /package/build/{util/codebase.d.ts → codebase.d.ts} +0 -0
- /package/build/{util/codebase.js → codebase.js} +0 -0
- /package/build/{util/config.d.ts → config.d.ts} +0 -0
- /package/build/{util/config.js → config.js} +0 -0
- /package/build/{util/decoder.d.ts → decoder.d.ts} +0 -0
- /package/build/{util/format.d.ts → format.d.ts} +0 -0
- /package/build/{util/format.js → format.js} +0 -0
- /package/build/{util/guid.d.ts → guid.d.ts} +0 -0
- /package/build/{util/guid.js → guid.js} +0 -0
- /package/build/{util/json.d.ts → json.d.ts} +0 -0
- /package/build/{util/json.js → json.js} +0 -0
- /package/build/{util/math.d.ts → math.d.ts} +0 -0
- /package/build/{util/math.js → math.js} +0 -0
- /package/build/{util/merkle.d.ts → merkle.d.ts} +0 -0
- /package/build/{util/mongo.d.ts → mongo.d.ts} +0 -0
- /package/build/{util/number.d.ts → number.d.ts} +0 -0
- /package/build/{util/number.js → number.js} +0 -0
- /package/build/{util/object.d.ts → object.d.ts} +0 -0
- /package/build/{util/object.js → object.js} +0 -0
- /package/build/{util/otp.d.ts → otp.d.ts} +0 -0
- /package/build/{util/otp.js → otp.js} +0 -0
- /package/build/{util/physics.d.ts → physics.d.ts} +0 -0
- /package/build/{util/physics.js → physics.js} +0 -0
- /package/build/{util/process.d.ts → process.d.ts} +0 -0
- /package/build/{util/rpc.d.ts → rpc.d.ts} +0 -0
- /package/build/{util/rpc.js → rpc.js} +0 -0
- /package/build/{util/seer.d.ts → seer.d.ts} +0 -0
- /package/build/{util/seer.js → seer.js} +0 -0
- /package/build/{util/string.d.ts → string.d.ts} +0 -0
- /package/build/{util/string.js → string.js} +0 -0
- /package/build/{util/text.d.ts → text.d.ts} +0 -0
- /package/build/{util/text.js → text.js} +0 -0
- /package/build/{util/time → time}/date.d.ts +0 -0
- /package/build/{util/time → time}/date.js +0 -0
- /package/build/{util/time → time}/fancyTimeFormat.d.ts +0 -0
- /package/build/{util/time → time}/fancyTimeFormat.js +0 -0
- /package/build/{util/time → time}/index.d.ts +0 -0
- /package/build/{util/time → time}/index.js +0 -0
- /package/build/{util/time → time}/now.d.ts +0 -0
- /package/build/{util/time → time}/now.js +0 -0
- /package/build/{util/web3 → web3}/httpProvider.d.ts +0 -0
- /package/build/{util/web3 → web3}/httpProvider.js +0 -0
- /package/build/{util/web3.d.ts → web3.d.ts} +0 -0
- /package/build/{util/websocket.d.ts → websocket.d.ts} +0 -0
- /package/build/{util/zk.d.ts → zk.d.ts} +0 -0
- /package/build/{util/zk.js → zk.js} +0 -0
- /package/{util/codebase.ts → codebase.ts} +0 -0
- /package/{util/config.ts → config.ts} +0 -0
- /package/{util/decoder.test.ts → decoder.test.ts} +0 -0
- /package/{util/format.ts → format.ts} +0 -0
- /package/{util/guid.ts → guid.ts} +0 -0
- /package/{util/json.ts → json.ts} +0 -0
- /package/{util/math.ts → math.ts} +0 -0
- /package/{util/number.ts → number.ts} +0 -0
- /package/{util/object.ts → object.ts} +0 -0
- /package/{util/otp.ts → otp.ts} +0 -0
- /package/{util/physics.ts → physics.ts} +0 -0
- /package/{util/rpc.ts → rpc.ts} +0 -0
- /package/{util/seer.ts → seer.ts} +0 -0
- /package/{util/string.ts → string.ts} +0 -0
- /package/{util/text.ts → text.ts} +0 -0
- /package/{util/time → time}/date.ts +0 -0
- /package/{util/time → time}/fancyTimeFormat.ts +0 -0
- /package/{util/time → time}/index.ts +0 -0
- /package/{util/time → time}/now.ts +0 -0
- /package/{util/types → types}/mongo.d.ts +0 -0
- /package/{util/web3 → web3}/httpProvider.ts +0 -0
- /package/{util/zk.ts → zk.ts} +0 -0
|
@@ -1,568 +0,0 @@
|
|
|
1
|
-
// node/modules/core/mail/applyPatchesOrMail.ts
|
|
2
|
-
import get from 'lodash/get';
|
|
3
|
-
import set from 'lodash/set';
|
|
4
|
-
import type { RouterContext } from '../core.types';
|
|
5
|
-
import type { PatchOp, EntityPatch } from '../../../types';
|
|
6
|
-
|
|
7
|
-
// Reuse your existing function or move it here
|
|
8
|
-
export function applyPatchToObject(obj: any, patch: PatchOp[]) {
|
|
9
|
-
for (const p of patch) {
|
|
10
|
-
if (p.op === 'set') {
|
|
11
|
-
set(obj, p.key, p.value);
|
|
12
|
-
} else if (p.op === 'unset') {
|
|
13
|
-
const parts = p.key.split('.');
|
|
14
|
-
const last = parts.pop();
|
|
15
|
-
const parent = parts.reduce((acc: any, k) => (acc ? acc[k] : undefined), obj);
|
|
16
|
-
if (parent && last) delete parent[last];
|
|
17
|
-
} else if (p.op === 'inc') {
|
|
18
|
-
const cur = Number(get(obj, p.key)) || 0;
|
|
19
|
-
set(obj, p.key, cur + Number(p.value || 0));
|
|
20
|
-
} else if (p.op === 'push') {
|
|
21
|
-
const cur = get(obj, p.key);
|
|
22
|
-
const arr = Array.isArray(cur) ? cur : [];
|
|
23
|
-
arr.push(p.value);
|
|
24
|
-
set(obj, p.key, arr);
|
|
25
|
-
} else if (p.op === 'merge') {
|
|
26
|
-
const cur = get(obj, p.key);
|
|
27
|
-
const base = cur && typeof cur === 'object' ? cur : {};
|
|
28
|
-
set(obj, p.key, { ...base, ...(p.value || {}) });
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// ─────────────────────────────────────────────────────────────
|
|
34
|
-
// Inventory normalization hooks
|
|
35
|
-
// ─────────────────────────────────────────────────────────────
|
|
36
|
-
|
|
37
|
-
async function ensureItemByKey(ctx: RouterContext, itemKey: string, name?: string) {
|
|
38
|
-
const Item = (ctx.app as any)?.model?.Item;
|
|
39
|
-
if (!Item) return null;
|
|
40
|
-
|
|
41
|
-
const found = await Item.findOne?.({ key: itemKey })?.exec?.();
|
|
42
|
-
if (found) return found;
|
|
43
|
-
|
|
44
|
-
try {
|
|
45
|
-
const res = await Item.findOneAndUpdate?.(
|
|
46
|
-
{ key: itemKey },
|
|
47
|
-
{
|
|
48
|
-
$setOnInsert: {
|
|
49
|
-
key: itemKey,
|
|
50
|
-
name: name || itemKey,
|
|
51
|
-
status: 'Active',
|
|
52
|
-
meta: { name: name || itemKey },
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
{ new: true, upsert: true }
|
|
56
|
-
)?.exec?.();
|
|
57
|
-
|
|
58
|
-
return res || (await Item.findOne?.({ key: itemKey })?.exec?.());
|
|
59
|
-
} catch {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Normalizes inventory patch ops:
|
|
66
|
-
* push inventory.0.items { itemKey, quantity? } -> repeated push { itemId, ... }
|
|
67
|
-
*/
|
|
68
|
-
export async function normalizeInventoryPatch(ctx: RouterContext, patch: PatchOp[]) {
|
|
69
|
-
const out: PatchOp[] = [];
|
|
70
|
-
|
|
71
|
-
for (const p of patch) {
|
|
72
|
-
if (p.op === 'push' && (p.key === 'inventory.0.items' || p.key.startsWith('inventory.0.items'))) {
|
|
73
|
-
const v = (p as any).value || {};
|
|
74
|
-
|
|
75
|
-
// already normalized
|
|
76
|
-
if (v.itemId) {
|
|
77
|
-
const q = Math.max(1, Number(v.quantity ?? 1));
|
|
78
|
-
for (let i = 0; i < q; i++) {
|
|
79
|
-
out.push({
|
|
80
|
-
op: 'push',
|
|
81
|
-
key: p.key,
|
|
82
|
-
value: { itemId: v.itemId, x: v.x ?? 1, y: v.y ?? 1, meta: v.meta ?? undefined },
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (v.itemKey) {
|
|
89
|
-
const itemKey = String(v.itemKey);
|
|
90
|
-
const item = await ensureItemByKey(ctx, itemKey, itemKey);
|
|
91
|
-
const q = Math.max(1, Number(v.quantity ?? 1));
|
|
92
|
-
|
|
93
|
-
if (item?._id) {
|
|
94
|
-
for (let i = 0; i < q; i++) {
|
|
95
|
-
out.push({
|
|
96
|
-
op: 'push',
|
|
97
|
-
key: p.key,
|
|
98
|
-
value: { itemId: item._id, x: v.x ?? 1, y: v.y ?? 1, meta: v.meta ?? undefined },
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
} else {
|
|
102
|
-
// fallback keep itemKey
|
|
103
|
-
for (let i = 0; i < q; i++) {
|
|
104
|
-
out.push({
|
|
105
|
-
op: 'push',
|
|
106
|
-
key: p.key,
|
|
107
|
-
value: { itemKey, x: v.x ?? 1, y: v.y ?? 1, meta: v.meta ?? undefined },
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
out.push(p);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return out;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// ─────────────────────────────────────────────────────────────
|
|
123
|
-
// Generic sync emission (NO wrappers)
|
|
124
|
-
// ─────────────────────────────────────────────────────────────
|
|
125
|
-
|
|
126
|
-
type InventorySyncOp =
|
|
127
|
-
| { op: 'add'; itemKey: string; quantity?: number }
|
|
128
|
-
| { op: 'remove'; itemKey: string; quantity?: number };
|
|
129
|
-
|
|
130
|
-
function inventoryOpsFromPatchOps(patchOps: any[]): InventorySyncOp[] {
|
|
131
|
-
const ops: InventorySyncOp[] = [];
|
|
132
|
-
const list = Array.isArray(patchOps) ? patchOps : [];
|
|
133
|
-
|
|
134
|
-
for (const op of list) {
|
|
135
|
-
const key = String(op?.key || '');
|
|
136
|
-
const isInvItems =
|
|
137
|
-
key === 'inventory.0.items' ||
|
|
138
|
-
key.startsWith('inventory.0.items') ||
|
|
139
|
-
// allow future bags without rewriting
|
|
140
|
-
key.includes('.items');
|
|
141
|
-
|
|
142
|
-
if (!isInvItems) continue;
|
|
143
|
-
|
|
144
|
-
if (op?.op === 'push') {
|
|
145
|
-
const v = op?.value || {};
|
|
146
|
-
const itemKey = v?.itemKey ?? v?.itemId;
|
|
147
|
-
if (!itemKey) continue;
|
|
148
|
-
const qty = Number(v?.quantity ?? 1);
|
|
149
|
-
ops.push({ op: 'add', itemKey: String(itemKey), quantity: Number.isFinite(qty) ? qty : 1 });
|
|
150
|
-
continue;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
if (op?.op === 'pull') {
|
|
154
|
-
const v = op?.value || {};
|
|
155
|
-
const itemKey = v?.itemKey ?? v?.itemId;
|
|
156
|
-
if (!itemKey) continue;
|
|
157
|
-
const qty = Number(v?.quantity ?? 1);
|
|
158
|
-
ops.push({ op: 'remove', itemKey: String(itemKey), quantity: Number.isFinite(qty) ? qty : 1 });
|
|
159
|
-
continue;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return ops;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
function inventoryOpsFromEntityPatches(
|
|
167
|
-
patches: EntityPatch[] | undefined
|
|
168
|
-
): Array<{ characterId: string; ops: InventorySyncOp[] }> {
|
|
169
|
-
const out: Array<{ characterId: string; ops: InventorySyncOp[] }> = [];
|
|
170
|
-
for (const ep of patches || []) {
|
|
171
|
-
if (ep?.entityType !== 'character.inventory') continue;
|
|
172
|
-
const characterId = String(ep?.entityId || '');
|
|
173
|
-
if (!characterId) continue;
|
|
174
|
-
|
|
175
|
-
const ops = inventoryOpsFromPatchOps((ep as any)?.ops || []);
|
|
176
|
-
if (ops.length) out.push({ characterId, ops });
|
|
177
|
-
}
|
|
178
|
-
return out;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
async function emitSyncPatch(ctx: RouterContext, input: { target: string; patch: any; reason?: string }) {
|
|
182
|
-
try {
|
|
183
|
-
await (ctx.client as any)?.emit?.sync?.mutate?.({
|
|
184
|
-
kind: 'patch',
|
|
185
|
-
target: input.target,
|
|
186
|
-
patch: input.patch,
|
|
187
|
-
reason: input.reason,
|
|
188
|
-
});
|
|
189
|
-
} catch (e) {
|
|
190
|
-
// never crash gameplay because push failed
|
|
191
|
-
console.warn('[applyPatchesOrMail] emit.sync failed', e);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// ─────────────────────────────────────────────────────────────
|
|
196
|
-
// Mail + Claim abstraction
|
|
197
|
-
// ─────────────────────────────────────────────────────────────
|
|
198
|
-
|
|
199
|
-
type MailKind = 'mail' | 'system' | 'support' | 'dm' | 'group';
|
|
200
|
-
|
|
201
|
-
export type MailReward = { type: 'item' | 'token' | 'reward'; id: string; quantity?: number; meta?: any };
|
|
202
|
-
export type MailEffect = {
|
|
203
|
-
type: 'stat' | 'flag' | 'buff' | 'debuff' | 'effect';
|
|
204
|
-
key?: string;
|
|
205
|
-
delta?: number;
|
|
206
|
-
value?: any;
|
|
207
|
-
label?: string;
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
export type MailPatchMessagePayload = {
|
|
211
|
-
kind: 'patch-grant';
|
|
212
|
-
source: string;
|
|
213
|
-
title?: string;
|
|
214
|
-
body?: string;
|
|
215
|
-
|
|
216
|
-
patches: EntityPatch[];
|
|
217
|
-
|
|
218
|
-
ui?: {
|
|
219
|
-
rewards?: Array<MailReward>;
|
|
220
|
-
effects?: Array<MailEffect>;
|
|
221
|
-
};
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
export type ApplyPatchesResult = {
|
|
225
|
-
appliedNow: EntityPatch[];
|
|
226
|
-
mailed: {
|
|
227
|
-
conversationId: string;
|
|
228
|
-
messageId: string;
|
|
229
|
-
} | null;
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
export async function ensureMailConversation(params: {
|
|
233
|
-
ctx: RouterContext;
|
|
234
|
-
profileId: string;
|
|
235
|
-
kind?: MailKind;
|
|
236
|
-
conversationKey: string;
|
|
237
|
-
title?: string;
|
|
238
|
-
category?: string;
|
|
239
|
-
importance?: number;
|
|
240
|
-
}) {
|
|
241
|
-
const { ctx, profileId, kind = 'mail', conversationKey, title, category, importance } = params;
|
|
242
|
-
|
|
243
|
-
const mongoose = (ctx.app as any).db?.mongoose ?? (ctx.app as any).mongoose;
|
|
244
|
-
const Conversation = (ctx.app as any).model.Conversation;
|
|
245
|
-
|
|
246
|
-
const profileObjId = (() => {
|
|
247
|
-
try {
|
|
248
|
-
return new mongoose.Types.ObjectId(profileId);
|
|
249
|
-
} catch {
|
|
250
|
-
return profileId;
|
|
251
|
-
}
|
|
252
|
-
})();
|
|
253
|
-
|
|
254
|
-
let convo =
|
|
255
|
-
(await Conversation.findOne?.({
|
|
256
|
-
kind,
|
|
257
|
-
key: conversationKey,
|
|
258
|
-
$or: [{ profileId: profileObjId }, { 'participants.profileId': profileObjId }],
|
|
259
|
-
status: { $ne: 'Archived' },
|
|
260
|
-
})?.exec?.()) ?? null;
|
|
261
|
-
|
|
262
|
-
if (convo) return convo;
|
|
263
|
-
|
|
264
|
-
const updated =
|
|
265
|
-
(await Conversation.findOneAndUpdate?.(
|
|
266
|
-
{
|
|
267
|
-
kind,
|
|
268
|
-
key: conversationKey,
|
|
269
|
-
profileId: profileObjId,
|
|
270
|
-
status: { $ne: 'Archived' },
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
$setOnInsert: {
|
|
274
|
-
profileId: profileObjId,
|
|
275
|
-
kind,
|
|
276
|
-
key: conversationKey,
|
|
277
|
-
isLocked: true,
|
|
278
|
-
allowUserSend: false,
|
|
279
|
-
participants: [{ profileId: profileObjId, role: 'user', unreadCount: 0, lastReadDate: new Date(0) }],
|
|
280
|
-
name: title ?? 'System',
|
|
281
|
-
category: category ?? 'system',
|
|
282
|
-
importance: Number(importance ?? 0),
|
|
283
|
-
lastMessageDate: null,
|
|
284
|
-
lastMessagePreview: '',
|
|
285
|
-
messageCount: 0,
|
|
286
|
-
messages: [],
|
|
287
|
-
status: 'Active',
|
|
288
|
-
},
|
|
289
|
-
},
|
|
290
|
-
{ new: true, upsert: true }
|
|
291
|
-
)?.exec?.()) ?? null;
|
|
292
|
-
|
|
293
|
-
if (updated) return updated;
|
|
294
|
-
|
|
295
|
-
return await Conversation.findOne?.({ kind, conversationKey, profileId: profileObjId })?.exec?.();
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
function splitClaimable(patches: EntityPatch[]) {
|
|
299
|
-
const claimable: EntityPatch[] = [];
|
|
300
|
-
const immediate: EntityPatch[] = [];
|
|
301
|
-
|
|
302
|
-
for (const p of patches || []) {
|
|
303
|
-
if (!p?.entityType || !Array.isArray(p.ops)) continue;
|
|
304
|
-
if ((p as any).claimable) claimable.push(p);
|
|
305
|
-
else immediate.push(p);
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
return { claimable, immediate };
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* ✅ Applies NON-claimable patches immediately.
|
|
313
|
-
* ✅ Mails ALL claimable patches.
|
|
314
|
-
* ✅ Emits generic sync.patch for any immediate inventory change.
|
|
315
|
-
*/
|
|
316
|
-
export async function applyPatchesWithInventoryViaMail(params: {
|
|
317
|
-
ctx: RouterContext;
|
|
318
|
-
profile: any;
|
|
319
|
-
character?: any;
|
|
320
|
-
patches: EntityPatch[];
|
|
321
|
-
mail: {
|
|
322
|
-
profileId: string;
|
|
323
|
-
kind?: MailKind;
|
|
324
|
-
conversationKey: string;
|
|
325
|
-
source: string;
|
|
326
|
-
title?: string;
|
|
327
|
-
body?: string;
|
|
328
|
-
category?: string;
|
|
329
|
-
importance?: number;
|
|
330
|
-
ui?: MailPatchMessagePayload['ui'];
|
|
331
|
-
dedupeKey?: string;
|
|
332
|
-
};
|
|
333
|
-
}): Promise<ApplyPatchesResult> {
|
|
334
|
-
const { ctx, profile, character, patches, mail } = params;
|
|
335
|
-
|
|
336
|
-
const { claimable, immediate } = splitClaimable(patches);
|
|
337
|
-
|
|
338
|
-
// Track inventory changes applied immediately
|
|
339
|
-
const immediateInventorySync = inventoryOpsFromEntityPatches(immediate);
|
|
340
|
-
|
|
341
|
-
// 1) Apply immediate patches now
|
|
342
|
-
for (const patch of immediate) {
|
|
343
|
-
if (patch.entityType === 'profile.meta') {
|
|
344
|
-
if (!profile.meta) profile.meta = {};
|
|
345
|
-
applyPatchToObject(profile.meta, patch.ops);
|
|
346
|
-
profile.markModified?.('meta');
|
|
347
|
-
} else if (patch.entityType === 'character.data') {
|
|
348
|
-
if (!character) continue;
|
|
349
|
-
if (!character.data) character.data = {};
|
|
350
|
-
applyPatchToObject(character.data, patch.ops);
|
|
351
|
-
character.markModified?.('data');
|
|
352
|
-
} else if (patch.entityType === 'character.inventory') {
|
|
353
|
-
if (!character) continue;
|
|
354
|
-
if (!Array.isArray(character.inventory)) character.inventory = [];
|
|
355
|
-
if (!character.inventory[0]) character.inventory[0] = { items: [] };
|
|
356
|
-
|
|
357
|
-
const normalized = await normalizeInventoryPatch(ctx, patch.ops);
|
|
358
|
-
applyPatchToObject(character, normalized);
|
|
359
|
-
character.markModified?.('inventory');
|
|
360
|
-
} else {
|
|
361
|
-
throw new Error(`applyPatchesWithInventoryViaMail: unsupported entityType=${patch.entityType}`);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
// persist immediate effects
|
|
366
|
-
await profile.save?.();
|
|
367
|
-
if (character && immediate.some((p) => p.entityType?.startsWith('character.'))) {
|
|
368
|
-
await character.save?.();
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
// ✅ emit sync for immediate inventory changes
|
|
372
|
-
for (const hit of immediateInventorySync) {
|
|
373
|
-
await emitSyncPatch(ctx, {
|
|
374
|
-
target: 'character.inventory',
|
|
375
|
-
patch: {
|
|
376
|
-
characterId: hit.characterId,
|
|
377
|
-
ops: hit.ops, // already reduced, generic
|
|
378
|
-
mode: 'patch',
|
|
379
|
-
source: mail.source,
|
|
380
|
-
reason: 'immediate',
|
|
381
|
-
},
|
|
382
|
-
reason: 'immediate',
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
// 2) If no claimable patches, done
|
|
387
|
-
if (!claimable.length) return { appliedNow: immediate, mailed: null };
|
|
388
|
-
|
|
389
|
-
// 3) Find/create inbox + create message with claim payload (deduped)
|
|
390
|
-
const convo = await ensureMailConversation({
|
|
391
|
-
ctx,
|
|
392
|
-
profileId: mail.profileId,
|
|
393
|
-
kind: mail.kind ?? 'mail',
|
|
394
|
-
conversationKey: mail.conversationKey,
|
|
395
|
-
title: mail.title ?? 'System',
|
|
396
|
-
category: mail.category ?? 'system',
|
|
397
|
-
importance: mail.importance ?? 0,
|
|
398
|
-
});
|
|
399
|
-
|
|
400
|
-
const ConversationMessage = (ctx.app as any).model.ConversationMessage;
|
|
401
|
-
const Conversation = (ctx.app as any).model.Conversation;
|
|
402
|
-
|
|
403
|
-
const dedupeKey = mail.dedupeKey ?? null;
|
|
404
|
-
|
|
405
|
-
if (dedupeKey) {
|
|
406
|
-
const existing = await ConversationMessage.findOne?.({
|
|
407
|
-
conversationId: convo._id,
|
|
408
|
-
'claim.dedupeKey': dedupeKey,
|
|
409
|
-
})?.exec?.();
|
|
410
|
-
|
|
411
|
-
if (existing) {
|
|
412
|
-
return {
|
|
413
|
-
appliedNow: immediate,
|
|
414
|
-
mailed: { conversationId: String(convo._id), messageId: String(existing._id) },
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
const payload: MailPatchMessagePayload = {
|
|
420
|
-
kind: 'patch-grant',
|
|
421
|
-
source: mail.source,
|
|
422
|
-
title: mail.title,
|
|
423
|
-
body: mail.body,
|
|
424
|
-
patches: claimable,
|
|
425
|
-
ui: mail.ui,
|
|
426
|
-
};
|
|
427
|
-
|
|
428
|
-
const msg = await ConversationMessage.create?.({
|
|
429
|
-
conversationId: convo._id,
|
|
430
|
-
role: 'system',
|
|
431
|
-
type: 'reward',
|
|
432
|
-
content: mail.body ?? '',
|
|
433
|
-
payload,
|
|
434
|
-
claim: {
|
|
435
|
-
isClaimable: true,
|
|
436
|
-
claimedDate: null,
|
|
437
|
-
claimedByProfileId: null,
|
|
438
|
-
dedupeKey,
|
|
439
|
-
attachments: [],
|
|
440
|
-
},
|
|
441
|
-
});
|
|
442
|
-
|
|
443
|
-
try {
|
|
444
|
-
const preview = (mail.title ? `${mail.title} — ` : '') + (mail.body ?? '');
|
|
445
|
-
await Conversation.updateOne?.(
|
|
446
|
-
{ _id: convo._id },
|
|
447
|
-
{
|
|
448
|
-
$set: {
|
|
449
|
-
lastMessageDate: new Date(),
|
|
450
|
-
lastMessagePreview: String(preview).slice(0, 140),
|
|
451
|
-
},
|
|
452
|
-
$inc: { messageCount: 1 },
|
|
453
|
-
$push: { messages: msg._id },
|
|
454
|
-
}
|
|
455
|
-
)?.exec?.();
|
|
456
|
-
} catch {
|
|
457
|
-
// ignore
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
return { appliedNow: immediate, mailed: { conversationId: String(convo._id), messageId: String(msg._id) } };
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
/**
|
|
464
|
-
* ✅ Central claim handler
|
|
465
|
-
* ✅ Emits generic sync.patch for any claimed inventory changes.
|
|
466
|
-
*/
|
|
467
|
-
export async function claimMailMessage(params: {
|
|
468
|
-
ctx: RouterContext;
|
|
469
|
-
profile: any;
|
|
470
|
-
character?: any;
|
|
471
|
-
messageId: string;
|
|
472
|
-
}): Promise<{ ok: true }> {
|
|
473
|
-
const { ctx, profile, character, messageId } = params;
|
|
474
|
-
|
|
475
|
-
const ConversationMessage = (ctx.app as any).model.ConversationMessage;
|
|
476
|
-
|
|
477
|
-
const msg = await ConversationMessage.findOneAndUpdate?.(
|
|
478
|
-
{
|
|
479
|
-
_id: messageId,
|
|
480
|
-
'claim.isClaimable': true,
|
|
481
|
-
'claim.claimedDate': null,
|
|
482
|
-
'claim.claimedByProfileId': null,
|
|
483
|
-
},
|
|
484
|
-
{
|
|
485
|
-
$set: {
|
|
486
|
-
'claim.claimedDate': new Date(),
|
|
487
|
-
'claim.claimedByProfileId': String(profile._id),
|
|
488
|
-
},
|
|
489
|
-
},
|
|
490
|
-
{ new: true }
|
|
491
|
-
)?.exec?.();
|
|
492
|
-
|
|
493
|
-
if (!msg) {
|
|
494
|
-
const err: any = new Error('Already claimed or not claimable');
|
|
495
|
-
err.code = 'ALREADY_CLAIMED';
|
|
496
|
-
throw err;
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
const payload = msg.payload as MailPatchMessagePayload | undefined;
|
|
500
|
-
if (!payload || payload.kind !== 'patch-grant' || !Array.isArray(payload.patches)) return { ok: true };
|
|
501
|
-
|
|
502
|
-
// collect inventory sync intents BEFORE normalization mutates anything
|
|
503
|
-
const claimedInventorySync = inventoryOpsFromEntityPatches(payload.patches);
|
|
504
|
-
|
|
505
|
-
let touchedProfileMeta = false;
|
|
506
|
-
let touchedCharacterData = false;
|
|
507
|
-
let touchedCharacterInventory = false;
|
|
508
|
-
|
|
509
|
-
for (const patch of payload.patches) {
|
|
510
|
-
if (!patch?.entityType || !Array.isArray(patch.ops)) continue;
|
|
511
|
-
|
|
512
|
-
if (patch.entityType === 'profile.meta') {
|
|
513
|
-
if (!profile.meta) profile.meta = {};
|
|
514
|
-
applyPatchToObject(profile.meta, patch.ops);
|
|
515
|
-
touchedProfileMeta = true;
|
|
516
|
-
continue;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
if (patch.entityType === 'character.data') {
|
|
520
|
-
if (!character) throw new Error('No character loaded for character.data claim');
|
|
521
|
-
if (!character.data) character.data = {};
|
|
522
|
-
applyPatchToObject(character.data, patch.ops);
|
|
523
|
-
touchedCharacterData = true;
|
|
524
|
-
continue;
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
if (patch.entityType === 'character.inventory') {
|
|
528
|
-
if (!character) throw new Error('No character loaded for inventory claim');
|
|
529
|
-
|
|
530
|
-
if (!Array.isArray(character.inventory)) character.inventory = [];
|
|
531
|
-
if (!character.inventory[0]) character.inventory[0] = { items: [] };
|
|
532
|
-
|
|
533
|
-
const normalized = await normalizeInventoryPatch(ctx, patch.ops);
|
|
534
|
-
applyPatchToObject(character, normalized);
|
|
535
|
-
touchedCharacterInventory = true;
|
|
536
|
-
continue;
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
throw new Error(`claimMailMessage: unsupported entityType=${patch.entityType}`);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
if (touchedProfileMeta) profile.markModified?.('meta');
|
|
543
|
-
if (touchedCharacterData) character?.markModified?.('data');
|
|
544
|
-
if (touchedCharacterInventory) character?.markModified?.('inventory');
|
|
545
|
-
|
|
546
|
-
await profile.save?.();
|
|
547
|
-
if (character && (touchedCharacterData || touchedCharacterInventory)) {
|
|
548
|
-
await character.save?.();
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
// ✅ emit sync for claimed inventory changes
|
|
552
|
-
for (const hit of claimedInventorySync) {
|
|
553
|
-
await ctx.client.emit.sync.mutate({
|
|
554
|
-
kind: 'patch',
|
|
555
|
-
target: 'character.inventory',
|
|
556
|
-
patch: {
|
|
557
|
-
characterId: hit.characterId,
|
|
558
|
-
ops: hit.ops,
|
|
559
|
-
mode: 'patch',
|
|
560
|
-
source: payload.source || 'mail.claim',
|
|
561
|
-
reason: 'claim',
|
|
562
|
-
},
|
|
563
|
-
reason: 'claim',
|
|
564
|
-
});
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
return { ok: true };
|
|
568
|
-
}
|