@wowok/wowok 2.3.8 → 2.3.10

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.
Files changed (107) hide show
  1. package/dist/esm/{arb-B7NNAqML.mjs → arb-qkKnE0MS.mjs} +1 -1
  2. package/dist/esm/base-DVRLzdff.mjs +1 -0
  3. package/dist/esm/bcs/index.d.mts +1 -1
  4. package/dist/esm/{cache-DTr3MtXv.d.mts → cache-CWB_UDG2.d.mts} +6 -0
  5. package/dist/esm/{call-DZtG6l2x.mjs → call-CI7NE6r9.mjs} +1 -1
  6. package/dist/esm/client/index.d.mts +1 -1
  7. package/dist/esm/client/index.mjs +1 -1
  8. package/dist/esm/client-_khvywKG.mjs +1 -0
  9. package/dist/esm/cryptography/index.d.mts +1 -1
  10. package/dist/esm/{evm-account-Dppw7HJc.d.mts → evm-account-BPYk6EpK.d.mts} +27 -1
  11. package/dist/esm/graphql/index.d.mts +1 -1
  12. package/dist/esm/graphql/index.mjs +1 -1
  13. package/dist/esm/{graphql-D2Rx6H0h.mjs → graphql-CY03CqLQ.mjs} +1 -1
  14. package/dist/esm/grpc/index.d.mts +1 -1
  15. package/dist/esm/grpc/index.mjs +1 -1
  16. package/dist/esm/{grpc-BYkFJ8ot.mjs → grpc-CfgKv1Rb.mjs} +1 -1
  17. package/dist/esm/{index-o_aMVwsK.d.mts → index-B-cxGU73.d.mts} +6 -6
  18. package/dist/esm/{index-BB7rqcJ9.d.mts → index-D5JwhC3A.d.mts} +34 -12
  19. package/dist/esm/index.d.mts +6 -4
  20. package/dist/esm/index.mjs +1 -1
  21. package/dist/esm/jsonRpc/index.d.mts +1 -1
  22. package/dist/esm/jsonRpc/index.mjs +1 -1
  23. package/dist/esm/keypairs/ed25519/index.d.mts +1 -1
  24. package/dist/esm/keypairs/falcon512/index.d.mts +1 -1
  25. package/dist/esm/keypairs/passkey/index.d.mts +1 -1
  26. package/dist/esm/keypairs/secp256k1/index.d.mts +1 -1
  27. package/dist/esm/keypairs/secp256r1/index.d.mts +1 -1
  28. package/dist/esm/{messenger-b7VI27mY.mjs → messenger-4Xo_9r_X.mjs} +1 -1
  29. package/dist/esm/{messenger-api-DsV5ffz-.mjs → messenger-api-Bbyq8xdl.mjs} +1 -1
  30. package/dist/esm/multisig/index.d.mts +1 -1
  31. package/dist/esm/{object-ZwHVe_Xm.mjs → object-ClDQzAeq.mjs} +1 -1
  32. package/dist/esm/{proof-DU8afdtW.mjs → proof-BKTOirlc.mjs} +1 -1
  33. package/dist/esm/{received-g0FdzsRW.mjs → received-CcmLP4db.mjs} +1 -1
  34. package/dist/esm/secure-storage-DRwhPVz3.d.mts +95 -0
  35. package/dist/esm/service-DzKulDai.mjs +1 -0
  36. package/dist/esm/{storage-0TLziZMp.d.mts → storage-Ct2mZnD0.d.mts} +8 -1
  37. package/dist/esm/transactions/index.d.mts +1 -1
  38. package/dist/esm/{util-BUonvpyz.mjs → util-DkUS_Uzm.mjs} +1 -1
  39. package/dist/esm/verify/index.d.mts +1 -1
  40. package/dist/esm/w/call/allocation.d.mts +1 -1
  41. package/dist/esm/w/call/allocation.mjs +1 -1
  42. package/dist/esm/w/call/arbitration.d.mts +1 -1
  43. package/dist/esm/w/call/arbitration.mjs +1 -1
  44. package/dist/esm/w/call/base.d.mts +1 -1
  45. package/dist/esm/w/call/base.mjs +1 -1
  46. package/dist/esm/w/call/demand.d.mts +1 -1
  47. package/dist/esm/w/call/demand.mjs +1 -1
  48. package/dist/esm/w/call/guard.d.mts +1 -1
  49. package/dist/esm/w/call/guard.mjs +1 -1
  50. package/dist/esm/w/call/index.d.mts +1 -1
  51. package/dist/esm/w/call/index.mjs +1 -1
  52. package/dist/esm/w/call/machine.d.mts +1 -1
  53. package/dist/esm/w/call/machine.mjs +1 -1
  54. package/dist/esm/w/call/passport.d.mts +1 -1
  55. package/dist/esm/w/call/passport.mjs +1 -1
  56. package/dist/esm/w/call/payment.d.mts +1 -1
  57. package/dist/esm/w/call/payment.mjs +1 -1
  58. package/dist/esm/w/call/permission.d.mts +1 -1
  59. package/dist/esm/w/call/permission.mjs +1 -1
  60. package/dist/esm/w/call/progress.d.mts +1 -1
  61. package/dist/esm/w/call/progress.mjs +1 -1
  62. package/dist/esm/w/call/repository.d.mts +1 -1
  63. package/dist/esm/w/call/repository.mjs +1 -1
  64. package/dist/esm/w/call/reward.d.mts +1 -1
  65. package/dist/esm/w/call/reward.mjs +1 -1
  66. package/dist/esm/w/call/service.d.mts +1 -1
  67. package/dist/esm/w/call/service.mjs +1 -1
  68. package/dist/esm/w/call/treasury.d.mts +1 -1
  69. package/dist/esm/w/call/treasury.mjs +1 -1
  70. package/dist/esm/w/common.d.mts +1 -1
  71. package/dist/esm/w/index.d.mts +5 -3
  72. package/dist/esm/w/index.mjs +1 -1
  73. package/dist/esm/w/local/account.d.mts +3 -2
  74. package/dist/esm/w/local/account.mjs +1 -1
  75. package/dist/esm/w/local/cache.d.mts +1 -1
  76. package/dist/esm/w/local/cache.mjs +1 -1
  77. package/dist/esm/w/local/evm-account.d.mts +1 -1
  78. package/dist/esm/w/local/evm-account.mjs +1 -1
  79. package/dist/esm/w/local/index.d.mts +5 -3
  80. package/dist/esm/w/local/index.mjs +1 -1
  81. package/dist/esm/w/local/secure-storage.d.mts +2 -0
  82. package/dist/esm/w/local/secure-storage.mjs +1 -0
  83. package/dist/esm/w/local/storage.d.mts +2 -2
  84. package/dist/esm/w/local/storage.mjs +1 -1
  85. package/dist/esm/w/local/token.d.mts +1 -1
  86. package/dist/esm/w/local/token.mjs +1 -1
  87. package/dist/esm/w/local/util.mjs +1 -1
  88. package/dist/esm/w/local/wip.mjs +1 -1
  89. package/dist/esm/w/messenger/index.d.mts +1 -1
  90. package/dist/esm/w/messenger/index.mjs +1 -1
  91. package/dist/esm/w/messenger/messenger-api.d.mts +1 -1
  92. package/dist/esm/w/messenger/messenger-api.mjs +1 -1
  93. package/dist/esm/w/messenger/messenger.d.mts +1 -1
  94. package/dist/esm/w/messenger/messenger.mjs +1 -1
  95. package/dist/esm/w/messenger/pq/crypto.mjs +1 -1
  96. package/dist/esm/w/messenger/storage.d.mts +1 -1
  97. package/dist/esm/w/messenger/storage.mjs +1 -1
  98. package/dist/esm/w/messenger/types.d.mts +1 -1
  99. package/dist/esm/w/query/index.d.mts +1 -1
  100. package/dist/esm/w/query/index.mjs +1 -1
  101. package/dist/esm/w/query/object.d.mts +1 -1
  102. package/dist/esm/w/query/object.mjs +1 -1
  103. package/dist/esm/{w-DCO00HIj.mjs → w-CssFtRKC.mjs} +1 -1
  104. package/package.json +4 -1
  105. package/dist/esm/base-5DoRlfD_.mjs +0 -1
  106. package/dist/esm/client-YYCgsO99.mjs +0 -1
  107. package/dist/esm/service-BP_-4e1d.mjs +0 -1
@@ -1,2 +1,2 @@
1
- import { $S as WowObjectData, $b as WowObjectChangeCreated, $x as MultiSigPublicKeyLegacy, $y as MultiGetTransactionBlocksParams, A as isWowJsonRpcClient, AS as WowArgument, Ab as UnsafeTransferObjectParams, Ax as DelegatedStake, Ay as GetCheckpointParams, BS as WowMoveAbilitySet, Bb as WGetMoveFunctionArgTypesParams, Bx as EventId, By as GetNormalizedMoveFunctionParams, C as JsonRpcError, CC as JsonRpcTransportRequestOptions, CS as TransactionEffects, Cb as UnsafePayParams, Cx as CheckpointId, Cy as DryRunTransactionBlockParams, D as PaginationArguments, DS as UpgradeInfo, Db as UnsafeRequestWithdrawStakeParams, Dx as CommitteeInfo, Dy as GetAllBalancesParams, E as OrderArguments, ES as TypeOrigin, Eb as UnsafeRequestAddStakeParams, Ex as CoinSupply, Ey as ExecuteTransactionBlockParams, FS as WowEvent, Fb as WGetChainIdentifierParams, Fx as DynamicFieldInfo, Fy as GetDynamicFieldObjectParams, GS as WowMoveNormalizedField, Gb as WGetObjectParams, Gx as InputObjectKind, Gy as GetOwnedObjectsParams, HS as WowMoveFunctionArgType, Hb as WGetNormalizedMoveModuleParams, Hx as ExecutionStatus, Hy as GetNormalizedMoveModulesByPackageParams, IS as WowEventFilter, Ib as WGetCheckpointParams, Ix as DynamicFieldName, Iy as GetDynamicFieldsParams, JS as WowMoveNormalizedStruct, Jb as WGetTransactionBlockParams, Jx as MoveValue, Jy as GetStakesByIdsParams, KS as WowMoveNormalizedFunction, Kb as WGetProtocolConfigParams, Kx as MoveCallParams, Ky as GetProtocolConfigParams, LS as WowExecutionResult, Lb as WGetCheckpointsParams, Lx as DynamicFieldType, Ly as GetLatestCheckpointSequenceNumberParams, MS as WowChangeEpoch, Mb as WDevInspectTransactionBlockParams, Mx as DevInspectResults, My as GetCoinMetadataParams, NS as WowCoinMetadata, Nb as WDryRunTransactionBlockParams, Nx as DisplayFieldsResponse, Ny as GetCoinsParams, O as WowJsonRpcClient, OS as ValidatorApy, Ob as UnsafeSplitCoinEqualParams, Ox as CompressedSignature, Oy as GetAllCoinsParams, PS as WowEndOfEpochTransactionKind, Pb as WExecuteTransactionBlockParams, Px as DryRunTransactionBlockResponse, Py as GetCommitteeInfoParams, QS as WowObjectChange, Qb as WTryMultiGetPastObjectsParams, Qx as MultiSigPublicKey, Qy as MultiGetObjectsParams, RS as WowGasData, Rb as WGetEventsParams, Rx as ECMHLiveObjectSetDigest, Ry as GetLatestWowSystemStateParams, S as getJsonRpcFullnodeUrl, SC as JsonRpcTransport, SS as TransactionBlockEffectsModifiedAtVersions, Sb as UnsafePayAllWowParams, Sx as CheckpointCommitment, Sy as DevInspectTransactionBlockParams, T as WowHTTPTransportError, TS as TransferObjectParams, Tb as UnsafePublishParams, Tx as CoinStruct, Ty as EryTransactionBlocksParams, US as WowMoveModuleId, Ub as WGetNormalizedMoveModulesByPackageParams, Ux as GasCostSummary, Uy as GetNormalizedMoveStructParams, VS as WowMoveAbort, Vb as WGetNormalizedMoveFunctionParams, Vx as ExecuteTransactionRequestType, Vy as GetNormalizedMoveModuleParams, WS as WowMoveNormalizedEnum, Wb as WGetNormalizedMoveStructParams, Wx as GetPastObjectRequest, Wy as GetObjectParams, XS as WowMoveStructTypeParameter, Xb as WMultiGetTransactionBlocksParams, Xx as MultiSig, Xy as GetTotalSupplyParams, YS as WowMoveNormalizedType, Yb as WMultiGetObjectsParams, Yx as MoveVariant, Yy as GetStakesParams, ZS as WowMoveVisibility, Zb as WTryGetPastObjectParams, Zx as MultiSigLegacy, Zy as GetTransactionBlockParams, _C as WowWithdrawFrom, _S as RawData, _b as TryGetPastObjectParams, _x as AccumulatorOperation, aC as WowParsedData, aS as PaginatedCheckpoints, ab as TCoinMetadataParams, ax as Order, bC as JsonRpcHTTPTransport, bS as TransactionBlockBytes, bb as UnsafeMergeCoinsParams, bx as BalanceChange, by as BscribeEventParams, cC as WowSystemStateSummary, cS as PaginatedEvents, cb as TDynamicFieldObjectParams, cx as DynamicFieldPage, dC as WowTransactionBlockBuilderMode, dS as PaginatedTransactionResponse, db as TOwnedObjectsParams, dx as EpochPage, eC as WowObjectDataFilter, eS as ObjectOwner, eb as QueryEventsParams, ex as WowObjectChangeDeleted, fC as WowTransactionBlockKind, fS as PasskeyAuthenticator, fb as TReferenceGasPriceParams, fx as ProgrammableTransaction, gC as WowValidatorSummary, gS as RPCTransactionRequestParams, gb as TValidatorsApyParams, gx as AccumulatorEvent, hC as WowTransactionBlockResponseQuery, hS as PublicKey, hb as TTotalSupplyParams, hx as WowMovePackage, iC as WowObjectResponseQuery, iS as OwnedObjectRef, ib as TBalanceParams, ix as WowObjectChangeWrapped, jS as WowCallArg, jb as UnsafeTransferWowParams, jx as DevInspectArgs, jy as GetCheckpointsParams, k as WowJsonRpcClientOptions, kS as ValidatorsApy, kb as UnsafeSplitCoinParams, kx as ConsensusDeterminedVersionAssignments, ky as GetBalanceParams, lC as WowTransaction, lS as PaginatedObjectsResponse, lb as TDynamicFieldsParams, lx as EndOfEpochInfo, mC as WowTransactionBlockResponseOptions, mS as ProtocolConfigValue, mb as TStakesParams, mx as WowMoveObject, nC as WowObjectRef, nS as ObjectResponseError, nb as TAllBalancesParams, nx as WowObjectChangePublished, oC as WowProgrammableMoveCall, oS as PaginatedCoins, ob as TCoinsParams, ox as CoinBalance, pC as WowTransactionBlockResponse, pS as ProtocolConfig, pb as TStakesByIdsParams, px as WowMoveNormalizedModules, qS as WowMoveNormalizedModule, qb as WGetTotalTransactionBlocksParams, qx as MoveStruct, qy as GetReferenceGasPriceParams, rC as WowObjectResponse, rS as ObjectValueKind, rb as TAllCoinsParams, rx as WowObjectChangeTransferred, sC as WowReservation, sS as PaginatedDynamicFieldInfos, sb as TCommitteeInfoParams, sx as CheckpointPage, tC as WowObjectDataOptions, tS as ObjectRead, tb as QueryTransactionBlocksParams, tx as WowObjectChangeMutated, uC as WowTransactionBlock, uS as PaginatedStrings, ub as TLatestWowSystemStateParams, ux as EpochInfo, vC as WowWithdrawalTypeArg, vS as Signature, vb as TryMultiGetPastObjectsParams, vx as AccumulatorValue, w as WowHTTPStatusError, wS as TransactionFilter, wb as UnsafePayWowParams, wx as Claim, wy as EryEventsParams, xC as JsonRpcHTTPTransportOptions, xS as TransactionBlockData, xb as UnsafeMoveCallParams, xx as Checkpoint, xy as BscribeTransactionParams, yC as HttpHeaders, yS as StakeObject, yb as UnsafeBatchTransactionParams, yx as Balance, zS as WowMoveAbility, zb as WGetLatestCheckpointSequenceNumberParams, zx as EndOfEpochData, zy as GetMoveFunctionArgTypesParams } from "../index-BB7rqcJ9.mjs";
1
+ import { $S as WowObjectDataFilter, $b as WowObjectChangeDeleted, $x as ObjectOwner, $y as QueryEventsParams, A as isWowJsonRpcClient, AS as WowCallArg, Ab as UnsafeTransferWowParams, Ax as DevInspectArgs, Ay as GetCheckpointsParams, BS as WowMoveAbort, Bb as WGetNormalizedMoveFunctionParams, Bx as ExecuteTransactionRequestType, By as GetNormalizedMoveModuleParams, C as JsonRpcError, CS as TransactionFilter, Cb as UnsafePayWowParams, Cx as Claim, Cy as EryEventsParams, D as PaginationArguments, DS as ValidatorApy, Db as UnsafeSplitCoinEqualParams, Dx as CompressedSignature, Dy as GetAllCoinsParams, E as OrderArguments, ES as UpgradeInfo, Eb as UnsafeRequestWithdrawStakeParams, Ex as CommitteeInfo, Ey as GetAllBalancesParams, FS as WowEventFilter, Fb as WGetCheckpointParams, Fx as DynamicFieldName, Fy as GetDynamicFieldsParams, GS as WowMoveNormalizedFunction, Gb as WGetProtocolConfigParams, Gx as MoveCallParams, Gy as GetProtocolConfigParams, HS as WowMoveModuleId, Hb as WGetNormalizedMoveModulesByPackageParams, Hx as GasCostSummary, Hy as GetNormalizedMoveStructParams, IS as WowExecutionResult, Ib as WGetCheckpointsParams, Ix as DynamicFieldType, Iy as GetLatestCheckpointSequenceNumberParams, JS as WowMoveNormalizedType, Jb as WMultiGetObjectsParams, Jx as MoveVariant, Jy as GetStakesParams, KS as WowMoveNormalizedModule, Kb as WGetTotalTransactionBlocksParams, Kx as MoveStruct, Ky as GetReferenceGasPriceParams, LS as WowGasData, Lb as WGetEventsParams, Lx as ECMHLiveObjectSetDigest, Ly as GetLatestWowSystemStateParams, MS as WowCoinMetadata, Mb as WDryRunTransactionBlockParams, Mx as DisplayFieldsResponse, My as GetCoinsParams, NS as WowEndOfEpochTransactionKind, Nb as WExecuteTransactionBlockParams, Nx as DryRunTransactionBlockResponse, Ny as GetCommitteeInfoParams, O as WowJsonRpcClient, OS as ValidatorsApy, Ob as UnsafeSplitCoinParams, Ox as ConsensusDeterminedVersionAssignments, Oy as GetBalanceParams, PS as WowEvent, Pb as WGetChainIdentifierParams, Px as DynamicFieldInfo, Py as GetDynamicFieldObjectParams, QS as WowObjectData, Qb as WowObjectChangeCreated, Qx as MultiSigPublicKeyLegacy, Qy as MultiGetTransactionBlocksParams, RS as WowMoveAbility, Rb as WGetLatestCheckpointSequenceNumberParams, Rx as EndOfEpochData, Ry as GetMoveFunctionArgTypesParams, S as getJsonRpcFullnodeUrl, SC as JsonRpcTransportRequestOptions, SS as TransactionEffects, Sb as UnsafePayParams, Sx as CheckpointId, Sy as DryRunTransactionBlockParams, T as WowHTTPTransportError, TS as TypeOrigin, Tb as UnsafeRequestAddStakeParams, Tx as CoinSupply, Ty as ExecuteTransactionBlockParams, US as WowMoveNormalizedEnum, Ub as WGetNormalizedMoveStructParams, Ux as GetPastObjectRequest, Uy as GetObjectParams, VS as WowMoveFunctionArgType, Vb as WGetNormalizedMoveModuleParams, Vx as ExecutionStatus, Vy as GetNormalizedMoveModulesByPackageParams, WS as WowMoveNormalizedField, Wb as WGetObjectParams, Wx as InputObjectKind, Wy as GetOwnedObjectsParams, XS as WowMoveVisibility, Xb as WTryGetPastObjectParams, Xx as MultiSigLegacy, Xy as GetTransactionBlockParams, YS as WowMoveStructTypeParameter, Yb as WMultiGetTransactionBlocksParams, Yx as MultiSig, Yy as GetTotalSupplyParams, ZS as WowObjectChange, Zb as WTryMultiGetPastObjectsParams, Zx as MultiSigPublicKey, Zy as MultiGetObjectsParams, _C as WowWithdrawalTypeArg, _S as Signature, _b as TryMultiGetPastObjectsParams, _x as AccumulatorValue, aC as WowProgrammableMoveCall, aS as PaginatedCoins, ab as TCoinsParams, ax as CoinBalance, bC as JsonRpcHTTPTransportOptions, bS as TransactionBlockData, bb as UnsafeMoveCallParams, bx as Checkpoint, by as BscribeTransactionParams, cC as WowTransaction, cS as PaginatedObjectsResponse, cb as TDynamicFieldsParams, cx as EndOfEpochInfo, dC as WowTransactionBlockKind, dS as PasskeyAuthenticator, db as TReferenceGasPriceParams, dx as ProgrammableTransaction, eC as WowObjectDataOptions, eS as ObjectRead, eb as QueryTransactionBlocksParams, ex as WowObjectChangeMutated, fC as WowTransactionBlockResponse, fS as ProtocolConfig, fb as TStakesByIdsParams, fx as WowMoveNormalizedModules, gC as WowWithdrawFrom, gS as RawData, gb as TryGetPastObjectParams, gx as AccumulatorOperation, hC as WowValidatorSummary, hS as RPCTransactionRequestParams, hb as TValidatorsApyParams, hx as AccumulatorEvent, iC as WowParsedData, iS as PaginatedCheckpoints, ib as TCoinMetadataParams, ix as Order, jS as WowChangeEpoch, jb as WDevInspectTransactionBlockParams, jx as DevInspectResults, jy as GetCoinMetadataParams, k as WowJsonRpcClientOptions, kS as WowArgument, kb as UnsafeTransferObjectParams, kx as DelegatedStake, ky as GetCheckpointParams, lC as WowTransactionBlock, lS as PaginatedStrings, lb as TLatestWowSystemStateParams, lx as EpochInfo, mC as WowTransactionBlockResponseQuery, mS as PublicKey, mb as TTotalSupplyParams, mx as WowMovePackage, nC as WowObjectResponse, nS as ObjectValueKind, nb as TAllCoinsParams, nx as WowObjectChangeTransferred, oC as WowReservation, oS as PaginatedDynamicFieldInfos, ob as TCommitteeInfoParams, ox as CheckpointPage, pC as WowTransactionBlockResponseOptions, pS as ProtocolConfigValue, pb as TStakesParams, px as WowMoveObject, qS as WowMoveNormalizedStruct, qb as WGetTransactionBlockParams, qx as MoveValue, qy as GetStakesByIdsParams, rC as WowObjectResponseQuery, rS as OwnedObjectRef, rb as TBalanceParams, rx as WowObjectChangeWrapped, sC as WowSystemStateSummary, sS as PaginatedEvents, sb as TDynamicFieldObjectParams, sx as DynamicFieldPage, tC as WowObjectRef, tS as ObjectResponseError, tb as TAllBalancesParams, tx as WowObjectChangePublished, uC as WowTransactionBlockBuilderMode, uS as PaginatedTransactionResponse, ub as TOwnedObjectsParams, ux as EpochPage, vC as HttpHeaders, vS as StakeObject, vb as UnsafeBatchTransactionParams, vx as Balance, w as WowHTTPStatusError, wS as TransferObjectParams, wb as UnsafePublishParams, wx as CoinStruct, wy as EryTransactionBlocksParams, xC as JsonRpcTransport, xS as TransactionBlockEffectsModifiedAtVersions, xb as UnsafePayAllWowParams, xx as CheckpointCommitment, xy as DevInspectTransactionBlockParams, yC as JsonRpcHTTPTransport, yS as TransactionBlockBytes, yb as UnsafeMergeCoinsParams, yx as BalanceChange, yy as BscribeEventParams, zS as WowMoveAbilitySet, zb as WGetMoveFunctionArgTypesParams, zx as EventId, zy as GetNormalizedMoveFunctionParams } from "../index-D5JwhC3A.mjs";
2
2
  export { type AccumulatorEvent, type AccumulatorOperation, type AccumulatorValue, type Balance, type BalanceChange, type BscribeEventParams, type BscribeTransactionParams, type Checkpoint, type CheckpointCommitment, type CheckpointId, type CheckpointPage, type Claim, type CoinBalance, type CoinStruct, type CoinSupply, type CommitteeInfo, type CompressedSignature, type ConsensusDeterminedVersionAssignments, type DelegatedStake, type DevInspectArgs, type DevInspectResults, type DevInspectTransactionBlockParams, type DisplayFieldsResponse, type DryRunTransactionBlockParams, type DryRunTransactionBlockResponse, type DynamicFieldInfo, type DynamicFieldName, type DynamicFieldPage, type DynamicFieldType, type ECMHLiveObjectSetDigest, type EndOfEpochData, type EndOfEpochInfo, type EpochInfo, type EpochPage, type EryEventsParams, type EryTransactionBlocksParams, type EventId, type ExecuteTransactionBlockParams, type ExecuteTransactionRequestType, type ExecutionStatus, type GasCostSummary, type GetAllBalancesParams, type GetAllCoinsParams, type GetBalanceParams, type GetCheckpointParams, type GetCheckpointsParams, type GetCoinMetadataParams, type GetCoinsParams, type GetCommitteeInfoParams, type GetDynamicFieldObjectParams, type GetDynamicFieldsParams, type GetLatestCheckpointSequenceNumberParams, type GetLatestWowSystemStateParams, type GetMoveFunctionArgTypesParams, type GetNormalizedMoveFunctionParams, type GetNormalizedMoveModuleParams, type GetNormalizedMoveModulesByPackageParams, type GetNormalizedMoveStructParams, type GetObjectParams, type GetOwnedObjectsParams, type GetPastObjectRequest, type GetProtocolConfigParams, type GetReferenceGasPriceParams, type GetStakesByIdsParams, type GetStakesParams, type GetTotalSupplyParams, type GetTransactionBlockParams, type HttpHeaders, type InputObjectKind, JsonRpcError, JsonRpcHTTPTransport, type JsonRpcHTTPTransportOptions, type JsonRpcTransport, type JsonRpcTransportRequestOptions, type MoveCallParams, type MoveStruct, type MoveValue, type MoveVariant, type MultiGetObjectsParams, type MultiGetTransactionBlocksParams, type MultiSig, type MultiSigLegacy, type MultiSigPublicKey, type MultiSigPublicKeyLegacy, type ObjectOwner, type ObjectRead, type ObjectResponseError, type ObjectValueKind, type Order, type OrderArguments, type OwnedObjectRef, type PaginatedCheckpoints, type PaginatedCoins, type PaginatedDynamicFieldInfos, type PaginatedEvents, type PaginatedObjectsResponse, type PaginatedStrings, type PaginatedTransactionResponse, type PaginationArguments, type PasskeyAuthenticator, type ProgrammableTransaction, type ProtocolConfig, type ProtocolConfigValue, type PublicKey, type QueryEventsParams, type QueryTransactionBlocksParams, type RPCTransactionRequestParams, type RawData, type Signature, type StakeObject, type TAllBalancesParams, type TAllCoinsParams, type TBalanceParams, type TCoinMetadataParams, type TCoinsParams, type TCommitteeInfoParams, type TDynamicFieldObjectParams, type TDynamicFieldsParams, type TLatestWowSystemStateParams, type TOwnedObjectsParams, type TReferenceGasPriceParams, type TStakesByIdsParams, type TStakesParams, type TTotalSupplyParams, type TValidatorsApyParams, type TransactionBlockBytes, type TransactionBlockData, type TransactionBlockEffectsModifiedAtVersions, type TransactionEffects, type TransactionFilter, type TransferObjectParams, type TryGetPastObjectParams, type TryMultiGetPastObjectsParams, type TypeOrigin, type UnsafeBatchTransactionParams, type UnsafeMergeCoinsParams, type UnsafeMoveCallParams, type UnsafePayAllWowParams, type UnsafePayParams, type UnsafePayWowParams, type UnsafePublishParams, type UnsafeRequestAddStakeParams, type UnsafeRequestWithdrawStakeParams, type UnsafeSplitCoinEqualParams, type UnsafeSplitCoinParams, type UnsafeTransferObjectParams, type UnsafeTransferWowParams, type UpgradeInfo, type ValidatorApy, type ValidatorsApy, type WDevInspectTransactionBlockParams, type WDryRunTransactionBlockParams, type WExecuteTransactionBlockParams, type WGetChainIdentifierParams, type WGetCheckpointParams, type WGetCheckpointsParams, type WGetEventsParams, type WGetLatestCheckpointSequenceNumberParams, type WGetMoveFunctionArgTypesParams, type WGetNormalizedMoveFunctionParams, type WGetNormalizedMoveModuleParams, type WGetNormalizedMoveModulesByPackageParams, type WGetNormalizedMoveStructParams, type WGetObjectParams, type WGetProtocolConfigParams, type WGetTotalTransactionBlocksParams, type WGetTransactionBlockParams, type WMultiGetObjectsParams, type WMultiGetTransactionBlocksParams, type WTryGetPastObjectParams, type WTryMultiGetPastObjectsParams, type WowArgument, type WowCallArg, type WowChangeEpoch, type WowCoinMetadata, type WowEndOfEpochTransactionKind, type WowEvent, type WowEventFilter, type WowExecutionResult, type WowGasData, WowHTTPStatusError, WowHTTPTransportError, WowJsonRpcClient, type WowJsonRpcClientOptions, type WowMoveAbility, type WowMoveAbilitySet, type WowMoveAbort, type WowMoveFunctionArgType, type WowMoveModuleId, type WowMoveNormalizedEnum, type WowMoveNormalizedField, type WowMoveNormalizedFunction, type WowMoveNormalizedModule, type WowMoveNormalizedModules, type WowMoveNormalizedStruct, type WowMoveNormalizedType, type WowMoveObject, type WowMovePackage, type WowMoveStructTypeParameter, type WowMoveVisibility, type WowObjectChange, type WowObjectChangeCreated, type WowObjectChangeDeleted, type WowObjectChangeMutated, type WowObjectChangePublished, type WowObjectChangeTransferred, type WowObjectChangeWrapped, type WowObjectData, type WowObjectDataFilter, type WowObjectDataOptions, type WowObjectRef, type WowObjectResponse, type WowObjectResponseQuery, type WowParsedData, type WowProgrammableMoveCall, type WowReservation, type WowSystemStateSummary, type WowTransaction, type WowTransactionBlock, type WowTransactionBlockBuilderMode, type WowTransactionBlockKind, type WowTransactionBlockResponse, type WowTransactionBlockResponseOptions, type WowTransactionBlockResponseQuery, type WowValidatorSummary, type WowWithdrawFrom, type WowWithdrawalTypeArg, getJsonRpcFullnodeUrl, isWowJsonRpcClient };
@@ -1 +1 @@
1
- import{a as a22a,i as a22b,n as a22c,o as a22d,r as a22e,s as a22f}from'../client-YYCgsO99.mjs';import{t as a22g}from'../jsonRpc-1qOo1zjv.mjs';export{a22a as JsonRpcError,a22b as JsonRpcHTTPTransport,a22d as WowHTTPStatusError,a22f as WowHTTPTransportError,a22c as WowJsonRpcClient,a22g as getJsonRpcFullnodeUrl,a22e as isWowJsonRpcClient};
1
+ import{a as a22a,i as a22b,n as a22c,o as a22d,r as a22e,s as a22f}from'../client-_khvywKG.mjs';import{t as a22g}from'../jsonRpc-1qOo1zjv.mjs';export{a22a as JsonRpcError,a22b as JsonRpcHTTPTransport,a22d as WowHTTPStatusError,a22f as WowHTTPTransportError,a22c as WowJsonRpcClient,a22g as getJsonRpcFullnodeUrl,a22e as isWowJsonRpcClient};
@@ -1,2 +1,2 @@
1
- import { Mv as Ed25519Keypair, Nv as Ed25519KeypairData, Pv as Ed25519PublicKey, jv as DEFAULT_ED25519_DERIVATION_PATH } from "../../index-BB7rqcJ9.mjs";
1
+ import { Av as DEFAULT_ED25519_DERIVATION_PATH, Mv as Ed25519KeypairData, Nv as Ed25519PublicKey, jv as Ed25519Keypair } from "../../index-D5JwhC3A.mjs";
2
2
  export { DEFAULT_ED25519_DERIVATION_PATH, Ed25519Keypair, type Ed25519KeypairData, Ed25519PublicKey };
@@ -1,2 +1,2 @@
1
- import { gv as Falcon512PublicKey, hv as Falcon512KeypairData, mv as Falcon512Keypair, pv as DEFAULT_FALCON512_DERIVATION_PATH } from "../../index-BB7rqcJ9.mjs";
1
+ import { fv as DEFAULT_FALCON512_DERIVATION_PATH, hv as Falcon512PublicKey, mv as Falcon512KeypairData, pv as Falcon512Keypair } from "../../index-D5JwhC3A.mjs";
2
2
  export { DEFAULT_FALCON512_DERIVATION_PATH, Falcon512Keypair, type Falcon512KeypairData, Falcon512PublicKey };
@@ -1,2 +1,2 @@
1
- import { Sv as findCommonPublicKey, _v as PasskeyPublicKey, bv as PasskeyKeypair, vv as BrowserPasskeyProvider, xv as PasskeyProvider, yv as BrowserPasswordProviderOptions } from "../../index-BB7rqcJ9.mjs";
1
+ import { _v as BrowserPasskeyProvider, bv as PasskeyProvider, gv as PasskeyPublicKey, vv as BrowserPasswordProviderOptions, xv as findCommonPublicKey, yv as PasskeyKeypair } from "../../index-D5JwhC3A.mjs";
2
2
  export { BrowserPasskeyProvider, type BrowserPasswordProviderOptions, PasskeyKeypair, type PasskeyProvider, PasskeyPublicKey, type findCommonPublicKey };
@@ -1,2 +1,2 @@
1
- import { Av as Secp256k1KeypairData, Dv as Secp256k1PublicKey, Ov as DEFAULT_SECP256K1_DERIVATION_PATH, kv as Secp256k1Keypair } from "../../index-BB7rqcJ9.mjs";
1
+ import { Dv as DEFAULT_SECP256K1_DERIVATION_PATH, Ev as Secp256k1PublicKey, Ov as Secp256k1Keypair, kv as Secp256k1KeypairData } from "../../index-D5JwhC3A.mjs";
2
2
  export { DEFAULT_SECP256K1_DERIVATION_PATH, Secp256k1Keypair, type Secp256k1KeypairData, Secp256k1PublicKey };
@@ -1,2 +1,2 @@
1
- import { Cv as Secp256r1PublicKey, Ev as Secp256r1KeypairData, Tv as Secp256r1Keypair, wv as DEFAULT_SECP256R1_DERIVATION_PATH } from "../../index-BB7rqcJ9.mjs";
1
+ import { Cv as DEFAULT_SECP256R1_DERIVATION_PATH, Sv as Secp256r1PublicKey, Tv as Secp256r1KeypairData, wv as Secp256r1Keypair } from "../../index-D5JwhC3A.mjs";
2
2
  export { DEFAULT_SECP256R1_DERIVATION_PATH, Secp256r1Keypair, type Secp256r1KeypairData, Secp256r1PublicKey };
@@ -1 +1 @@
1
- import{a as a31a}from'./sui-types-CuBKFvrd.mjs';import{PQSessionCipher}from'./w/messenger/pq/session.mjs';import{PQSessionStoreAdapter}from'./w/messenger/pq/store-adapter.mjs';import{DEFAULT_MESSENGER_CONFIG,MessengerError,NORMAL_MESSAGE_BYTES_LIMIT,WTS_FILE_BYTES_LIMIT}from'./w/messenger/types.mjs';import{MessageStorage,SessionStateStorage,getDatabase}from'./w/messenger/storage.mjs';import{base64ToBytes,bytesToBase64,hashPlaintext,verifyMessage}from'./w/messenger/crypto.mjs';import*as a31b from'path';import*as a31c from'fs';import{createHash}from'crypto';var MessengerServerClient=class{constructor(a){this['config']={...DEFAULT_MESSENGER_CONFIG,...a};}async['registerDevice'](a){try{const b=await fetch(this['config']['serverUrl']+'/v1/register',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](a)});if(!b['ok']){const d=await b['text']();if(b['status']===0x199){if(d['includes']('different\x20key'))throw new MessengerError('IDENTITY_CONFLICT','Identity\x20already\x20exists\x20with\x20different\x20key:\x20'+d);return{'success':!![],'uploadedCount':0x0,'failedPrekeys':[],'currentTotal':0x0,'maxAllowed':0x64};}throw new MessengerError('SERVER_ERROR','Registration\x20failed:\x20'+b['status']+'\x20'+b['statusText']+'\x20-\x20'+d);}const c=await b['json']();if(c['failedPrekeys']&&c['failedPrekeys']['length']>0x0){}return{'success':c['success'],'uploadedCount':c['uploaded_count'],'failedPrekeys':c['failed_prekeys']||[],'currentTotal':c['current_total'],'maxAllowed':c['max_allowed']};}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20register\x20device',e);}}async['uploadPreKeys'](a){try{const b=await fetch(this['config']['serverUrl']+'/v1/prekeys/upload',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](a)});if(!b['ok']){const d=await b['text']();throw new MessengerError('SERVER_ERROR','Failed\x20to\x20upload\x20prekeys:\x20'+b['status']+'\x20'+b['statusText']+'\x20-\x20'+d);}const c=await b['json']();if(c['failedPrekeys']&&c['failedPrekeys']['length']>0x0)throw new MessengerError('SERVER_ERROR','Some\x20prekeys\x20failed\x20to\x20upload:\x20'+JSON['stringify'](c['failedPrekeys']));return{'success':c['success'],'uploadedCount':c['uploaded_count'],'failedPrekeys':c['failed_prekeys']||[],'currentTotal':c['current_total'],'maxAllowed':c['max_allowed']};}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20upload\x20prekeys',e);}}async['fetchRemoteBundle'](a,b,c,d,e){try{const f=new URLSearchParams({'publicKey':c,'signatureScheme':d['signatureScheme'],'signature':d['signature'],'timestamp':d['timestamp']['toString'](),'nonce':d['nonce']}),g=await fetch(this['config']['serverUrl']+'/v1/bundle/'+a+'?'+f);if(!g['ok']){if(g['status']===0x194)throw new MessengerError('IDENTITY_NOT_FOUND','User\x20'+a+'\x20not\x20found\x20on\x20server');throw new MessengerError('SERVER_ERROR','Failed\x20to\x20fetch\x20remote\x20bundle:\x20'+g['statusText']);}return await g['json']();}catch(h){if(h instanceof MessengerError)throw h;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20fetch\x20remote\x20bundle',h);}}async['sendMessage'](a){try{const b=await fetch(this['config']['serverUrl']+'/v1/message',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](a)}),c=await b['json']();if(!b['ok']){const d=new MessengerError('SERVER_ERROR',c?.['error']?.['message']||c?.['message']||b['statusText']);d['guardList']=c?.['error']?.['guard_list']||c?.['guard_list'];throw d;}return c;}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20send\x20message',e);}}async['pullMessages'](a,b,c,d){try{const e=new URLSearchParams({'publicKey':b,'signatureScheme':c['signatureScheme'],'signature':c['signature'],'timestamp':c['timestamp']['toString'](),'nonce':c['nonce']});if(d!==void 0x0)e['set']('limit',d['toString']());const f=await fetch(this['config']['serverUrl']+'/v1/messages/'+a+'?'+e);if(!f['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20pull\x20messages:\x20'+f['statusText']);return await f['json']();}catch(g){if(g instanceof MessengerError)throw g;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20pull\x20messages',g);}}async['getPrekeyStatus'](a){try{const b=await fetch(this['config']['serverUrl']+'/v1/prekeys/'+a+'/status');if(!b['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20prekey\x20status:\x20'+b['statusText']);const c=await b['json']();return{'currentCount':c['currentCount'],'maxAllowed':c['maxAllowed'],'threshold':c['threshold'],'shouldRefill':c['shouldRefill']};}catch(d){if(d instanceof MessengerError)throw d;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20prekey\x20status',d);}}async['acknowledgeMessages'](a,b,c){try{const d=await fetch(this['config']['serverUrl']+'/v1/messages/ack',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'publicKey':c['publicKey'],'messageIds':a,'senderPublicKey':b,'signatureScheme':c['signatureScheme'],'signature':c['signature'],'timestamp':c['timestamp'],'nonce':c['nonce']})});if(!d['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20acknowledge\x20messages:\x20'+d['statusText']);}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20acknowledge\x20messages',e);}}async['addToBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist',b,'POST');}async['removeFromBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist',b,'DELETE');}async['clearBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist/clear',b,'POST');}async['getBlacklist'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok']){const d=await c['text']();console['error']('getBlacklist\x20error\x20response:',d);throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20blacklist:\x20'+c['statusText']+'\x20-\x20'+d);}return await c['json']();}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20blacklist',e);}}async['existInBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist/exist',b,'POST');}async['addToFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list',b,'POST');}async['removeFromFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list',b,'DELETE');}async['clearFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list/clear',b,'POST');}async['getFriendsList'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20friends\x20list:\x20'+c['statusText']);return await c['json']();}catch(d){if(d instanceof MessengerError)throw d;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20friends\x20list',d);}}async['existInFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list/exist',b,'POST');}async['addToGuardList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/guard-list',b,'POST');}async['removeFromGuardList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/guard-list',b,'DELETE');}async['getGuardList'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/guard-list/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20guard\x20list:\x20'+c['statusText']);return await c['json']();}catch(d){if(d instanceof MessengerError)throw d;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20guard\x20list',d);}}async['updateSettings'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/settings',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok']){const d=await c['text']();throw new MessengerError('SERVER_ERROR','Failed\x20to\x20update\x20settings:\x20'+c['statusText']+'\x20-\x20'+d);}return(await c['json']())['success'];}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20update\x20settings',e);}}async['getSettings'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/settings/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok']){const d=await c['text']();throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20settings:\x20'+c['statusText']+'\x20-\x20'+d);}return await c['json']();}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20settings',e);}}async['_listOperation'](a,b,c='POST'){try{const d=await fetch(a,{'method':c,'headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!d['ok']){const e=await d['text']();throw new MessengerError('SERVER_ERROR','List\x20operation\x20failed:\x20'+d['statusText']+'\x20-\x20'+e);}return await d['json']();}catch(f){if(f instanceof MessengerError)throw f;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20perform\x20list\x20operation',f);}}};new MessengerServerClient();async function getAccount$1(){const {Account:a}=await import('./w/local/account.mjs');return a['Instance']();}var MessengerSession=class{constructor(a,b){this['identity']=null,this['config']={...DEFAULT_MESSENGER_CONFIG,...b},this['serverClient']=new MessengerServerClient(this['config']),this['userAddress']=a;const c=getDatabase(a);this['pqStore']=new PQSessionStoreAdapter(c,a),this['pqCipher']=new PQSessionCipher(this['pqStore'],async()=>{return(await(await getAccount$1())['deriveX25519Identity'](a))['falcon512KeyPair'];});}get['store'](){return this['pqStore'];}get['cipher'](){return this['pqCipher'];}async['ensureIdentity'](a){if(this['identity'])return this['identity'];const b=await this['pqStore']['getIdentityKeyPair'](),c=await this['pqStore']['getRegistrationId']();if(b&&c)return this['identity']={'x25519KeyPair':b,'registrationId':c},this['identity'];const d=await(await getAccount$1())['deriveX25519Identity'](this['userAddress']);return await this['pqStore']['setIdentityKeyPair'](d['x25519KeyPair']),await this['pqStore']['setRegistrationId'](d['registrationId']),this['identity']={'x25519KeyPair':d['x25519KeyPair'],'registrationId':d['registrationId']},this['identity'];}['deriveRegistrationId'](a){const b=a[0x0]<<0x8|a[0x1];return b===0x0?0x1:b;}async['registerDevice'](a){const b=await this['ensureIdentity'](a),c=0x1,d=0x1;let e,f;const g=await this['pqStore']['getSignedPreKeySignature'](c),h=await this['pqStore']['getSignedPreKey'](c),i=await this['pqStore']['getPQPreKey'](d),j=await this['pqStore']['getPQPreKeySignature'](d);if(h&&g&&i&&j)e=h['publicKey'],f=g;else{const u=await this['pqCipher']['generatePreKeyBundle'](c,d,this['config']['prekey_count']);e=u['signedPreKey']['keyPair']['publicKey'],f=u['signedPreKey']['signature'];}const k=await this['generatePreKeyBatch'](this['config']['prekey_count'],a),l=await(await getAccount$1())['get'](a,![]);if(!l?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const m=Date['now'](),n=this['generateNonce'](),o='register:'+l['pubkey']+':'+m+':'+n,p=await(await getAccount$1())['signData'](a,o),q=Buffer['from'](p['signature']['slice'](0x2),'hex'),r=await this['pqStore']['getPQPreKey'](d),s=await this['pqStore']['getPQPreKeySignature'](d),t={'userAddress':a,'deviceId':0x1,'registrationId':b['registrationId'],'identityKey':bytesToBase64(b['x25519KeyPair']['publicKey']),'falcon512PublicKey':bytesToBase64(base64ToBytes(l['pubkey'])['slice'](0x1)),'signedPrekey':{'keyId':c,'publicKey':bytesToBase64(e),'signature':bytesToBase64(f)},'prekeys':k,'publicKey':l['pubkey'],'signatureScheme':'Falcon512','signature':bytesToBase64(q),'timestamp':m,'nonce':n};if(r&&s)t['pqPrekey']={'keyId':d,'publicKey':bytesToBase64(r['publicKey']),'signature':bytesToBase64(s)};await this['serverClient']['registerDevice'](t),await this['verifyRegistrationComplete'](a);}async['verifyRegistrationComplete'](a,b=0xa,c=0x1f4){for(let d=0x0;d<b;d++)try{await this['serverClient']['getPrekeyStatus'](a);return;}catch(e){if(e?.['message']?.['includes']('404')||e?.['status']===0x194){if(d<b-0x1){await new Promise(f=>setTimeout(f,c));continue;}}throw e;}throw new MessengerError('REGISTRATION_FAILED','Registration\x20verification\x20failed\x20after\x20'+b+'\x20attempts');}async['isDeviceRegistered'](a){try{if(!await this['pqStore']['getSignedPreKeySignature'](0x1))return![];return await this['serverClient']['getPrekeyStatus'](a),!![];}catch(b){if(b?.['message']?.['includes']('404')||b?.['status']===0x194)return![];return![];}}async['generatePreKeyBatch'](a,b){if(a<=0x0)return[];const c=[],{generateX25519KeyPair:d}=await import('./w/messenger/pq/crypto.mjs'),e=Math['floor'](Math['random']()*0x7fffff00);for(let f=0x0;f<a;f++){const g=e+f,h=await this['pqStore']['getOneTimePreKey'](g);if(h){const m=bytesToBase64(h['publicKey']),n=await(await getAccount$1())['signData'](b,h['publicKey']),o=Buffer['from'](n['signature']['slice'](0x2),'hex');c['push']({'keyId':g,'publicKey':m,'signature':bytesToBase64(o)});continue;}const j=d(),k=await(await getAccount$1())['signData'](b,j['publicKey']),l=Buffer['from'](k['signature']['slice'](0x2),'hex');await this['pqStore']['setOneTimePreKey'](g,j),c['push']({'keyId':g,'publicKey':bytesToBase64(j['publicKey']),'signature':bytesToBase64(l)});}return c;}async['ensurePreKeys'](a,b=![]){const c=await this['serverClient']['getPrekeyStatus'](a);if(!b&&c['currentCount']>=c['maxAllowed'])return;const d=c['maxAllowed']-c['currentCount'];if(d<=0x0)return;await this['ensureIdentity'](a);const e=await this['generatePreKeyBatch'](d,a);if(e['length']===0x0)return;const f=await(await getAccount$1())['get'](a,![]);if(!f?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const g=Date['now'](),h=this['generateNonce'](),i='upload_prekeys:'+f['pubkey']+':'+g+':'+h,j=await(await getAccount$1())['signData'](a,i),k=Buffer['from'](j['signature']['slice'](0x2),'hex');await this['serverClient']['uploadPreKeys']({'userAddress':a,'prekeys':e,'publicKey':f['pubkey'],'signatureScheme':'Falcon512','signature':bytesToBase64(k),'timestamp':g,'nonce':h});}['generateNonce'](){const a=new Uint8Array(0x10);return crypto['getRandomValues'](a),Array['from'](a,c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('');}async['establishSession'](a,b,c=0x1,d){if(await this['pqCipher']['hasSession'](b,c))return;if(!d){const k=await(await getAccount$1())['get'](a,![]);if(!k?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const l=Date['now'](),m=this['generateNonce'](),n=k['pubkey'],o='get_bundle:'+a+':'+l+':'+m,p=await(await getAccount$1())['signData'](a,o),q=Buffer['from'](p['signature']['slice'](0x2),'hex');d=await this['serverClient']['fetchRemoteBundle'](b,a,n,{'signatureScheme':'Falcon512','signature':bytesToBase64(new Uint8Array(q)),'timestamp':l,'nonce':m},c);}const e=d['signedPrekey'];if(!e)throw new MessengerError('IDENTITY_NOT_FOUND','No\x20signed\x20prekey\x20available\x20for\x20'+b);const f=base64ToBytes(d['identityKey']),g=d['falcon512PublicKey']?base64ToBytes(d['falcon512PublicKey']):f,h=base64ToBytes(e['publicKey']),i=base64ToBytes(e['signature']),j={'registrationId':d['registrationId'],'deviceId':c,'identityKey':f,'falcon512PublicKey':g,'signedPreKey':{'keyId':e['keyId'],'publicKey':h,'signature':i},'pqPreKey':d['pqPreKey']?{'keyId':d['pqPreKey']['keyId'],'publicKey':base64ToBytes(d['pqPreKey']['publicKey']),'signature':base64ToBytes(d['pqPreKey']['signature'])}:void 0x0};if(d['oneTimePrekey']){const r=base64ToBytes(d['oneTimePrekey']['publicKey']);j['oneTimePreKey']={'keyId':d['oneTimePrekey']['keyId'],'publicKey':r};}if(d['pqPreKey']){const s=base64ToBytes(d['pqPreKey']['publicKey']),t=base64ToBytes(d['pqPreKey']['signature']);j['pqPreKey']={'keyId':d['pqPreKey']['keyId'],'publicKey':s,'signature':t};}await this['pqCipher']['processPreKeyBundle'](b,c,j);}async['encryptMessage'](a,b,c,d=0x1){let e=0x0;const f=0x5;while(e<=f)try{!await this['pqCipher']['hasSession'](b,d)&&(console['log']('[Session]\x20建立新会话\x20(尝试\x20'+(e+0x1)+'/6)'),await this['establishSession'](a,b,d));const g=new TextEncoder()['encode'](c),h=await this['pqCipher']['encryptMessage'](b,g,d);return{'type':h['type'],'body':h['body']['buffer'],'registrationId':h['registrationId']};}catch(i){console['error']('[Session]\x20加密失败\x20(尝试\x20'+(e+0x1)+'/6):',i);if(e>=f)throw i;console['log']('[Session]\x20尝试删除旧会话并重新建立...');try{await this['pqStore']['removeSession'](b,d),e++,await new Promise(j=>setTimeout(j,0x64));}catch(j){console['error']('[Session]\x20重新建立会话失败:',j);throw i;}}throw new MessengerError('ENCRYPTION_FAILED','Encryption\x20failed\x20after\x20multiple\x20attempts');}async['decryptMessage'](a,b,c,d,e=0x1){const f=new TextDecoder(),g=new Uint8Array(c);let h=0x0;const i=0x5,j=await this['pqCipher']['hasSession'](b,e);if(d!==0x3&&!j){console['log']('[Session]\x20收到\x20WHISPER_MESSAGE\x20但无现有会话,需要等待\x20PREKEY_MESSAGE');throw new Error('收到\x20WHISPER_MESSAGE\x20但无现有会话,需要等待\x20PREKEY_MESSAGE');}while(h<=i)try{let k;if(d===0x3){console['log']('[Session]\x20收到\x20PREKEY_MESSAGE,尝试解密\x20(尝试\x20'+(h+0x1)+'/6)');try{return k=await this['pqCipher']['decryptMessage'](b,g,e),console['log']('[Session]\x20PREKEY_MESSAGE\x20解密成功!'),f['decode'](k);}catch(l){console['log']('[Session]\x20直接解密\x20PREKEY_MESSAGE\x20失败:\x20'+(l instanceof Error?l['message']:String(l)));if(j&&h===0x0){const m=a['toLowerCase'](),n=b['toLowerCase']();if(m<n){console['log']('[Session]\x20我的地址较小\x20('+m+'\x20<\x20'+n+'),保留我的会话,稍后重试');throw new Error('PREKEY\x20竞争:我的地址较小,保留我的会话');}else return console['log']('[Session]\x20我的地址较大\x20('+m+'\x20>\x20'+n+'),删除我的会话,用对方的\x20PREKEY_MESSAGE\x20建立新会话'),await this['pqStore']['removeSession'](b,e),console['log']('[Session]\x20已删除旧会话,重新尝试解密...'),k=await this['pqCipher']['decryptMessage'](b,g,e),console['log']('[Session]\x20PREKEY_MESSAGE\x20解密成功,新会话已建立'),f['decode'](k);}else throw l;}}else k=await this['pqCipher']['decryptMessage'](b,g,e);return f['decode'](k);}catch(o){console['error']('[Session\x20Debug]\x20解密失败\x20(尝试\x20'+(h+0x1)+'/6):'),console['error']('\x20\x20错误消息:\x20'+(o instanceof Error?o['message']:String(o))),console['error']('\x20\x20上下文:'),console['error']('\x20\x20\x20\x20-\x20myAddress:\x20'+a),console['error']('\x20\x20\x20\x20-\x20peerAddress:\x20'+b),console['error']('\x20\x20\x20\x20-\x20msgType:\x20'+d+'\x20('+(d===0x3?'PREKEY':'WHISPER')+')');if(h>=i)throw o;console['log']('[Session]\x20尝试重新建立会话...');try{j&&(console['log']('[Session]\x20删除旧会话'),await this['pqStore']['removeSession'](b,e));if(d===0x3)console['log']('[Session]\x20收到的是\x20PREKEY_MESSAGE,等待发送方的\x20PreKey\x20即可重建会话');else console['log']('[Session]\x20收到的是\x20WHISPER_MESSAGE,需要让对方重新发送\x20PREKEY_MESSAGE');h++,await new Promise(p=>setTimeout(p,0x64));}catch(p){console['error']('[Session]\x20重新建立会话失败:',p);throw o;}}throw new MessengerError('DECRYPTION_FAILED','Decryption\x20failed\x20after\x20multiple\x20attempts');}async['getIdentityKey'](){return bytesToBase64((await this['ensureIdentity']())['x25519KeyPair']['publicKey']);}async['getRegistrationId'](){return(await this['ensureIdentity']())['registrationId'];}},SessionStateManager=class{constructor(a){this['store']=a;}async['snapshotSession'](a,b){const c=await this['store']['getSession'](a,b);return{'sessionData':c?JSON['stringify'](c):null,'timestamp':Date['now']()};}async['rollbackSession'](a,b,c){if(c['sessionData']){const d=JSON['parse'](c['sessionData']);await this['store']['setSession'](a,b,d),console['log']('[SessionState]\x20回滚会话:\x20'+a+'.'+b);}else await this['store']['removeSession'](a,b),console['log']('[SessionState]\x20清除会话:\x20'+a+'.'+b);}async['commitSession'](a,b){console['log']('[SessionState]\x20提交新会话');}},DecryptionEngine=class{constructor(a){this['store']=a,this['cipher']=new PQSessionCipher(a),this['sessionManager']=new SessionStateManager(a);}async['decryptMessage'](a,b,c,d,e=0x1){const f=await this['sessionManager']['snapshotSession'](b,e);try{if(d===0x3)return await this['handlePreKeyMessage'](a,b,c,e,f);else return await this['handleWhisperMessage'](a,b,c,e,f);}catch(g){return await this['sessionManager']['rollbackSession'](b,e,f),{'success':![],'sessionUpdated':![],'sessionRolledBack':!![],'messageType':d===0x3?'PREKEY':'WHISPER','error':g instanceof Error?g['message']:String(g)};}}async['handlePreKeyMessage'](a,b,c,d,e){console['log']('[Decrypt]\x20处理\x20PREKEY_MESSAGE\x20from\x20'+b);const f=new TextDecoder(),g=new Uint8Array(c),h=await this['cipher']['decryptMessage'](b,g,d),i=f['decode'](h);console['log']('[Decrypt]\x20PREKEY_MESSAGE\x20解密成功'),await this['sessionManager']['commitSession'](b,d);const j=a['toLowerCase']();if(j<b['toLowerCase']())console['log']('[Decrypt]\x20小地址('+j+')保存接收会话用于解密,发送会话保持不变');else console['log']('[Decrypt]\x20大地址('+j+')接受新会话');return{'success':!![],'plaintext':i,'sessionUpdated':!![],'sessionRolledBack':![],'messageType':'PREKEY'};}async['handleWhisperMessage'](a,b,c,d,e){console['log']('[Decrypt]\x20处理\x20WHISPER_MESSAGE\x20from\x20'+b);if(!await this['cipher']['hasSession'](b,d))throw new Error('No\x20session\x20for\x20WHISPER_MESSAGE');const f=new TextDecoder(),g=new Uint8Array(c),h=await this['cipher']['decryptMessage'](b,g,d),i=f['decode'](h);return console['log']('[Decrypt]\x20WHISPER_MESSAGE\x20解密成功'),{'success':!![],'plaintext':i,'sessionUpdated':!![],'sessionRolledBack':![],'messageType':'WHISPER'};}};function canonicalizeJson(a){if(a===void 0x0)return'null';if(a===null||typeof a!=='object')return JSON['stringify'](a);if(Array['isArray'](a))return'['+a['map'](canonicalizeJson)['join'](',')+']';const b=a;return'{'+Object['keys'](b)['sort']()['filter'](c=>b[c]!==void 0x0)['map'](c=>'\x22'+c+'\x22:'+canonicalizeJson(b[c]))['join'](',')+'}';}async function getAccount(){const {Account:a}=await import('./w/local/account.mjs');return a['Instance']();}var Messenger=class{constructor(a,b){this['userAddress']=null,this['onMessageCallback']=null,this['pollingTimer']=null,this['messageConsecutiveEmptyPulls']=0x0,this['prekeyConsecutiveOkCount']=0x0,this['isPollingRunning']=![],this['waitingMessages']=new Map(),this['failedMessages']=new Map(),this['waitingMessageRetries']=new Map(),this['userAddress']=a,this['config']={...DEFAULT_MESSENGER_CONFIG,...b},this['session']=new MessengerSession(a,this['config']),this['serverClient']=new MessengerServerClient(this['config']),this['messageStorage']=new MessageStorage(a),this['sessionStateStorage']=new SessionStateStorage(a),this['decryptionEngine']=new DecryptionEngine(this['session']['store']),this['currentMessageInterval']=this['config']['message_poll_default_interval_ms']??0x168*0x3e8;}['getUserAddress'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');return this['userAddress'];}async['getPublicKey'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');return(await(await getAccount())['get'](this['userAddress'],![]))?.['pubkey']||'';}['isValidGuardMessage'](a,b){return Boolean(a&&b&&a31a(a)&&a31a(b));}async['generateSignatureParams'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b=await(await getAccount())['get'](this['userAddress'],![]);if(!b?.['secret'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20or\x20no\x20secret\x20key\x20for\x20'+this['userAddress']);const {Falcon512Keypair:c}=await import('./keypairs/falcon512/index.mjs'),d=c['fromSecretKey'](b['secret']),e=d['getPublicKey']()['toWowPublicKey'](),f=Date['now'](),g=this['generateNonce'](),h=a+':'+e+':'+f+':'+g,i=await d['sign'](new TextEncoder()['encode'](h));return{'signatureScheme':'Falcon512','signature':Buffer['from'](i)['toString']('base64'),'timestamp':f,'nonce':g};}['generateNonce'](){const a=new Uint8Array(0x10);return crypto['getRandomValues'](a),Array['from'](a,c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('');}async['initialize'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');await this['session']['ensureIdentity'](this['userAddress']),await this['session']['registerDevice'](this['userAddress']),await this['session']['ensurePreKeys'](this['userAddress']),await this['checkAndRefillPrekeys'](),this['startPollingTimer']();}async['checkAndRefillPrekeys'](){if(!this['userAddress'])return;await this['session']['ensurePreKeys'](this['userAddress'],![]);}['startPollingTimer'](){if(this['pollingTimer'])clearTimeout(this['pollingTimer']);this['isPollingRunning']=!![],this['scheduleNextPoll']();}['stopPollingTimer'](){this['isPollingRunning']=![],this['pollingTimer']&&(clearTimeout(this['pollingTimer']),this['pollingTimer']=null);}['scheduleNextPoll'](){if(!this['isPollingRunning'])return;const a=this['getNextPollInterval']();this['pollingTimer']=setTimeout(()=>{this['poll']()['catch'](b=>{})['finally'](()=>{this['scheduleNextPoll']();});},a);}['getNextPollInterval'](){if(this['waitingMessages']['size']>0x0)return this['config']['message_poll_waiting_interval_ms']??0x3*0x3e8;return this['currentMessageInterval'];}async['poll'](){if(!this['userAddress'])return;try{const a=await this['pullMessages']();if(a['messages']['length']>0x0){this['messageConsecutiveEmptyPulls']=0x0,this['currentMessageInterval']=this['config']['message_poll_fast_interval_ms']??0x6*0x3e8;if(this['onMessageCallback'])this['onMessageCallback'](a['messages']);}else this['messageConsecutiveEmptyPulls']++,this['messageConsecutiveEmptyPulls']>=(this['config']['message_poll_consecutive_empty_limit']??0x3)&&(this['currentMessageInterval']=this['config']['message_poll_default_interval_ms']??0x168*0x3e8,this['messageConsecutiveEmptyPulls']=0x0);if(a['prekey_status']){if(a['prekey_status']['shouldRefill'])this['prekeyConsecutiveOkCount']=0x0,await this['checkAndRefillPrekeys']();else{this['prekeyConsecutiveOkCount']++;if(this['prekeyConsecutiveOkCount']>=(this['config']['prekey_poll_consecutive_ok_limit']??0x3))this['prekeyConsecutiveOkCount']=0x0;}}}catch(b){}}['triggerFastPoll'](){this['currentMessageInterval']=this['config']['message_poll_fast_interval_ms']??0x6*0x3e8,this['messageConsecutiveEmptyPulls']=0x0;if(this['isPollingRunning']){if(this['pollingTimer'])clearTimeout(this['pollingTimer']);this['scheduleNextPoll']();}}async['sendMessage'](a,b,c){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const d=Date['now'](),e=Date['now'](),f=this['generateNonce'](),g=new TextEncoder()['encode'](b)['length'];if(g>0x2800)throw new MessengerError('INVALID_INPUT','Message\x20size\x20('+g+'\x20bytes)\x20exceeds\x20maximum\x20allowed\x20size\x20('+NORMAL_MESSAGE_BYTES_LIMIT+'\x20bytes).\x20Consider\x20using\x20sendZipFile\x20for\x20large\x20content.');await this['pullMessages']();const h=this['messageStorage']['getLastReceivedLeafIndex'](this['userAddress'],a),i=await this['session']['encryptMessage'](this['userAddress'],a,b),j=Buffer['from'](new Uint8Array(i['body']))['toString']('base64'),k=hashPlaintext(b,d,c?.['guardAddress'],c?.['passportAddress'],h),l=await(await getAccount())['get'](this['userAddress'],![]);if(!l)throw new MessengerError('IDENTITY_NOT_FOUND','User\x20account\x20not\x20found');const m=l['pubkey'],n=c?.['guardAddress']||'',o=c?.['passportAddress']||'',p=h>=0x0?h['toString']():'',q=c?.['force']?'true':'false',r='send_message:'+this['userAddress']+':'+a+':'+n+':'+o+':'+k+':'+p+':'+m+':'+e+':'+f+':'+q,s=await(await getAccount())['signData'](this['userAddress'],r),t=Buffer['from'](s['signature']['slice'](0x2),'hex'),u=bytesToBase64(new Uint8Array(t)),v=await this['serverClient']['sendMessage']({'sender':s['publicKey'],'recipient':a,'ciphertext':j,'plaintextHash':k,'clientTimestamp':d,'msgType':i['type'],'signatureScheme':'Falcon512','signature':u,'timestamp':e,'nonce':f,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'force':c?.['force'],'lastReceivedLeafIndex':h>=0x0?h:void 0x0}),w={'messageId':v['messageId'],'fromAddress':this['userAddress'],'toAddress':a,'plaintextHash':k,'plaintext':b,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'lastReceivedLeafIndex':h,'direction':'sent','status':v['status']==='confirmed'?'confirmed':'pending','msgType':i['type'],'createdAt':d};v['merkleData']&&(w['leafIndex']=v['merkleData']['leafIndex'],w['prevRoot']=v['merkleData']['prevRoot'],w['newRoot']=v['merkleData']['newRoot'],w['serverSignature']=v['merkleData']['serverSignature'],w['serverTimestamp']=v['merkleData']['serverTimestamp'],w['serverPublicKey']=v['merkleData']['serverPublicKey'],this['sessionStateStorage']['updateSessionState'](this['userAddress'],a,{'currentRoot':v['merkleData']['newRoot'],'prevRoot':v['merkleData']['prevRoot'],'lastLeafIndex':v['merkleData']['leafIndex'],'lastSyncAt':Date['now']()}));this['messageStorage']['saveMessage'](w);if(v['pendingMerkleData'])for(const [x,y]of Object['entries'](v['pendingMerkleData'])){const z=this['messageStorage']['getMessage'](x);if(z&&z['status']==='pending')this['messageStorage']['updateMessageStatus'](x,'confirmed',{'leafIndex':y['leafIndex'],'newRoot':y['newRoot'],'serverSignature':y['serverSignature'],'serverTimestamp':y['serverTimestamp'],'serverPublicKey':y['serverPublicKey']});}return this['triggerFastPoll'](),{'messageId':v['messageId'],'status':w['status'],'merkleData':v['merkleData'],'guardList':v['guard_list'],'lastReceivedLeafIndex':h>=0x0?h:void 0x0};}async['pullMessages'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b=Date['now'](),c=this['generateNonce'](),d='fetch_messages:'+this['userAddress']+':'+(a||0x64)+':'+b+':'+c,e=(await(await getAccount())['get'](this['userAddress'],![]))?.['pubkey']||'',f=await(await getAccount())['signData'](this['userAddress'],d),g={'signatureScheme':'Falcon512','signature':bytesToBase64(Buffer['from'](f['signature']['slice'](0x2),'hex')),'timestamp':b,'nonce':c},h=await this['serverClient']['pullMessages'](this['userAddress'],e,g,a);if(h['messages']['length']===0x0)return{'messages':[],'prekey_status':h['prekey_status']};const i=[],j=[],k=[...h['messages']]['sort'](function(l,m){return(l['clientTimestamp']||0x0)-(m['clientTimestamp']||0x0);});await this['processWaitingMessages'](i,j);for(const l of k){if(this['waitingMessages']['has'](l['id'])){j['push'](l['id']);continue;}if(this['failedMessages']['has'](l['id'])){j['push'](l['id']);continue;}if(this['messageStorage']['getMessage'](l['id'])){j['push'](l['id']);continue;}const m=await this['tryDecryptMessage'](l);if(m['success']&&m['message']&&m['decryptedData'])this['messageStorage']['saveMessage'](m['message']),i['push'](m['decryptedData']),j['push'](l['id']),this['waitingMessages']['delete'](l['id']);else{if(m['shouldRetry'])this['waitingMessages']['set'](l['id'],l);else this['failedMessages']['set'](l['id'],{'message':l,'error':m['error']||'Unknown\x20error'}),await this['saveFailedMessage'](l,m['error']||'Unknown\x20error'),j['push'](l['id']);}}if(this['waitingMessages']['size']>0x0&&this['isPollingRunning'])this['reschedulePolling']();if(j['length']>0x0&&this['userAddress']){const n=Date['now'](),o=this['generateNonce'](),p=await(await getAccount())['get'](this['userAddress'],![]);if(p?.['pubkey']){const q='ack_messages:'+this['userAddress']+':'+j['join'](',')+':'+p['pubkey']+':'+n+':'+o,r=await(await getAccount())['signData'](this['userAddress'],q),s=Buffer['from'](r['signature']['slice'](0x2),'hex'),t=bytesToBase64(new Uint8Array(s));await this['serverClient']['acknowledgeMessages'](j,r['publicKey'],{'publicKey':r['publicKey'],'signatureScheme':'Falcon512','signature':t,'timestamp':n,'nonce':o});}}return{'messages':i,'prekey_status':h['prekey_status']};}['getLastSentLeafIndex'](a){if(!this['userAddress'])return-0x1;const b=this['messageStorage']['getMessagesBySession'](this['userAddress'],a)['filter'](c=>c['direction']==='sent'&&c['leafIndex']!==void 0x0);if(b['length']===0x0)return-0x1;return Math['max'](...b['map'](c=>c['leafIndex']));}['getSessionMessages'](a){if(!this['userAddress'])return[];return this['messageStorage']['getMessagesBySession'](this['userAddress'],a);}['getSessionState'](a){if(!this['userAddress'])return;return this['sessionStateStorage']['getSessionState'](this['userAddress'],a);}async['submitChainProof'](a,b,c){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const d=this['sessionStateStorage']['getSessionState'](this['userAddress'],b);if(!d||!d['currentRoot'])throw new MessengerError('SESSION_NOT_ESTABLISHED','No\x20session\x20state\x20found');const e=this['messageStorage']['getMessagesBySession'](this['userAddress'],b),f=e[e['length']-0x1];if(!f||!f['serverPublicKey']||!f['serverSignature'])throw new MessengerError('INVALID_PROOF','No\x20temporal\x20proof\x20(missing\x20server\x20public\x20key\x20or\x20signature),\x20cannot\x20submit\x20Proof\x20to\x20WoWok\x20blockchain');const g=f['serverPublicKey'],h=f['serverSignature'],i={'sessionId':d['sessionId'],'merkleRoot':d['currentRoot'],'messageCount':d['messageCount'],'timestamp':Date['now']()},{CallProof:j}=await import('./proof-DU8afdtW.mjs')['then'](l=>l['r']),k=await new j({'proof':JSON['stringify'](i),'server_pubkey':g,'server_signature':h,'proof_type':0x1,'description':c||'Messenger\x20session\x20proof\x20for\x20'+this['userAddress']+'\x20<->\x20'+b,'item_count':d['messageCount'],'about_address':d['sessionId']})['call'](a);return{'proofAddress':(k?.['objectChanges'])?.['find'](l=>l['objectType']?.['includes']('Proof'))?.['objectId']||'','txHash':k?.['digest']||''};}['destroy'](){this['stopPollingTimer']();}['disconnect'](){this['destroy']();}['setOnMessageCallback'](a){this['onMessageCallback']=a;}async['sendZipFile'](a,b,c){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const d=await this['loadFileData'](b),{ZipWriter:e,BlobWriter:f,Uint8ArrayReader:g}=await import('@zip.js/zip.js'),h=c?.['fileName']||a31b['basename'](b)||'file.zip',i=c?.['contentType']||this['detectContentType'](h),j=new f('application/zip'),k=new e(j);await k['add'](h,new g(d)),await k['close']();const l=await j['getData'](),m=new Uint8Array(await l['arrayBuffer']());if(m['length']>0x500000)throw new MessengerError('INVALID_INPUT','ZIP\x20file\x20size\x20('+m['length']+'\x20bytes)\x20exceeds\x20local\x20maximum\x20allowed\x20size\x20('+WTS_FILE_BYTES_LIMIT+'\x20bytes)');const n='0x'+createHash('sha256')['update'](m)['digest']('hex'),o=Buffer['from'](m)['toString']('base64'),p={'fileName':h+'.zip','fileSize':m['length'],'fileHash':n,'contentType':i};await this['pullMessages']();const q=this['messageStorage']['getLastReceivedLeafIndex'](this['userAddress'],a),r=Date['now'](),s=await this['session']['encryptMessage'](this['userAddress'],a,o),t=Buffer['from'](new Uint8Array(s['body']))['toString']('base64'),u=c?.['guardAddress']||'',v=c?.['passportAddress']||'',w=hashPlaintext(o,r,u,v,q),x=Date['now'](),y=this['generateNonce'](),z=await(await getAccount())['get'](this['userAddress'],![]);if(!z)throw new MessengerError('IDENTITY_NOT_FOUND','User\x20account\x20not\x20found');const A=z['pubkey'],B=q>=0x0?q['toString']():'',C=c?.['force']?'true':'false',D='send_message:'+this['userAddress']+':'+a+':'+u+':'+v+':'+w+':'+B+':'+A+':'+x+':'+y+':'+C,E=await(await getAccount())['signData'](this['userAddress'],D),F=Buffer['from'](E['signature']['slice'](0x2),'hex'),G=bytesToBase64(new Uint8Array(F)),H=await this['serverClient']['sendMessage']({'sender':E['publicKey'],'recipient':a,'ciphertext':t,'plaintextHash':w,'clientTimestamp':r,'msgType':s['type'],'zipMetadata':p,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'force':c?.['force'],'lastReceivedLeafIndex':q>=0x0?q:void 0x0,'signatureScheme':'Falcon512','signature':G,'timestamp':x,'nonce':y}),I={'messageId':H['messageId'],'fromAddress':this['userAddress'],'toAddress':a,'plaintextHash':w,'plaintext':o,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'lastReceivedLeafIndex':q,'direction':'sent','status':H['status']==='confirmed'?'confirmed':'pending','msgType':s['type'],'zipMetadata':p,'createdAt':r};H['merkleData']&&(I['leafIndex']=H['merkleData']['leafIndex'],I['prevRoot']=H['merkleData']['prevRoot'],I['newRoot']=H['merkleData']['newRoot'],I['serverSignature']=H['merkleData']['serverSignature'],I['serverTimestamp']=H['merkleData']['serverTimestamp'],I['serverPublicKey']=H['merkleData']['serverPublicKey'],this['sessionStateStorage']['updateSessionState'](this['userAddress'],a,{'currentRoot':H['merkleData']['newRoot'],'prevRoot':H['merkleData']['prevRoot'],'lastLeafIndex':H['merkleData']['leafIndex'],'lastSyncAt':Date['now']()}));this['messageStorage']['saveMessage'](I);if(H['pendingMerkleData'])for(const [J,K]of Object['entries'](H['pendingMerkleData'])){const L=this['messageStorage']['getMessage'](J);if(L&&L['status']==='pending')this['messageStorage']['updateMessageStatus'](J,'confirmed',{'leafIndex':K['leafIndex'],'newRoot':K['newRoot'],'serverSignature':K['serverSignature'],'serverTimestamp':K['serverTimestamp'],'serverPublicKey':K['serverPublicKey']});}return this['triggerFastPoll'](),{'messageId':H['messageId'],'status':I['status'],'merkleData':H['merkleData'],'guardList':H['guard_list'],'lastReceivedLeafIndex':q>=0x0?q:void 0x0};}async['loadFileData'](a){if(a['startsWith']('http://')||a['startsWith']('https://')){const d=await fetch(a);if(!d['ok'])throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20fetch\x20file\x20from\x20'+a+':\x20'+d['statusText']);const e=await d['arrayBuffer']();return new Uint8Array(e);}const b=a31b['resolve'](a);if(!a31c['existsSync'](b))throw new MessengerError('FILE_NOT_FOUND','File\x20not\x20found:\x20'+b);const c=a31c['readFileSync'](b);return new Uint8Array(c);}['detectContentType'](a){switch(a31b['extname'](a)['toLowerCase']()){case'.wts':return'wts';case'.wip':return'wip';default:return'zip';}}async['_createSignedRequest'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b=Date['now'](),c=this['generateNonce'](),d=b+':'+c+':'+canonicalizeJson(a),e=await(await getAccount())['signData'](this['userAddress'],d),f=Buffer['from'](e['signature']['slice'](0x2),'hex'),g=bytesToBase64(new Uint8Array(f)),h=await(await getAccount())['get'](this['userAddress'],![]);if(!h||!h['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20public\x20key\x20not\x20found');return{'userAddress':this['userAddress'],'publicKey':h['pubkey'],'signatureScheme':'Falcon512','signature':g,'timestamp':b,'nonce':c,'data':a};}['_validateAddresses'](a){const b=[],c=[];for(const d of a)if(a31a(d))b['push'](d);else c['push'](d);return{'valid':b,'invalid':c};}async['addToBlacklist'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'add','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['addToBlacklist'](this['userAddress'],e);}async['removeFromBlacklist'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'remove','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['removeFromBlacklist'](this['userAddress'],e);}async['clearBlacklist'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['clearBlacklist'](this['userAddress'],a);}async['getBlacklist'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getBlacklist'](this['userAddress'],a);}async['existInBlacklist'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'exist','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['existInBlacklist'](this['userAddress'],e);}async['addToFriendsList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'add','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['addToFriendsList'](this['userAddress'],e);}async['removeFromFriendsList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'remove','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['removeFromFriendsList'](this['userAddress'],e);}async['clearFriendsList'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['clearFriendsList'](this['userAddress'],a);}async['getFriendsList'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getFriendsList'](this['userAddress'],a);}async['existInFriendsList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'exist','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['existInFriendsList'](this['userAddress'],e);}async['addToGuardList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b={'guards':a},c=await this['_createSignedRequest'](b);return this['serverClient']['addToGuardList'](this['userAddress'],c);}async['removeFromGuardList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'remove','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['removeFromGuardList'](this['userAddress'],e);}async['getGuardList'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getGuardList'](this['userAddress'],a);}async['getSettings'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getSettings'](this['userAddress'],a);}async['setSettings'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b={'allowStrangerMessages':a['allowStrangerMessages'],'maxInboxSize':a['maxInboxSize']},c=await this['_createSignedRequest'](b);return this['serverClient']['updateSettings'](this['userAddress'],c);}async['tryDecryptMessage'](a){try{const b=Uint8Array['from'](Buffer['from'](a['bodyB64'],'base64')),c=await this['decryptionEngine']['decryptMessage'](this['userAddress'],a['from'],b['buffer'],a['msgType']);if(!c['success'])return{'success':![],'shouldRetry':this['isRetryableError'](c['error']||''),'error':c['error'],'sessionUpdated':c['sessionUpdated']};const d=c['plaintext'];if(!a['clientTimestamp'])throw new Error('Missing\x20clientTimestamp\x20for\x20message\x20'+a['id']);if(!a['plaintextHash'])throw new Error('Missing\x20plaintextHash\x20for\x20message\x20'+a['id']);const e=verifyMessage({'messageId':a['id'],'plaintext':d,'plaintextHash':a['plaintextHash'],'createdAt':a['clientTimestamp'],'guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'serverSignature':a['merkleMetadata']?.['serverSignature'],'serverPublicKey':a['merkleMetadata']?.['serverPublicKey'],'merkleMetadata':a['merkleMetadata']?{'prevRoot':a['merkleMetadata']['prevRoot'],'newRoot':a['merkleMetadata']['newRoot'],'serverTimestamp':a['merkleMetadata']['serverTimestamp'],'leafIndex':a['merkleMetadata']['leafIndex'],'proofSiblings':a['merkleMetadata']['proofSiblings'],'proofIndices':a['merkleMetadata']['proofIndices']}:void 0x0});if(!e['valid'])throw new Error(e['error']);const f={'messageId':a['id'],'fromAddress':a['from'],'toAddress':this['userAddress'],'plaintextHash':a['plaintextHash'],'plaintext':d,'guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'direction':'received','status':'decrypted','msgType':a['msgType'],'leafIndex':a['merkleMetadata']?.['leafIndex'],'prevRoot':a['merkleMetadata']?.['prevRoot'],'newRoot':a['merkleMetadata']?.['newRoot'],'serverSignature':a['merkleMetadata']?.['serverSignature'],'serverTimestamp':a['merkleMetadata']?.['serverTimestamp'],'serverPublicKey':a['merkleMetadata']?.['serverPublicKey'],'createdAt':a['clientTimestamp'],'receivedAt':Date['now'](),'zipMetadata':a['zipMetadata']};if(a['merkleMetadata'])this['sessionStateStorage']['updateSessionState'](this['userAddress'],a['from'],{'currentRoot':a['merkleMetadata']['newRoot'],'prevRoot':a['merkleMetadata']['prevRoot'],'lastLeafIndex':a['merkleMetadata']['leafIndex'],'lastSyncAt':Date['now']()});const g=a['merkleMetadata']?.['serverTimestamp']||a['clientTimestamp']||Date['now']();if(a['lastReceivedLeafIndex']!==void 0x0&&a['lastReceivedLeafIndex']>=0x0){const h=this['messageStorage']['getMessagesBySession'](this['userAddress'],a['from'])['filter'](i=>i['direction']==='sent'&&i['status']==='confirmed'&&i['leafIndex']!==void 0x0&&i['leafIndex']<=a['lastReceivedLeafIndex']);for(const i of h)this['messageStorage']['updateMessageStatus'](i['messageId'],'read');}return{'success':!![],'shouldRetry':![],'message':f,'decryptedData':{'id':a['id'],'from':a['from'],'plaintext':d,'timestamp':g,'merkleVerified':!!a['merkleMetadata'],'merkleData':a['merkleMetadata']?{'leafIndex':a['merkleMetadata']['leafIndex'],'rootHash':a['merkleMetadata']['newRoot']}:void 0x0},'sessionUpdated':c['sessionUpdated']};}catch(j){const k=j instanceof Error?j['message']:String(j);return{'success':![],'shouldRetry':this['isRetryableError'](k),'error':k};}}['isRetryableError'](a){return[/message number/i,/chain key/i,/session not found/i,/prekey not found/i,/PREKEY 竞争:我的地址较小,保留我的会话/i,/The operation failed for an operation-specific reason/i,/DOMException/i,/收到 WHISPER_MESSAGE 但无现有会话,需要等待 PREKEY_MESSAGE/i]['some'](b=>b['test'](a));}async['processWaitingMessages'](a,b){if(this['waitingMessages']['size']===0x0)return;const c=[],d=Array['from'](this['waitingMessages']['values']())['sort'](function(e,f){return(e['clientTimestamp']||0x0)-(f['clientTimestamp']||0x0);});for(const e of d){const f=e['id'],g=await this['tryDecryptMessage'](e);if(g['success']&&g['message']&&g['decryptedData'])this['messageStorage']['saveMessage'](g['message']),a['push'](g['decryptedData']),b['push'](f),c['push'](f),this['waitingMessageRetries']['delete'](f);else{if(!g['shouldRetry'])this['failedMessages']['set'](f,{'message':e,'error':g['error']||'Unknown\x20error'}),await this['saveFailedMessage'](e,g['error']||'Unknown\x20error'),b['push'](f),c['push'](f),this['waitingMessageRetries']['delete'](f);else{const h=(this['waitingMessageRetries']['get'](f)||0x0)+0x1;if(h>=0x3)this['failedMessages']['set'](f,{'message':e,'error':g['error']||'Retry\x20limit\x20exceeded'}),await this['saveFailedMessage'](e,g['error']||'Retry\x20limit\x20exceeded'),b['push'](f),c['push'](f),this['waitingMessageRetries']['delete'](f);else this['waitingMessageRetries']['set'](f,h);}}}for(const i of c)this['waitingMessages']['delete'](i);if(c['length']>0x0){}}async['saveFailedMessage'](a,b){const c={'messageId':a['id'],'fromAddress':a['from'],'toAddress':this['userAddress'],'plaintextHash':a['plaintextHash']||'','guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'direction':'received','status':'decrypt_failed','msgType':a['msgType'],'leafIndex':a['merkleMetadata']?.['leafIndex'],'prevRoot':a['merkleMetadata']?.['prevRoot'],'newRoot':a['merkleMetadata']?.['newRoot'],'serverSignature':a['merkleMetadata']?.['serverSignature'],'serverTimestamp':a['merkleMetadata']?.['serverTimestamp'],'serverPublicKey':a['merkleMetadata']?.['serverPublicKey'],'createdAt':a['clientTimestamp']||Date['now'](),'receivedAt':Date['now'](),'zipMetadata':a['zipMetadata'],'decryptError':b,'decryptAttempts':0x1,'lastDecryptAttemptAt':Date['now']()};this['messageStorage']['saveMessage'](c);}['reschedulePolling'](){if(!this['isPollingRunning']||!this['pollingTimer'])return;clearTimeout(this['pollingTimer']),this['pollingTimer']=null,this['scheduleNextPoll']();}['getFailedMessages'](){return Array['from'](this['failedMessages']['entries']())['map'](([a,b])=>({'messageId':a,'from':b['message']['from'],'error':b['error'],'leafIndex':b['message']['merkleMetadata']?.['leafIndex']}));}['clearFailedMessages'](a){if(a)this['failedMessages']['delete'](a);else this['failedMessages']['clear']();}['getWaitingMessageCount'](){return this['waitingMessages']['size'];}};export{canonicalizeJson as n,Messenger as t};
1
+ import{a as a30a}from'./sui-types-CuBKFvrd.mjs';import{PQSessionCipher}from'./w/messenger/pq/session.mjs';import{PQSessionStoreAdapter}from'./w/messenger/pq/store-adapter.mjs';import{DEFAULT_MESSENGER_CONFIG,MessengerError,NORMAL_MESSAGE_BYTES_LIMIT,WTS_FILE_BYTES_LIMIT}from'./w/messenger/types.mjs';import{MessageStorage,SessionStateStorage,getDatabase}from'./w/messenger/storage.mjs';import{base64ToBytes,bytesToBase64,hashPlaintext,verifyMessage}from'./w/messenger/crypto.mjs';import*as a30b from'path';import*as a30c from'fs';import{createHash}from'crypto';var MessengerServerClient=class{constructor(a){this['config']={...DEFAULT_MESSENGER_CONFIG,...a};}async['registerDevice'](a){try{const b=await fetch(this['config']['serverUrl']+'/v1/register',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](a)});if(!b['ok']){const d=await b['text']();if(b['status']===0x199){if(d['includes']('different\x20key'))throw new MessengerError('IDENTITY_CONFLICT','Identity\x20already\x20exists\x20with\x20different\x20key:\x20'+d);return{'success':!![],'uploadedCount':0x0,'failedPrekeys':[],'currentTotal':0x0,'maxAllowed':0x64};}throw new MessengerError('SERVER_ERROR','Registration\x20failed:\x20'+b['status']+'\x20'+b['statusText']+'\x20-\x20'+d);}const c=await b['json']();if(c['failedPrekeys']&&c['failedPrekeys']['length']>0x0){}return{'success':c['success'],'uploadedCount':c['uploaded_count'],'failedPrekeys':c['failed_prekeys']||[],'currentTotal':c['current_total'],'maxAllowed':c['max_allowed']};}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20register\x20device',e);}}async['uploadPreKeys'](a){try{const b=await fetch(this['config']['serverUrl']+'/v1/prekeys/upload',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](a)});if(!b['ok']){const d=await b['text']();throw new MessengerError('SERVER_ERROR','Failed\x20to\x20upload\x20prekeys:\x20'+b['status']+'\x20'+b['statusText']+'\x20-\x20'+d);}const c=await b['json']();if(c['failedPrekeys']&&c['failedPrekeys']['length']>0x0)throw new MessengerError('SERVER_ERROR','Some\x20prekeys\x20failed\x20to\x20upload:\x20'+JSON['stringify'](c['failedPrekeys']));return{'success':c['success'],'uploadedCount':c['uploaded_count'],'failedPrekeys':c['failed_prekeys']||[],'currentTotal':c['current_total'],'maxAllowed':c['max_allowed']};}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20upload\x20prekeys',e);}}async['fetchRemoteBundle'](a,b,c,d,e){try{const f=new URLSearchParams({'publicKey':c,'signatureScheme':d['signatureScheme'],'signature':d['signature'],'timestamp':d['timestamp']['toString'](),'nonce':d['nonce']}),g=await fetch(this['config']['serverUrl']+'/v1/bundle/'+a+'?'+f);if(!g['ok']){if(g['status']===0x194)throw new MessengerError('IDENTITY_NOT_FOUND','User\x20'+a+'\x20not\x20found\x20on\x20server');throw new MessengerError('SERVER_ERROR','Failed\x20to\x20fetch\x20remote\x20bundle:\x20'+g['statusText']);}return await g['json']();}catch(h){if(h instanceof MessengerError)throw h;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20fetch\x20remote\x20bundle',h);}}async['sendMessage'](a){try{const b=await fetch(this['config']['serverUrl']+'/v1/message',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](a)}),c=await b['json']();if(!b['ok']){const d=new MessengerError('SERVER_ERROR',c?.['error']?.['message']||c?.['message']||b['statusText']);d['guardList']=c?.['error']?.['guard_list']||c?.['guard_list'];throw d;}return c;}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20send\x20message',e);}}async['pullMessages'](a,b,c,d){try{const e=new URLSearchParams({'publicKey':b,'signatureScheme':c['signatureScheme'],'signature':c['signature'],'timestamp':c['timestamp']['toString'](),'nonce':c['nonce']});if(d!==void 0x0)e['set']('limit',d['toString']());const f=await fetch(this['config']['serverUrl']+'/v1/messages/'+a+'?'+e);if(!f['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20pull\x20messages:\x20'+f['statusText']);return await f['json']();}catch(g){if(g instanceof MessengerError)throw g;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20pull\x20messages',g);}}async['getPrekeyStatus'](a){try{const b=await fetch(this['config']['serverUrl']+'/v1/prekeys/'+a+'/status');if(!b['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20prekey\x20status:\x20'+b['statusText']);const c=await b['json']();return{'currentCount':c['currentCount'],'maxAllowed':c['maxAllowed'],'threshold':c['threshold'],'shouldRefill':c['shouldRefill']};}catch(d){if(d instanceof MessengerError)throw d;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20prekey\x20status',d);}}async['acknowledgeMessages'](a,b,c){try{const d=await fetch(this['config']['serverUrl']+'/v1/messages/ack',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'publicKey':c['publicKey'],'messageIds':a,'senderPublicKey':b,'signatureScheme':c['signatureScheme'],'signature':c['signature'],'timestamp':c['timestamp'],'nonce':c['nonce']})});if(!d['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20acknowledge\x20messages:\x20'+d['statusText']);}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20acknowledge\x20messages',e);}}async['addToBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist',b,'POST');}async['removeFromBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist',b,'DELETE');}async['clearBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist/clear',b,'POST');}async['getBlacklist'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok']){const d=await c['text']();console['error']('getBlacklist\x20error\x20response:',d);throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20blacklist:\x20'+c['statusText']+'\x20-\x20'+d);}return await c['json']();}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20blacklist',e);}}async['existInBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist/exist',b,'POST');}async['addToFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list',b,'POST');}async['removeFromFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list',b,'DELETE');}async['clearFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list/clear',b,'POST');}async['getFriendsList'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20friends\x20list:\x20'+c['statusText']);return await c['json']();}catch(d){if(d instanceof MessengerError)throw d;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20friends\x20list',d);}}async['existInFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list/exist',b,'POST');}async['addToGuardList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/guard-list',b,'POST');}async['removeFromGuardList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/guard-list',b,'DELETE');}async['getGuardList'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/guard-list/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20guard\x20list:\x20'+c['statusText']);return await c['json']();}catch(d){if(d instanceof MessengerError)throw d;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20guard\x20list',d);}}async['updateSettings'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/settings',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok']){const d=await c['text']();throw new MessengerError('SERVER_ERROR','Failed\x20to\x20update\x20settings:\x20'+c['statusText']+'\x20-\x20'+d);}return(await c['json']())['success'];}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20update\x20settings',e);}}async['getSettings'](a,b){try{const c=await fetch(this['config']['serverUrl']+'/v1/spam-protection/'+a+'/settings/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok']){const d=await c['text']();throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20settings:\x20'+c['statusText']+'\x20-\x20'+d);}return await c['json']();}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20settings',e);}}async['_listOperation'](a,b,c='POST'){try{const d=await fetch(a,{'method':c,'headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!d['ok']){const e=await d['text']();throw new MessengerError('SERVER_ERROR','List\x20operation\x20failed:\x20'+d['statusText']+'\x20-\x20'+e);}return await d['json']();}catch(f){if(f instanceof MessengerError)throw f;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20perform\x20list\x20operation',f);}}};new MessengerServerClient();async function getAccount$1(){const {Account:a}=await import('./w/local/account.mjs');return a['Instance']();}var MessengerSession=class{constructor(a,b){this['identity']=null,this['config']={...DEFAULT_MESSENGER_CONFIG,...b},this['serverClient']=new MessengerServerClient(this['config']),this['userAddress']=a;const c=getDatabase(a);this['pqStore']=new PQSessionStoreAdapter(c,a),this['pqCipher']=new PQSessionCipher(this['pqStore'],async()=>{return(await(await getAccount$1())['deriveX25519Identity'](a))['falcon512KeyPair'];});}get['store'](){return this['pqStore'];}get['cipher'](){return this['pqCipher'];}async['ensureIdentity'](a){if(this['identity'])return this['identity'];const b=await this['pqStore']['getIdentityKeyPair'](),c=await this['pqStore']['getRegistrationId']();if(b&&c)return this['identity']={'x25519KeyPair':b,'registrationId':c},this['identity'];const d=await(await getAccount$1())['deriveX25519Identity'](this['userAddress']);return await this['pqStore']['setIdentityKeyPair'](d['x25519KeyPair']),await this['pqStore']['setRegistrationId'](d['registrationId']),this['identity']={'x25519KeyPair':d['x25519KeyPair'],'registrationId':d['registrationId']},this['identity'];}['deriveRegistrationId'](a){const b=a[0x0]<<0x8|a[0x1];return b===0x0?0x1:b;}async['registerDevice'](a){const b=await this['ensureIdentity'](a),c=0x1,d=0x1;let e,f;const g=await this['pqStore']['getSignedPreKeySignature'](c),h=await this['pqStore']['getSignedPreKey'](c),i=await this['pqStore']['getPQPreKey'](d),j=await this['pqStore']['getPQPreKeySignature'](d);if(h&&g&&i&&j)e=h['publicKey'],f=g;else{const u=await this['pqCipher']['generatePreKeyBundle'](c,d,this['config']['prekey_count']);e=u['signedPreKey']['keyPair']['publicKey'],f=u['signedPreKey']['signature'];}const k=await this['generatePreKeyBatch'](this['config']['prekey_count'],a),l=await(await getAccount$1())['get'](a,![]);if(!l?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const m=Date['now'](),n=this['generateNonce'](),o='register:'+l['pubkey']+':'+m+':'+n,p=await(await getAccount$1())['signData'](a,o),q=Buffer['from'](p['signature']['slice'](0x2),'hex'),r=await this['pqStore']['getPQPreKey'](d),s=await this['pqStore']['getPQPreKeySignature'](d),t={'userAddress':a,'deviceId':0x1,'registrationId':b['registrationId'],'identityKey':bytesToBase64(b['x25519KeyPair']['publicKey']),'falcon512PublicKey':bytesToBase64(base64ToBytes(l['pubkey'])['slice'](0x1)),'signedPrekey':{'keyId':c,'publicKey':bytesToBase64(e),'signature':bytesToBase64(f)},'prekeys':k,'publicKey':l['pubkey'],'signatureScheme':'Falcon512','signature':bytesToBase64(q),'timestamp':m,'nonce':n};if(r&&s)t['pqPrekey']={'keyId':d,'publicKey':bytesToBase64(r['publicKey']),'signature':bytesToBase64(s)};await this['serverClient']['registerDevice'](t),await this['verifyRegistrationComplete'](a);}async['verifyRegistrationComplete'](a,b=0xa,c=0x1f4){for(let d=0x0;d<b;d++)try{await this['serverClient']['getPrekeyStatus'](a);return;}catch(e){if(e?.['message']?.['includes']('404')||e?.['status']===0x194){if(d<b-0x1){await new Promise(f=>setTimeout(f,c));continue;}}throw e;}throw new MessengerError('REGISTRATION_FAILED','Registration\x20verification\x20failed\x20after\x20'+b+'\x20attempts');}async['isDeviceRegistered'](a){try{if(!await this['pqStore']['getSignedPreKeySignature'](0x1))return![];return await this['serverClient']['getPrekeyStatus'](a),!![];}catch(b){if(b?.['message']?.['includes']('404')||b?.['status']===0x194)return![];return![];}}async['generatePreKeyBatch'](a,b){if(a<=0x0)return[];const c=[],{generateX25519KeyPair:d}=await import('./w/messenger/pq/crypto.mjs'),e=Math['floor'](Math['random']()*0x7fffff00);for(let f=0x0;f<a;f++){const g=e+f,h=await this['pqStore']['getOneTimePreKey'](g);if(h){const m=bytesToBase64(h['publicKey']),n=await(await getAccount$1())['signData'](b,h['publicKey']),o=Buffer['from'](n['signature']['slice'](0x2),'hex');c['push']({'keyId':g,'publicKey':m,'signature':bytesToBase64(o)});continue;}const j=d(),k=await(await getAccount$1())['signData'](b,j['publicKey']),l=Buffer['from'](k['signature']['slice'](0x2),'hex');await this['pqStore']['setOneTimePreKey'](g,j),c['push']({'keyId':g,'publicKey':bytesToBase64(j['publicKey']),'signature':bytesToBase64(l)});}return c;}async['ensurePreKeys'](a,b=![]){const c=await this['serverClient']['getPrekeyStatus'](a);if(!b&&c['currentCount']>=c['maxAllowed'])return;const d=c['maxAllowed']-c['currentCount'];if(d<=0x0)return;await this['ensureIdentity'](a);const e=await this['generatePreKeyBatch'](d,a);if(e['length']===0x0)return;const f=await(await getAccount$1())['get'](a,![]);if(!f?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const g=Date['now'](),h=this['generateNonce'](),i='upload_prekeys:'+f['pubkey']+':'+g+':'+h,j=await(await getAccount$1())['signData'](a,i),k=Buffer['from'](j['signature']['slice'](0x2),'hex');await this['serverClient']['uploadPreKeys']({'userAddress':a,'prekeys':e,'publicKey':f['pubkey'],'signatureScheme':'Falcon512','signature':bytesToBase64(k),'timestamp':g,'nonce':h});}['generateNonce'](){const a=new Uint8Array(0x10);return crypto['getRandomValues'](a),Array['from'](a,c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('');}async['establishSession'](a,b,c=0x1,d){if(await this['pqCipher']['hasSession'](b,c))return;if(!d){const k=await(await getAccount$1())['get'](a,![]);if(!k?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const l=Date['now'](),m=this['generateNonce'](),n=k['pubkey'],o='get_bundle:'+a+':'+l+':'+m,p=await(await getAccount$1())['signData'](a,o),q=Buffer['from'](p['signature']['slice'](0x2),'hex');d=await this['serverClient']['fetchRemoteBundle'](b,a,n,{'signatureScheme':'Falcon512','signature':bytesToBase64(new Uint8Array(q)),'timestamp':l,'nonce':m},c);}const e=d['signedPrekey'];if(!e)throw new MessengerError('IDENTITY_NOT_FOUND','No\x20signed\x20prekey\x20available\x20for\x20'+b);const f=base64ToBytes(d['identityKey']),g=d['falcon512PublicKey']?base64ToBytes(d['falcon512PublicKey']):f,h=base64ToBytes(e['publicKey']),i=base64ToBytes(e['signature']),j={'registrationId':d['registrationId'],'deviceId':c,'identityKey':f,'falcon512PublicKey':g,'signedPreKey':{'keyId':e['keyId'],'publicKey':h,'signature':i},'pqPreKey':d['pqPreKey']?{'keyId':d['pqPreKey']['keyId'],'publicKey':base64ToBytes(d['pqPreKey']['publicKey']),'signature':base64ToBytes(d['pqPreKey']['signature'])}:void 0x0};if(d['oneTimePrekey']){const r=base64ToBytes(d['oneTimePrekey']['publicKey']);j['oneTimePreKey']={'keyId':d['oneTimePrekey']['keyId'],'publicKey':r};}if(d['pqPreKey']){const s=base64ToBytes(d['pqPreKey']['publicKey']),t=base64ToBytes(d['pqPreKey']['signature']);j['pqPreKey']={'keyId':d['pqPreKey']['keyId'],'publicKey':s,'signature':t};}await this['pqCipher']['processPreKeyBundle'](b,c,j);}async['encryptMessage'](a,b,c,d=0x1){let e=0x0;const f=0x5;while(e<=f)try{!await this['pqCipher']['hasSession'](b,d)&&(console['log']('[Session]\x20建立新会话\x20(尝试\x20'+(e+0x1)+'/6)'),await this['establishSession'](a,b,d));const g=new TextEncoder()['encode'](c),h=await this['pqCipher']['encryptMessage'](b,g,d);return{'type':h['type'],'body':h['body']['buffer'],'registrationId':h['registrationId']};}catch(i){console['error']('[Session]\x20加密失败\x20(尝试\x20'+(e+0x1)+'/6):',i);if(e>=f)throw i;console['log']('[Session]\x20尝试删除旧会话并重新建立...');try{await this['pqStore']['removeSession'](b,d),e++,await new Promise(j=>setTimeout(j,0x64));}catch(j){console['error']('[Session]\x20重新建立会话失败:',j);throw i;}}throw new MessengerError('ENCRYPTION_FAILED','Encryption\x20failed\x20after\x20multiple\x20attempts');}async['decryptMessage'](a,b,c,d,e=0x1){const f=new TextDecoder(),g=new Uint8Array(c);let h=0x0;const i=0x5,j=await this['pqCipher']['hasSession'](b,e);if(d!==0x3&&!j){console['log']('[Session]\x20收到\x20WHISPER_MESSAGE\x20但无现有会话,需要等待\x20PREKEY_MESSAGE');throw new Error('收到\x20WHISPER_MESSAGE\x20但无现有会话,需要等待\x20PREKEY_MESSAGE');}while(h<=i)try{let k;if(d===0x3){console['log']('[Session]\x20收到\x20PREKEY_MESSAGE,尝试解密\x20(尝试\x20'+(h+0x1)+'/6)');try{return k=await this['pqCipher']['decryptMessage'](b,g,e),console['log']('[Session]\x20PREKEY_MESSAGE\x20解密成功!'),f['decode'](k);}catch(l){console['log']('[Session]\x20直接解密\x20PREKEY_MESSAGE\x20失败:\x20'+(l instanceof Error?l['message']:String(l)));if(j&&h===0x0){const m=a['toLowerCase'](),n=b['toLowerCase']();if(m<n){console['log']('[Session]\x20我的地址较小\x20('+m+'\x20<\x20'+n+'),保留我的会话,稍后重试');throw new Error('PREKEY\x20竞争:我的地址较小,保留我的会话');}else return console['log']('[Session]\x20我的地址较大\x20('+m+'\x20>\x20'+n+'),删除我的会话,用对方的\x20PREKEY_MESSAGE\x20建立新会话'),await this['pqStore']['removeSession'](b,e),console['log']('[Session]\x20已删除旧会话,重新尝试解密...'),k=await this['pqCipher']['decryptMessage'](b,g,e),console['log']('[Session]\x20PREKEY_MESSAGE\x20解密成功,新会话已建立'),f['decode'](k);}else throw l;}}else k=await this['pqCipher']['decryptMessage'](b,g,e);return f['decode'](k);}catch(o){console['error']('[Session\x20Debug]\x20解密失败\x20(尝试\x20'+(h+0x1)+'/6):'),console['error']('\x20\x20错误消息:\x20'+(o instanceof Error?o['message']:String(o))),console['error']('\x20\x20上下文:'),console['error']('\x20\x20\x20\x20-\x20myAddress:\x20'+a),console['error']('\x20\x20\x20\x20-\x20peerAddress:\x20'+b),console['error']('\x20\x20\x20\x20-\x20msgType:\x20'+d+'\x20('+(d===0x3?'PREKEY':'WHISPER')+')');if(h>=i)throw o;console['log']('[Session]\x20尝试重新建立会话...');try{j&&(console['log']('[Session]\x20删除旧会话'),await this['pqStore']['removeSession'](b,e));if(d===0x3)console['log']('[Session]\x20收到的是\x20PREKEY_MESSAGE,等待发送方的\x20PreKey\x20即可重建会话');else console['log']('[Session]\x20收到的是\x20WHISPER_MESSAGE,需要让对方重新发送\x20PREKEY_MESSAGE');h++,await new Promise(p=>setTimeout(p,0x64));}catch(p){console['error']('[Session]\x20重新建立会话失败:',p);throw o;}}throw new MessengerError('DECRYPTION_FAILED','Decryption\x20failed\x20after\x20multiple\x20attempts');}async['getIdentityKey'](){return bytesToBase64((await this['ensureIdentity']())['x25519KeyPair']['publicKey']);}async['getRegistrationId'](){return(await this['ensureIdentity']())['registrationId'];}},SessionStateManager=class{constructor(a){this['store']=a;}async['snapshotSession'](a,b){const c=await this['store']['getSession'](a,b);return{'sessionData':c?JSON['stringify'](c):null,'timestamp':Date['now']()};}async['rollbackSession'](a,b,c){if(c['sessionData']){const d=JSON['parse'](c['sessionData']);await this['store']['setSession'](a,b,d),console['log']('[SessionState]\x20回滚会话:\x20'+a+'.'+b);}else await this['store']['removeSession'](a,b),console['log']('[SessionState]\x20清除会话:\x20'+a+'.'+b);}async['commitSession'](a,b){console['log']('[SessionState]\x20提交新会话');}},DecryptionEngine=class{constructor(a){this['store']=a,this['cipher']=new PQSessionCipher(a),this['sessionManager']=new SessionStateManager(a);}async['decryptMessage'](a,b,c,d,e=0x1){const f=await this['sessionManager']['snapshotSession'](b,e);try{if(d===0x3)return await this['handlePreKeyMessage'](a,b,c,e,f);else return await this['handleWhisperMessage'](a,b,c,e,f);}catch(g){return await this['sessionManager']['rollbackSession'](b,e,f),{'success':![],'sessionUpdated':![],'sessionRolledBack':!![],'messageType':d===0x3?'PREKEY':'WHISPER','error':g instanceof Error?g['message']:String(g)};}}async['handlePreKeyMessage'](a,b,c,d,e){console['log']('[Decrypt]\x20处理\x20PREKEY_MESSAGE\x20from\x20'+b);const f=new TextDecoder(),g=new Uint8Array(c),h=await this['cipher']['decryptMessage'](b,g,d),i=f['decode'](h);console['log']('[Decrypt]\x20PREKEY_MESSAGE\x20解密成功'),await this['sessionManager']['commitSession'](b,d);const j=a['toLowerCase']();if(j<b['toLowerCase']())console['log']('[Decrypt]\x20小地址('+j+')保存接收会话用于解密,发送会话保持不变');else console['log']('[Decrypt]\x20大地址('+j+')接受新会话');return{'success':!![],'plaintext':i,'sessionUpdated':!![],'sessionRolledBack':![],'messageType':'PREKEY'};}async['handleWhisperMessage'](a,b,c,d,e){console['log']('[Decrypt]\x20处理\x20WHISPER_MESSAGE\x20from\x20'+b);if(!await this['cipher']['hasSession'](b,d))throw new Error('No\x20session\x20for\x20WHISPER_MESSAGE');const f=new TextDecoder(),g=new Uint8Array(c),h=await this['cipher']['decryptMessage'](b,g,d),i=f['decode'](h);return console['log']('[Decrypt]\x20WHISPER_MESSAGE\x20解密成功'),{'success':!![],'plaintext':i,'sessionUpdated':!![],'sessionRolledBack':![],'messageType':'WHISPER'};}};function canonicalizeJson(a){if(a===void 0x0)return'null';if(a===null||typeof a!=='object')return JSON['stringify'](a);if(Array['isArray'](a))return'['+a['map'](canonicalizeJson)['join'](',')+']';const b=a;return'{'+Object['keys'](b)['sort']()['filter'](c=>b[c]!==void 0x0)['map'](c=>'\x22'+c+'\x22:'+canonicalizeJson(b[c]))['join'](',')+'}';}async function getAccount(){const {Account:a}=await import('./w/local/account.mjs');return a['Instance']();}var Messenger=class{constructor(a,b){this['userAddress']=null,this['onMessageCallback']=null,this['pollingTimer']=null,this['messageConsecutiveEmptyPulls']=0x0,this['prekeyConsecutiveOkCount']=0x0,this['isPollingRunning']=![],this['waitingMessages']=new Map(),this['failedMessages']=new Map(),this['waitingMessageRetries']=new Map(),this['userAddress']=a,this['config']={...DEFAULT_MESSENGER_CONFIG,...b},this['session']=new MessengerSession(a,this['config']),this['serverClient']=new MessengerServerClient(this['config']),this['messageStorage']=new MessageStorage(a),this['sessionStateStorage']=new SessionStateStorage(a),this['decryptionEngine']=new DecryptionEngine(this['session']['store']),this['currentMessageInterval']=this['config']['message_poll_default_interval_ms']??0x168*0x3e8;}['getUserAddress'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');return this['userAddress'];}async['getPublicKey'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');return(await(await getAccount())['get'](this['userAddress'],![]))?.['pubkey']||'';}['isValidGuardMessage'](a,b){return Boolean(a&&b&&a30a(a)&&a30a(b));}async['generateSignatureParams'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b=await(await getAccount())['get'](this['userAddress'],![]);if(!b?.['secret'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20or\x20no\x20secret\x20key\x20for\x20'+this['userAddress']);const {Falcon512Keypair:c}=await import('./keypairs/falcon512/index.mjs'),d=c['fromSecretKey'](b['secret']),e=d['getPublicKey']()['toWowPublicKey'](),f=Date['now'](),g=this['generateNonce'](),h=a+':'+e+':'+f+':'+g,i=await d['sign'](new TextEncoder()['encode'](h));return{'signatureScheme':'Falcon512','signature':Buffer['from'](i)['toString']('base64'),'timestamp':f,'nonce':g};}['generateNonce'](){const a=new Uint8Array(0x10);return crypto['getRandomValues'](a),Array['from'](a,c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('');}async['initialize'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');await this['session']['ensureIdentity'](this['userAddress']),await this['session']['registerDevice'](this['userAddress']),await this['session']['ensurePreKeys'](this['userAddress']),await this['checkAndRefillPrekeys'](),this['startPollingTimer']();}async['checkAndRefillPrekeys'](){if(!this['userAddress'])return;await this['session']['ensurePreKeys'](this['userAddress'],![]);}['startPollingTimer'](){if(this['pollingTimer'])clearTimeout(this['pollingTimer']);this['isPollingRunning']=!![],this['scheduleNextPoll']();}['stopPollingTimer'](){this['isPollingRunning']=![],this['pollingTimer']&&(clearTimeout(this['pollingTimer']),this['pollingTimer']=null);}['scheduleNextPoll'](){if(!this['isPollingRunning'])return;const a=this['getNextPollInterval']();this['pollingTimer']=setTimeout(()=>{this['poll']()['catch'](b=>{})['finally'](()=>{this['scheduleNextPoll']();});},a);}['getNextPollInterval'](){if(this['waitingMessages']['size']>0x0)return this['config']['message_poll_waiting_interval_ms']??0x3*0x3e8;return this['currentMessageInterval'];}async['poll'](){if(!this['userAddress'])return;try{const a=await this['pullMessages']();if(a['messages']['length']>0x0){this['messageConsecutiveEmptyPulls']=0x0,this['currentMessageInterval']=this['config']['message_poll_fast_interval_ms']??0x6*0x3e8;if(this['onMessageCallback'])this['onMessageCallback'](a['messages']);}else this['messageConsecutiveEmptyPulls']++,this['messageConsecutiveEmptyPulls']>=(this['config']['message_poll_consecutive_empty_limit']??0x3)&&(this['currentMessageInterval']=this['config']['message_poll_default_interval_ms']??0x168*0x3e8,this['messageConsecutiveEmptyPulls']=0x0);if(a['prekey_status']){if(a['prekey_status']['shouldRefill'])this['prekeyConsecutiveOkCount']=0x0,await this['checkAndRefillPrekeys']();else{this['prekeyConsecutiveOkCount']++;if(this['prekeyConsecutiveOkCount']>=(this['config']['prekey_poll_consecutive_ok_limit']??0x3))this['prekeyConsecutiveOkCount']=0x0;}}}catch(b){}}['triggerFastPoll'](){this['currentMessageInterval']=this['config']['message_poll_fast_interval_ms']??0x6*0x3e8,this['messageConsecutiveEmptyPulls']=0x0;if(this['isPollingRunning']){if(this['pollingTimer'])clearTimeout(this['pollingTimer']);this['scheduleNextPoll']();}}async['sendMessage'](a,b,c){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const d=Date['now'](),e=Date['now'](),f=this['generateNonce'](),g=new TextEncoder()['encode'](b)['length'];if(g>0x2800)throw new MessengerError('INVALID_INPUT','Message\x20size\x20('+g+'\x20bytes)\x20exceeds\x20maximum\x20allowed\x20size\x20('+NORMAL_MESSAGE_BYTES_LIMIT+'\x20bytes).\x20Consider\x20using\x20sendZipFile\x20for\x20large\x20content.');await this['pullMessages']();const h=this['messageStorage']['getLastReceivedLeafIndex'](this['userAddress'],a),i=await this['session']['encryptMessage'](this['userAddress'],a,b),j=Buffer['from'](new Uint8Array(i['body']))['toString']('base64'),k=hashPlaintext(b,d,c?.['guardAddress'],c?.['passportAddress'],h),l=await(await getAccount())['get'](this['userAddress'],![]);if(!l)throw new MessengerError('IDENTITY_NOT_FOUND','User\x20account\x20not\x20found');const m=l['pubkey'],n=c?.['guardAddress']||'',o=c?.['passportAddress']||'',p=h>=0x0?h['toString']():'',q=c?.['force']?'true':'false',r='send_message:'+this['userAddress']+':'+a+':'+n+':'+o+':'+k+':'+p+':'+m+':'+e+':'+f+':'+q,s=await(await getAccount())['signData'](this['userAddress'],r),t=Buffer['from'](s['signature']['slice'](0x2),'hex'),u=bytesToBase64(new Uint8Array(t)),v=await this['serverClient']['sendMessage']({'sender':s['publicKey'],'recipient':a,'ciphertext':j,'plaintextHash':k,'clientTimestamp':d,'msgType':i['type'],'signatureScheme':'Falcon512','signature':u,'timestamp':e,'nonce':f,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'force':c?.['force'],'lastReceivedLeafIndex':h>=0x0?h:void 0x0}),w={'messageId':v['messageId'],'fromAddress':this['userAddress'],'toAddress':a,'plaintextHash':k,'plaintext':b,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'lastReceivedLeafIndex':h,'direction':'sent','status':v['status']==='confirmed'?'confirmed':'pending','msgType':i['type'],'createdAt':d};v['merkleData']&&(w['leafIndex']=v['merkleData']['leafIndex'],w['prevRoot']=v['merkleData']['prevRoot'],w['newRoot']=v['merkleData']['newRoot'],w['serverSignature']=v['merkleData']['serverSignature'],w['serverTimestamp']=v['merkleData']['serverTimestamp'],w['serverPublicKey']=v['merkleData']['serverPublicKey'],this['sessionStateStorage']['updateSessionState'](this['userAddress'],a,{'currentRoot':v['merkleData']['newRoot'],'prevRoot':v['merkleData']['prevRoot'],'lastLeafIndex':v['merkleData']['leafIndex'],'lastSyncAt':Date['now']()}));this['messageStorage']['saveMessage'](w);if(v['pendingMerkleData'])for(const [x,y]of Object['entries'](v['pendingMerkleData'])){const z=this['messageStorage']['getMessage'](x);if(z&&z['status']==='pending')this['messageStorage']['updateMessageStatus'](x,'confirmed',{'leafIndex':y['leafIndex'],'newRoot':y['newRoot'],'serverSignature':y['serverSignature'],'serverTimestamp':y['serverTimestamp'],'serverPublicKey':y['serverPublicKey']});}return this['triggerFastPoll'](),{'messageId':v['messageId'],'status':w['status'],'merkleData':v['merkleData'],'guardList':v['guard_list'],'lastReceivedLeafIndex':h>=0x0?h:void 0x0};}async['pullMessages'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b=Date['now'](),c=this['generateNonce'](),d='fetch_messages:'+this['userAddress']+':'+(a||0x64)+':'+b+':'+c,e=(await(await getAccount())['get'](this['userAddress'],![]))?.['pubkey']||'',f=await(await getAccount())['signData'](this['userAddress'],d),g={'signatureScheme':'Falcon512','signature':bytesToBase64(Buffer['from'](f['signature']['slice'](0x2),'hex')),'timestamp':b,'nonce':c},h=await this['serverClient']['pullMessages'](this['userAddress'],e,g,a);if(h['messages']['length']===0x0)return{'messages':[],'prekey_status':h['prekey_status']};const i=[],j=[],k=[...h['messages']]['sort'](function(l,m){return(l['clientTimestamp']||0x0)-(m['clientTimestamp']||0x0);});await this['processWaitingMessages'](i,j);for(const l of k){if(this['waitingMessages']['has'](l['id'])){j['push'](l['id']);continue;}if(this['failedMessages']['has'](l['id'])){j['push'](l['id']);continue;}if(this['messageStorage']['getMessage'](l['id'])){j['push'](l['id']);continue;}const m=await this['tryDecryptMessage'](l);if(m['success']&&m['message']&&m['decryptedData'])this['messageStorage']['saveMessage'](m['message']),i['push'](m['decryptedData']),j['push'](l['id']),this['waitingMessages']['delete'](l['id']);else{if(m['shouldRetry'])this['waitingMessages']['set'](l['id'],l);else this['failedMessages']['set'](l['id'],{'message':l,'error':m['error']||'Unknown\x20error'}),await this['saveFailedMessage'](l,m['error']||'Unknown\x20error'),j['push'](l['id']);}}if(this['waitingMessages']['size']>0x0&&this['isPollingRunning'])this['reschedulePolling']();if(j['length']>0x0&&this['userAddress']){const n=Date['now'](),o=this['generateNonce'](),p=await(await getAccount())['get'](this['userAddress'],![]);if(p?.['pubkey']){const q='ack_messages:'+this['userAddress']+':'+j['join'](',')+':'+p['pubkey']+':'+n+':'+o,r=await(await getAccount())['signData'](this['userAddress'],q),s=Buffer['from'](r['signature']['slice'](0x2),'hex'),t=bytesToBase64(new Uint8Array(s));await this['serverClient']['acknowledgeMessages'](j,r['publicKey'],{'publicKey':r['publicKey'],'signatureScheme':'Falcon512','signature':t,'timestamp':n,'nonce':o});}}return{'messages':i,'prekey_status':h['prekey_status']};}['getLastSentLeafIndex'](a){if(!this['userAddress'])return-0x1;const b=this['messageStorage']['getMessagesBySession'](this['userAddress'],a)['filter'](c=>c['direction']==='sent'&&c['leafIndex']!==void 0x0);if(b['length']===0x0)return-0x1;return Math['max'](...b['map'](c=>c['leafIndex']));}['getSessionMessages'](a){if(!this['userAddress'])return[];return this['messageStorage']['getMessagesBySession'](this['userAddress'],a);}['getSessionState'](a){if(!this['userAddress'])return;return this['sessionStateStorage']['getSessionState'](this['userAddress'],a);}async['submitChainProof'](a,b,c){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const d=this['sessionStateStorage']['getSessionState'](this['userAddress'],b);if(!d||!d['currentRoot'])throw new MessengerError('SESSION_NOT_ESTABLISHED','No\x20session\x20state\x20found');const e=this['messageStorage']['getMessagesBySession'](this['userAddress'],b),f=e[e['length']-0x1];if(!f||!f['serverPublicKey']||!f['serverSignature'])throw new MessengerError('INVALID_PROOF','No\x20temporal\x20proof\x20(missing\x20server\x20public\x20key\x20or\x20signature),\x20cannot\x20submit\x20Proof\x20to\x20WoWok\x20blockchain');const g=f['serverPublicKey'],h=f['serverSignature'],i={'sessionId':d['sessionId'],'merkleRoot':d['currentRoot'],'messageCount':d['messageCount'],'timestamp':Date['now']()},{CallProof:j}=await import('./proof-BKTOirlc.mjs')['then'](l=>l['r']),k=await new j({'proof':JSON['stringify'](i),'server_pubkey':g,'server_signature':h,'proof_type':0x1,'description':c||'Messenger\x20session\x20proof\x20for\x20'+this['userAddress']+'\x20<->\x20'+b,'item_count':d['messageCount'],'about_address':d['sessionId']})['call'](a);return{'proofAddress':(k?.['objectChanges'])?.['find'](l=>l['objectType']?.['includes']('Proof'))?.['objectId']||'','txHash':k?.['digest']||''};}['destroy'](){this['stopPollingTimer']();}['disconnect'](){this['destroy']();}['setOnMessageCallback'](a){this['onMessageCallback']=a;}async['sendZipFile'](a,b,c){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const d=await this['loadFileData'](b),{ZipWriter:e,BlobWriter:f,Uint8ArrayReader:g}=await import('@zip.js/zip.js'),h=c?.['fileName']||a30b['basename'](b)||'file.zip',i=c?.['contentType']||this['detectContentType'](h),j=new f('application/zip'),k=new e(j);await k['add'](h,new g(d)),await k['close']();const l=await j['getData'](),m=new Uint8Array(await l['arrayBuffer']());if(m['length']>0x500000)throw new MessengerError('INVALID_INPUT','ZIP\x20file\x20size\x20('+m['length']+'\x20bytes)\x20exceeds\x20local\x20maximum\x20allowed\x20size\x20('+WTS_FILE_BYTES_LIMIT+'\x20bytes)');const n='0x'+createHash('sha256')['update'](m)['digest']('hex'),o=Buffer['from'](m)['toString']('base64'),p={'fileName':h+'.zip','fileSize':m['length'],'fileHash':n,'contentType':i};await this['pullMessages']();const q=this['messageStorage']['getLastReceivedLeafIndex'](this['userAddress'],a),r=Date['now'](),s=await this['session']['encryptMessage'](this['userAddress'],a,o),t=Buffer['from'](new Uint8Array(s['body']))['toString']('base64'),u=c?.['guardAddress']||'',v=c?.['passportAddress']||'',w=hashPlaintext(o,r,u,v,q),x=Date['now'](),y=this['generateNonce'](),z=await(await getAccount())['get'](this['userAddress'],![]);if(!z)throw new MessengerError('IDENTITY_NOT_FOUND','User\x20account\x20not\x20found');const A=z['pubkey'],B=q>=0x0?q['toString']():'',C=c?.['force']?'true':'false',D='send_message:'+this['userAddress']+':'+a+':'+u+':'+v+':'+w+':'+B+':'+A+':'+x+':'+y+':'+C,E=await(await getAccount())['signData'](this['userAddress'],D),F=Buffer['from'](E['signature']['slice'](0x2),'hex'),G=bytesToBase64(new Uint8Array(F)),H=await this['serverClient']['sendMessage']({'sender':E['publicKey'],'recipient':a,'ciphertext':t,'plaintextHash':w,'clientTimestamp':r,'msgType':s['type'],'zipMetadata':p,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'force':c?.['force'],'lastReceivedLeafIndex':q>=0x0?q:void 0x0,'signatureScheme':'Falcon512','signature':G,'timestamp':x,'nonce':y}),I={'messageId':H['messageId'],'fromAddress':this['userAddress'],'toAddress':a,'plaintextHash':w,'plaintext':o,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'lastReceivedLeafIndex':q,'direction':'sent','status':H['status']==='confirmed'?'confirmed':'pending','msgType':s['type'],'zipMetadata':p,'createdAt':r};H['merkleData']&&(I['leafIndex']=H['merkleData']['leafIndex'],I['prevRoot']=H['merkleData']['prevRoot'],I['newRoot']=H['merkleData']['newRoot'],I['serverSignature']=H['merkleData']['serverSignature'],I['serverTimestamp']=H['merkleData']['serverTimestamp'],I['serverPublicKey']=H['merkleData']['serverPublicKey'],this['sessionStateStorage']['updateSessionState'](this['userAddress'],a,{'currentRoot':H['merkleData']['newRoot'],'prevRoot':H['merkleData']['prevRoot'],'lastLeafIndex':H['merkleData']['leafIndex'],'lastSyncAt':Date['now']()}));this['messageStorage']['saveMessage'](I);if(H['pendingMerkleData'])for(const [J,K]of Object['entries'](H['pendingMerkleData'])){const L=this['messageStorage']['getMessage'](J);if(L&&L['status']==='pending')this['messageStorage']['updateMessageStatus'](J,'confirmed',{'leafIndex':K['leafIndex'],'newRoot':K['newRoot'],'serverSignature':K['serverSignature'],'serverTimestamp':K['serverTimestamp'],'serverPublicKey':K['serverPublicKey']});}return this['triggerFastPoll'](),{'messageId':H['messageId'],'status':I['status'],'merkleData':H['merkleData'],'guardList':H['guard_list'],'lastReceivedLeafIndex':q>=0x0?q:void 0x0};}async['loadFileData'](a){if(a['startsWith']('http://')||a['startsWith']('https://')){const d=await fetch(a);if(!d['ok'])throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20fetch\x20file\x20from\x20'+a+':\x20'+d['statusText']);const e=await d['arrayBuffer']();return new Uint8Array(e);}const b=a30b['resolve'](a);if(!a30c['existsSync'](b))throw new MessengerError('FILE_NOT_FOUND','File\x20not\x20found:\x20'+b);const c=a30c['readFileSync'](b);return new Uint8Array(c);}['detectContentType'](a){switch(a30b['extname'](a)['toLowerCase']()){case'.wts':return'wts';case'.wip':return'wip';default:return'zip';}}async['_createSignedRequest'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b=Date['now'](),c=this['generateNonce'](),d=b+':'+c+':'+canonicalizeJson(a),e=await(await getAccount())['signData'](this['userAddress'],d),f=Buffer['from'](e['signature']['slice'](0x2),'hex'),g=bytesToBase64(new Uint8Array(f)),h=await(await getAccount())['get'](this['userAddress'],![]);if(!h||!h['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20public\x20key\x20not\x20found');return{'userAddress':this['userAddress'],'publicKey':h['pubkey'],'signatureScheme':'Falcon512','signature':g,'timestamp':b,'nonce':c,'data':a};}['_validateAddresses'](a){const b=[],c=[];for(const d of a)if(a30a(d))b['push'](d);else c['push'](d);return{'valid':b,'invalid':c};}async['addToBlacklist'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'add','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['addToBlacklist'](this['userAddress'],e);}async['removeFromBlacklist'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'remove','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['removeFromBlacklist'](this['userAddress'],e);}async['clearBlacklist'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['clearBlacklist'](this['userAddress'],a);}async['getBlacklist'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getBlacklist'](this['userAddress'],a);}async['existInBlacklist'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'exist','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['existInBlacklist'](this['userAddress'],e);}async['addToFriendsList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'add','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['addToFriendsList'](this['userAddress'],e);}async['removeFromFriendsList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'remove','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['removeFromFriendsList'](this['userAddress'],e);}async['clearFriendsList'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['clearFriendsList'](this['userAddress'],a);}async['getFriendsList'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getFriendsList'](this['userAddress'],a);}async['existInFriendsList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'exist','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['existInFriendsList'](this['userAddress'],e);}async['addToGuardList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b={'guards':a},c=await this['_createSignedRequest'](b);return this['serverClient']['addToGuardList'](this['userAddress'],c);}async['removeFromGuardList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'remove','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['removeFromGuardList'](this['userAddress'],e);}async['getGuardList'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getGuardList'](this['userAddress'],a);}async['getSettings'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getSettings'](this['userAddress'],a);}async['setSettings'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b={'allowStrangerMessages':a['allowStrangerMessages'],'maxInboxSize':a['maxInboxSize']},c=await this['_createSignedRequest'](b);return this['serverClient']['updateSettings'](this['userAddress'],c);}async['tryDecryptMessage'](a){try{const b=Uint8Array['from'](Buffer['from'](a['bodyB64'],'base64')),c=await this['decryptionEngine']['decryptMessage'](this['userAddress'],a['from'],b['buffer'],a['msgType']);if(!c['success'])return{'success':![],'shouldRetry':this['isRetryableError'](c['error']||''),'error':c['error'],'sessionUpdated':c['sessionUpdated']};const d=c['plaintext'];if(!a['clientTimestamp'])throw new Error('Missing\x20clientTimestamp\x20for\x20message\x20'+a['id']);if(!a['plaintextHash'])throw new Error('Missing\x20plaintextHash\x20for\x20message\x20'+a['id']);const e=verifyMessage({'messageId':a['id'],'plaintext':d,'plaintextHash':a['plaintextHash'],'createdAt':a['clientTimestamp'],'guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'serverSignature':a['merkleMetadata']?.['serverSignature'],'serverPublicKey':a['merkleMetadata']?.['serverPublicKey'],'merkleMetadata':a['merkleMetadata']?{'prevRoot':a['merkleMetadata']['prevRoot'],'newRoot':a['merkleMetadata']['newRoot'],'serverTimestamp':a['merkleMetadata']['serverTimestamp'],'leafIndex':a['merkleMetadata']['leafIndex'],'proofSiblings':a['merkleMetadata']['proofSiblings'],'proofIndices':a['merkleMetadata']['proofIndices']}:void 0x0});if(!e['valid'])throw new Error(e['error']);const f={'messageId':a['id'],'fromAddress':a['from'],'toAddress':this['userAddress'],'plaintextHash':a['plaintextHash'],'plaintext':d,'guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'direction':'received','status':'decrypted','msgType':a['msgType'],'leafIndex':a['merkleMetadata']?.['leafIndex'],'prevRoot':a['merkleMetadata']?.['prevRoot'],'newRoot':a['merkleMetadata']?.['newRoot'],'serverSignature':a['merkleMetadata']?.['serverSignature'],'serverTimestamp':a['merkleMetadata']?.['serverTimestamp'],'serverPublicKey':a['merkleMetadata']?.['serverPublicKey'],'createdAt':a['clientTimestamp'],'receivedAt':Date['now'](),'zipMetadata':a['zipMetadata']};if(a['merkleMetadata'])this['sessionStateStorage']['updateSessionState'](this['userAddress'],a['from'],{'currentRoot':a['merkleMetadata']['newRoot'],'prevRoot':a['merkleMetadata']['prevRoot'],'lastLeafIndex':a['merkleMetadata']['leafIndex'],'lastSyncAt':Date['now']()});const g=a['merkleMetadata']?.['serverTimestamp']||a['clientTimestamp']||Date['now']();if(a['lastReceivedLeafIndex']!==void 0x0&&a['lastReceivedLeafIndex']>=0x0){const h=this['messageStorage']['getMessagesBySession'](this['userAddress'],a['from'])['filter'](i=>i['direction']==='sent'&&i['status']==='confirmed'&&i['leafIndex']!==void 0x0&&i['leafIndex']<=a['lastReceivedLeafIndex']);for(const i of h)this['messageStorage']['updateMessageStatus'](i['messageId'],'read');}return{'success':!![],'shouldRetry':![],'message':f,'decryptedData':{'id':a['id'],'from':a['from'],'plaintext':d,'timestamp':g,'merkleVerified':!!a['merkleMetadata'],'merkleData':a['merkleMetadata']?{'leafIndex':a['merkleMetadata']['leafIndex'],'rootHash':a['merkleMetadata']['newRoot']}:void 0x0},'sessionUpdated':c['sessionUpdated']};}catch(j){const k=j instanceof Error?j['message']:String(j);return{'success':![],'shouldRetry':this['isRetryableError'](k),'error':k};}}['isRetryableError'](a){return[/message number/i,/chain key/i,/session not found/i,/prekey not found/i,/PREKEY 竞争:我的地址较小,保留我的会话/i,/The operation failed for an operation-specific reason/i,/DOMException/i,/收到 WHISPER_MESSAGE 但无现有会话,需要等待 PREKEY_MESSAGE/i]['some'](b=>b['test'](a));}async['processWaitingMessages'](a,b){if(this['waitingMessages']['size']===0x0)return;const c=[],d=Array['from'](this['waitingMessages']['values']())['sort'](function(e,f){return(e['clientTimestamp']||0x0)-(f['clientTimestamp']||0x0);});for(const e of d){const f=e['id'],g=await this['tryDecryptMessage'](e);if(g['success']&&g['message']&&g['decryptedData'])this['messageStorage']['saveMessage'](g['message']),a['push'](g['decryptedData']),b['push'](f),c['push'](f),this['waitingMessageRetries']['delete'](f);else{if(!g['shouldRetry'])this['failedMessages']['set'](f,{'message':e,'error':g['error']||'Unknown\x20error'}),await this['saveFailedMessage'](e,g['error']||'Unknown\x20error'),b['push'](f),c['push'](f),this['waitingMessageRetries']['delete'](f);else{const h=(this['waitingMessageRetries']['get'](f)||0x0)+0x1;if(h>=0x3)this['failedMessages']['set'](f,{'message':e,'error':g['error']||'Retry\x20limit\x20exceeded'}),await this['saveFailedMessage'](e,g['error']||'Retry\x20limit\x20exceeded'),b['push'](f),c['push'](f),this['waitingMessageRetries']['delete'](f);else this['waitingMessageRetries']['set'](f,h);}}}for(const i of c)this['waitingMessages']['delete'](i);if(c['length']>0x0){}}async['saveFailedMessage'](a,b){const c={'messageId':a['id'],'fromAddress':a['from'],'toAddress':this['userAddress'],'plaintextHash':a['plaintextHash']||'','guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'direction':'received','status':'decrypt_failed','msgType':a['msgType'],'leafIndex':a['merkleMetadata']?.['leafIndex'],'prevRoot':a['merkleMetadata']?.['prevRoot'],'newRoot':a['merkleMetadata']?.['newRoot'],'serverSignature':a['merkleMetadata']?.['serverSignature'],'serverTimestamp':a['merkleMetadata']?.['serverTimestamp'],'serverPublicKey':a['merkleMetadata']?.['serverPublicKey'],'createdAt':a['clientTimestamp']||Date['now'](),'receivedAt':Date['now'](),'zipMetadata':a['zipMetadata'],'decryptError':b,'decryptAttempts':0x1,'lastDecryptAttemptAt':Date['now']()};this['messageStorage']['saveMessage'](c);}['reschedulePolling'](){if(!this['isPollingRunning']||!this['pollingTimer'])return;clearTimeout(this['pollingTimer']),this['pollingTimer']=null,this['scheduleNextPoll']();}['getFailedMessages'](){return Array['from'](this['failedMessages']['entries']())['map'](([a,b])=>({'messageId':a,'from':b['message']['from'],'error':b['error'],'leafIndex':b['message']['merkleMetadata']?.['leafIndex']}));}['clearFailedMessages'](a){if(a)this['failedMessages']['delete'](a);else this['failedMessages']['clear']();}['getWaitingMessageCount'](){return this['waitingMessages']['size'];}};export{canonicalizeJson as n,Messenger as t};