UNPKG

couchdb-web-node-plugin

Version:

A couchdb server, model instance conflict handler, rest api, authentication, session management, schema validator and model relation guarantee for webNode.

587 lines 18.7 kB
{ "name": "couchdb-web-node-plugin", "version": "1.0.761", "description": "A couchdb server, model instance conflict handler, rest api, authentication, session management, schema validator and model relation guarantee for webNode.", "keywords": [ "api", "authentication", "authorisation", "backend", "database", "model", "rest", "roles", "session", "schema", "user", "validation", "web" ], "homepage": "https://torben.website/couchdb-web-node-plugin", "bugs": { "email": "info@torben.website", "url": "https://github.com/thaibault/couchdb-web-node-plugin/issues" }, "license": "CC-BY-3.0", "author": { "name": "Torben Sickert", "email": "info@torben.website", "url": "https://torben.website" }, "files": [ "databaseHelper.d.ts", "databaseHelper.js", "helper.d.ts", "index.d.ts", "index.js", "helper.js", "type.d.ts", "type.js" ], "repository": { "type": "git", "url": "https://github.com/thaibault/couchdb-web-node-plugin.git" }, "scripts": { "build": "weboptimizer build:types && yarn build:databaseHelper && weboptimizer build", "build:databaseHelper": "weboptimizer build '{__reference__: \"target:databaseHelper\"}'", "check:types": "weboptimizer check:types", "clear": "weboptimizer clear && rimraf log.txt", "document": "weboptimizer document", "lint": "weboptimizer lint", "prepare": "yarn build", "report:coverage": "nyc report --reporter=text-lcov | coveralls", "serve": "yarn build && yarn start", "start": "web-node '{plugin: {hotReloading: true}}'", "test": "weboptimizer test", "test:coverage": "weboptimizer test:coverage", "test:coverage:report": "weboptimizer test:coverage:report", "update:documentation": "documentation-website", "watch": "weboptimizer build --watch" }, "dependencies": { "pouchdb-authentication": "^1.1.3", "pouchdb-find": "^9.0.0", "pouchdb-node": "^9.0.0", "pouchdb-validation": "^4.2.0", "rxjs": "^7.8.2" }, "devDependencies": { "@babel/eslint-parser": "^7.27.0", "@babel/runtime": "^7.27.0", "@stylistic/eslint-plugin-ts": "^4.2.0", "@types/ejs": "^3.1.5", "@types/express": "^5.0.1", "@types/node": "^22.14.1", "@types/pouchdb-node": "^6.1.7", "@typescript-eslint/eslint-plugin": "^8.30.1", "@typescript-eslint/parser": "^8.30.1", "clientnode": "^3.0.1275", "documentation-website": "^1.0.345", "eslint": "^9.24.0", "eslint-config-google": "^0.14.0", "eslint-plugin-jsdoc": "^50.6.9", "express": "^5.1.0", "express-pouchdb": "^4.2.0", "jest": "^29.7.0", "jsdoc": "^4.0.4", "mkdirp": "^3.0.1", "node-fetch": "^3.3.2", "rimraf": "^6.0.1", "typescript-eslint": "^8.30.1", "web-node": "^1.0.545", "weboptimizer": "^2.0.1577" }, "peerDependencies": { "@babel/runtime": "*", "clientnode": "*", "express": "*", "express-pouchdb": "*", "node-fetch": "*", "pouchdb-server": "*", "request": "*", "web-node": "*" }, "peerDependenciesMeta": { "@babel/runtime": { "optional": true }, "express": { "optional": true }, "express-pouchdb": { "optional": true }, "pouchdb-server": { "optional": true } }, "engines": { "node": ">=20", "npm": ">=10", "yarn": ">=4" }, "resolutions": { "colors": "1.4.0", "globals@npm:^9.18.0": "patch:globals@npm%3A11.12.0#~/.yarn/patches/globals-npm-11.12.0-1fa7f41a6c.patch", "globals@npm:^11.1.0": "patch:globals@npm%3A11.12.0#~/.yarn/patches/globals-npm-11.12.0-1fa7f41a6c.patch", "globals@npm:^14.0.0": "patch:globals@npm%3A11.12.0#~/.yarn/patches/globals-npm-11.12.0-1fa7f41a6c.patch" }, "sideEffects": false, "documentationWebsite": { "name": "couchdb-web-node-plugin", "trackingCode": "UA-40192634-21" }, "webNode": { "couchdb": { "attachAutoRestarter": true, "backend": { "configuration": { "couchdb/database_dir": { "__evaluate__": "path.resolve(self.couchdb.path)" }, "couchdb/max_attachment_chunk_size": "4294967296", "couchdb/os_process_timeout": "25000", "couchdb/view_index_dir": { "__evaluate__": "path.resolve(self.couchdb.path)" }, "couch_httpd_auth/timeout": { "__evaluate__": "60 ** 2 * 24 * 14" }, "chttpd/require_valid_user": true, "httpd/allow_jsonp": true, "httpd/bind_address": { "__evaluate__": "self.couchdb.backend.configuration['httpd/host']" }, "httpd/enable_cors": true, "httpd/host": "0.0.0.0", "httpd/port": 5984, "log/file": "/dev/stdout", "log/level": "info" }, "prefixes": [ "_node/_local/_config", "_config" ] }, "runner": { "memoryInMegaByte": "default", "nodePath": "/usr/bin/node", "variants": [ { "adminUserConfigurationPath": "_node/couchdb@127.0.0.1/_config/admins", "configurationFile": { "content": { "__evaluate__": "`[couchdb]\\ndatabase_dir = ${path.resolve(self.couchdb.path)}\\nview_index_dir = ${path.resolve(self.couchdb.path)}`" }, "path": { "__evaluate__": "path.resolve(self.couchdb.path, 'local.ini')" } }, "environment": { "ERL_FLAGS": { "__evaluate__": "`-couch_ini /usr/lib/couchdb/etc/default.ini /usr/lib/couchdb/etc/datadirs.ini /etc/couchdb/local.ini ${path.resolve(self.couchdb.path, 'local.ini')}`" } }, "locations": "/usr/lib/couchdb/bin/", "names": "couchdb" }, { "adminUserConfigurationPath": "_config/admins", "arguments": [ "--config", { "__evaluate__": "`./${self.couchdb.path}/database.json`" }, "--dir", { "__evaluate__": "self.couchdb.backend.configuration['couchdb/database_dir']" }, "#: NOTE: This redundancy seems to be needed to forward ports in docker containers.", "--host", { "__evaluate__": "self.couchdb.backend.configuration['httpd/host']" }, "--port", { "__evaluate__": "`${self.couchdb.backend.configuration['httpd/port']}`" } ], "locations": [ "node_modules/.bin/", "../.bin/" ], "names": "pouchdb-server" }, { "adminUserConfigurationPath": "_config/admins", "packages": [ "express", "express-pouchdb" ], "names": "express-pouchdb" } ] }, "changesStream": { "include_docs": false, "live": true, "return_docs": false, "since": "now", "timeout": false }, "updateMaterializedViewsChangesStream": { "include_docs": true, "live": true, "return_docs": false, "since": "now", "style": "all_docs", "timeout": false }, "changesStreamReinitializer": { "retries": 5, "retryWaitingFactorInSeconds": 3, "maxmumRetryWaitingTimeInSeconds": 120 }, "numberOfParallelChangesRunner": 1, "connector": { "fetch": { "timeout": { "__evaluate__": "5 * 60 * 1000" } }, "fetchInterceptor": { "numberOfRetries": 5, "retryIntervalInSeconds": 0.2, "exponentialBackoff": true, "maximumRetryIntervallInSeconds": 30 } }, "createGenericFlatIndex": true, "databaseName": "main", "debug": false, "ensureAdminPresence": true, "ensureSecuritySettingsPresence": true, "ensureUserPresence": true, "ignoreNoChangeError": true, "local": false, "maximumNumberOfEntitiesInBulkOperation": 10, "maximumRepresentationLength": 1000, "maximumRepresentationTryLength": 1000000, "model": { "autoMigrationPath": "migration", "dateTimeFormat": "iso", "entities": { "_base": { "_allowedRoles": "users", "_attachments": {}, "_deleted": { "type": "boolean" }, "_id": { "mutable": false }, "_maximumAggregatedSize": 100000000, "_minimumAggregatedSize": 0, "_rev": { "mutable": false }, "-type": { "maximumLength": 999, "minimumLength": 1, "nullable": false, "mutable": false, "pattern": { "__evaluate__": "`(?:${self.couchdb.model.property.name.typePattern.public}|${self.couchdb.model.property.name.typePattern.private})`" } } }, "_expressionMapping": { "_additional": { "constraintExecution": { "description": "`Given value \"${newValue}\" should be able to be compiled as template string: ${(() => { try { new Function(`return \\`${newValue}\\``) } catch (error) { return `${error}` } })()}`", "evaluation": "try { new Function(`return \\`${newValue}\\``) } catch (error) { return false }; return true" } }, "_extends": "_stringMapping" }, "_interval": { "_constraintExpressions": { "description": "`You have to ensure that start time is before or equal to end time for models with an ${modelName.replace(/^_+/, '')} specification${pathDescription}.`", "evaluation": "newDocument.start <= newDocument.end" }, "end": { "declaration": "Ende des Intervals", "description": "Ende", "nullable": false, "type": "DateTime" }, "start": { "declaration": "Start des Intervals", "description": "Start", "nullable": false, "type": "DateTime" } }, "_location": { "latitude": { "declaration": "Latitude degree of the represented position.", "description": "Latitude", "maximum": 90, "minimum": -90, "nullable": false, "type": [ "number", "UNRESOLVED" ] }, "longitude": { "declaration": "Longitude degree of the represented position.", "description": "Longitude", "maximum": 180, "minimum": -180, "nullable": false, "type": [ "number", "UNRESOLVED" ] } }, "_materializedView": { "_allowedRoles": [] }, "_stringMapping": { "_additional": { "declaration": "Templatedata", "description": "String mapped values.", "emptyEqualsNull": false, "type": "string" } }, "_timeTrackable": { "creationDateTime": { "minimum": 1, "mutable": false, "nullable": false, "onCreateExpression": "nowUTCTimestamp", "type": "DateTime" }, "updateDateTime": { "constraintExpression": { "evaluate": { "__evaluate__": "`modelConfiguration.updateStrategy === 'migrate' && oldDocument ? true : newValue > ${nowUTCTimestamp}`" } }, "minimum": 0, "nullable": false, "onUpdateExpression": "modelConfiguration.updateStrategy === 'migrate' && oldDocument ? oldDocument[name] : nowUTCTimestamp", "type": "DateTime" } }, "_userTrackable": { "lastUser": { "nullable": false, "onUpdateExpression": { "__evaluate__": "`userContext.name || '${self.couchdb.admin.name}'`" } } } }, "property": { "defaultSpecification": { "emptyEqualsNull": true, "maximumAggregatedSize": 100000000, "minimumAggregatedSize": 0, "minimumLength": 0, "minimumNumber": 0, "maximumSize": 10000000, "minimumSize": 0, "mutable": true, "nullable": true, "trim": true, "type": "string", "writable": true }, "name": { "reserved": [], "special": { "additional": "_additional", "allowedRole": "_allowedRoles", "attachment": "_attachments", "conflict": "_conflicts", "constraint": { "execution": "_constraintExecutions", "expression": "_constraintExpressions" }, "create": { "execution": "_createExecution", "expression": "_createExecution" }, "deleted": "_deleted", "deletedConflict": "_deleted_conflicts", "designDocumentNamePrefix": "_design/", "extend": "_extends", "id": "_id", "localSequence": "_local_seq", "maximumAggregatedSize": "_maximumAggregatedSize", "minimumAggregatedSize": "_minimumAggregatedSize", "oldType": "_oldType", "revision": "_rev", "revisions": "_revisions", "revisionsInformation": "_revs_info", "strategy": "_updateStrategy", "type": "-type", "update": { "execution": "_onUpdateExecution", "expression": "_onUpdateExpression" } }, "typePattern": { "private": "^_[a-z][A-Za-z0-9]+$", "public": "^[A-Z][A-Za-z0-9]+$" }, "validatedDocumentsCache": "_validatedDocuments" } }, "triggerInitialCompaction": true, "updateConfiguration": true, "updateStrategy": "fillUp", "updateValidation": true }, "path": "database", "security": { "_default": { "admins": { "names": [], "roles": [ "admin" ] }, "members": { "names": [], "roles": [] } }, "_users": { "admins": { "names": [ "admin" ], "roles": [ "admin" ] }, "members": { "names": [ "admin" ], "roles": [ "admin" ] } } }, "skipLatestRevisionDetermining": true, "url": { "__evaluate__": "`http://{1}${self.couchdb.backend.configuration['httpd/host']}:${self.couchdb.backend.configuration['httpd/port']}`" }, "admin": { "name": "admin", "password": "admin" }, "users": {}, "materializedViews": {} } }, "webOptimizer": { "assetPattern": { "javaScript": { "excludeFilePathRegularExpression": { "__evaluate__": "2 < self.givenCommandLineArguments.length && self.givenCommandLineArguments[2].startsWith('test') ? '^$' : '.+'" } } }, "exportFormat": { "external": "commonjs2", "self": "commonjs2" }, "injection": { "entry": { "__evaluate__": "2 < self.givenCommandLineArguments.length && self.givenCommandLineArguments[2].startsWith('test') ? {testBundle: 'test'} : {helper: './helper', index: './index', type: './type'}" } }, "module": { "aliases": { "#": "Share same library version.", "node-fetch$": "pouchdb-node/node_modules/node-fetch/lib/index.js" }, "optimizer": { "babelMinify": { "bundle": { "transform": { "#": "To provide a logging output we need to exclude this feature.", "removeConsole": false } }, "#": "Avoids \"Couldn't find intersection\" build error.", "module": false } }, "skipParseRegularExpressions": { "__evaluate__": "/(?:(?:bindings\\/bindings)|(?:colors\\/lib\\/(?:colors)|(?:extendStringPrototype))|(?:encoding\\/lib\\/iconv-loader)|(?:global)|(?:module))\\.js(?:\\?.+|$)/" } }, "targetTechnology": { "boilerplate": "node", "payload": "node" }, "target:databaseHelper": { "injection": { "entry": { "__evaluate__": "{databaseHelper: './databaseHelper'}" } }, "inPlace": { "externalLibrary": { "normal": true } }, "module": { "preprocessor": { "javaScript": { "options": { "plugins": { "__remove__": "@babel/plugin-transform-runtime" } } } } } }, "test": { "injection": { "external": { "implicit": { "pattern": { "exclude": { "#": "NOTE: Theses files are ECMAscript file so have to be processed to work with test-runner.", "__append__": [ { "__evaluate__": "/^(.+\\/)?data-uri-to-buffer(\\/.+)?$/" }, { "__evaluate__": "/^(.+\\/)?fetch-blob(\\/.+)?$/" }, { "__evaluate__": "/^(.+\\/)?node-fetch(\\/.+)?$/" } ] } } } } } } }, "packageManager": "yarn@4.6.0+sha512.5383cc12567a95f1d668fbe762dfe0075c595b4bfff433be478dbbe24e05251a8e8c3eb992a986667c1d53b6c3a9c85b8398c35a960587fbd9fa3a0915406728" }