@bopen-io/wallet-toolbox 1.7.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +10 -0
- package/.env.template +22 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- package/.github/ISSUE_TEMPLATE/discussion.md +24 -0
- package/.github/pull_request_template.md +22 -0
- package/.github/workflows/push.yaml +145 -0
- package/.prettierrc +10 -0
- package/CHANGELOG.md +280 -0
- package/CONTRIBUTING.md +89 -0
- package/README.md +43 -0
- package/docs/README.md +85 -0
- package/docs/client.md +19627 -0
- package/docs/monitor.md +953 -0
- package/docs/open-rpc/index.html +46 -0
- package/docs/services.md +6377 -0
- package/docs/setup.md +1268 -0
- package/docs/storage.md +5367 -0
- package/docs/wallet.md +19626 -0
- package/jest.config.ts +25 -0
- package/license.md +28 -0
- package/out/tsconfig.all.tsbuildinfo +1 -0
- package/package.json +63 -0
- package/src/CWIStyleWalletManager.ts +1999 -0
- package/src/Setup.ts +579 -0
- package/src/SetupClient.ts +322 -0
- package/src/SetupWallet.ts +108 -0
- package/src/SimpleWalletManager.ts +526 -0
- package/src/Wallet.ts +1169 -0
- package/src/WalletAuthenticationManager.ts +153 -0
- package/src/WalletLogger.ts +213 -0
- package/src/WalletPermissionsManager.ts +3660 -0
- package/src/WalletSettingsManager.ts +114 -0
- package/src/__tests/CWIStyleWalletManager.test.d.ts.map +1 -0
- package/src/__tests/CWIStyleWalletManager.test.js.map +1 -0
- package/src/__tests/CWIStyleWalletManager.test.ts +675 -0
- package/src/__tests/WalletPermissionsManager.callbacks.test.ts +323 -0
- package/src/__tests/WalletPermissionsManager.checks.test.ts +844 -0
- package/src/__tests/WalletPermissionsManager.encryption.test.ts +412 -0
- package/src/__tests/WalletPermissionsManager.fixtures.ts +307 -0
- package/src/__tests/WalletPermissionsManager.flows.test.ts +462 -0
- package/src/__tests/WalletPermissionsManager.initialization.test.ts +300 -0
- package/src/__tests/WalletPermissionsManager.pmodules.test.ts +798 -0
- package/src/__tests/WalletPermissionsManager.proxying.test.ts +724 -0
- package/src/__tests/WalletPermissionsManager.tokens.test.ts +503 -0
- package/src/index.all.ts +27 -0
- package/src/index.client.ts +25 -0
- package/src/index.mobile.ts +21 -0
- package/src/index.ts +1 -0
- package/src/monitor/Monitor.ts +412 -0
- package/src/monitor/MonitorDaemon.ts +188 -0
- package/src/monitor/README.md +3 -0
- package/src/monitor/__test/MonitorDaemon.man.test.ts +45 -0
- package/src/monitor/tasks/TaskCheckForProofs.ts +243 -0
- package/src/monitor/tasks/TaskCheckNoSends.ts +73 -0
- package/src/monitor/tasks/TaskClock.ts +33 -0
- package/src/monitor/tasks/TaskFailAbandoned.ts +54 -0
- package/src/monitor/tasks/TaskMonitorCallHistory.ts +26 -0
- package/src/monitor/tasks/TaskNewHeader.ts +93 -0
- package/src/monitor/tasks/TaskPurge.ts +68 -0
- package/src/monitor/tasks/TaskReorg.ts +89 -0
- package/src/monitor/tasks/TaskReviewStatus.ts +48 -0
- package/src/monitor/tasks/TaskSendWaiting.ts +122 -0
- package/src/monitor/tasks/TaskSyncWhenIdle.ts +26 -0
- package/src/monitor/tasks/TaskUnFail.ts +151 -0
- package/src/monitor/tasks/WalletMonitorTask.ts +47 -0
- package/src/sdk/CertOpsWallet.ts +18 -0
- package/src/sdk/PrivilegedKeyManager.ts +372 -0
- package/src/sdk/README.md +13 -0
- package/src/sdk/WERR_errors.ts +234 -0
- package/src/sdk/WalletError.ts +170 -0
- package/src/sdk/WalletErrorFromJson.ts +80 -0
- package/src/sdk/WalletServices.interfaces.ts +700 -0
- package/src/sdk/WalletSigner.interfaces.ts +11 -0
- package/src/sdk/WalletStorage.interfaces.ts +606 -0
- package/src/sdk/__test/CertificateLifeCycle.test.ts +131 -0
- package/src/sdk/__test/PrivilegedKeyManager.test.ts +738 -0
- package/src/sdk/__test/WalletError.test.ts +318 -0
- package/src/sdk/__test/validationHelpers.test.ts +21 -0
- package/src/sdk/index.ts +10 -0
- package/src/sdk/types.ts +226 -0
- package/src/services/README.md +11 -0
- package/src/services/ServiceCollection.ts +248 -0
- package/src/services/Services.ts +603 -0
- package/src/services/__tests/ARC.man.test.ts +123 -0
- package/src/services/__tests/ARC.timeout.man.test.ts +79 -0
- package/src/services/__tests/ArcGorillaPool.man.test.ts +108 -0
- package/src/services/__tests/arcServices.test.ts +8 -0
- package/src/services/__tests/bitrails.test.ts +56 -0
- package/src/services/__tests/getMerklePath.test.ts +15 -0
- package/src/services/__tests/getRawTx.test.ts +13 -0
- package/src/services/__tests/postBeef.test.ts +104 -0
- package/src/services/__tests/verifyBeef.test.ts +50 -0
- package/src/services/chaintracker/BHServiceClient.ts +212 -0
- package/src/services/chaintracker/ChaintracksChainTracker.ts +71 -0
- package/src/services/chaintracker/__tests/ChaintracksChainTracker.test.ts +33 -0
- package/src/services/chaintracker/__tests/ChaintracksServiceClient.test.ts +29 -0
- package/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.ts +72 -0
- package/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.ts +83 -0
- package/src/services/chaintracker/chaintracks/Api/BulkStorageApi.ts +92 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksApi.ts +64 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.ts +189 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.ts +18 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksFsApi.ts +58 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.ts +386 -0
- package/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.ts +25 -0
- package/src/services/chaintracker/chaintracks/Chaintracks.ts +609 -0
- package/src/services/chaintracker/chaintracks/ChaintracksService.ts +199 -0
- package/src/services/chaintracker/chaintracks/ChaintracksServiceClient.ts +154 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.ts +176 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.ts +174 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.ts +18 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.ts +113 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.ts +81 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.ts +86 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.ts +59 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.ts +104 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.ts +66 -0
- package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.ts +566 -0
- package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.ts +219 -0
- package/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.ts +54 -0
- package/src/services/chaintracker/chaintracks/Ingest/__tests/LiveIngestorWhatsOnChainPoll.test.ts +33 -0
- package/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.ts +124 -0
- package/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.ts +92 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.ts +104 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.ts +382 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.ts +574 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.ts +438 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.ts +29 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.ts +304 -0
- package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.ts +102 -0
- package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageKnex.test.ts +45 -0
- package/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.ts +77 -0
- package/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.ts +192 -0
- package/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.ts +75 -0
- package/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.ts +62 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_4.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_4.headers +0 -0
- package/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.ts +92 -0
- package/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.ts +111 -0
- package/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.ts +91 -0
- package/src/services/chaintracker/chaintracks/createIdbChaintracks.ts +60 -0
- package/src/services/chaintracker/chaintracks/createKnexChaintracks.ts +65 -0
- package/src/services/chaintracker/chaintracks/createNoDbChaintracks.ts +60 -0
- package/src/services/chaintracker/chaintracks/index.all.ts +12 -0
- package/src/services/chaintracker/chaintracks/index.client.ts +4 -0
- package/src/services/chaintracker/chaintracks/index.mobile.ts +37 -0
- package/src/services/chaintracker/chaintracks/util/BulkFileDataManager.ts +975 -0
- package/src/services/chaintracker/chaintracks/util/BulkFileDataReader.ts +60 -0
- package/src/services/chaintracker/chaintracks/util/BulkFilesReader.ts +336 -0
- package/src/services/chaintracker/chaintracks/util/BulkHeaderFile.ts +247 -0
- package/src/services/chaintracker/chaintracks/util/ChaintracksFetch.ts +69 -0
- package/src/services/chaintracker/chaintracks/util/ChaintracksFs.ts +141 -0
- package/src/services/chaintracker/chaintracks/util/HeightRange.ts +153 -0
- package/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.ts +76 -0
- package/src/services/chaintracker/chaintracks/util/__tests/BulkFileDataManager.test.ts +304 -0
- package/src/services/chaintracker/chaintracks/util/__tests/ChaintracksFetch.test.ts +60 -0
- package/src/services/chaintracker/chaintracks/util/__tests/HeightRange.test.ts +67 -0
- package/src/services/chaintracker/chaintracks/util/__tests/SingleWriterMultiReaderLock.test.ts +49 -0
- package/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.ts +573 -0
- package/src/services/chaintracker/chaintracks/util/dirtyHashes.ts +29 -0
- package/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.ts +432 -0
- package/src/services/chaintracker/index.all.ts +4 -0
- package/src/services/chaintracker/index.client.ts +4 -0
- package/src/services/chaintracker/index.mobile.ts +4 -0
- package/src/services/createDefaultWalletServicesOptions.ts +77 -0
- package/src/services/index.ts +1 -0
- package/src/services/processingErrors/arcSuccessError.json +76 -0
- package/src/services/providers/ARC.ts +350 -0
- package/src/services/providers/Bitails.ts +256 -0
- package/src/services/providers/SdkWhatsOnChain.ts +83 -0
- package/src/services/providers/WhatsOnChain.ts +883 -0
- package/src/services/providers/__tests/WhatsOnChain.test.ts +242 -0
- package/src/services/providers/__tests/exchangeRates.test.ts +18 -0
- package/src/services/providers/exchangeRates.ts +265 -0
- package/src/services/providers/getBeefForTxid.ts +369 -0
- package/src/signer/README.md +5 -0
- package/src/signer/WalletSigner.ts +17 -0
- package/src/signer/methods/acquireDirectCertificate.ts +52 -0
- package/src/signer/methods/buildSignableTransaction.ts +183 -0
- package/src/signer/methods/completeSignedTransaction.ts +117 -0
- package/src/signer/methods/createAction.ts +172 -0
- package/src/signer/methods/internalizeAction.ts +106 -0
- package/src/signer/methods/proveCertificate.ts +43 -0
- package/src/signer/methods/signAction.ts +54 -0
- package/src/storage/README.md +14 -0
- package/src/storage/StorageIdb.ts +2304 -0
- package/src/storage/StorageKnex.ts +1425 -0
- package/src/storage/StorageProvider.ts +810 -0
- package/src/storage/StorageReader.ts +194 -0
- package/src/storage/StorageReaderWriter.ts +432 -0
- package/src/storage/StorageSyncReader.ts +34 -0
- package/src/storage/WalletStorageManager.ts +943 -0
- package/src/storage/__test/StorageIdb.test.ts +43 -0
- package/src/storage/__test/WalletStorageManager.test.ts +275 -0
- package/src/storage/__test/adminStats.man.test.ts +89 -0
- package/src/storage/__test/getBeefForTransaction.test.ts +385 -0
- package/src/storage/index.all.ts +11 -0
- package/src/storage/index.client.ts +7 -0
- package/src/storage/index.mobile.ts +6 -0
- package/src/storage/methods/ListActionsSpecOp.ts +70 -0
- package/src/storage/methods/ListOutputsSpecOp.ts +129 -0
- package/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.ts +1057 -0
- package/src/storage/methods/__test/GenerateChange/randomValsUsed1.ts +20 -0
- package/src/storage/methods/__test/offsetKey.test.ts +274 -0
- package/src/storage/methods/attemptToPostReqsToNetwork.ts +389 -0
- package/src/storage/methods/createAction.ts +947 -0
- package/src/storage/methods/generateChange.ts +556 -0
- package/src/storage/methods/getBeefForTransaction.ts +139 -0
- package/src/storage/methods/getSyncChunk.ts +293 -0
- package/src/storage/methods/internalizeAction.ts +562 -0
- package/src/storage/methods/listActionsIdb.ts +183 -0
- package/src/storage/methods/listActionsKnex.ts +226 -0
- package/src/storage/methods/listCertificates.ts +73 -0
- package/src/storage/methods/listOutputsIdb.ts +203 -0
- package/src/storage/methods/listOutputsKnex.ts +263 -0
- package/src/storage/methods/offsetKey.ts +89 -0
- package/src/storage/methods/processAction.ts +420 -0
- package/src/storage/methods/purgeData.ts +251 -0
- package/src/storage/methods/purgeDataIdb.ts +10 -0
- package/src/storage/methods/reviewStatus.ts +101 -0
- package/src/storage/methods/reviewStatusIdb.ts +43 -0
- package/src/storage/methods/utils.Buffer.ts +33 -0
- package/src/storage/methods/utils.ts +56 -0
- package/src/storage/remoting/StorageClient.ts +567 -0
- package/src/storage/remoting/StorageMobile.ts +544 -0
- package/src/storage/remoting/StorageServer.ts +291 -0
- package/src/storage/remoting/__test/StorageClient.test.ts +113 -0
- package/src/storage/schema/KnexMigrations.ts +489 -0
- package/src/storage/schema/StorageIdbSchema.ts +150 -0
- package/src/storage/schema/entities/EntityBase.ts +210 -0
- package/src/storage/schema/entities/EntityCertificate.ts +188 -0
- package/src/storage/schema/entities/EntityCertificateField.ts +136 -0
- package/src/storage/schema/entities/EntityCommission.ts +148 -0
- package/src/storage/schema/entities/EntityOutput.ts +290 -0
- package/src/storage/schema/entities/EntityOutputBasket.ts +153 -0
- package/src/storage/schema/entities/EntityOutputTag.ts +121 -0
- package/src/storage/schema/entities/EntityOutputTagMap.ts +123 -0
- package/src/storage/schema/entities/EntityProvenTx.ts +319 -0
- package/src/storage/schema/entities/EntityProvenTxReq.ts +580 -0
- package/src/storage/schema/entities/EntitySyncState.ts +389 -0
- package/src/storage/schema/entities/EntityTransaction.ts +306 -0
- package/src/storage/schema/entities/EntityTxLabel.ts +121 -0
- package/src/storage/schema/entities/EntityTxLabelMap.ts +123 -0
- package/src/storage/schema/entities/EntityUser.ts +112 -0
- package/src/storage/schema/entities/MergeEntity.ts +73 -0
- package/src/storage/schema/entities/__tests/CertificateFieldTests.test.ts +353 -0
- package/src/storage/schema/entities/__tests/CertificateTests.test.ts +354 -0
- package/src/storage/schema/entities/__tests/CommissionTests.test.ts +371 -0
- package/src/storage/schema/entities/__tests/OutputBasketTests.test.ts +278 -0
- package/src/storage/schema/entities/__tests/OutputTagMapTests.test.ts +242 -0
- package/src/storage/schema/entities/__tests/OutputTagTests.test.ts +288 -0
- package/src/storage/schema/entities/__tests/OutputTests.test.ts +464 -0
- package/src/storage/schema/entities/__tests/ProvenTxReqTests.test.ts +340 -0
- package/src/storage/schema/entities/__tests/ProvenTxTests.test.ts +504 -0
- package/src/storage/schema/entities/__tests/SyncStateTests.test.ts +288 -0
- package/src/storage/schema/entities/__tests/TransactionTests.test.ts +604 -0
- package/src/storage/schema/entities/__tests/TxLabelMapTests.test.ts +361 -0
- package/src/storage/schema/entities/__tests/TxLabelTests.test.ts +198 -0
- package/src/storage/schema/entities/__tests/stampLogTests.test.ts +90 -0
- package/src/storage/schema/entities/__tests/usersTests.test.ts +340 -0
- package/src/storage/schema/entities/index.ts +16 -0
- package/src/storage/schema/tables/TableCertificate.ts +21 -0
- package/src/storage/schema/tables/TableCertificateField.ts +12 -0
- package/src/storage/schema/tables/TableCommission.ts +13 -0
- package/src/storage/schema/tables/TableMonitorEvent.ts +9 -0
- package/src/storage/schema/tables/TableOutput.ts +64 -0
- package/src/storage/schema/tables/TableOutputBasket.ts +12 -0
- package/src/storage/schema/tables/TableOutputTag.ts +10 -0
- package/src/storage/schema/tables/TableOutputTagMap.ts +9 -0
- package/src/storage/schema/tables/TableProvenTx.ts +14 -0
- package/src/storage/schema/tables/TableProvenTxReq.ts +65 -0
- package/src/storage/schema/tables/TableSettings.ts +17 -0
- package/src/storage/schema/tables/TableSyncState.ts +18 -0
- package/src/storage/schema/tables/TableTransaction.ts +54 -0
- package/src/storage/schema/tables/TableTxLabel.ts +10 -0
- package/src/storage/schema/tables/TableTxLabelMap.ts +9 -0
- package/src/storage/schema/tables/TableUser.ts +16 -0
- package/src/storage/schema/tables/index.ts +16 -0
- package/src/storage/sync/StorageMySQLDojoReader.ts +696 -0
- package/src/storage/sync/index.ts +1 -0
- package/src/utility/Format.ts +133 -0
- package/src/utility/README.md +3 -0
- package/src/utility/ReaderUint8Array.ts +187 -0
- package/src/utility/ScriptTemplateBRC29.ts +73 -0
- package/src/utility/__tests/utilityHelpers.noBuffer.test.ts +109 -0
- package/src/utility/aggregateResults.ts +68 -0
- package/src/utility/identityUtils.ts +159 -0
- package/src/utility/index.all.ts +7 -0
- package/src/utility/index.client.ts +7 -0
- package/src/utility/parseTxScriptOffsets.ts +29 -0
- package/src/utility/stampLog.ts +69 -0
- package/src/utility/tscProofToMerklePath.ts +48 -0
- package/src/utility/utilityHelpers.buffer.ts +34 -0
- package/src/utility/utilityHelpers.noBuffer.ts +60 -0
- package/src/utility/utilityHelpers.ts +275 -0
- package/src/wab-client/WABClient.ts +94 -0
- package/src/wab-client/__tests/WABClient.man.test.ts +59 -0
- package/src/wab-client/auth-method-interactors/AuthMethodInteractor.ts +47 -0
- package/src/wab-client/auth-method-interactors/DevConsoleInteractor.ts +73 -0
- package/src/wab-client/auth-method-interactors/PersonaIDInteractor.ts +35 -0
- package/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.ts +72 -0
- package/syncVersions.js +71 -0
- package/test/Wallet/StorageClient/storageClient.man.test.ts +75 -0
- package/test/Wallet/action/abortAction.test.ts +47 -0
- package/test/Wallet/action/createAction.test.ts +299 -0
- package/test/Wallet/action/createAction2.test.ts +1273 -0
- package/test/Wallet/action/createActionToGenerateBeefs.man.test.ts +293 -0
- package/test/Wallet/action/internalizeAction.a.test.ts +286 -0
- package/test/Wallet/action/internalizeAction.test.ts +682 -0
- package/test/Wallet/action/relinquishOutput.test.ts +37 -0
- package/test/Wallet/certificate/acquireCertificate.test.ts +298 -0
- package/test/Wallet/certificate/listCertificates.test.ts +346 -0
- package/test/Wallet/construct/Wallet.constructor.test.ts +57 -0
- package/test/Wallet/get/getHeaderForHeight.test.ts +82 -0
- package/test/Wallet/get/getHeight.test.ts +52 -0
- package/test/Wallet/get/getKnownTxids.test.ts +86 -0
- package/test/Wallet/get/getNetwork.test.ts +27 -0
- package/test/Wallet/get/getVersion.test.ts +27 -0
- package/test/Wallet/list/listActions.test.ts +279 -0
- package/test/Wallet/list/listActions2.test.ts +1381 -0
- package/test/Wallet/list/listCertificates.test.ts +118 -0
- package/test/Wallet/list/listOutputs.test.ts +447 -0
- package/test/Wallet/live/walletLive.man.test.ts +521 -0
- package/test/Wallet/local/localWallet.man.test.ts +93 -0
- package/test/Wallet/local/localWallet2.man.test.ts +277 -0
- package/test/Wallet/signAction/mountaintop.man.test.ts +130 -0
- package/test/Wallet/specOps/specOps.man.test.ts +220 -0
- package/test/Wallet/support/janitor.man.test.ts +40 -0
- package/test/Wallet/support/operations.man.test.ts +407 -0
- package/test/Wallet/support/reqErrorReview.2025.05.06.man.test.ts +347 -0
- package/test/Wallet/sync/Wallet.sync.test.ts +215 -0
- package/test/Wallet/sync/Wallet.updateWalletLegacyTestData.man.test.ts +203 -0
- package/test/Wallet/sync/setActive.test.ts +170 -0
- package/test/WalletClient/LocalKVStore.man.test.ts +114 -0
- package/test/WalletClient/WERR.man.test.ts +35 -0
- package/test/bsv-ts-sdk/LocalKVStore.test.ts +102 -0
- package/test/checkDB.ts +57 -0
- package/test/checkdb +0 -0
- package/test/examples/backup.man.test.ts +59 -0
- package/test/examples/pushdrop.test.ts +282 -0
- package/test/monitor/Monitor.test.ts +620 -0
- package/test/services/Services.test.ts +263 -0
- package/test/storage/KnexMigrations.test.ts +86 -0
- package/test/storage/StorageMySQLDojoReader.man.test.ts +60 -0
- package/test/storage/count.test.ts +177 -0
- package/test/storage/find.test.ts +195 -0
- package/test/storage/findLegacy.test.ts +67 -0
- package/test/storage/idb/allocateChange.test.ts +251 -0
- package/test/storage/idb/count.test.ts +158 -0
- package/test/storage/idb/find.test.ts +177 -0
- package/test/storage/idb/idbSpeed.test.ts +36 -0
- package/test/storage/idb/insert.test.ts +268 -0
- package/test/storage/idb/transactionAbort.test.ts +108 -0
- package/test/storage/idb/update.test.ts +999 -0
- package/test/storage/insert.test.ts +278 -0
- package/test/storage/update.test.ts +1021 -0
- package/test/storage/update2.test.ts +897 -0
- package/test/utils/TestUtilsWalletStorage.ts +2526 -0
- package/test/utils/localWalletMethods.ts +363 -0
- package/test/utils/removeFailedFromDatabase.sql +17 -0
- package/ts2md.json +44 -0
- package/tsconfig.all.json +31 -0
- package/tsconfig.client.json +29 -0
- package/tsconfig.json +17 -0
- package/tsconfig.mobile.json +28 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import * as bsv from '@bsv/sdk'
|
|
2
|
+
import { createSyncMap, sdk, SyncMap, TableOutputTagMap } from '../../../../../src'
|
|
3
|
+
import { TestUtilsWalletStorage as _tu, TestWalletNoSetup } from '../../../../../test/utils/TestUtilsWalletStorage'
|
|
4
|
+
import { EntityOutputTagMap } from '../EntityOutputTagMap'
|
|
5
|
+
|
|
6
|
+
describe('OutputTagMap class method tests', () => {
|
|
7
|
+
jest.setTimeout(99999999)
|
|
8
|
+
|
|
9
|
+
const env = _tu.getEnv('test')
|
|
10
|
+
const ctxs: TestWalletNoSetup[] = []
|
|
11
|
+
const ctxs2: TestWalletNoSetup[] = []
|
|
12
|
+
|
|
13
|
+
beforeAll(async () => {
|
|
14
|
+
if (env.runMySQL) {
|
|
15
|
+
ctxs.push(await _tu.createLegacyWalletMySQLCopy('OutputTagMapTests'))
|
|
16
|
+
ctxs2.push(await _tu.createLegacyWalletMySQLCopy('OutputTagMapTests2'))
|
|
17
|
+
}
|
|
18
|
+
ctxs.push(await _tu.createLegacyWalletSQLiteCopy('OutputTagMapTests'))
|
|
19
|
+
ctxs2.push(await _tu.createLegacyWalletSQLiteCopy('OutputTagMapTests2'))
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
afterAll(async () => {
|
|
23
|
+
for (const ctx of ctxs) {
|
|
24
|
+
await ctx.storage.destroy()
|
|
25
|
+
}
|
|
26
|
+
for (const ctx of ctxs2) {
|
|
27
|
+
await ctx.storage.destroy()
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
test('0_OutputTagMap getters and setters', async () => {
|
|
32
|
+
const now = new Date()
|
|
33
|
+
const initialData: TableOutputTagMap = {
|
|
34
|
+
created_at: now,
|
|
35
|
+
updated_at: now,
|
|
36
|
+
outputId: 1,
|
|
37
|
+
outputTagId: 2,
|
|
38
|
+
isDeleted: false
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const outputTagMap = new EntityOutputTagMap(initialData)
|
|
42
|
+
|
|
43
|
+
// Test getters
|
|
44
|
+
expect(outputTagMap.outputTagId).toBe(2)
|
|
45
|
+
expect(outputTagMap.outputId).toBe(1)
|
|
46
|
+
expect(outputTagMap.created_at).toBe(now)
|
|
47
|
+
expect(outputTagMap.updated_at).toBe(now)
|
|
48
|
+
expect(outputTagMap.isDeleted).toBe(false)
|
|
49
|
+
expect(outputTagMap.entityName).toBe('outputTagMap')
|
|
50
|
+
expect(outputTagMap.entityTable).toBe('output_tags_map')
|
|
51
|
+
|
|
52
|
+
// Test setters
|
|
53
|
+
const newDate = new Date()
|
|
54
|
+
outputTagMap.outputTagId = 3
|
|
55
|
+
outputTagMap.outputId = 4
|
|
56
|
+
outputTagMap.created_at = newDate
|
|
57
|
+
outputTagMap.updated_at = newDate
|
|
58
|
+
outputTagMap.isDeleted = true
|
|
59
|
+
|
|
60
|
+
expect(outputTagMap.outputTagId).toBe(3)
|
|
61
|
+
expect(outputTagMap.outputId).toBe(4)
|
|
62
|
+
expect(outputTagMap.created_at).toBe(newDate)
|
|
63
|
+
expect(outputTagMap.updated_at).toBe(newDate)
|
|
64
|
+
expect(outputTagMap.isDeleted).toBe(true)
|
|
65
|
+
|
|
66
|
+
// Test id throws an error
|
|
67
|
+
expect(() => outputTagMap.id).toThrow(sdk.WERR_INVALID_OPERATION)
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
test('1_equals returns true for matching entities', async () => {
|
|
71
|
+
const ctx1 = ctxs[0]
|
|
72
|
+
const ctx2 = ctxs2[0]
|
|
73
|
+
|
|
74
|
+
// Insert matching OutputTagMap records into both databases
|
|
75
|
+
const outputTagMapData: TableOutputTagMap = {
|
|
76
|
+
created_at: new Date('2023-01-01'),
|
|
77
|
+
updated_at: new Date('2023-01-02'),
|
|
78
|
+
outputId: 1,
|
|
79
|
+
outputTagId: 8,
|
|
80
|
+
isDeleted: false
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
await ctx1.activeStorage.insertOutputTagMap(outputTagMapData)
|
|
84
|
+
await ctx2.activeStorage.insertOutputTagMap(outputTagMapData)
|
|
85
|
+
|
|
86
|
+
// Create entities from the records
|
|
87
|
+
const entity1 = new EntityOutputTagMap(outputTagMapData)
|
|
88
|
+
const entity2 = new EntityOutputTagMap(outputTagMapData)
|
|
89
|
+
|
|
90
|
+
const syncMap = createSyncMap()
|
|
91
|
+
syncMap.output.idMap[1] = 1
|
|
92
|
+
syncMap.outputTag.idMap[8] = 8
|
|
93
|
+
|
|
94
|
+
// Verify that equals returns true
|
|
95
|
+
expect(entity1.equals(entity2.toApi(), syncMap)).toBe(true)
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
test('2_equals returns false for non-matching entities', async () => {
|
|
99
|
+
const ctx1 = ctxs[0]
|
|
100
|
+
const ctx2 = ctxs2[0]
|
|
101
|
+
|
|
102
|
+
// Insert mismatched OutputTagMap records into both databases
|
|
103
|
+
const outputTagMapData1: TableOutputTagMap = {
|
|
104
|
+
created_at: new Date('2023-01-01'),
|
|
105
|
+
updated_at: new Date('2023-01-02'),
|
|
106
|
+
outputId: 1,
|
|
107
|
+
outputTagId: 9,
|
|
108
|
+
isDeleted: false
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const outputTagMapData2: TableOutputTagMap = {
|
|
112
|
+
created_at: new Date('2023-01-01'),
|
|
113
|
+
updated_at: new Date('2023-01-02'),
|
|
114
|
+
outputId: 1, // Mismatched outputId
|
|
115
|
+
outputTagId: 21, // Mismatched outputTagId
|
|
116
|
+
isDeleted: true // Mismatched isDeleted
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
await ctx1.activeStorage.insertOutputTagMap(outputTagMapData1)
|
|
120
|
+
await ctx2.activeStorage.insertOutputTagMap(outputTagMapData2)
|
|
121
|
+
|
|
122
|
+
// Create entities from the records
|
|
123
|
+
const entity1 = new EntityOutputTagMap(outputTagMapData1)
|
|
124
|
+
const entity2 = new EntityOutputTagMap(outputTagMapData2)
|
|
125
|
+
|
|
126
|
+
const syncMap = createSyncMap()
|
|
127
|
+
syncMap.output.idMap[101] = 101
|
|
128
|
+
|
|
129
|
+
// Verify that equals returns false due to mismatched properties
|
|
130
|
+
expect(entity1.equals(entity2.toApi(), syncMap)).toBe(false)
|
|
131
|
+
|
|
132
|
+
// Test without a sync map to hit another branch
|
|
133
|
+
expect(entity1.equals(entity2.toApi())).toBe(false)
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
test('3_mergeExisting merges and updates entity when ei.updated_at > this.updated_at', async () => {
|
|
137
|
+
const ctx = ctxs[0]
|
|
138
|
+
|
|
139
|
+
// Insert initial OutputTagMap record with valid foreign key IDs
|
|
140
|
+
const initialData: TableOutputTagMap = {
|
|
141
|
+
created_at: new Date('2023-01-01'),
|
|
142
|
+
updated_at: new Date('2023-01-02'),
|
|
143
|
+
outputId: 2,
|
|
144
|
+
outputTagId: 8,
|
|
145
|
+
isDeleted: false
|
|
146
|
+
}
|
|
147
|
+
await ctx.activeStorage.insertOutputTagMap(initialData)
|
|
148
|
+
|
|
149
|
+
// Create an OutputTagMap entity from the initial data
|
|
150
|
+
const entity = new EntityOutputTagMap(initialData)
|
|
151
|
+
|
|
152
|
+
// Create a new record to simulate the `ei` argument with a later `updated_at`
|
|
153
|
+
const updatedData: TableOutputTagMap = {
|
|
154
|
+
...initialData,
|
|
155
|
+
updated_at: new Date('2023-01-03'), // Later timestamp
|
|
156
|
+
isDeleted: true // Simulate a change in `isDeleted`
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const syncMap = createSyncMap()
|
|
160
|
+
syncMap.output.idMap[1] = 1
|
|
161
|
+
|
|
162
|
+
// Call mergeExisting
|
|
163
|
+
const wasMergedRaw = await entity.mergeExisting(
|
|
164
|
+
ctx.activeStorage,
|
|
165
|
+
undefined, // `since` is not used in this method
|
|
166
|
+
updatedData,
|
|
167
|
+
syncMap
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
const wasMerged = Boolean(wasMergedRaw)
|
|
171
|
+
|
|
172
|
+
// Verify that wasMerged is true
|
|
173
|
+
expect(wasMerged).toBe(true)
|
|
174
|
+
|
|
175
|
+
// Verify that the entity is updated
|
|
176
|
+
expect(entity.isDeleted).toBe(1)
|
|
177
|
+
|
|
178
|
+
// Debugging: Log the updated record query
|
|
179
|
+
const updatedRecord = await ctx.activeStorage.findOutputTagMaps({
|
|
180
|
+
partial: { outputId: 2, outputTagId: 8 }
|
|
181
|
+
})
|
|
182
|
+
//console.log('Updated Record:', updatedRecord)
|
|
183
|
+
//console.log('Updated Record isDeleted:', updatedRecord[0].isDeleted)
|
|
184
|
+
//console.log('Updted Redord length:', updatedRecord.length)
|
|
185
|
+
|
|
186
|
+
// Verify that the database is updated
|
|
187
|
+
expect(updatedRecord.length).toBe(1)
|
|
188
|
+
expect(updatedRecord[0]).toBeDefined()
|
|
189
|
+
expect(updatedRecord[0].isDeleted).toBe(true)
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
test('4_mergeExisting does not merge when ei.updated_at <= this.updated_at', async () => {
|
|
193
|
+
const ctx = ctxs[0]
|
|
194
|
+
|
|
195
|
+
// Insert initial OutputTagMap record
|
|
196
|
+
const initialData: TableOutputTagMap = {
|
|
197
|
+
created_at: new Date('2023-01-01'),
|
|
198
|
+
updated_at: new Date('2023-01-02'),
|
|
199
|
+
outputId: 2,
|
|
200
|
+
outputTagId: 11,
|
|
201
|
+
isDeleted: false
|
|
202
|
+
}
|
|
203
|
+
await ctx.activeStorage.insertOutputTagMap(initialData)
|
|
204
|
+
|
|
205
|
+
// Create an OutputTagMap entity from the initial data
|
|
206
|
+
const entity = new EntityOutputTagMap(initialData)
|
|
207
|
+
|
|
208
|
+
// Create a new record to simulate the `ei` argument with an earlier `updated_at`
|
|
209
|
+
const earlierData: TableOutputTagMap = {
|
|
210
|
+
...initialData,
|
|
211
|
+
updated_at: new Date('2023-01-01'), // Earlier timestamp
|
|
212
|
+
isDeleted: true // Simulate a change in `isDeleted`
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const syncMap = createSyncMap()
|
|
216
|
+
syncMap.output.idMap[101] = 101
|
|
217
|
+
|
|
218
|
+
// Call mergeExisting
|
|
219
|
+
const wasMergedRaw = await entity.mergeExisting(
|
|
220
|
+
ctx.activeStorage,
|
|
221
|
+
undefined, // `since` is not used in this method
|
|
222
|
+
earlierData,
|
|
223
|
+
syncMap
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
// Normalize the result
|
|
227
|
+
const wasMerged = Boolean(wasMergedRaw)
|
|
228
|
+
|
|
229
|
+
// Verify that wasMerged is false
|
|
230
|
+
expect(wasMerged).toBe(false)
|
|
231
|
+
|
|
232
|
+
// Verify that the entity is not updated
|
|
233
|
+
expect(entity.isDeleted).toBe(0)
|
|
234
|
+
|
|
235
|
+
// Verify that the database is not updated
|
|
236
|
+
const record = await ctx.activeStorage.findOutputTagMaps({
|
|
237
|
+
partial: { outputId: 2, outputTagId: 11 }
|
|
238
|
+
})
|
|
239
|
+
expect(record.length).toBe(1)
|
|
240
|
+
expect(record[0].isDeleted).toBe(false)
|
|
241
|
+
})
|
|
242
|
+
})
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { createSyncMap, sdk, SyncMap, TableOutputTag } from '../../../../../src'
|
|
2
|
+
import { TestUtilsWalletStorage as _tu, TestWalletNoSetup } from '../../../../../test/utils/TestUtilsWalletStorage'
|
|
3
|
+
import { EntityOutputTag } from '../EntityOutputTag'
|
|
4
|
+
|
|
5
|
+
describe('OutputTag class method tests', () => {
|
|
6
|
+
jest.setTimeout(99999999)
|
|
7
|
+
|
|
8
|
+
const env = _tu.getEnv('test')
|
|
9
|
+
const ctxs: TestWalletNoSetup[] = []
|
|
10
|
+
const ctxs2: TestWalletNoSetup[] = []
|
|
11
|
+
|
|
12
|
+
beforeAll(async () => {
|
|
13
|
+
if (env.runMySQL) {
|
|
14
|
+
ctxs.push(await _tu.createLegacyWalletMySQLCopy('OutputTagTests'))
|
|
15
|
+
ctxs2.push(await _tu.createLegacyWalletMySQLCopy('OutputTagTests2'))
|
|
16
|
+
}
|
|
17
|
+
ctxs.push(await _tu.createLegacyWalletSQLiteCopy('OutputTagTests'))
|
|
18
|
+
ctxs2.push(await _tu.createLegacyWalletSQLiteCopy('OutputTagTests2'))
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
afterAll(async () => {
|
|
22
|
+
for (const ctx of ctxs) {
|
|
23
|
+
await ctx.storage.destroy()
|
|
24
|
+
}
|
|
25
|
+
for (const ctx of ctxs2) {
|
|
26
|
+
await ctx.storage.destroy()
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
test('0_mergeExisting merges and updates entity when ei.updated_at > this.updated_at', async () => {
|
|
31
|
+
const ctx = ctxs[0]
|
|
32
|
+
|
|
33
|
+
// Insert initial OutputTag record with valid userId
|
|
34
|
+
const initialData: TableOutputTag = {
|
|
35
|
+
outputTagId: 401,
|
|
36
|
+
created_at: new Date('2023-01-01'),
|
|
37
|
+
updated_at: new Date('2023-01-02'),
|
|
38
|
+
tag: 'tag1',
|
|
39
|
+
userId: 1,
|
|
40
|
+
isDeleted: false
|
|
41
|
+
}
|
|
42
|
+
await ctx.activeStorage.insertOutputTag(initialData)
|
|
43
|
+
|
|
44
|
+
// Create an OutputTag entity from the initial data
|
|
45
|
+
const entity = new EntityOutputTag(initialData)
|
|
46
|
+
|
|
47
|
+
// Simulate the `ei` argument with a later `updated_at`
|
|
48
|
+
const updatedData: TableOutputTag = {
|
|
49
|
+
...initialData,
|
|
50
|
+
updated_at: new Date('2023-01-03'), // Later timestamp
|
|
51
|
+
isDeleted: true // Simulate a change in `isDeleted`
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const syncMap = createSyncMap()
|
|
55
|
+
syncMap.outputTag.idMap[401] = 401
|
|
56
|
+
|
|
57
|
+
// Call mergeExisting
|
|
58
|
+
const wasMergedRaw = await entity.mergeExisting(
|
|
59
|
+
ctx.activeStorage,
|
|
60
|
+
undefined, // `since` is not used in this method
|
|
61
|
+
updatedData,
|
|
62
|
+
syncMap,
|
|
63
|
+
undefined
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
const wasMerged = Boolean(wasMergedRaw)
|
|
67
|
+
|
|
68
|
+
// Verify that wasMerged is true
|
|
69
|
+
expect(wasMerged).toBe(true)
|
|
70
|
+
|
|
71
|
+
// Verify that the entity is updated
|
|
72
|
+
expect(entity.isDeleted).toBe(1)
|
|
73
|
+
|
|
74
|
+
// Verify that the database is updated
|
|
75
|
+
const updatedRecord = await ctx.activeStorage.findOutputTags({
|
|
76
|
+
partial: { outputTagId: 401 }
|
|
77
|
+
})
|
|
78
|
+
expect(updatedRecord.length).toBe(1)
|
|
79
|
+
expect(updatedRecord[0]).toBeDefined()
|
|
80
|
+
expect(updatedRecord[0].isDeleted).toBe(true)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
test('1_mergeExisting does not merge when ei.updated_at <= this.updated_at', async () => {
|
|
84
|
+
const ctx = ctxs[0]
|
|
85
|
+
|
|
86
|
+
// Insert initial OutputTag record with valid userId
|
|
87
|
+
const initialData: TableOutputTag = {
|
|
88
|
+
outputTagId: 402,
|
|
89
|
+
created_at: new Date('2023-01-01'),
|
|
90
|
+
updated_at: new Date('2023-01-02'),
|
|
91
|
+
tag: 'tag2',
|
|
92
|
+
userId: 1, // Valid user ID
|
|
93
|
+
isDeleted: false
|
|
94
|
+
}
|
|
95
|
+
await ctx.activeStorage.insertOutputTag(initialData)
|
|
96
|
+
|
|
97
|
+
// Create an OutputTag entity from the initial data
|
|
98
|
+
const entity = new EntityOutputTag(initialData)
|
|
99
|
+
|
|
100
|
+
// Simulate the `ei` argument with an earlier or equal `updated_at`
|
|
101
|
+
const earlierData: TableOutputTag = {
|
|
102
|
+
...initialData,
|
|
103
|
+
updated_at: new Date('2023-01-01'), // Earlier timestamp
|
|
104
|
+
isDeleted: true // Simulate a change in `isDeleted`
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const syncMap = createSyncMap()
|
|
108
|
+
syncMap.outputTag.idMap[1] = 1
|
|
109
|
+
|
|
110
|
+
// Call mergeExisting
|
|
111
|
+
const wasMergedRaw = await entity.mergeExisting(
|
|
112
|
+
ctx.activeStorage,
|
|
113
|
+
undefined, // `since` is not used in this method
|
|
114
|
+
earlierData,
|
|
115
|
+
syncMap,
|
|
116
|
+
undefined
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
const wasMerged = Boolean(wasMergedRaw)
|
|
120
|
+
|
|
121
|
+
// Verify that wasMerged is false
|
|
122
|
+
expect(wasMerged).toBe(false)
|
|
123
|
+
|
|
124
|
+
// Verify that the entity is not updated
|
|
125
|
+
expect(entity.isDeleted).toBe(0)
|
|
126
|
+
|
|
127
|
+
// Verify that the database is not updated
|
|
128
|
+
const record = await ctx.activeStorage.findOutputTags({
|
|
129
|
+
partial: { outputTagId: 1 }
|
|
130
|
+
})
|
|
131
|
+
expect(record.length).toBe(1)
|
|
132
|
+
expect(record[0].isDeleted).toBe(false)
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
test('2_equals identifies matching entities without syncMap', async () => {
|
|
136
|
+
const ctx = ctxs[0]
|
|
137
|
+
|
|
138
|
+
// Insert matching OutputTag record into the database
|
|
139
|
+
const data: TableOutputTag = {
|
|
140
|
+
outputTagId: 403,
|
|
141
|
+
created_at: new Date('2023-01-01'),
|
|
142
|
+
updated_at: new Date('2023-01-02'),
|
|
143
|
+
tag: 'tag3',
|
|
144
|
+
userId: 1,
|
|
145
|
+
isDeleted: false
|
|
146
|
+
}
|
|
147
|
+
await ctx.activeStorage.insertOutputTag(data)
|
|
148
|
+
|
|
149
|
+
// Create OutputTag entities
|
|
150
|
+
const entity1 = new EntityOutputTag(data)
|
|
151
|
+
const entity2 = new EntityOutputTag(data)
|
|
152
|
+
|
|
153
|
+
// Verify that equals returns true for matching entities
|
|
154
|
+
expect(entity1.equals(entity2.toApi())).toBe(true)
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
test('3_equals identifies non-matching entities when tags differ', async () => {
|
|
158
|
+
const ctx = ctxs[0]
|
|
159
|
+
|
|
160
|
+
// Insert differing OutputTag records into the database
|
|
161
|
+
const data1: TableOutputTag = {
|
|
162
|
+
outputTagId: 404,
|
|
163
|
+
created_at: new Date('2023-01-01'),
|
|
164
|
+
updated_at: new Date('2023-01-02'),
|
|
165
|
+
tag: 'tag4',
|
|
166
|
+
userId: 1,
|
|
167
|
+
isDeleted: false
|
|
168
|
+
}
|
|
169
|
+
const data2 = { ...data1, tag: 'tag2' }
|
|
170
|
+
|
|
171
|
+
await ctx.activeStorage.insertOutputTag(data1)
|
|
172
|
+
|
|
173
|
+
// Create OutputTag entities
|
|
174
|
+
const entity1 = new EntityOutputTag(data1)
|
|
175
|
+
const entity2 = new EntityOutputTag(data2)
|
|
176
|
+
|
|
177
|
+
// Verify that equals returns false when tags differ
|
|
178
|
+
expect(entity1.equals(entity2.toApi())).toBe(false)
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
test('4_equals identifies non-matching entities when isDeleted differs', async () => {
|
|
182
|
+
const ctx = ctxs[0]
|
|
183
|
+
|
|
184
|
+
// Insert differing OutputTag records into the database
|
|
185
|
+
const data1: TableOutputTag = {
|
|
186
|
+
outputTagId: 405,
|
|
187
|
+
created_at: new Date('2023-01-01'),
|
|
188
|
+
updated_at: new Date('2023-01-02'),
|
|
189
|
+
tag: 'tag5',
|
|
190
|
+
userId: 1,
|
|
191
|
+
isDeleted: false
|
|
192
|
+
}
|
|
193
|
+
const data2 = { ...data1, isDeleted: true }
|
|
194
|
+
|
|
195
|
+
await ctx.activeStorage.insertOutputTag(data1)
|
|
196
|
+
|
|
197
|
+
// Create OutputTag entities
|
|
198
|
+
const entity1 = new EntityOutputTag(data1)
|
|
199
|
+
const entity2 = new EntityOutputTag(data2)
|
|
200
|
+
|
|
201
|
+
// Verify that equals returns false when isDeleted differs
|
|
202
|
+
expect(entity1.equals(entity2.toApi())).toBe(false)
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
test('5_equals identifies matching entities with syncMap', async () => {
|
|
206
|
+
const ctx = ctxs[0]
|
|
207
|
+
|
|
208
|
+
// Insert matching OutputTag record into the database
|
|
209
|
+
const data: TableOutputTag = {
|
|
210
|
+
outputTagId: 406,
|
|
211
|
+
created_at: new Date('2023-01-01'),
|
|
212
|
+
updated_at: new Date('2023-01-02'),
|
|
213
|
+
tag: 'tag6',
|
|
214
|
+
userId: 1,
|
|
215
|
+
isDeleted: false
|
|
216
|
+
}
|
|
217
|
+
await ctx.activeStorage.insertOutputTag(data)
|
|
218
|
+
|
|
219
|
+
// Create OutputTag entities
|
|
220
|
+
const entity1 = new EntityOutputTag(data)
|
|
221
|
+
const entity2 = new EntityOutputTag(data)
|
|
222
|
+
|
|
223
|
+
const syncMap = createSyncMap()
|
|
224
|
+
syncMap.outputTag.idMap[1] = 1
|
|
225
|
+
|
|
226
|
+
// Verify that equals returns true with syncMap
|
|
227
|
+
expect(entity1.equals(entity2.toApi(), syncMap)).toBe(true)
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
test('6_equals identifies non-matching entities when userIds differ and no syncMap is provided', async () => {
|
|
231
|
+
const ctx = ctxs[0]
|
|
232
|
+
|
|
233
|
+
// Insert differing OutputTag records into the database
|
|
234
|
+
const data1: TableOutputTag = {
|
|
235
|
+
outputTagId: 407,
|
|
236
|
+
created_at: new Date('2023-01-01'),
|
|
237
|
+
updated_at: new Date('2023-01-02'),
|
|
238
|
+
tag: 'tag7',
|
|
239
|
+
userId: 1,
|
|
240
|
+
isDeleted: false
|
|
241
|
+
}
|
|
242
|
+
const data2 = { ...data1, userId: 2 }
|
|
243
|
+
|
|
244
|
+
await ctx.activeStorage.insertOutputTag(data1)
|
|
245
|
+
|
|
246
|
+
// Create OutputTag entities
|
|
247
|
+
const entity1 = new EntityOutputTag(data1)
|
|
248
|
+
const entity2 = new EntityOutputTag(data2)
|
|
249
|
+
|
|
250
|
+
// Verify that equals returns false when userIds differ and no syncMap is provided
|
|
251
|
+
expect(entity1.equals(entity2.toApi())).toBe(false)
|
|
252
|
+
})
|
|
253
|
+
|
|
254
|
+
test('7_getters and setters work as expected for OutputTag', () => {
|
|
255
|
+
const now = new Date()
|
|
256
|
+
const later = new Date(now.getTime() + 1000)
|
|
257
|
+
|
|
258
|
+
// Create an OutputTag instance
|
|
259
|
+
const outputTag = new EntityOutputTag()
|
|
260
|
+
|
|
261
|
+
// Set values using setters
|
|
262
|
+
outputTag.outputTagId = 123
|
|
263
|
+
outputTag.created_at = now
|
|
264
|
+
outputTag.updated_at = later
|
|
265
|
+
outputTag.tag = 'Test Tag'
|
|
266
|
+
outputTag.userId = 456
|
|
267
|
+
outputTag.isDeleted = true
|
|
268
|
+
|
|
269
|
+
// Validate values using getters
|
|
270
|
+
expect(outputTag.outputTagId).toBe(123)
|
|
271
|
+
expect(outputTag.created_at).toBe(now)
|
|
272
|
+
expect(outputTag.updated_at).toBe(later)
|
|
273
|
+
expect(outputTag.tag).toBe('Test Tag')
|
|
274
|
+
expect(outputTag.userId).toBe(456)
|
|
275
|
+
expect(outputTag.isDeleted).toBe(true)
|
|
276
|
+
|
|
277
|
+
// Validate id, entityName, and entityTable
|
|
278
|
+
expect(outputTag.id).toBe(123)
|
|
279
|
+
expect(outputTag.entityName).toBe('outputTag')
|
|
280
|
+
expect(outputTag.entityTable).toBe('output_tags')
|
|
281
|
+
|
|
282
|
+
// Update id using override setter
|
|
283
|
+
outputTag.id = 789
|
|
284
|
+
|
|
285
|
+
// Validate id again
|
|
286
|
+
expect(outputTag.id).toBe(789)
|
|
287
|
+
})
|
|
288
|
+
})
|