@harperfast/harper-pro 5.0.30 → 5.1.0-beta.2
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/analytics/profile.ts +4 -0
- package/core/AGENTS.md +94 -6
- package/core/DESIGN.md +36 -0
- package/core/README.md +11 -10
- package/core/agent/agent.ts +203 -0
- package/core/agent/loop.ts +205 -0
- package/core/agent/operations.ts +148 -0
- package/core/agent/session.ts +187 -0
- package/core/agent/tools/fsTools.ts +276 -0
- package/core/agent/tools/httpFetchTool.ts +112 -0
- package/core/agent/tools/scheduleTool.ts +68 -0
- package/core/agent/toolset.ts +43 -0
- package/core/agent/types.ts +85 -0
- package/core/benchmarks/hnsw-search.js +157 -0
- package/core/benchmarks/ycsb/README.md +144 -0
- package/core/benchmarks/ycsb/analyze-profile.mts +120 -0
- package/core/benchmarks/ycsb/app/config.yaml +3 -0
- package/core/benchmarks/ycsb/app/schema.graphql +17 -0
- package/core/benchmarks/ycsb/harness.mts +328 -0
- package/core/benchmarks/ycsb/restClient.mts +120 -0
- package/core/benchmarks/ycsb/run-single-node.mts +97 -0
- package/core/benchmarks/ycsb/to-benchmark-json.mts +58 -0
- package/core/benchmarks/ycsb/workload.mts +499 -0
- package/core/benchmarks/ycsb/workload.test.mts +174 -0
- package/core/bin/{BinObjects.js → BinObjects.ts} +4 -5
- package/core/bin/cliCredentials.ts +133 -0
- package/core/bin/cliOperations.ts +339 -0
- package/core/bin/copyDb.ts +10 -10
- package/core/bin/deployRenderer.ts +196 -0
- package/core/bin/{harper.js → harper.ts} +48 -24
- package/core/bin/{install.js → install.ts} +3 -3
- package/core/bin/lite.ts +2 -0
- package/core/bin/login.ts +134 -0
- package/core/bin/logout.ts +11 -0
- package/core/bin/mcp/client.ts +407 -0
- package/core/bin/mcp/doctor.ts +189 -0
- package/core/bin/mcp/index.ts +80 -0
- package/core/bin/mcp/options.ts +122 -0
- package/core/bin/mcp/printConfig.ts +89 -0
- package/core/bin/multipartBuilder.ts +74 -0
- package/core/bin/{restart.js → restart.ts} +31 -32
- package/core/bin/{run.js → run.ts} +57 -46
- package/core/bin/sseConsumer.ts +126 -0
- package/core/bin/{status.js → status.ts} +10 -10
- package/core/bin/stop.ts +21 -0
- package/core/bin/upgrade.js +17 -24
- package/core/components/Application.ts +144 -18
- package/core/components/ApplicationScope.ts +2 -2
- package/core/components/ComponentV1.ts +2 -2
- package/core/components/EntryHandler.ts +159 -9
- package/core/components/OptionsWatcher.ts +75 -11
- package/core/components/Scope.ts +132 -18
- package/core/components/anthropic/index.ts +547 -0
- package/core/components/bedrock/index.ts +823 -0
- package/core/components/componentLoader.ts +64 -32
- package/core/components/deployLifecycle.ts +161 -0
- package/core/components/deploymentOperations.ts +173 -0
- package/core/components/deploymentRecorder.ts +427 -0
- package/core/components/deriveURLPath.ts +4 -4
- package/core/components/mcp/adapters/fastify.ts +87 -0
- package/core/components/mcp/adapters/harperHttp.ts +103 -0
- package/core/components/mcp/audit.ts +75 -0
- package/core/components/mcp/index.ts +134 -0
- package/core/components/mcp/jsonrpc.ts +134 -0
- package/core/components/mcp/lifecycle.ts +105 -0
- package/core/components/mcp/listChanged.ts +270 -0
- package/core/components/mcp/rateLimit.ts +217 -0
- package/core/components/mcp/resources.ts +607 -0
- package/core/components/mcp/session.ts +151 -0
- package/core/components/mcp/sessionRegistry.ts +140 -0
- package/core/components/mcp/toolRegistry.ts +294 -0
- package/core/components/mcp/tools/application.ts +761 -0
- package/core/components/mcp/tools/operations.ts +311 -0
- package/core/components/mcp/tools/schemas/derive.ts +356 -0
- package/core/components/mcp/tools/schemas/operationDescriptions.ts +241 -0
- package/core/components/mcp/tools/schemas/operations.ts +301 -0
- package/core/components/mcp/transport.ts +517 -0
- package/core/components/ollama/index.ts +316 -0
- package/core/components/openai/index.ts +563 -0
- package/core/components/operations.js +217 -60
- package/core/components/operationsValidation.js +12 -4
- package/core/components/packageComponent.ts +97 -29
- package/core/components/requestRestart.ts +17 -2
- package/core/components/status/crossThread.ts +14 -5
- package/core/components/status/errors.ts +1 -1
- package/core/config/RootConfigWatcher.ts +56 -2
- package/core/config/configUtils.js +29 -8
- package/core/config/harperConfigEnvVars.ts +1 -1
- package/core/dataLayer/{CreateAttributeObject.js → CreateAttributeObject.ts} +4 -3
- package/core/dataLayer/{CreateTableObject.js → CreateTableObject.ts} +2 -1
- package/core/dataLayer/{DataLayerObjects.js → DataLayerObjects.ts} +17 -9
- package/core/dataLayer/{DeleteBeforeObject.js → DeleteBeforeObject.ts} +2 -1
- package/core/dataLayer/{DeleteObject.js → DeleteObject.ts} +3 -2
- package/core/dataLayer/{DropAttributeObject.js → DropAttributeObject.ts} +2 -1
- package/core/dataLayer/{GetBackupObject.js → GetBackupObject.ts} +3 -2
- package/core/dataLayer/{InsertObject.js → InsertObject.ts} +3 -2
- package/core/dataLayer/{ReadAuditLogObject.js → ReadAuditLogObject.ts} +3 -2
- package/core/dataLayer/{SQLSearch.js → SQLSearch.ts} +97 -43
- package/core/dataLayer/{SearchByConditionsObject.js → SearchByConditionsObject.ts} +5 -6
- package/core/dataLayer/{SearchByHashObject.js → SearchByHashObject.ts} +2 -1
- package/core/dataLayer/{SearchObject.js → SearchObject.ts} +2 -1
- package/core/dataLayer/{SqlSearchObject.js → SqlSearchObject.ts} +2 -1
- package/core/dataLayer/{UpdateObject.js → UpdateObject.ts} +3 -2
- package/core/dataLayer/{UpsertObject.js → UpsertObject.ts} +3 -2
- package/core/dataLayer/{bulkLoad.js → bulkLoad.ts} +40 -49
- package/core/dataLayer/{delete.js → delete.ts} +21 -26
- package/core/dataLayer/{export.js → export.ts} +22 -26
- package/core/dataLayer/{getBackup.js → getBackup.ts} +7 -9
- package/core/dataLayer/harperBridge/BridgeMethods.ts +102 -0
- package/core/dataLayer/harperBridge/ResourceBridge.ts +27 -26
- package/core/dataLayer/harperBridge/TableSizeObject.ts +1 -0
- package/core/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +4 -4
- package/core/dataLayer/harperBridge/{harperBridge.js → harperBridge.ts} +3 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +8 -6
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +4 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +6 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +5 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +4 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +6 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +5 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +5 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +3 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +3 -2
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +5 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +10 -8
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +4 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +3 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +6 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +2 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +3 -2
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +2 -2
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +5 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +6 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.ts +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +4 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +5 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +4 -4
- package/core/dataLayer/{hdbInfoController.js → hdbInfoController.ts} +20 -26
- package/core/dataLayer/{insert.js → insert.ts} +24 -24
- package/core/dataLayer/{readAuditLog.js → readAuditLog.ts} +8 -10
- package/core/dataLayer/{schema.js → schema.ts} +32 -44
- package/core/dataLayer/{schemaDescribe.js → schemaDescribe.ts} +23 -26
- package/core/dataLayer/{search.js → search.ts} +9 -15
- package/core/dataLayer/{transaction.js → transaction.ts} +2 -5
- package/core/dataLayer/{update.js → update.ts} +19 -22
- package/core/index.ts +5 -0
- package/core/json/systemSchema.json +65 -0
- package/core/launchServiceScripts/utility/checkNodeVersion.js +2 -0
- package/core/package-lock.json +9087 -4345
- package/core/resources/DESIGN.md +98 -0
- package/core/resources/DatabaseTransaction.ts +58 -30
- package/core/resources/ErrorResource.ts +2 -1
- package/core/resources/LMDBTransaction.ts +38 -29
- package/core/resources/RecordEncoder.ts +41 -39
- package/core/resources/RequestTarget.ts +2 -0
- package/core/resources/Resource.ts +96 -56
- package/core/resources/ResourceInterface.ts +44 -21
- package/core/resources/Resources.ts +8 -8
- package/core/resources/RocksIndexStore.ts +3 -0
- package/core/resources/RocksTransactionLogStore.ts +13 -4
- package/core/resources/Table.ts +440 -223
- package/core/resources/analytics/metadata.ts +1 -0
- package/core/resources/analytics/read.ts +99 -10
- package/core/resources/analytics/write.ts +240 -17
- package/core/resources/auditStore.ts +30 -19
- package/core/resources/blob.ts +53 -53
- package/core/resources/dataLoader.ts +4 -4
- package/core/resources/databases.ts +208 -74
- package/core/resources/graphql.ts +267 -165
- package/core/resources/indexes/HierarchicalNavigableSmallWorld.ts +310 -65
- package/core/resources/indexes/vector.ts +17 -0
- package/core/resources/jsonSchemaTypes.ts +102 -0
- package/core/resources/loadEnv.ts +21 -17
- package/core/resources/login.ts +5 -3
- package/core/resources/models/Models.ts +304 -0
- package/core/resources/models/TestBackend.ts +83 -0
- package/core/resources/models/agentLoop.ts +895 -0
- package/core/resources/models/analyticsTable.ts +199 -0
- package/core/resources/models/backendHelpers.ts +116 -0
- package/core/resources/models/backendRegistry.ts +66 -0
- package/core/resources/models/bootstrap.ts +135 -0
- package/core/resources/models/embedHook.ts +138 -0
- package/core/resources/models/types.ts +296 -0
- package/core/resources/openApi.ts +65 -31
- package/core/resources/replayLogs.ts +20 -9
- package/core/resources/replayLogsGuards.ts +45 -0
- package/core/resources/roles.ts +62 -67
- package/core/resources/search.ts +355 -135
- package/core/resources/tracked.ts +18 -9
- package/core/resources/transaction.ts +8 -8
- package/core/resources/transactionBroadcast.ts +3 -3
- package/core/security/auth.ts +35 -26
- package/core/security/certificateVerification/crlVerification.ts +11 -4
- package/core/security/{cryptoHash.js → cryptoHash.ts} +3 -8
- package/core/security/data_objects/{PermissionAttributeResponseObject.js → PermissionAttributeResponseObject.ts} +4 -4
- package/core/security/data_objects/{PermissionResponseObject.js → PermissionResponseObject.ts} +12 -11
- package/core/security/data_objects/{PermissionTableResponseObject.js → PermissionTableResponseObject.ts} +6 -4
- package/core/security/{fastifyAuth.js → fastifyAuth.ts} +93 -20
- package/core/security/impersonation.ts +3 -3
- package/core/security/jsLoader.ts +22 -8
- package/core/security/{keys.js → keys.ts} +113 -121
- package/core/security/permissionsTranslator.js +2 -2
- package/core/security/{role.js → role.ts} +26 -33
- package/core/security/tokenAuthentication.ts +34 -7
- package/core/security/user.ts +26 -22
- package/core/server/DESIGN.md +139 -0
- package/core/server/DurableSubscriptionsSession.ts +67 -50
- package/core/server/REST.ts +120 -107
- package/core/server/Server.ts +31 -12
- package/core/server/fastifyRoutes/helpers/getCORSOptions.js +1 -1
- package/core/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +1 -1
- package/core/server/fastifyRoutes/helpers/getServerOptions.js +1 -1
- package/core/server/fastifyRoutes.ts +37 -33
- package/core/server/graphqlQuerying.ts +6 -5
- package/core/server/http.ts +517 -26
- package/core/server/itc/serverHandlers.js +75 -14
- package/core/server/jobs/{JobObject.js → JobObject.ts} +13 -6
- package/core/server/jobs/{jobProcess.js → jobProcess.ts} +20 -16
- package/core/server/jobs/{jobRunner.js → jobRunner.ts} +20 -21
- package/core/server/jobs/{jobs.js → jobs.ts} +41 -44
- package/core/server/loadRootComponents.js +1 -1
- package/core/server/middlewareChain.ts +270 -0
- package/core/server/mqtt.ts +35 -26
- package/core/server/nodeName.ts +3 -1
- package/core/server/operationsServer.ts +85 -10
- package/core/server/serverHelpers/Headers.ts +10 -8
- package/core/server/serverHelpers/JSONStream.ts +15 -5
- package/core/server/serverHelpers/Request.ts +370 -13
- package/core/server/serverHelpers/contentTypes.ts +42 -11
- package/core/server/serverHelpers/multipartParser.ts +152 -0
- package/core/server/serverHelpers/progressEmitter.ts +110 -0
- package/core/server/serverHelpers/serverHandlers.js +43 -7
- package/core/server/serverHelpers/serverUtilities.ts +40 -30
- package/core/server/static.ts +9 -6
- package/core/server/status/index.ts +2 -2
- package/core/server/storageReclamation.ts +39 -2
- package/core/server/threads/itc.js +7 -4
- package/core/server/threads/manageThreads.js +100 -26
- package/core/server/threads/socketRouter.ts +12 -275
- package/core/server/threads/threadServer.js +345 -105
- package/core/server/threads/workerProcessGuard.ts +93 -0
- package/core/server/throttle.ts +18 -0
- package/core/sqlTranslator/{SelectValidator.js → SelectValidator.ts} +41 -49
- package/core/sqlTranslator/{alasqlFunctionImporter.js → alasqlFunctionImporter.ts} +5 -5
- package/core/sqlTranslator/{deleteTranslator.js → deleteTranslator.ts} +13 -18
- package/core/sqlTranslator/{index.js → index.ts} +30 -33
- package/core/sqlTranslator/{sql_statement_bucket.js → sql_statement_bucket.ts} +49 -20
- package/core/static/README.md +10 -9
- package/core/static/defaultConfig.yaml +0 -1
- package/core/system/000004.log +0 -0
- package/core/system/CURRENT +1 -0
- package/core/system/IDENTITY +1 -0
- package/core/system/LOCK +0 -0
- package/core/system/LOG +1351 -0
- package/core/system/MANIFEST-000005 +0 -0
- package/core/system/OPTIONS-000013 +607 -0
- package/core/system/OPTIONS-000015 +734 -0
- package/core/upgrade/{UpgradeObjects.js → UpgradeObjects.ts} +3 -6
- package/core/upgrade/directives/5-1-0.ts +89 -0
- package/core/upgrade/directives/{directivesController.js → directivesController.ts} +16 -16
- package/core/upgrade/{directivesManager.js → directivesManager.ts} +7 -11
- package/core/upgrade/{upgradePrompt.js → upgradePrompt.ts} +6 -54
- package/core/upgrade/{upgradeUtilities.js → upgradeUtilities.ts} +3 -7
- package/core/utility/{OperationFunctionCaller.js → OperationFunctionCaller.ts} +7 -7
- package/core/utility/{assignCmdEnvVariables.js → assignCmdEnvVariables.ts} +6 -8
- package/core/utility/{common_utils.js → common_utils.ts} +113 -139
- package/core/utility/environment/{environmentManager.js → environmentManager.ts} +34 -33
- package/core/utility/environment/systemInformation.ts +18 -4
- package/core/utility/errors/{commonErrors.js → commonErrors.ts} +9 -9
- package/core/utility/errors/{hdbError.js → hdbError.ts} +39 -45
- package/core/utility/expandEnvVar.ts +110 -0
- package/core/utility/functions/geo.js +2 -2
- package/core/utility/functions/sql/alaSQLExtension.js +1 -1
- package/core/utility/globalSchema.ts +30 -0
- package/core/utility/hdbTerms.ts +54 -1
- package/core/utility/install/checkJWTTokensExist.js +1 -1
- package/core/utility/install/{installer.js → installer.ts} +86 -62
- package/core/utility/installation.ts +2 -2
- package/core/utility/lmdb/{DBIDefinition.js → DBIDefinition.ts} +4 -1
- package/core/utility/lmdb/{DeleteRecordsResponseObject.js → DeleteRecordsResponseObject.ts} +2 -1
- package/core/utility/lmdb/{InsertRecordsResponseObject.js → InsertRecordsResponseObject.ts} +2 -1
- package/core/utility/lmdb/OpenDBIObject.ts +57 -0
- package/core/utility/lmdb/{OpenEnvironmentObject.js → OpenEnvironmentObject.ts} +19 -6
- package/core/utility/lmdb/{UpdateRecordsResponseObject.js → UpdateRecordsResponseObject.ts} +2 -1
- package/core/utility/lmdb/{UpsertRecordsResponseObject.js → UpsertRecordsResponseObject.ts} +2 -1
- package/core/utility/lmdb/{cleanLMDBMap.js → cleanLMDBMap.ts} +5 -5
- package/core/utility/lmdb/{commonUtility.js → commonUtility.ts} +13 -21
- package/core/utility/lmdb/{deleteUtility.js → deleteUtility.ts} +8 -12
- package/core/utility/lmdb/{environmentUtility.js → environmentUtility.ts} +43 -52
- package/core/utility/lmdb/{searchCursorFunctions.js → searchCursorFunctions.ts} +12 -26
- package/core/utility/lmdb/{searchUtility.js → searchUtility.ts} +75 -64
- package/core/utility/lmdb/{terms.js → terms.ts} +10 -23
- package/core/utility/lmdb/{writeUtility.js → writeUtility.ts} +37 -22
- package/core/utility/logging/{harper_logger.js → harper_logger.ts} +137 -90
- package/core/utility/logging/{logRotator.js → logRotator.ts} +15 -18
- package/core/utility/logging/logger.ts +1 -1
- package/core/utility/logging/{readLog.js → readLog.ts} +19 -19
- package/core/utility/logging/{transactionLog.js → transactionLog.ts} +10 -14
- package/core/utility/{mount_hdb.js → mount_hdb.ts} +15 -16
- package/core/utility/{npmUtilities.js → npmUtilities.ts} +14 -17
- package/core/utility/{operation_authorization.js → operation_authorization.ts} +173 -124
- package/core/utility/packageUtils.js +7 -16
- package/core/utility/password.ts +1 -1
- package/core/utility/processManagement/processManagement.js +2 -2
- package/core/utility/processManagement/servicesConfig.js +1 -1
- package/core/utility/{signalling.js → signalling.ts} +6 -11
- package/core/utility/watcherFallback.ts +74 -0
- package/core/validation/analyticsValidator.ts +44 -0
- package/core/validation/{bulkDeleteValidator.js → bulkDeleteValidator.ts} +5 -5
- package/core/validation/{check_permissions.js → check_permissions.ts} +3 -3
- package/core/validation/{common_validators.js → common_validators.ts} +12 -24
- package/core/validation/{configValidator.js → configValidator.ts} +114 -18
- package/core/validation/{deleteValidator.js → deleteValidator.ts} +5 -5
- package/core/validation/{fileLoadValidator.js → fileLoadValidator.ts} +12 -19
- package/core/validation/{insertValidator.js → insertValidator.ts} +5 -5
- package/core/validation/{installValidator.js → installValidator.ts} +8 -8
- package/core/validation/{readLogValidator.js → readLogValidator.ts} +10 -10
- package/core/validation/{role_validation.js → role_validation.ts} +26 -32
- package/core/validation/{schemaMetadataValidator.js → schemaMetadataValidator.ts} +5 -11
- package/core/validation/{searchValidator.js → searchValidator.ts} +12 -11
- package/core/validation/statusValidator.ts +1 -1
- package/core/validation/{transactionLogValidator.js → transactionLogValidator.ts} +4 -9
- package/core/validation/{user_validation.js → user_validation.ts} +4 -10
- package/core/validation/{validationWrapper.js → validationWrapper.ts} +3 -9
- package/dist/analytics/profile.js +4 -0
- package/dist/analytics/profile.js.map +1 -1
- package/dist/cloneNode/cloneNode.js +224 -12
- package/dist/cloneNode/cloneNode.js.map +1 -1
- package/dist/core/agent/agent.js +175 -0
- package/dist/core/agent/agent.js.map +1 -0
- package/dist/core/agent/loop.js +176 -0
- package/dist/core/agent/loop.js.map +1 -0
- package/dist/core/agent/operations.js +137 -0
- package/dist/core/agent/operations.js.map +1 -0
- package/dist/core/agent/session.js +182 -0
- package/dist/core/agent/session.js.map +1 -0
- package/dist/core/agent/tools/fsTools.js +286 -0
- package/dist/core/agent/tools/fsTools.js.map +1 -0
- package/dist/core/agent/tools/httpFetchTool.js +116 -0
- package/dist/core/agent/tools/httpFetchTool.js.map +1 -0
- package/dist/core/agent/tools/scheduleTool.js +54 -0
- package/dist/core/agent/tools/scheduleTool.js.map +1 -0
- package/dist/core/agent/toolset.js +33 -0
- package/dist/core/agent/toolset.js.map +1 -0
- package/dist/core/agent/types.js +10 -0
- package/dist/core/agent/types.js.map +1 -0
- package/dist/core/bin/BinObjects.js +6 -3
- package/dist/core/bin/BinObjects.js.map +1 -1
- package/dist/core/bin/cliCredentials.js +130 -0
- package/dist/core/bin/cliCredentials.js.map +1 -0
- package/dist/core/bin/cliOperations.js +254 -40
- package/dist/core/bin/cliOperations.js.map +1 -1
- package/dist/core/bin/copyDb.js +16 -16
- package/dist/core/bin/copyDb.js.map +1 -1
- package/dist/core/bin/deployRenderer.js +185 -0
- package/dist/core/bin/deployRenderer.js.map +1 -0
- package/dist/core/bin/harper.js +92 -31
- package/dist/core/bin/harper.js.map +1 -1
- package/dist/core/bin/install.js +41 -4
- package/dist/core/bin/install.js.map +1 -1
- package/dist/core/bin/lite.js +3 -4
- package/dist/core/bin/lite.js.map +1 -1
- package/dist/core/bin/login.js +123 -0
- package/dist/core/bin/login.js.map +1 -0
- package/dist/core/bin/logout.js +16 -0
- package/dist/core/bin/logout.js.map +1 -0
- package/dist/core/bin/mcp/client.js +395 -0
- package/dist/core/bin/mcp/client.js.map +1 -0
- package/dist/core/bin/mcp/doctor.js +193 -0
- package/dist/core/bin/mcp/doctor.js.map +1 -0
- package/dist/core/bin/mcp/index.js +81 -0
- package/dist/core/bin/mcp/index.js.map +1 -0
- package/dist/core/bin/mcp/options.js +113 -0
- package/dist/core/bin/mcp/options.js.map +1 -0
- package/dist/core/bin/mcp/printConfig.js +85 -0
- package/dist/core/bin/mcp/printConfig.js.map +1 -0
- package/dist/core/bin/multipartBuilder.js +55 -0
- package/dist/core/bin/multipartBuilder.js.map +1 -0
- package/dist/core/bin/restart.js +85 -48
- package/dist/core/bin/restart.js.map +1 -1
- package/dist/core/bin/run.js +123 -77
- package/dist/core/bin/run.js.map +1 -1
- package/dist/core/bin/sseConsumer.js +127 -0
- package/dist/core/bin/sseConsumer.js.map +1 -0
- package/dist/core/bin/status.js +48 -11
- package/dist/core/bin/status.js.map +1 -1
- package/dist/core/bin/stop.js +44 -7
- package/dist/core/bin/stop.js.map +1 -1
- package/dist/core/bin/upgrade.js +14 -22
- package/dist/core/bin/upgrade.js.map +1 -1
- package/dist/core/components/Application.js +134 -28
- package/dist/core/components/Application.js.map +1 -1
- package/dist/core/components/ApplicationScope.js +2 -2
- package/dist/core/components/ComponentV1.js +5 -5
- package/dist/core/components/ComponentV1.js.map +1 -1
- package/dist/core/components/EntryHandler.js +153 -13
- package/dist/core/components/EntryHandler.js.map +1 -1
- package/dist/core/components/OptionsWatcher.js +72 -10
- package/dist/core/components/OptionsWatcher.js.map +1 -1
- package/dist/core/components/Scope.js +112 -12
- package/dist/core/components/Scope.js.map +1 -1
- package/dist/core/components/anthropic/index.js +428 -0
- package/dist/core/components/anthropic/index.js.map +1 -0
- package/dist/core/components/bedrock/index.js +734 -0
- package/dist/core/components/bedrock/index.js.map +1 -0
- package/dist/core/components/componentLoader.js +65 -38
- package/dist/core/components/componentLoader.js.map +1 -1
- package/dist/core/components/deployLifecycle.js +156 -0
- package/dist/core/components/deployLifecycle.js.map +1 -0
- package/dist/core/components/deploymentOperations.js +185 -0
- package/dist/core/components/deploymentOperations.js.map +1 -0
- package/dist/core/components/deploymentRecorder.js +425 -0
- package/dist/core/components/deploymentRecorder.js.map +1 -0
- package/dist/core/components/deriveURLPath.js +2 -2
- package/dist/core/components/deriveURLPath.js.map +1 -1
- package/dist/core/components/mcp/adapters/fastify.js +66 -0
- package/dist/core/components/mcp/adapters/fastify.js.map +1 -0
- package/dist/core/components/mcp/adapters/harperHttp.js +78 -0
- package/dist/core/components/mcp/adapters/harperHttp.js.map +1 -0
- package/dist/core/components/mcp/audit.js +73 -0
- package/dist/core/components/mcp/audit.js.map +1 -0
- package/dist/core/components/mcp/index.js +109 -0
- package/dist/core/components/mcp/index.js.map +1 -0
- package/dist/core/components/mcp/jsonrpc.js +93 -0
- package/dist/core/components/mcp/jsonrpc.js.map +1 -0
- package/dist/core/components/mcp/lifecycle.js +79 -0
- package/dist/core/components/mcp/lifecycle.js.map +1 -0
- package/dist/core/components/mcp/listChanged.js +257 -0
- package/dist/core/components/mcp/listChanged.js.map +1 -0
- package/dist/core/components/mcp/rateLimit.js +226 -0
- package/dist/core/components/mcp/rateLimit.js.map +1 -0
- package/dist/core/components/mcp/resources.js +526 -0
- package/dist/core/components/mcp/resources.js.map +1 -0
- package/dist/core/components/mcp/session.js +170 -0
- package/dist/core/components/mcp/session.js.map +1 -0
- package/dist/core/components/mcp/sessionRegistry.js +124 -0
- package/dist/core/components/mcp/sessionRegistry.js.map +1 -0
- package/dist/core/components/mcp/toolRegistry.js +177 -0
- package/dist/core/components/mcp/toolRegistry.js.map +1 -0
- package/dist/core/components/mcp/tools/application.js +660 -0
- package/dist/core/components/mcp/tools/application.js.map +1 -0
- package/dist/core/components/mcp/tools/operations.js +331 -0
- package/dist/core/components/mcp/tools/operations.js.map +1 -0
- package/dist/core/components/mcp/tools/schemas/derive.js +291 -0
- package/dist/core/components/mcp/tools/schemas/derive.js.map +1 -0
- package/dist/core/components/mcp/tools/schemas/operationDescriptions.js +179 -0
- package/dist/core/components/mcp/tools/schemas/operationDescriptions.js.map +1 -0
- package/dist/core/components/mcp/tools/schemas/operations.js +299 -0
- package/dist/core/components/mcp/tools/schemas/operations.js.map +1 -0
- package/dist/core/components/mcp/transport.js +467 -0
- package/dist/core/components/mcp/transport.js.map +1 -0
- package/dist/core/components/ollama/index.js +239 -0
- package/dist/core/components/ollama/index.js.map +1 -0
- package/dist/core/components/openai/index.js +475 -0
- package/dist/core/components/openai/index.js.map +1 -0
- package/dist/core/components/operations.js +205 -52
- package/dist/core/components/operations.js.map +1 -1
- package/dist/core/components/operationsValidation.js +13 -4
- package/dist/core/components/operationsValidation.js.map +1 -1
- package/dist/core/components/packageComponent.js +87 -26
- package/dist/core/components/packageComponent.js.map +1 -1
- package/dist/core/components/requestRestart.js +12 -1
- package/dist/core/components/requestRestart.js.map +1 -1
- package/dist/core/components/status/crossThread.js +12 -5
- package/dist/core/components/status/crossThread.js.map +1 -1
- package/dist/core/components/status/errors.js +7 -7
- package/dist/core/config/RootConfigWatcher.js +52 -1
- package/dist/core/config/RootConfigWatcher.js.map +1 -1
- package/dist/core/config/configUtils.js +31 -8
- package/dist/core/config/configUtils.js.map +1 -1
- package/dist/core/config/harperConfigEnvVars.js +1 -1
- package/dist/core/config/harperConfigEnvVars.js.map +1 -1
- package/dist/core/dataLayer/CreateAttributeObject.js +4 -3
- package/dist/core/dataLayer/CreateAttributeObject.js.map +1 -1
- package/dist/core/dataLayer/CreateTableObject.js +2 -1
- package/dist/core/dataLayer/CreateTableObject.js.map +1 -1
- package/dist/core/dataLayer/DataLayerObjects.js +19 -5
- package/dist/core/dataLayer/DataLayerObjects.js.map +1 -1
- package/dist/core/dataLayer/DeleteBeforeObject.js +2 -1
- package/dist/core/dataLayer/DeleteBeforeObject.js.map +1 -1
- package/dist/core/dataLayer/DeleteObject.js +4 -3
- package/dist/core/dataLayer/DeleteObject.js.map +1 -1
- package/dist/core/dataLayer/DropAttributeObject.js +2 -1
- package/dist/core/dataLayer/DropAttributeObject.js.map +1 -1
- package/dist/core/dataLayer/GetBackupObject.js +4 -3
- package/dist/core/dataLayer/GetBackupObject.js.map +1 -1
- package/dist/core/dataLayer/InsertObject.js +4 -3
- package/dist/core/dataLayer/InsertObject.js.map +1 -1
- package/dist/core/dataLayer/ReadAuditLogObject.js +4 -3
- package/dist/core/dataLayer/ReadAuditLogObject.js.map +1 -1
- package/dist/core/dataLayer/SQLSearch.js +140 -78
- package/dist/core/dataLayer/SQLSearch.js.map +1 -1
- package/dist/core/dataLayer/SearchByConditionsObject.js +5 -7
- package/dist/core/dataLayer/SearchByConditionsObject.js.map +1 -1
- package/dist/core/dataLayer/SearchByHashObject.js +2 -1
- package/dist/core/dataLayer/SearchByHashObject.js.map +1 -1
- package/dist/core/dataLayer/SearchObject.js +2 -1
- package/dist/core/dataLayer/SearchObject.js.map +1 -1
- package/dist/core/dataLayer/SqlSearchObject.js +2 -1
- package/dist/core/dataLayer/SqlSearchObject.js.map +1 -1
- package/dist/core/dataLayer/UpdateObject.js +4 -3
- package/dist/core/dataLayer/UpdateObject.js.map +1 -1
- package/dist/core/dataLayer/UpsertObject.js +4 -3
- package/dist/core/dataLayer/UpsertObject.js.map +1 -1
- package/dist/core/dataLayer/bulkLoad.js +122 -88
- package/dist/core/dataLayer/bulkLoad.js.map +1 -1
- package/dist/core/dataLayer/delete.js +74 -39
- package/dist/core/dataLayer/delete.js.map +1 -1
- package/dist/core/dataLayer/export.js +90 -55
- package/dist/core/dataLayer/export.js.map +1 -1
- package/dist/core/dataLayer/getBackup.js +43 -11
- package/dist/core/dataLayer/getBackup.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/BridgeMethods.js +41 -20
- package/dist/core/dataLayer/harperBridge/BridgeMethods.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/ResourceBridge.js +26 -25
- package/dist/core/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/TableSizeObject.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +4 -4
- package/dist/core/dataLayer/harperBridge/harperBridge.js +38 -4
- package/dist/core/dataLayer/harperBridge/harperBridge.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +7 -6
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +5 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +3 -3
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +2 -2
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +8 -8
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +3 -3
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +3 -3
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +2 -2
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +2 -2
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +5 -3
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +2 -2
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +4 -4
- package/dist/core/dataLayer/hdbInfoController.js +66 -31
- package/dist/core/dataLayer/hdbInfoController.js.map +1 -1
- package/dist/core/dataLayer/insert.js +63 -28
- package/dist/core/dataLayer/insert.js.map +1 -1
- package/dist/core/dataLayer/readAuditLog.js +45 -13
- package/dist/core/dataLayer/readAuditLog.js.map +1 -1
- package/dist/core/dataLayer/schema.js +124 -89
- package/dist/core/dataLayer/schema.js.map +1 -1
- package/dist/core/dataLayer/schemaDescribe.js +78 -41
- package/dist/core/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/core/dataLayer/search.js +12 -13
- package/dist/core/dataLayer/search.js.map +1 -1
- package/dist/core/dataLayer/transaction.js +3 -4
- package/dist/core/dataLayer/transaction.js.map +1 -1
- package/dist/core/dataLayer/update.js +53 -18
- package/dist/core/dataLayer/update.js.map +1 -1
- package/dist/core/globals.js +1 -0
- package/dist/core/globals.js.map +1 -1
- package/dist/core/index.js +4 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/json/systemSchema.json +65 -0
- package/dist/core/launchServiceScripts/utility/checkNodeVersion.js +3 -0
- package/dist/core/launchServiceScripts/utility/checkNodeVersion.js.map +1 -1
- package/dist/core/resources/DatabaseTransaction.js +39 -15
- package/dist/core/resources/DatabaseTransaction.js.map +1 -1
- package/dist/core/resources/ErrorResource.js +3 -1
- package/dist/core/resources/ErrorResource.js.map +1 -1
- package/dist/core/resources/LMDBTransaction.js +18 -7
- package/dist/core/resources/LMDBTransaction.js.map +1 -1
- package/dist/core/resources/RecordEncoder.js +38 -38
- package/dist/core/resources/RecordEncoder.js.map +1 -1
- package/dist/core/resources/RequestTarget.js.map +1 -1
- package/dist/core/resources/Resource.js +43 -10
- package/dist/core/resources/Resource.js.map +1 -1
- package/dist/core/resources/ResourceInterface.js +20 -0
- package/dist/core/resources/ResourceInterface.js.map +1 -1
- package/dist/core/resources/Resources.js +7 -6
- package/dist/core/resources/Resources.js.map +1 -1
- package/dist/core/resources/RocksIndexStore.js +3 -0
- package/dist/core/resources/RocksIndexStore.js.map +1 -1
- package/dist/core/resources/RocksTransactionLogStore.js +10 -3
- package/dist/core/resources/RocksTransactionLogStore.js.map +1 -1
- package/dist/core/resources/Table.js +306 -116
- package/dist/core/resources/Table.js.map +1 -1
- package/dist/core/resources/analytics/metadata.js +1 -0
- package/dist/core/resources/analytics/metadata.js.map +1 -1
- package/dist/core/resources/analytics/read.js +69 -8
- package/dist/core/resources/analytics/read.js.map +1 -1
- package/dist/core/resources/analytics/write.js +232 -20
- package/dist/core/resources/analytics/write.js.map +1 -1
- package/dist/core/resources/auditStore.js +16 -8
- package/dist/core/resources/auditStore.js.map +1 -1
- package/dist/core/resources/blob.js +8 -8
- package/dist/core/resources/blob.js.map +1 -1
- package/dist/core/resources/dataLoader.js +13 -13
- package/dist/core/resources/databases.js +175 -59
- package/dist/core/resources/databases.js.map +1 -1
- package/dist/core/resources/graphql.js +267 -173
- package/dist/core/resources/graphql.js.map +1 -1
- package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js +327 -59
- package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
- package/dist/core/resources/indexes/vector.js +14 -0
- package/dist/core/resources/indexes/vector.js.map +1 -1
- package/dist/core/resources/jsonSchemaTypes.js +78 -0
- package/dist/core/resources/jsonSchemaTypes.js.map +1 -0
- package/dist/core/resources/loadEnv.js +21 -18
- package/dist/core/resources/loadEnv.js.map +1 -1
- package/dist/core/resources/login.js +5 -4
- package/dist/core/resources/login.js.map +1 -1
- package/dist/core/resources/models/Models.js +265 -0
- package/dist/core/resources/models/Models.js.map +1 -0
- package/dist/core/resources/models/TestBackend.js +71 -0
- package/dist/core/resources/models/TestBackend.js.map +1 -0
- package/dist/core/resources/models/agentLoop.js +746 -0
- package/dist/core/resources/models/agentLoop.js.map +1 -0
- package/dist/core/resources/models/analyticsTable.js +166 -0
- package/dist/core/resources/models/analyticsTable.js.map +1 -0
- package/dist/core/resources/models/backendHelpers.js +109 -0
- package/dist/core/resources/models/backendHelpers.js.map +1 -0
- package/dist/core/resources/models/backendRegistry.js +54 -0
- package/dist/core/resources/models/backendRegistry.js.map +1 -0
- package/dist/core/resources/models/bootstrap.js +112 -0
- package/dist/core/resources/models/bootstrap.js.map +1 -0
- package/dist/core/resources/models/embedHook.js +127 -0
- package/dist/core/resources/models/embedHook.js.map +1 -0
- package/dist/core/resources/models/types.js +11 -0
- package/dist/core/resources/models/types.js.map +1 -0
- package/dist/core/resources/openApi.js +74 -34
- package/dist/core/resources/openApi.js.map +1 -1
- package/dist/core/resources/replayLogs.js +7 -1
- package/dist/core/resources/replayLogs.js.map +1 -1
- package/dist/core/resources/replayLogsGuards.js +47 -0
- package/dist/core/resources/replayLogsGuards.js.map +1 -1
- package/dist/core/resources/roles.js +67 -71
- package/dist/core/resources/roles.js.map +1 -1
- package/dist/core/resources/search.js +349 -140
- package/dist/core/resources/search.js.map +1 -1
- package/dist/core/resources/tracked.js +23 -15
- package/dist/core/resources/tracked.js.map +1 -1
- package/dist/core/resources/transaction.js +1 -1
- package/dist/core/resources/transaction.js.map +1 -1
- package/dist/core/resources/transactionBroadcast.js.map +1 -1
- package/dist/core/security/auth.js +34 -25
- package/dist/core/security/auth.js.map +1 -1
- package/dist/core/security/certificateVerification/crlVerification.js +7 -1
- package/dist/core/security/certificateVerification/crlVerification.js.map +1 -1
- package/dist/core/security/cryptoHash.js +37 -5
- package/dist/core/security/cryptoHash.js.map +1 -1
- package/dist/core/security/data_objects/PermissionAttributeResponseObject.js +4 -1
- package/dist/core/security/data_objects/PermissionAttributeResponseObject.js.map +1 -1
- package/dist/core/security/data_objects/PermissionResponseObject.js +15 -8
- package/dist/core/security/data_objects/PermissionResponseObject.js.map +1 -1
- package/dist/core/security/data_objects/PermissionTableResponseObject.js +6 -1
- package/dist/core/security/data_objects/PermissionTableResponseObject.js.map +1 -1
- package/dist/core/security/fastifyAuth.js +131 -22
- package/dist/core/security/fastifyAuth.js.map +1 -1
- package/dist/core/security/impersonation.js +15 -15
- package/dist/core/security/jsLoader.js +18 -5
- package/dist/core/security/jsLoader.js.map +1 -1
- package/dist/core/security/keys.js +160 -114
- package/dist/core/security/keys.js.map +1 -1
- package/dist/core/security/permissionsTranslator.js +2 -2
- package/dist/core/security/role.js +70 -35
- package/dist/core/security/role.js.map +1 -1
- package/dist/core/security/tokenAuthentication.js +57 -27
- package/dist/core/security/tokenAuthentication.js.map +1 -1
- package/dist/core/security/user.js +74 -38
- package/dist/core/security/user.js.map +1 -1
- package/dist/core/server/DurableSubscriptionsSession.js +71 -55
- package/dist/core/server/DurableSubscriptionsSession.js.map +1 -1
- package/dist/core/server/REST.js +17 -16
- package/dist/core/server/REST.js.map +1 -1
- package/dist/core/server/Server.js +1 -1
- package/dist/core/server/Server.js.map +1 -1
- package/dist/core/server/fastifyRoutes/helpers/getCORSOptions.js +1 -1
- package/dist/core/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +1 -1
- package/dist/core/server/fastifyRoutes/helpers/getServerOptions.js +1 -1
- package/dist/core/server/fastifyRoutes.js +34 -30
- package/dist/core/server/fastifyRoutes.js.map +1 -1
- package/dist/core/server/graphqlQuerying.js +8 -7
- package/dist/core/server/graphqlQuerying.js.map +1 -1
- package/dist/core/server/http.js +523 -47
- package/dist/core/server/http.js.map +1 -1
- package/dist/core/server/itc/serverHandlers.js +66 -15
- package/dist/core/server/itc/serverHandlers.js.map +1 -1
- package/dist/core/server/jobs/JobObject.js +53 -7
- package/dist/core/server/jobs/JobObject.js.map +1 -1
- package/dist/core/server/jobs/jobProcess.js +64 -24
- package/dist/core/server/jobs/jobProcess.js.map +1 -1
- package/dist/core/server/jobs/jobRunner.js +68 -30
- package/dist/core/server/jobs/jobRunner.js.map +1 -1
- package/dist/core/server/jobs/jobs.js +93 -61
- package/dist/core/server/jobs/jobs.js.map +1 -1
- package/dist/core/server/loadRootComponents.js +1 -1
- package/dist/core/server/middlewareChain.js +252 -0
- package/dist/core/server/middlewareChain.js.map +1 -0
- package/dist/core/server/mqtt.js +22 -17
- package/dist/core/server/mqtt.js.map +1 -1
- package/dist/core/server/nodeName.js +46 -13
- package/dist/core/server/nodeName.js.map +1 -1
- package/dist/core/server/operationsServer.js +106 -33
- package/dist/core/server/operationsServer.js.map +1 -1
- package/dist/core/server/serverHelpers/Headers.js +2 -0
- package/dist/core/server/serverHelpers/Headers.js.map +1 -1
- package/dist/core/server/serverHelpers/JSONStream.js +12 -3
- package/dist/core/server/serverHelpers/JSONStream.js.map +1 -1
- package/dist/core/server/serverHelpers/Request.js +370 -9
- package/dist/core/server/serverHelpers/Request.js.map +1 -1
- package/dist/core/server/serverHelpers/contentTypes.js +36 -7
- package/dist/core/server/serverHelpers/contentTypes.js.map +1 -1
- package/dist/core/server/serverHelpers/multipartParser.js +142 -0
- package/dist/core/server/serverHelpers/multipartParser.js.map +1 -0
- package/dist/core/server/serverHelpers/progressEmitter.js +103 -0
- package/dist/core/server/serverHelpers/progressEmitter.js.map +1 -0
- package/dist/core/server/serverHelpers/serverHandlers.js +38 -7
- package/dist/core/server/serverHelpers/serverHandlers.js.map +1 -1
- package/dist/core/server/serverHelpers/serverUtilities.js +97 -93
- package/dist/core/server/serverHelpers/serverUtilities.js.map +1 -1
- package/dist/core/server/static.js +8 -5
- package/dist/core/server/static.js.map +1 -1
- package/dist/core/server/status/index.js +3 -3
- package/dist/core/server/storageReclamation.js +68 -9
- package/dist/core/server/storageReclamation.js.map +1 -1
- package/dist/core/server/threads/itc.js +7 -4
- package/dist/core/server/threads/itc.js.map +1 -1
- package/dist/core/server/threads/manageThreads.js +110 -26
- package/dist/core/server/threads/manageThreads.js.map +1 -1
- package/dist/core/server/threads/socketRouter.js +8 -271
- package/dist/core/server/threads/socketRouter.js.map +1 -1
- package/dist/core/server/threads/threadServer.js +360 -118
- package/dist/core/server/threads/threadServer.js.map +1 -1
- package/dist/core/server/threads/workerProcessGuard.js +114 -0
- package/dist/core/server/threads/workerProcessGuard.js.map +1 -0
- package/dist/core/server/throttle.js +17 -0
- package/dist/core/server/throttle.js.map +1 -1
- package/dist/core/sqlTranslator/SelectValidator.js +86 -47
- package/dist/core/sqlTranslator/SelectValidator.js.map +1 -1
- package/dist/core/sqlTranslator/alasqlFunctionImporter.js +40 -3
- package/dist/core/sqlTranslator/alasqlFunctionImporter.js.map +1 -1
- package/dist/core/sqlTranslator/deleteTranslator.js +48 -14
- package/dist/core/sqlTranslator/deleteTranslator.js.map +1 -1
- package/dist/core/sqlTranslator/index.js +69 -30
- package/dist/core/sqlTranslator/index.js.map +1 -1
- package/dist/core/sqlTranslator/sql_statement_bucket.js +55 -13
- package/dist/core/sqlTranslator/sql_statement_bucket.js.map +1 -1
- package/dist/core/upgrade/UpgradeObjects.js +37 -4
- package/dist/core/upgrade/UpgradeObjects.js.map +1 -1
- package/dist/core/upgrade/directives/5-1-0.js +114 -0
- package/dist/core/upgrade/directives/5-1-0.js.map +1 -0
- package/dist/core/upgrade/directives/directivesController.js +52 -11
- package/dist/core/upgrade/directives/directivesController.js.map +1 -1
- package/dist/core/upgrade/directivesManager.js +53 -18
- package/dist/core/upgrade/directivesManager.js.map +1 -1
- package/dist/core/upgrade/upgradePrompt.js +55 -60
- package/dist/core/upgrade/upgradePrompt.js.map +1 -1
- package/dist/core/upgrade/upgradeUtilities.js +37 -5
- package/dist/core/upgrade/upgradeUtilities.js.map +1 -1
- package/dist/core/utility/OperationFunctionCaller.js +45 -10
- package/dist/core/utility/OperationFunctionCaller.js.map +1 -1
- package/dist/core/utility/assignCmdEnvVariables.js +8 -4
- package/dist/core/utility/assignCmdEnvVariables.js.map +1 -1
- package/dist/core/utility/common_utils.js +140 -79
- package/dist/core/utility/common_utils.js.map +1 -1
- package/dist/core/utility/environment/environmentManager.js +75 -29
- package/dist/core/utility/environment/environmentManager.js.map +1 -1
- package/dist/core/utility/environment/systemInformation.js +27 -16
- package/dist/core/utility/environment/systemInformation.js.map +1 -1
- package/dist/core/utility/errors/commonErrors.js +49 -18
- package/dist/core/utility/errors/commonErrors.js.map +1 -1
- package/dist/core/utility/errors/hdbError.js +65 -26
- package/dist/core/utility/errors/hdbError.js.map +1 -1
- package/dist/core/utility/expandEnvVar.js +113 -0
- package/dist/core/utility/expandEnvVar.js.map +1 -0
- package/dist/core/utility/functions/geo.js +2 -2
- package/dist/core/utility/functions/sql/alaSQLExtension.js +1 -1
- package/dist/core/utility/globalSchema.js +14 -11
- package/dist/core/utility/globalSchema.js.map +1 -1
- package/dist/core/utility/hdbTerms.js +54 -1
- package/dist/core/utility/hdbTerms.js.map +1 -1
- package/dist/core/utility/install/checkJWTTokensExist.js +1 -1
- package/dist/core/utility/install/installer.js +136 -73
- package/dist/core/utility/install/installer.js.map +1 -1
- package/dist/core/utility/installation.js +3 -3
- package/dist/core/utility/lmdb/DBIDefinition.js +5 -1
- package/dist/core/utility/lmdb/DBIDefinition.js.map +1 -1
- package/dist/core/utility/lmdb/DeleteRecordsResponseObject.js +2 -1
- package/dist/core/utility/lmdb/DeleteRecordsResponseObject.js.map +1 -1
- package/dist/core/utility/lmdb/InsertRecordsResponseObject.js +2 -1
- package/dist/core/utility/lmdb/InsertRecordsResponseObject.js.map +1 -1
- package/dist/core/utility/lmdb/OpenDBIObject.js +68 -6
- package/dist/core/utility/lmdb/OpenDBIObject.js.map +1 -1
- package/dist/core/utility/lmdb/OpenEnvironmentObject.js +52 -4
- package/dist/core/utility/lmdb/OpenEnvironmentObject.js.map +1 -1
- package/dist/core/utility/lmdb/UpdateRecordsResponseObject.js +2 -1
- package/dist/core/utility/lmdb/UpdateRecordsResponseObject.js.map +1 -1
- package/dist/core/utility/lmdb/UpsertRecordsResponseObject.js +2 -1
- package/dist/core/utility/lmdb/UpsertRecordsResponseObject.js.map +1 -1
- package/dist/core/utility/lmdb/cleanLMDBMap.js +44 -7
- package/dist/core/utility/lmdb/cleanLMDBMap.js.map +1 -1
- package/dist/core/utility/lmdb/commonUtility.js +46 -17
- package/dist/core/utility/lmdb/commonUtility.js.map +1 -1
- package/dist/core/utility/lmdb/deleteUtility.js +51 -16
- package/dist/core/utility/lmdb/deleteUtility.js.map +1 -1
- package/dist/core/utility/lmdb/environmentUtility.js +91 -51
- package/dist/core/utility/lmdb/environmentUtility.js.map +1 -1
- package/dist/core/utility/lmdb/searchCursorFunctions.js +46 -14
- package/dist/core/utility/lmdb/searchCursorFunctions.js.map +1 -1
- package/dist/core/utility/lmdb/searchUtility.js +91 -55
- package/dist/core/utility/lmdb/searchUtility.js.map +1 -1
- package/dist/core/utility/lmdb/terms.js +12 -22
- package/dist/core/utility/lmdb/terms.js.map +1 -1
- package/dist/core/utility/lmdb/writeUtility.js +61 -28
- package/dist/core/utility/lmdb/writeUtility.js.map +1 -1
- package/dist/core/utility/logging/harper_logger.js +177 -82
- package/dist/core/utility/logging/harper_logger.js.map +1 -1
- package/dist/core/utility/logging/logRotator.js +67 -32
- package/dist/core/utility/logging/logRotator.js.map +1 -1
- package/dist/core/utility/logging/logger.js +4 -4
- package/dist/core/utility/logging/readLog.js +54 -17
- package/dist/core/utility/logging/readLog.js.map +1 -1
- package/dist/core/utility/logging/transactionLog.js +51 -16
- package/dist/core/utility/logging/transactionLog.js.map +1 -1
- package/dist/core/utility/mount_hdb.js +54 -17
- package/dist/core/utility/mount_hdb.js.map +1 -1
- package/dist/core/utility/npmUtilities.js +54 -19
- package/dist/core/utility/npmUtilities.js.map +1 -1
- package/dist/core/utility/operation_authorization.js +135 -86
- package/dist/core/utility/operation_authorization.js.map +1 -1
- package/dist/core/utility/packageUtils.js +7 -17
- package/dist/core/utility/packageUtils.js.map +1 -1
- package/dist/core/utility/password.js +2 -2
- package/dist/core/utility/processManagement/processManagement.js +2 -2
- package/dist/core/utility/processManagement/servicesConfig.js +1 -1
- package/dist/core/utility/signalling.js +51 -16
- package/dist/core/utility/signalling.js.map +1 -1
- package/dist/core/utility/watcherFallback.js +73 -0
- package/dist/core/utility/watcherFallback.js.map +1 -0
- package/dist/core/validation/analyticsValidator.js +80 -0
- package/dist/core/validation/analyticsValidator.js.map +1 -0
- package/dist/core/validation/bulkDeleteValidator.js +49 -11
- package/dist/core/validation/bulkDeleteValidator.js.map +1 -1
- package/dist/core/validation/check_permissions.js +38 -3
- package/dist/core/validation/check_permissions.js.map +1 -1
- package/dist/core/validation/common_validators.js +62 -31
- package/dist/core/validation/common_validators.js.map +1 -1
- package/dist/core/validation/configValidator.js +189 -54
- package/dist/core/validation/configValidator.js.map +1 -1
- package/dist/core/validation/deleteValidator.js +49 -11
- package/dist/core/validation/deleteValidator.js.map +1 -1
- package/dist/core/validation/fileLoadValidator.js +67 -32
- package/dist/core/validation/fileLoadValidator.js.map +1 -1
- package/dist/core/validation/insertValidator.js +48 -10
- package/dist/core/validation/insertValidator.js.map +1 -1
- package/dist/core/validation/installValidator.js +47 -10
- package/dist/core/validation/installValidator.js.map +1 -1
- package/dist/core/validation/readLogValidator.js +60 -22
- package/dist/core/validation/readLogValidator.js.map +1 -1
- package/dist/core/validation/role_validation.js +55 -19
- package/dist/core/validation/role_validation.js.map +1 -1
- package/dist/core/validation/schemaMetadataValidator.js +11 -12
- package/dist/core/validation/schemaMetadataValidator.js.map +1 -1
- package/dist/core/validation/searchValidator.js +82 -43
- package/dist/core/validation/searchValidator.js.map +1 -1
- package/dist/core/validation/transactionLogValidator.js +52 -17
- package/dist/core/validation/transactionLogValidator.js.map +1 -1
- package/dist/core/validation/user_validation.js +38 -6
- package/dist/core/validation/user_validation.js.map +1 -1
- package/dist/core/validation/validationWrapper.js +4 -5
- package/dist/core/validation/validationWrapper.js.map +1 -1
- package/dist/licensing/usageLicensing.js +30 -21
- package/dist/licensing/usageLicensing.js.map +1 -1
- package/dist/replication/knownNodes.js +171 -41
- package/dist/replication/knownNodes.js.map +1 -1
- package/dist/replication/replicationConnection.js +441 -85
- package/dist/replication/replicationConnection.js.map +1 -1
- package/dist/replication/replicator.js +56 -28
- package/dist/replication/replicator.js.map +1 -1
- package/dist/replication/setNode.js +24 -4
- package/dist/replication/setNode.js.map +1 -1
- package/dist/replication/subscriptionManager.js +195 -16
- package/dist/replication/subscriptionManager.js.map +1 -1
- package/dist/security/certificate.js +41 -6
- package/dist/security/certificate.js.map +1 -1
- package/dist/security/sshKeyOperations.js +35 -2
- package/dist/security/sshKeyOperations.js.map +1 -1
- package/licensing/usageLicensing.ts +32 -37
- package/npm-shrinkwrap.json +9032 -4334
- package/package.json +17 -12
- package/replication/DESIGN.md +139 -0
- package/replication/knownNodes.ts +165 -44
- package/replication/replicationConnection.ts +475 -92
- package/replication/replicator.ts +54 -27
- package/replication/setNode.ts +29 -10
- package/replication/subscriptionManager.ts +227 -21
- package/security/certificate.ts +8 -4
- package/security/sshKeyOperations.ts +1 -1
- package/static/defaultConfig.yaml +1 -0
- package/studio/web/assets/{index-CybLScHg.js → index-Dqr9oVhe.js} +5 -5
- package/studio/web/assets/index-Dqr9oVhe.js.map +1 -0
- package/studio/web/assets/{index.lazy-DKx5-iXF.js → index.lazy-CpKcKb7M.js} +2 -2
- package/studio/web/assets/{index.lazy-DKx5-iXF.js.map → index.lazy-CpKcKb7M.js.map} +1 -1
- package/studio/web/assets/{profile-BOjes0Wl.js → profile-C1cujdsg.js} +2 -2
- package/studio/web/assets/{profile-BOjes0Wl.js.map → profile-C1cujdsg.js.map} +1 -1
- package/studio/web/assets/{status-EWKUIrjT.js → status-CTiIIQlY.js} +2 -2
- package/studio/web/assets/{status-EWKUIrjT.js.map → status-CTiIIQlY.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/core/bin/cliOperations.js +0 -159
- package/core/bin/lite.js +0 -5
- package/core/bin/stop.js +0 -21
- package/core/dataLayer/harperBridge/BridgeMethods.js +0 -85
- package/core/utility/globalSchema.js +0 -35
- package/core/utility/lmdb/OpenDBIObject.js +0 -31
- package/studio/web/assets/index-CybLScHg.js.map +0 -1
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { Encoder } from 'msgpackr';
|
|
9
|
-
import {
|
|
10
|
-
import { CONFIG_PARAMS } from '../utility/hdbTerms.ts';
|
|
9
|
+
import { createStructon } from 'structon';
|
|
11
10
|
import {
|
|
12
11
|
HAS_PREVIOUS_RESIDENCY_ID,
|
|
13
12
|
HAS_CURRENT_RESIDENCY_ID,
|
|
@@ -17,7 +16,7 @@ import {
|
|
|
17
16
|
ACTION_32_BIT,
|
|
18
17
|
HAS_ADDITIONAL_AUDIT_REFS as HAS_ADDITIONAL_AUDIT_REFS_AUDIT,
|
|
19
18
|
} from './auditStore.ts';
|
|
20
|
-
import * as harperLogger from '../utility/logging/harper_logger.
|
|
19
|
+
import * as harperLogger from '../utility/logging/harper_logger.ts';
|
|
21
20
|
import './blob.ts';
|
|
22
21
|
import {
|
|
23
22
|
blobsWereEncoded,
|
|
@@ -31,6 +30,10 @@ import { getThisNodeId } from './nodeIdMapping.ts';
|
|
|
31
30
|
import { recordAction } from './analytics/write.ts';
|
|
32
31
|
import { RocksDatabase } from '@harperfast/rocksdb-js';
|
|
33
32
|
import { when } from '../utility/when.ts';
|
|
33
|
+
import { CONFIG_PARAMS } from '../utility/hdbTerms.ts';
|
|
34
|
+
import * as envMngr from '../utility/environment/environmentManager.js';
|
|
35
|
+
|
|
36
|
+
const StructonEncoder = createStructon(Encoder) as typeof Encoder;
|
|
34
37
|
export type Entry = {
|
|
35
38
|
key: any;
|
|
36
39
|
value: any;
|
|
@@ -42,6 +45,7 @@ export type Entry = {
|
|
|
42
45
|
residencyId: number;
|
|
43
46
|
size: number;
|
|
44
47
|
deref?: () => any;
|
|
48
|
+
[METADATA]?: any;
|
|
45
49
|
additionalAuditRefs?: Array<{ version: number; nodeId: number }>;
|
|
46
50
|
};
|
|
47
51
|
|
|
@@ -82,7 +86,11 @@ let timestampNextEncoding = 0,
|
|
|
82
86
|
additionalAuditRefsNextEncoding: Array<{ version: number; nodeId: number }> | undefined;
|
|
83
87
|
// tracking metadata with a singleton works better than trying to alter response of getEntry/get and coordinating that across caching layers
|
|
84
88
|
export let lastMetadata: Entry | null = null;
|
|
85
|
-
export class RecordEncoder extends
|
|
89
|
+
export class RecordEncoder extends StructonEncoder {
|
|
90
|
+
rootStore: any;
|
|
91
|
+
declare saveStructures: any;
|
|
92
|
+
declare getStructures: any;
|
|
93
|
+
declare _writeStruct: any;
|
|
86
94
|
structureUpdate?: any;
|
|
87
95
|
isRocksDB: boolean;
|
|
88
96
|
name: string;
|
|
@@ -92,16 +100,6 @@ export class RecordEncoder extends Encoder {
|
|
|
92
100
|
// long-lived primary store, so a wide/sparse schema (whose records vary by per-field value
|
|
93
101
|
// width) can grow it unbounded and exhaust memory. Caller-overridable; default caps it.
|
|
94
102
|
options.maxOwnStructures ??= 256;
|
|
95
|
-
// When random-access fields are disabled (storage.randomAccessFields=false), write records as
|
|
96
|
-
// classic shared structures instead of typed random-access structures. randomAccessStructure stays
|
|
97
|
-
// on so reads still decode either form — existing typed-struct data remains readable; only new
|
|
98
|
-
// writes change. lmdb-js does not forward non-whitelisted encoder options, so the flag is derived
|
|
99
|
-
// from the global config here rather than passed through the store options. Read at construction
|
|
100
|
-
// (DBI open, a cold path) so env/CLI config overrides are applied; an explicit option still wins
|
|
101
|
-
// (e.g. rocksdb-js's option spread, or tests).
|
|
102
|
-
if (options.readOnlyStructures === undefined && envGet(CONFIG_PARAMS.STORAGE_RANDOMACCESSFIELDS) === false) {
|
|
103
|
-
options.readOnlyStructures = true;
|
|
104
|
-
}
|
|
105
103
|
/**
|
|
106
104
|
* The base class for records that provides the read-only methods for accessing
|
|
107
105
|
* metadata and will be assigned computed property getters. On its own, these instances
|
|
@@ -119,6 +117,16 @@ export class RecordEncoder extends Encoder {
|
|
|
119
117
|
|
|
120
118
|
options.structPrototype = RecordObject.prototype;
|
|
121
119
|
super(options);
|
|
120
|
+
// structon (the StructonEncoder base) always installs the struct write hook. For DBIs
|
|
121
|
+
// that don't opt into struct mode (non-primary, e.g. __dbis__), force it to bail (return
|
|
122
|
+
// 0) so objects are written in plain msgpackr records mode — decodable by readers without
|
|
123
|
+
// struct support (msgpackr v1 / Harper v4 downgrade). We make it bail rather than clear
|
|
124
|
+
// it so msgpackr keeps the struct-safe integer boundary: top-level integers 0x20-0x3f are
|
|
125
|
+
// written as uint8 rather than bare fixints, which the retained struct READ hook would
|
|
126
|
+
// otherwise misread as struct headers (e.g. a scalar NEXT_TABLE_ID >= 32 in __dbis__).
|
|
127
|
+
// The read hook stays intact so records already written in struct mode by a prior v5 still
|
|
128
|
+
// decode.
|
|
129
|
+
if (!options.randomAccessStructure) this._writeStruct = () => 0;
|
|
122
130
|
const superEncode = this.encode;
|
|
123
131
|
this.encode = function (record, options?) {
|
|
124
132
|
// this handles our custom metadata encoding, prefixing the record with metadata, including the local
|
|
@@ -226,9 +234,9 @@ export class RecordEncoder extends Encoder {
|
|
|
226
234
|
// We must report a non-commit as `false` (not the buggy `undefined`, which msgpackr
|
|
227
235
|
// reads as success and then writes a record referencing a structure that was never
|
|
228
236
|
// saved → later "Record id is not defined" on decode). Returning `false` makes msgpackr
|
|
229
|
-
// re-pack; paired with msgpackr
|
|
230
|
-
// re-pack reloads the durable structures, rebuilds the transition
|
|
231
|
-
// re-saves — so the record always references a persisted structure.
|
|
237
|
+
// re-pack; paired with the msgpackr fix that marks structures uninitialized on
|
|
238
|
+
// save-failure, the re-pack reloads the durable structures, rebuilds the transition
|
|
239
|
+
// trie, re-mints, and re-saves — so the record always references a persisted structure.
|
|
232
240
|
const committed = this.rootStore.transactionSync(
|
|
233
241
|
(txn) => {
|
|
234
242
|
const sharedStructuresKey = [Symbol.for('structures'), this.name];
|
|
@@ -283,7 +291,7 @@ export class RecordEncoder extends Encoder {
|
|
|
283
291
|
// timestamped record (8 bytes stripped → corrupt). Callers that pass a value known to have no
|
|
284
292
|
// prefix (e.g. the audit store's getValue) set options.noMetadata to skip the heuristic. Typed
|
|
285
293
|
// structs start at 0x20-0x3f and never hit this, which is why it only surfaces with classic
|
|
286
|
-
// structures (
|
|
294
|
+
// structures (typed structures off).
|
|
287
295
|
if (!options?.noMetadata && ((this.isRocksDB && nextByte === 66) || (nextByte < 32 && end > 2))) {
|
|
288
296
|
// record with metadata
|
|
289
297
|
// this means that the record starts with a local timestamp (that was assigned by lmdb-js).
|
|
@@ -370,7 +378,7 @@ export class RecordEncoder extends Encoder {
|
|
|
370
378
|
additionalAuditRefs,
|
|
371
379
|
size: end - start,
|
|
372
380
|
value,
|
|
373
|
-
};
|
|
381
|
+
} as any;
|
|
374
382
|
if (this.isRocksDB) return lastMetadata;
|
|
375
383
|
return value;
|
|
376
384
|
} // else a normal entry
|
|
@@ -381,21 +389,6 @@ export class RecordEncoder extends Encoder {
|
|
|
381
389
|
}
|
|
382
390
|
}
|
|
383
391
|
}
|
|
384
|
-
|
|
385
|
-
/**
|
|
386
|
-
* Encoder for custom-index object stores (e.g. HNSW vector graphs). These hold fixed-shape internal
|
|
387
|
-
* nodes — numeric-keyed per-level connection arrays and quantized bins — that depend on random-access
|
|
388
|
-
* struct encoding and are mutated in place during graph maintenance. Keep them writing typed structs
|
|
389
|
-
* even when storage.randomAccessFields disables structs for user tables: their node shapes are
|
|
390
|
-
* controlled, so the wide/heterogeneous OOM risk that motivates opt-out doesn't apply, and classic
|
|
391
|
-
* (frozen) decoding would break the in-place graph mutation.
|
|
392
|
-
*/
|
|
393
|
-
export class IndexRecordEncoder extends RecordEncoder {
|
|
394
|
-
constructor(options) {
|
|
395
|
-
options.readOnlyStructures = false;
|
|
396
|
-
super(options);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
392
|
function getTimestamp() {
|
|
400
393
|
TIMESTAMP_HOLDER[0] = TIMESTAMP_HOLDER[0] ^ 0x40; // restore the first byte, we xor to differentiate the first byte from structures
|
|
401
394
|
return TIMESTAMP_VIEW.getFloat64(0);
|
|
@@ -536,6 +529,7 @@ export function handleLocalTimeForGets(store, rootStore) {
|
|
|
536
529
|
use.call(this);
|
|
537
530
|
};
|
|
538
531
|
Txn.prototype.done = function () {
|
|
532
|
+
if (this.isDone) return;
|
|
539
533
|
done.call(this);
|
|
540
534
|
this.openTimer = 0; // reset so idle pool time doesn't accumulate toward the stale-open threshold
|
|
541
535
|
if (this.isDone) {
|
|
@@ -554,16 +548,18 @@ export function handleLocalTimeForGets(store, rootStore) {
|
|
|
554
548
|
return store;
|
|
555
549
|
}
|
|
556
550
|
const trackedTxns: WeakRef<any>[] = [];
|
|
557
|
-
|
|
551
|
+
const configValue = envMngr.get(CONFIG_PARAMS.STORAGE_MAX_READ_TRANSACTION_OPEN_TIME) ?? 300000;
|
|
552
|
+
let READ_TXN_TIMEOUT_TICKS = Math.round(configValue / 15000);
|
|
553
|
+
export function checkReadTxnTimeouts() {
|
|
558
554
|
for (let i = 0; i < trackedTxns.length; i++) {
|
|
559
555
|
const txn = trackedTxns[i].deref();
|
|
560
556
|
if (!txn || txn.isDone || txn.isCommitted) trackedTxns.splice(i--, 1);
|
|
561
557
|
else if (txn.notCurrent) {
|
|
562
558
|
if (txn.openTimer) {
|
|
563
559
|
if (txn.openTimer > 3) {
|
|
564
|
-
if (txn.openTimer >
|
|
560
|
+
if (txn.openTimer > READ_TXN_TIMEOUT_TICKS) {
|
|
565
561
|
harperLogger.error(
|
|
566
|
-
|
|
562
|
+
`Read transaction detected that has been open too long (over ${Math.round(READ_TXN_TIMEOUT_TICKS * 15)} seconds), ending transaction`,
|
|
567
563
|
txn
|
|
568
564
|
);
|
|
569
565
|
trackedTxns.splice(i--, 1);
|
|
@@ -584,7 +580,12 @@ setInterval(() => {
|
|
|
584
580
|
} else txn.openTimer = 1;
|
|
585
581
|
}
|
|
586
582
|
}
|
|
587
|
-
}
|
|
583
|
+
}
|
|
584
|
+
setInterval(checkReadTxnTimeouts, 15000).unref();
|
|
585
|
+
export function setReadTxnExpiration(ms: number) {
|
|
586
|
+
READ_TXN_TIMEOUT_TICKS = Math.round(ms / 15000);
|
|
587
|
+
return trackedTxns;
|
|
588
|
+
}
|
|
588
589
|
export function setNextEncoding(timestamp: number, metadata: number, expiresAt = -1, nodeId = -1, residencyId = 0) {
|
|
589
590
|
timestampNextEncoding = timestamp;
|
|
590
591
|
metadataInNextEncoding = metadata;
|
|
@@ -632,6 +633,7 @@ export function recordUpdater(store, tableId, auditStore) {
|
|
|
632
633
|
version: number;
|
|
633
634
|
instructedWrite?: boolean;
|
|
634
635
|
ifVersion?: number;
|
|
636
|
+
transaction?: any;
|
|
635
637
|
} = {
|
|
636
638
|
version: newVersion,
|
|
637
639
|
instructedWrite: timestampNextEncoding > 0,
|
|
@@ -647,7 +649,7 @@ export function recordUpdater(store, tableId, auditStore) {
|
|
|
647
649
|
metadataInNextEncoding |= HAS_RESIDENCY_ID;
|
|
648
650
|
extendedType |= HAS_CURRENT_RESIDENCY_ID;
|
|
649
651
|
} else residencyIdAtNextEncoding = 0;
|
|
650
|
-
const nodeId = options?.nodeId;
|
|
652
|
+
const nodeId = options?.nodeId ?? (audit ? getThisNodeId(auditStore) : undefined);
|
|
651
653
|
if (nodeId >= 0) {
|
|
652
654
|
nodeIdAtNextEncoding = nodeId;
|
|
653
655
|
metadataInNextEncoding |= HAS_NODE_ID;
|
|
@@ -15,6 +15,8 @@ export class RequestTarget extends URLSearchParams {
|
|
|
15
15
|
/** Request best effort and returning synchronously */
|
|
16
16
|
declare syncAllowed?: boolean;
|
|
17
17
|
|
|
18
|
+
declare sync?: boolean;
|
|
19
|
+
|
|
18
20
|
/** Indicates that this is a request to query for collection of records */
|
|
19
21
|
isCollection?: boolean;
|
|
20
22
|
// these are query parameters
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { User } from '../security/user.ts';
|
|
2
|
-
import type { RecordObject } from './RecordEncoder.
|
|
2
|
+
import type { RecordObject } from './RecordEncoder.ts';
|
|
3
3
|
import {
|
|
4
4
|
ResourceInterface,
|
|
5
5
|
SubscriptionRequest,
|
|
@@ -13,11 +13,12 @@ import { randomUUID } from 'crypto';
|
|
|
13
13
|
import { DatabaseTransaction, type Transaction } from './DatabaseTransaction.ts';
|
|
14
14
|
import { IterableEventQueue } from './IterableEventQueue.ts';
|
|
15
15
|
import { _assignPackageExport } from '../globals.js';
|
|
16
|
-
import { ClientError, AccessViolation } from '../utility/errors/hdbError.
|
|
16
|
+
import { ClientError, AccessViolation } from '../utility/errors/hdbError.ts';
|
|
17
17
|
import { transaction, contextStorage } from './transaction.ts';
|
|
18
18
|
import { parseQuery } from './search.ts';
|
|
19
19
|
import { RequestTarget } from './RequestTarget.ts';
|
|
20
20
|
import { when, promiseNormalize } from '../utility/when.ts';
|
|
21
|
+
import type { JsonSchemaFragment } from './jsonSchemaTypes.ts';
|
|
21
22
|
|
|
22
23
|
const EXTENSION_TYPES = {
|
|
23
24
|
json: 'application/json',
|
|
@@ -45,17 +46,38 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
45
46
|
static transactions: Transaction[] & { timestamp: number };
|
|
46
47
|
static directURLMapping = false;
|
|
47
48
|
static loadAsInstance: boolean;
|
|
49
|
+
static description?: string;
|
|
50
|
+
static properties?: { [name: string]: JsonSchemaFragment };
|
|
51
|
+
static outputSchemas?: { [verb: string]: JsonSchemaFragment };
|
|
52
|
+
static mcp?: { annotations?: { [verb: string]: { [key: string]: unknown } } };
|
|
53
|
+
static hidden?: boolean;
|
|
48
54
|
constructor(identifier: Id, source: any) {
|
|
49
55
|
this.#id = identifier;
|
|
50
56
|
const context = source?.getContext ? (source.getContext() ?? null) : undefined;
|
|
51
57
|
this.#context = context !== undefined ? context : source || null;
|
|
52
58
|
}
|
|
53
59
|
|
|
60
|
+
doesExist(): boolean {
|
|
61
|
+
return true; // Subclasses should override if needed
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
wasLoadedFromSource(): boolean | void {
|
|
65
|
+
// Subclasses should override if needed
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
addTo(_property: keyof Record, _value: Record[keyof Record]): void {
|
|
69
|
+
throw new Error('Not implemented');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
subtractFrom(_property: keyof Record, _value: Record[keyof Record]): void {
|
|
73
|
+
throw new Error('Not implemented');
|
|
74
|
+
}
|
|
75
|
+
|
|
54
76
|
/**
|
|
55
77
|
* The get methods are for directly getting a resource, and called for HTTP GET requests.
|
|
56
78
|
*/
|
|
57
79
|
static get = transactional(
|
|
58
|
-
function (resource:
|
|
80
|
+
function (resource: any, query: RequestTarget, _request: Context, _data: any) {
|
|
59
81
|
const result = resource.get?.(query);
|
|
60
82
|
// for the new API we always apply select in the instance method
|
|
61
83
|
if (!resource.constructor.loadAsInstance) return result;
|
|
@@ -89,7 +111,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
89
111
|
* Store the provided record by the provided id. If no id is provided, it is auto-generated.
|
|
90
112
|
*/
|
|
91
113
|
static put = transactional(
|
|
92
|
-
function (resource:
|
|
114
|
+
function (resource: any, query: RequestTarget, request: Context, data: any) {
|
|
93
115
|
if (Array.isArray(data) && resource.#isCollection && resource.constructor.loadAsInstance !== false) {
|
|
94
116
|
const results = [];
|
|
95
117
|
for (const element of data) {
|
|
@@ -115,7 +137,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
115
137
|
);
|
|
116
138
|
|
|
117
139
|
static patch = transactional(
|
|
118
|
-
function (resource:
|
|
140
|
+
function (resource: any, query: RequestTarget, _request: Context, data: any) {
|
|
119
141
|
// TODO: Allow array like put?
|
|
120
142
|
return resource.patch
|
|
121
143
|
? resource.constructor.loadAsInstance === false
|
|
@@ -127,7 +149,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
127
149
|
);
|
|
128
150
|
|
|
129
151
|
static delete = transactional(
|
|
130
|
-
function (resource:
|
|
152
|
+
function (resource: any, query: RequestTarget, _request: Context, _data: any) {
|
|
131
153
|
return resource.delete ? resource.delete(query) : missingMethod(resource, 'delete');
|
|
132
154
|
},
|
|
133
155
|
{ hasContent: false, type: 'delete', method: 'delete' }
|
|
@@ -150,7 +172,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
150
172
|
static create(idPrefix: Id, record: any, context: Context): Promise<Id>;
|
|
151
173
|
static create(record: any, context: Context): Promise<Id>;
|
|
152
174
|
static create(idPrefix: any, record: any, context?: Context): Promise<Id> {
|
|
153
|
-
let id:
|
|
175
|
+
let id: any;
|
|
154
176
|
if (this.loadAsInstance === false) {
|
|
155
177
|
if (typeof idPrefix === 'object' && idPrefix && !context) {
|
|
156
178
|
// two argument form (record, context), shift the arguments
|
|
@@ -160,44 +182,45 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
160
182
|
id.isCollection = true;
|
|
161
183
|
} else id = idPrefix;
|
|
162
184
|
} else {
|
|
163
|
-
|
|
185
|
+
const primaryKey = (this as any).primaryKey;
|
|
186
|
+
if (idPrefix == null) id = record?.[primaryKey] ?? this.getNewId();
|
|
164
187
|
else if (Array.isArray(idPrefix) && typeof idPrefix[0] !== 'object')
|
|
165
|
-
id = record?.[
|
|
166
|
-
else if (typeof idPrefix !== 'object') id = record?.[
|
|
188
|
+
id = record?.[primaryKey] ?? [...idPrefix, this.getNewId()];
|
|
189
|
+
else if (typeof idPrefix !== 'object') id = record?.[primaryKey] ?? [idPrefix, this.getNewId()];
|
|
167
190
|
else {
|
|
168
191
|
// two argument form, shift the arguments
|
|
169
|
-
id = idPrefix?.[
|
|
192
|
+
id = idPrefix?.[primaryKey] ?? this.getNewId();
|
|
170
193
|
context = record || {};
|
|
171
194
|
record = idPrefix;
|
|
172
195
|
}
|
|
173
196
|
}
|
|
174
197
|
if (context) {
|
|
175
|
-
if (context.getContext) context = context.getContext();
|
|
198
|
+
if ((context as any).getContext) context = (context as any).getContext();
|
|
176
199
|
} else {
|
|
177
200
|
// try to get the context from the async context if possible
|
|
178
201
|
context = contextStorage.getStore() ?? {};
|
|
179
202
|
}
|
|
180
203
|
return transaction(context, async () => {
|
|
181
|
-
context.transaction.startedFrom ??= {
|
|
204
|
+
(context as any).transaction.startedFrom ??= {
|
|
182
205
|
resourceName: this.name,
|
|
183
206
|
method: 'create',
|
|
184
207
|
};
|
|
185
|
-
const resource = new this(id, context);
|
|
208
|
+
const resource = new (this as any)(id, context);
|
|
186
209
|
const results = resource.create ? await resource.create(id, record) : missingMethod(resource, 'create');
|
|
187
|
-
context.newLocation = id ?? results?.[this.primaryKey];
|
|
188
|
-
context.createdResource = true;
|
|
210
|
+
(context as any).newLocation = id ?? results?.[(this as any).primaryKey];
|
|
211
|
+
(context as any).createdResource = true;
|
|
189
212
|
return this.loadAsInstance === false ? results : resource;
|
|
190
213
|
});
|
|
191
214
|
}
|
|
192
215
|
static invalidate = transactional(
|
|
193
|
-
function (resource:
|
|
216
|
+
function (resource: any, query: RequestTarget, _request: Context, _data: any) {
|
|
194
217
|
return resource.invalidate ? resource.invalidate(query) : missingMethod(resource, 'invalidate');
|
|
195
218
|
},
|
|
196
219
|
{ hasContent: false, type: 'update', method: 'invalidate' }
|
|
197
220
|
);
|
|
198
221
|
|
|
199
222
|
static post = transactional(
|
|
200
|
-
function (resource:
|
|
223
|
+
function (resource: any, query: RequestTarget, _request: Context, data: any) {
|
|
201
224
|
if (resource.#id != null) resource.update?.(); // save any changes made during post
|
|
202
225
|
return resource.constructor.loadAsInstance === false ? resource.post(query, data) : resource.post(data, query);
|
|
203
226
|
},
|
|
@@ -205,14 +228,14 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
205
228
|
);
|
|
206
229
|
|
|
207
230
|
static update = transactional(
|
|
208
|
-
function (resource:
|
|
231
|
+
function (resource: any, query: RequestTarget, _request: Context, data: any) {
|
|
209
232
|
return resource.update(query, data);
|
|
210
233
|
},
|
|
211
234
|
{ type: 'update', method: 'update' }
|
|
212
235
|
);
|
|
213
236
|
|
|
214
237
|
static connect = transactional(
|
|
215
|
-
function (resource:
|
|
238
|
+
function (resource: any, query: RequestTarget, _request: Context, data: any) {
|
|
216
239
|
return resource.connect
|
|
217
240
|
? resource.constructor.loadAsInstance === false
|
|
218
241
|
? resource.connect(query, data)
|
|
@@ -223,14 +246,14 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
223
246
|
);
|
|
224
247
|
|
|
225
248
|
static subscribe = transactional(
|
|
226
|
-
function (resource:
|
|
249
|
+
function (resource: any, query: RequestTarget, _request: Context, _data: any) {
|
|
227
250
|
return resource.subscribe ? resource.subscribe(query) : missingMethod(resource, 'subscribe');
|
|
228
251
|
},
|
|
229
252
|
{ type: 'read', method: 'subscribe', syncAllowed: true }
|
|
230
253
|
);
|
|
231
254
|
|
|
232
255
|
static publish = transactional(
|
|
233
|
-
function (resource:
|
|
256
|
+
function (resource: any, query: RequestTarget, _request: Context, data: any) {
|
|
234
257
|
if (resource.#id != null) resource.update?.(); // save any changes made during publish
|
|
235
258
|
return resource.publish
|
|
236
259
|
? resource.constructor.loadAsInstance === false
|
|
@@ -242,9 +265,9 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
242
265
|
);
|
|
243
266
|
|
|
244
267
|
static search = transactional(
|
|
245
|
-
function (resource:
|
|
268
|
+
function (resource: any, query: Query, request: Context) {
|
|
246
269
|
const result = resource.search ? resource.search(query) : missingMethod(resource, 'search');
|
|
247
|
-
const select = request.select;
|
|
270
|
+
const select = (request as any).select;
|
|
248
271
|
if (select && request.hasOwnProperty('select') && result != null && !result.selectApplied) {
|
|
249
272
|
const transform = transformForSelect(select, resource.constructor);
|
|
250
273
|
return result.map(transform);
|
|
@@ -255,7 +278,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
255
278
|
);
|
|
256
279
|
|
|
257
280
|
static query = transactional(
|
|
258
|
-
function (resource:
|
|
281
|
+
function (resource: any, query: RequestTarget, _request: Context, data: any) {
|
|
259
282
|
return resource.search
|
|
260
283
|
? resource.constructor.loadAsInstance === false
|
|
261
284
|
? resource.search(query, data)
|
|
@@ -266,7 +289,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
266
289
|
);
|
|
267
290
|
|
|
268
291
|
static copy = transactional(
|
|
269
|
-
function (resource:
|
|
292
|
+
function (resource: any, query: RequestTarget, _request: Context, data: any) {
|
|
270
293
|
return resource.copy
|
|
271
294
|
? resource.constructor.loadAsInstance === false
|
|
272
295
|
? resource.copy(query, data)
|
|
@@ -277,7 +300,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
277
300
|
);
|
|
278
301
|
|
|
279
302
|
static move = transactional(
|
|
280
|
-
function (resource:
|
|
303
|
+
function (resource: any, query: RequestTarget, _request: Context, data: any) {
|
|
281
304
|
return resource.move
|
|
282
305
|
? resource.constructor.loadAsInstance === false
|
|
283
306
|
? resource.move(query, data)
|
|
@@ -291,14 +314,14 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
291
314
|
target: RequestTargetOrId,
|
|
292
315
|
newRecord: Partial<Record & RecordObject>
|
|
293
316
|
): Promise<Record & Partial<RecordObject>> {
|
|
294
|
-
if (this.constructor.loadAsInstance === false) {
|
|
295
|
-
if (target.isCollection && this.create) {
|
|
296
|
-
newRecord = await this.create(target, newRecord);
|
|
297
|
-
return newRecord?.[this.constructor.primaryKey];
|
|
317
|
+
if ((this.constructor as any).loadAsInstance === false) {
|
|
318
|
+
if ((target as any).isCollection && this.create) {
|
|
319
|
+
newRecord = (await this.create(target as any, newRecord)) as any;
|
|
320
|
+
return newRecord?.[(this.constructor as any).primaryKey as keyof typeof newRecord] as any;
|
|
298
321
|
}
|
|
299
322
|
} else {
|
|
300
323
|
if (this.#isCollection) {
|
|
301
|
-
const resource = await this.constructor.create(this.#id, target, this.#context);
|
|
324
|
+
const resource = await (this.constructor as any).create(this.#id, target, this.#context);
|
|
302
325
|
return resource.#id;
|
|
303
326
|
}
|
|
304
327
|
}
|
|
@@ -327,7 +350,7 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
327
350
|
// handle path.json, path.cbor, etc. for requesting a specific content type using just the URL
|
|
328
351
|
context.requestedContentType = requestedContentType;
|
|
329
352
|
path = path.slice(0, dotIndex); // remove the property from the path
|
|
330
|
-
} else if (this.attributes?.find((attribute) => attribute.name === property)) {
|
|
353
|
+
} else if ((this as any).attributes?.find((attribute) => attribute.name === property)) {
|
|
331
354
|
// handle path.attribute for requesting a specific attribute using just the URL
|
|
332
355
|
path = path.slice(0, dotIndex); // remove the property from the path
|
|
333
356
|
if (query) query.property = property;
|
|
@@ -355,13 +378,13 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
355
378
|
): Resource | Promise<Resource> {
|
|
356
379
|
let resource;
|
|
357
380
|
const id = target.id;
|
|
358
|
-
let context = request.getContext?.();
|
|
381
|
+
let context = (request as any).getContext?.();
|
|
359
382
|
let isCollection;
|
|
360
|
-
if (typeof request.isCollection === 'boolean' && request.hasOwnProperty('isCollection'))
|
|
361
|
-
isCollection = request.isCollection;
|
|
383
|
+
if (typeof (request as any).isCollection === 'boolean' && request.hasOwnProperty('isCollection'))
|
|
384
|
+
isCollection = (request as any).isCollection;
|
|
362
385
|
else isCollection = options?.isCollection;
|
|
363
386
|
// if it is a collection and we have a collection class defined, use it
|
|
364
|
-
const constructor = (isCollection && this.Collection) || this;
|
|
387
|
+
const constructor = (isCollection && (this as any).Collection) || this;
|
|
365
388
|
if (!context) context = context === undefined ? request : {};
|
|
366
389
|
resource = new constructor(id, context); // outside of a transaction, just create an instance
|
|
367
390
|
if (isCollection) resource.#isCollection = true;
|
|
@@ -374,16 +397,19 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
374
397
|
* but implementors can call send with
|
|
375
398
|
*/
|
|
376
399
|
// eslint-disable-next-line no-unused-vars
|
|
377
|
-
subscribe(request: SubscriptionRequest): AsyncIterable<Record> {
|
|
400
|
+
subscribe(request: SubscriptionRequest): AsyncIterable<Record> | Promise<AsyncIterable<Record>> {
|
|
378
401
|
return new IterableEventQueue();
|
|
379
402
|
}
|
|
380
403
|
|
|
381
|
-
connect(
|
|
404
|
+
connect(
|
|
405
|
+
target: RequestTarget,
|
|
406
|
+
incomingMessages: IterableEventQueue<Record>
|
|
407
|
+
): AsyncIterable<Record> | Promise<AsyncIterable<Record>> {
|
|
382
408
|
// convert subscription to an (async) iterator
|
|
383
|
-
const query = this.constructor.loadAsInstance === false ? target : incomingMessages;
|
|
384
|
-
if (query?.subscribe !== false) {
|
|
409
|
+
const query = (this.constructor as any).loadAsInstance === false ? target : incomingMessages;
|
|
410
|
+
if ((query as any)?.subscribe !== false) {
|
|
385
411
|
// subscribing is the default action, but can be turned off
|
|
386
|
-
return this.subscribe?.(query);
|
|
412
|
+
return this.subscribe?.(query as any) as any;
|
|
387
413
|
}
|
|
388
414
|
return new IterableEventQueue();
|
|
389
415
|
}
|
|
@@ -439,9 +465,9 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
439
465
|
search?(target: RequestTargetOrId): AsyncIterable<Record & Partial<RecordObject>>;
|
|
440
466
|
|
|
441
467
|
create?(
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
): Promise<Record & Partial<RecordObject>>;
|
|
468
|
+
target: RequestTargetOrId,
|
|
469
|
+
newRecord: Partial<Record & RecordObject>
|
|
470
|
+
): void | (Record & Partial<RecordObject>) | Promise<Record & Partial<RecordObject>>;
|
|
445
471
|
put?(
|
|
446
472
|
record: Record & RecordObject,
|
|
447
473
|
target: RequestTargetOrId
|
|
@@ -452,7 +478,9 @@ export class Resource<Record extends object = any> implements ResourceInterface<
|
|
|
452
478
|
): void | (Record & Partial<RecordObject>) | Promise<void | (Record & Partial<RecordObject>)>;
|
|
453
479
|
|
|
454
480
|
delete?(target: RequestTargetOrId): boolean | Promise<boolean>;
|
|
455
|
-
invalidate
|
|
481
|
+
invalidate(_target: RequestTargetOrId): void | Promise<void> {
|
|
482
|
+
missingMethod(this, 'invalidate');
|
|
483
|
+
}
|
|
456
484
|
|
|
457
485
|
publish?(target: RequestTargetOrId, record: Record, options?: any): void;
|
|
458
486
|
}
|
|
@@ -473,12 +501,15 @@ export function snakeCase(camelCase: string) {
|
|
|
473
501
|
* @returns
|
|
474
502
|
*/
|
|
475
503
|
function transactional(
|
|
476
|
-
action: (resource:
|
|
504
|
+
action: (resource: any, query: RequestTarget, context: Context, data: any) => any,
|
|
477
505
|
options: {
|
|
478
|
-
hasContent
|
|
506
|
+
hasContent?: boolean;
|
|
479
507
|
type: 'read' | 'update' | 'create' | 'delete';
|
|
480
508
|
async?: boolean;
|
|
481
509
|
ensureLoaded?: boolean;
|
|
510
|
+
letItLinger?: boolean;
|
|
511
|
+
method?: string;
|
|
512
|
+
syncAllowed?: boolean;
|
|
482
513
|
}
|
|
483
514
|
) {
|
|
484
515
|
applyContext.reliesOnPrototype = true;
|
|
@@ -493,18 +524,23 @@ function transactional(
|
|
|
493
524
|
if (context) {
|
|
494
525
|
// if there are three arguments, it is id, data, context
|
|
495
526
|
data = dataOrContext;
|
|
496
|
-
context = context.getContext?.() || context;
|
|
527
|
+
context = (context as any).getContext?.() || context;
|
|
497
528
|
} else if (dataOrContext) {
|
|
498
529
|
// two arguments, more possibilities:
|
|
499
530
|
if (
|
|
500
531
|
typeof idOrQuery === 'object' &&
|
|
501
532
|
idOrQuery &&
|
|
533
|
+
!(idOrQuery instanceof URLSearchParams) &&
|
|
502
534
|
(!Array.isArray(idOrQuery) || typeof idOrQuery[0] === 'object')
|
|
503
535
|
) {
|
|
504
536
|
// (data, context) form
|
|
505
537
|
data = idOrQuery;
|
|
506
538
|
id = data[this.primaryKey] ?? null;
|
|
507
|
-
context = dataOrContext.getContext?.() || dataOrContext;
|
|
539
|
+
context = (dataOrContext as any).getContext?.() || dataOrContext;
|
|
540
|
+
if (context instanceof DatabaseTransaction) context = { transaction: context };
|
|
541
|
+
} else if (dataOrContext instanceof DatabaseTransaction) {
|
|
542
|
+
// (id, txn) form
|
|
543
|
+
context = { transaction: dataOrContext };
|
|
508
544
|
} else if (dataOrContext?.transaction instanceof DatabaseTransaction) {
|
|
509
545
|
// (id, context) form
|
|
510
546
|
context = dataOrContext;
|
|
@@ -517,6 +553,10 @@ function transactional(
|
|
|
517
553
|
data = idOrQuery;
|
|
518
554
|
idOrQuery = undefined;
|
|
519
555
|
id = data.getId?.() ?? data[this.primaryKey];
|
|
556
|
+
} else if (idOrQuery != null && typeof idOrQuery !== 'object') {
|
|
557
|
+
// single argument form, just id
|
|
558
|
+
id = idOrQuery;
|
|
559
|
+
data = undefined;
|
|
520
560
|
} else {
|
|
521
561
|
throw new ClientError(`Invalid argument for data, must be an object, but got ${idOrQuery}`);
|
|
522
562
|
}
|
|
@@ -527,13 +567,13 @@ function transactional(
|
|
|
527
567
|
if (context) {
|
|
528
568
|
// (id, data, context), this a method that doesn't normally have a body/data, but with the three arguments, we have explicit data
|
|
529
569
|
data = dataOrContext;
|
|
530
|
-
context = context.getContext?.() || context;
|
|
570
|
+
context = (context as any).getContext?.() || context;
|
|
531
571
|
} else if (hasContent === false) {
|
|
532
572
|
// (id, context), preferred form used for methods that are explicitly without a body
|
|
533
|
-
context = dataOrContext.getContext?.() || dataOrContext;
|
|
573
|
+
context = (dataOrContext as any).getContext?.() || dataOrContext;
|
|
534
574
|
} else if (dataOrContext.transaction || dataOrContext.getContext) {
|
|
535
575
|
// or if it looks like a context
|
|
536
|
-
context = dataOrContext.getContext?.() || dataOrContext;
|
|
576
|
+
context = (dataOrContext as any).getContext?.() || dataOrContext;
|
|
537
577
|
} else {
|
|
538
578
|
data = dataOrContext;
|
|
539
579
|
}
|
|
@@ -582,7 +622,7 @@ function transactional(
|
|
|
582
622
|
}
|
|
583
623
|
}
|
|
584
624
|
} else if (id === undefined) {
|
|
585
|
-
id = idOrQuery.id ?? null;
|
|
625
|
+
id = (idOrQuery as any).id ?? null;
|
|
586
626
|
if (id == null) query.isCollection = true;
|
|
587
627
|
}
|
|
588
628
|
} else {
|
|
@@ -660,8 +700,8 @@ function transactional(
|
|
|
660
700
|
: options.type === 'create'
|
|
661
701
|
? resource.allowCreate(context.user, data, context)
|
|
662
702
|
: resource.allowDelete(context.user, query, context);
|
|
663
|
-
if (allowed?.then) {
|
|
664
|
-
return allowed.then((allowed) => {
|
|
703
|
+
if ((allowed as any)?.then) {
|
|
704
|
+
return (allowed as any).then((allowed) => {
|
|
665
705
|
query.checkPermission = false;
|
|
666
706
|
if (!allowed) {
|
|
667
707
|
throw new AccessViolation(context.user);
|