{"_id":"@nodeblocks/backend-sdk","_rev":"203-533af1dda615ab08d7b3182bc58afb00","name":"@nodeblocks/backend-sdk","dist-tags":{"latest":"0.14.0"},"versions":{"0.0.2":{"name":"@nodeblocks/backend-sdk","version":"0.0.2","_id":"@nodeblocks/backend-sdk@0.0.2","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"807d60e390b96c9aa507a25cf39e6e9a037eb90a","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.0.2.tgz","fileCount":92,"integrity":"sha512-czEWpeKlq4ieKe0uVfp5FECXPgn+zJSWXR9TP1DaRgqmcfE22MGVXPmwh8y1GCTZWDUXMLVERwv0u2lF1TKrTA==","signatures":[{"sig":"MEUCIC9TbfiWt/Ve3tItBkfCx3idD55ZSJFOOQOye9ioOux2AiEAzwz0IC4k7RJ5FflA6kKYLnIeFFUcm5CULgXy/YtNzUk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112881},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"95762c47a4f9614631eff26771a7ed1c273e3479","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary"]},"_nodeVersion":"22.16.0","dependencies":{"ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","express":"^4.18.2","mongodb":"^6.16.0","pino-http":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","cspell":"^9.0.1","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","ajv-formats":"^3.0.1","lint-staged":"^16.0.0","pino-pretty":"^13.0.0","@types/ramda":"^0.30.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","mongodb-memory-server":"^10.1.4","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.0.2_1749695993414_0.09673641390337062","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@nodeblocks/backend-sdk","version":"0.0.3","_id":"@nodeblocks/backend-sdk@0.0.3","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"4d2b65aa1bfccf24f1095bc5e5b0f209a9e344ec","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.0.3.tgz","fileCount":102,"integrity":"sha512-kyjPxBJVOf5hT2W+hIJVobRqlm3FLVrzsiEzM/KQGEjwA/4whD5VHwyKOlypHEGfKtKK1uqzG8ofoE0hq373RQ==","signatures":[{"sig":"MEYCIQDr+/dEtp8Sgdp1rJjJCo6XYGgQS5z6LPI5rYzl4AuWYwIhAOzf20I768ickQA82IQd82tBdfiuVi7dVNVKb6e4cULM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127618},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"0a1abab93833a6342c4a489c03847211b376c331","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","actor":{"name":"basal-nodeblocks","type":"user","email":"nodeblocks-dev@basal.dev"},"email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.16.0","dependencies":{"ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","express":"^4.18.2","mongodb":"^6.16.0","pino-http":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","cspell":"^9.0.1","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","ajv-formats":"^3.0.1","lint-staged":"^16.0.0","pino-pretty":"^13.0.0","@types/ramda":"^0.30.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","mongodb-memory-server":"^10.1.4","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.0.3_1750298891772_0.11942071777685559","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@nodeblocks/backend-sdk","version":"0.1.0","_id":"@nodeblocks/backend-sdk@0.1.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"779065fa85821615088ec22c07b086dbd174d1a4","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.1.0.tgz","fileCount":180,"integrity":"sha512-Xv2U+mgiL9vNQNhAw4v9sid4HZZRiilllAry/M4eou9AyiD5RYwSJdWGO3+sPCLHIrLbbPlYoXKo4yt5b35KhQ==","signatures":[{"sig":"MEYCIQDm3GXbw5P1+fTCr4nXRDkaQ9g5Er3BhPdqCfgtcz7/ZQIhANfM4Ad4n4GszYEcljIOFQweTDiX/uxT7vuYWOjmVESm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":902663},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"22d6bc50a04e6fe1072ac059adefb29ef9156fe8","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","actor":{"name":"basal-nodeblocks","type":"user","email":"nodeblocks-dev@basal.dev"},"email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.0","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.16.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","cspell":"^9.0.1","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","pino-pretty":"^13.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.1.0_1751598304724_0.4808796186950992","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@nodeblocks/backend-sdk","version":"0.2.0","_id":"@nodeblocks/backend-sdk@0.2.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"339262dbb57e2649990be0a96e083bb042167081","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.2.0.tgz","fileCount":210,"integrity":"sha512-mNf3DoxmRf4yyTS1yTl6uIVZ/rqDvz9zV5nhh5v1iKgbDoIgB+qaRxe8HSXtGrHLmxYeKUcU4GjmFJmNSJ+qTg==","signatures":[{"sig":"MEUCIAFOTD0t1+sTMstkM1cXGqiD+KkihOyeOrkgdYRTVWyDAiEA+gClBaj+trrQbIUTFX18aPRuj0IQZUDPdyQBAGvAoaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":960911},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"b70bac66a011ee26e76cbd64d687fab880a546bf","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","actor":{"name":"basal-nodeblocks","type":"user","email":"nodeblocks-dev@basal.dev"},"email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.15.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.16.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","cspell":"^9.0.1","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","pino-pretty":"^13.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.2.0_1751611581820_0.47911584436261223","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@nodeblocks/backend-sdk","version":"0.3.0","_id":"@nodeblocks/backend-sdk@0.3.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"449de12be1421280a7451f397bd6ddffa48453ed","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.3.0.tgz","fileCount":186,"integrity":"sha512-XWyClcMiacsXOYKMkfrUcosIXMgXqE44lOUHFVp+eKzmxjJgTlnUg3SYd9v4nLqZ+sBpKpoMAGGfHAVnlEfBoQ==","signatures":[{"sig":"MEQCIFKb4nqpbtw4s4oUc9V7MOWZWhstHASOGyojbqQL3j62AiBV3K/RYk0iX2K3JJBr1iVZc7EihTxeGj2Z+SZPcefM7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":918406},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"5c82ede9485b2026f9d98720ce34c79a36901dd7","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","actor":{"name":"basal-nodeblocks","type":"user","email":"nodeblocks-dev@basal.dev"},"email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.0","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","cspell":"^9.0.1","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","pino-pretty":"^13.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.3.0_1751704757234_0.03714193140499078","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@nodeblocks/backend-sdk","version":"0.4.0","_id":"@nodeblocks/backend-sdk@0.4.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"140c99ba6271844600443f52355938ea7d3f8d4c","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.0.tgz","fileCount":192,"integrity":"sha512-pt8rl/oBlmOrH0O5qx0QW+U7cLURmSevjuWbiHnQGldSaekAV3pla1aSiP9p+aU+j2RWBgFYXUnzuJ2cByp5oQ==","signatures":[{"sig":"MEUCIQCtSwS/O2xyqtL10l1mpkycgCip4FgVTbfok4DBTz+VHwIgbjWSVNsjrPVr5JOviQkciGH8HRyGSmi3fE99vlsktzI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":935713},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"ee4c89eb4bdd90b8ed0575bc56bfc6fc8e7a35a9","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","actor":{"name":"basal-nodeblocks","type":"user","email":"nodeblocks-dev@basal.dev"},"email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.0","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","cspell":"^9.0.1","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","pino-pretty":"^13.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.0_1751849234644_0.38577563752152555","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@nodeblocks/backend-sdk","version":"0.4.1","_id":"@nodeblocks/backend-sdk@0.4.1","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"470554ecc3a003f0c2afa749750afe24864b67f9","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.1.tgz","fileCount":192,"integrity":"sha512-YNTXEZjDXPxYXxiFva9VkXkU7zAdeKmNvtsa7uxKcoM0fweNq0wIc/jleElZo+hoRPUa/pG5faf7wOfoPRHSnQ==","signatures":[{"sig":"MEUCIQCfnuRmc84vWousWB2og349JlBDrZDloHld+xBFStSQ1AIgE+cERbz+OVVM0Wf8jwkXT987rLtGLUSr1+xPC1rN5VQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":935713},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"fd130ac2b751b12ce764c0828dcf3a71604adb3c","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","actor":{"name":"basal-nodeblocks","type":"user","email":"nodeblocks-dev@basal.dev"},"email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.0","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","cspell":"^9.0.1","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.1_1752024642741_0.2638550682749061","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@nodeblocks/backend-sdk","version":"0.4.2","_id":"@nodeblocks/backend-sdk@0.4.2","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"268f732d91a0df035385cd5ae8b91cb09cf609e3","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.2.tgz","fileCount":192,"integrity":"sha512-Z9WvHnX+6YsjcmRjKblFnRs2gP/IrpRqYMSto3pJJw39IL1yMawxT0iYw1FX9fSRgWpfan2hw2bYK2/68GitwQ==","signatures":[{"sig":"MEQCICUEoDv7VTnNAi3JLp93TTZkMbphS94ZNnTmQUq47G2aAiBWELZ1ZXf/5E0MPbYeVUuzAefwmOq6llcjAnYxrm65aA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":936784},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"978ebf15d476ede5134308f5a42a7c7bb5dec55f","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","actor":{"name":"basal-nodeblocks","type":"user","email":"nodeblocks-dev@basal.dev"},"email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.0","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","cspell":"^9.0.1","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.2_1752036884286_0.21059289586506202","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@nodeblocks/backend-sdk","version":"0.4.3","_id":"@nodeblocks/backend-sdk@0.4.3","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"8be2fce81f33e7228c01e4c5c3312e013df82e48","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.3.tgz","fileCount":220,"integrity":"sha512-PvzfLWXVuH4ZQWa+ghkocGa9/TKv0DBBw+joqn5F+gCLDvvCPJnIa0WeNSove2pzk+EoqkGqV9Z1JcOTkqmDKg==","signatures":[{"sig":"MEUCIQC6xAbQ+CMzsSY7UNMYscG6xCN62NHWisrF6EvhLXdmZQIgIA/PWGOADjZ/0JMYG6V2tpKkgUcPZNvXg4Ln6LAlC1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053545},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"5eb22402090f9df2d2553c277f1ec8affbb675f9","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.3_1752808262870_0.9269434742120932","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@nodeblocks/backend-sdk","version":"0.4.4","_id":"@nodeblocks/backend-sdk@0.4.4","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"7764975eacf76b750656ae8f3f106d01f0b4a836","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.4.tgz","fileCount":220,"integrity":"sha512-OHcKHMzfrHLCNWq5TR/5920IhhDMoC/ZAWx/b/1aPJ+pXTgsMr27ih9iz3Zlzhsld//dCpEpjc485Cyjn5cAkw==","signatures":[{"sig":"MEUCIDmRWHpFWd5m6+GzXPhMAiKkG8flKp93brouvLO7ypOtAiEA2ONRbcM6mTAs24SeasJIhCB8LEUCqASBrnpOONl7uW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053545},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"9a212a56a44542ea67f61ff8e46481dd7a92ad98","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.4_1752808322121_0.9633610629772302","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@nodeblocks/backend-sdk","version":"0.4.5","_id":"@nodeblocks/backend-sdk@0.4.5","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"74f5a6bdc59215826b505555f69f0b632c9d559d","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.5.tgz","fileCount":220,"integrity":"sha512-wnECyu3wAy9nip4CuXkzD91XqPT6jDjMUlkkXb0CgLHCslmf3G2UdyrtRWyjrPmua8N35n9xZLnsxbrZZ1brFA==","signatures":[{"sig":"MEQCIAEZAATkWH1627yBRLYwqwPeEFcZHegd4PC8i13W4hLiAiAg8xiEl+tMxAsrzAGMqcZrFhEkwqzRgqZsVhaavFIqlQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053545},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"7cd9f8d4d3081f51355a1671a84d3c933a216d0a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.5_1752808399245_0.0830566885451578","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"@nodeblocks/backend-sdk","version":"0.4.6","_id":"@nodeblocks/backend-sdk@0.4.6","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"8841f4262bcc02f02ecf33291b35608e2b0bf335","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.6.tgz","fileCount":220,"integrity":"sha512-7NMlmsgaDW6AFLoEm8U6rwzQJBC/TOk3CnPGW3uPwxhBgKULGGnZFdCmuLBowk0n4FRKeIkDLwHlkvV0dOJTsA==","signatures":[{"sig":"MEYCIQCLPc/XCtehnrhFARyzdWSVfOzdgysbMgMoXf/ll5yo7wIhAMR7osV/bjb8Gpy1kwXmrpkW1JwIBSwpkZiwHb3GNmZ7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053545},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"4e23013cf1df6cde08ba73d29ae0711b34f82d29","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.6_1752808481885_0.3233662830666988","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"@nodeblocks/backend-sdk","version":"0.4.7","_id":"@nodeblocks/backend-sdk@0.4.7","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"c572b81f99443eea6a14b1284b2406a7c732a56b","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.7.tgz","fileCount":220,"integrity":"sha512-9HFr135PPwxJ2cpQvM7Lhl0RP+E/MBO6waj3KvR+VVD4KBkbfs3ki8nGsYKpelOYbD8TFpZ59kNCEhh57bPryw==","signatures":[{"sig":"MEUCIQDgkSSSkgJBW4X/uvZvO06F4WwJ0qlseMhVQ0MSyPWpJQIgGxcAGNYw5jYBpxSb9JjIvf3l/Vfc+ovDJhML4+QpQ0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053545},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"68077d14cb67c2d920f760d5440366e100129635","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.7_1752808555265_0.5927983194783351","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"@nodeblocks/backend-sdk","version":"0.4.8","_id":"@nodeblocks/backend-sdk@0.4.8","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e28dd97f72fd57253de258cb8e60176255a5aea0","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.8.tgz","fileCount":220,"integrity":"sha512-ONgJcbKX5ojzni5b3RtLvOYUQLzVTCoBxexkjtmNhce3OnkwwLRwjXRFLeixTHjsy1rxFNeeI9P8myfSfhxutQ==","signatures":[{"sig":"MEUCIA7M8JkGaNgz/Jb3Eo88exDT1HIOZU+yi4ArqhGVN+88AiEA+tfCd09Qr3AOjfi/XCm04AtUL3xA6zXpxXvvpDb/U7Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053545},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"6d9cb2ed65cc5ee3c325a00ed41da239db52a78a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.8_1752808624850_0.21585832973983332","host":"s3://npm-registry-packages-npm-production"}},"0.4.11":{"name":"@nodeblocks/backend-sdk","version":"0.4.11","_id":"@nodeblocks/backend-sdk@0.4.11","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"0e8ee5ec7294e8a6590cda055af9fad3f1f003db","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.11.tgz","fileCount":220,"integrity":"sha512-9/uEz5IB64InPLP0sVbioFnobIRL3yBm3/D/+29c3F6cGbs5vsYp4d8i1PYDJ8ITS+cO0YAMVRFsO27K5rb/BQ==","signatures":[{"sig":"MEQCIBi3UnPxvVrKV8nIlujSd4iSNuwQ8WClAuQyCp1Hp3siAiBquTKkVns0ZUD9anZ4un8H+oSDDBsDIMEC2PgjWGG3xg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"34db6f92327bf41eb0dbe7488c00c817e96bbccc","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.11_1752808772912_0.34139093927234576","host":"s3://npm-registry-packages-npm-production"}},"0.4.12":{"name":"@nodeblocks/backend-sdk","version":"0.4.12","_id":"@nodeblocks/backend-sdk@0.4.12","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"463c4992ffc860803b7c71485538c242983fe5de","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.12.tgz","fileCount":220,"integrity":"sha512-FTqjTycWPIHHedRWSRVuY8T0Nxmqw9gV6KeKRdQ+h81vK87z+qxyhkuNuSux6rNgz5y/k8IqtNNto+948Oq7nw==","signatures":[{"sig":"MEUCIQDG7kZVNfhCm3eEbvnDkJOii+x2/C3WnSzsWeKtZEGQogIgPPsb4OSAtABs22JrKue48t0BgO0TxWD+WQNmXhcKMIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"968f447fc8e94f3e9337ec6ae84f5f39a62e0d52","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.12_1752808829917_0.2981826650482131","host":"s3://npm-registry-packages-npm-production"}},"0.4.13":{"name":"@nodeblocks/backend-sdk","version":"0.4.13","_id":"@nodeblocks/backend-sdk@0.4.13","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"5538f27dbf4bef0f41929403d0798d6df8e4f295","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.13.tgz","fileCount":220,"integrity":"sha512-v+WBqt1wMujOxkYuirbrGznfxYG6DJ8ZpMkk903LUk8fLovliQGg8Si+2oOHyRiXWxAlq8XIxc5qhHqj1z42bg==","signatures":[{"sig":"MEUCICdiqGqPN3Rt++CMYL4EKPqpd4WiifIjpXok0JIldeefAiEAynKB4cV83RgZ4GpAmBVm5keBdi3qxgJsy0Rt5/ajADU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"07f8953641d252d50a355cafe5f4ad5440366711","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.13_1752808899227_0.8007233809895955","host":"s3://npm-registry-packages-npm-production"}},"0.4.14":{"name":"@nodeblocks/backend-sdk","version":"0.4.14","_id":"@nodeblocks/backend-sdk@0.4.14","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ba8db711c71d5859e72a59ec5b281560e595d620","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.14.tgz","fileCount":220,"integrity":"sha512-KwRZSLoe3M2R+HLr49KjwFlm7k+xG5ewlYd/kqa+kZbDX9i1LLvvr90m20s6sKoWyN87vDTJSXY0iGVXVVT+3g==","signatures":[{"sig":"MEQCIHnnosC+snJZrbmJXj53lfDXidLiWN+zkmTBSRxWMpqCAiBt8kGo9y4Iq6/dShQGDlSsB1LQ58Kp2cdrrfIxMLblXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"8c03e8d637970a641026437330305311cd30f0b2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.14_1752808970956_0.0726095755363898","host":"s3://npm-registry-packages-npm-production"}},"0.4.15":{"name":"@nodeblocks/backend-sdk","version":"0.4.15","_id":"@nodeblocks/backend-sdk@0.4.15","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"60e4b8f899fd428e1007ce9d45bd3f1c861d67fa","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.15.tgz","fileCount":220,"integrity":"sha512-2FXjoVT5pUk3PsycnZL3dL/H62jIK2jHE7mAYSsbgG1MOinkq3QULZwvfpydGuI4ZgIcrEQafXh1sTgWMA9n2g==","signatures":[{"sig":"MEUCIQDybsCH8LHSL8RE7xzMB+xqq0k3DOH0XFU0IS+tdUMj6AIgZ1AJkXWKp+lZ2dX5qKig0Rxzc59WH/v3/BfmuPEM5NU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"98375b208fe6f82676addd71169ac31e1cd26b84","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.15_1752809061829_0.19967097299733605","host":"s3://npm-registry-packages-npm-production"}},"0.4.19":{"name":"@nodeblocks/backend-sdk","version":"0.4.19","_id":"@nodeblocks/backend-sdk@0.4.19","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"f61fcf3a9df1d65b86c08b744e5e4518a9a9c7cc","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.19.tgz","fileCount":220,"integrity":"sha512-uxTpuGfWeqxYyO2khlhGd753ITAqWuHDBxL4dPlrQF0LZTH1qa9VmqCt9aalAVnNAmCm5qFSFp6AP49rWLqfFw==","signatures":[{"sig":"MEUCIHMnBJD44p9tAhm5tgfLwpTmi2NqIe3CVzoH2nZ8nipgAiEAzDZrUDqL4Gb7xCt735Qvu1v7hTdchKw/UA/6YQvaGQ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"93c33ebc07d6b4b8586d1e1114a6a8fd7d87599b","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.19_1752809244722_0.5840578929853975","host":"s3://npm-registry-packages-npm-production"}},"0.4.20":{"name":"@nodeblocks/backend-sdk","version":"0.4.20","_id":"@nodeblocks/backend-sdk@0.4.20","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"7e0c772f3b6d3b6a2133175ce149af6d05bdd722","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.20.tgz","fileCount":220,"integrity":"sha512-ep1xO+MbiwJNDw8jnhPLeO+HDirDl5twC3oyQwVX9mRYll8FE+afuvvEnSee+OIW3mng4WwxDuHhxDSpEGRllw==","signatures":[{"sig":"MEUCIQCaWy+PStzxWR6oTWHmkw8xXZPMPDLnDea7MuAZwGNdEwIgHi0LyqPv545fUKKZ66BZekuObxWSkAzrqPyQK20pIVU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"ea313765c7b2d4efd939ed4f1beccac9e757682a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.20_1752809300316_0.5799191451247179","host":"s3://npm-registry-packages-npm-production"}},"0.4.21":{"name":"@nodeblocks/backend-sdk","version":"0.4.21","_id":"@nodeblocks/backend-sdk@0.4.21","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"a8bd3021c9d56039db47227fa189c87fc9e43645","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.21.tgz","fileCount":220,"integrity":"sha512-bwYLuzAnUqbh+6PUKKUSCDlyeJUM9SdjVbefD/g5F0/iiKP/5QMr3f73qvdtnh+sHgAq7QhETGhqJKqISBkv0w==","signatures":[{"sig":"MEUCIB9Tn8lUJMiZ8n+Ixi/ZJzc/q5dSE6J1UCCiIIWCOxZDAiEAuRBwYugx8AWFsiArRV4izgnPAjeyg8rdIfSoQEWdxfY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"03f97a2228a7aa8e9734030640cad980b7a16c4f","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.21_1752809369494_0.35962662663474587","host":"s3://npm-registry-packages-npm-production"}},"0.4.22":{"name":"@nodeblocks/backend-sdk","version":"0.4.22","_id":"@nodeblocks/backend-sdk@0.4.22","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"66d0d67d558bd71e21af1c081181cc073bfc676f","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.22.tgz","fileCount":220,"integrity":"sha512-5vzgwG7b8jjeESIvbqgRsXdUPHAE2xOE1HdLNHIJuk6ONY9PNAioqkDrdXRkJ8DjiMXuWGCnFvj1ywHqHNNKgA==","signatures":[{"sig":"MEQCIEos4yQGO8IIgV7HU5Z7E4c/ccXETH0LKsSoXKtdYzgwAiBKqsgPq4UtjNnji4nIVy/i2Ajow0XP+SnMmJixaHCFww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"2f96550c0f9c4a92ffd4eee5060fd6b93d3959a2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.22_1752809435057_0.7053427865767163","host":"s3://npm-registry-packages-npm-production"}},"0.4.23":{"name":"@nodeblocks/backend-sdk","version":"0.4.23","_id":"@nodeblocks/backend-sdk@0.4.23","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"858baaec99231356047429bd3bda548af7865e0d","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.23.tgz","fileCount":220,"integrity":"sha512-Nd//sWYO9gT3NlNFhHud0+WUbOeRjHJrlXGscBWNtt4q6YCRhDHojvw4+d3GQ4PFKG8q1Lhnog3p3ySIjQaiuA==","signatures":[{"sig":"MEQCIDsNpwoHEqAM3yqy1xAL5VPnbFblz16elyx97AWC1cA3AiAuVH2IgiFBFS7FYS5VR7bSvBu8LsthV6TgGw8s6031pg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"e0b18a03a560f4f189ab7d7defc5a27fa32c3ade","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.23_1752809520698_0.8451155081420516","host":"s3://npm-registry-packages-npm-production"}},"0.4.24":{"name":"@nodeblocks/backend-sdk","version":"0.4.24","_id":"@nodeblocks/backend-sdk@0.4.24","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"71af8668c54ec31a14f6a486af843d5eecda3b37","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.24.tgz","fileCount":220,"integrity":"sha512-TGJUYOWfqlaDp4H+WNcWQZHeqtllhjLmIWk13B/3ySNjGrMMYd974jdGfDjhGjtt/oNQ364scW1csRqPmgt0xw==","signatures":[{"sig":"MEYCIQD7RsQ9+eFno/SoR9SfQJjrPSEUxr57FNwZpW81JzDeqwIhAJCiQ3Ncc/VID3s/TgSf4+O5+Bl95dOU1s1sOOeHZYwZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"41362990b3fab07ce99568a1bde73a2268279d6a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.24_1752809624697_0.4616038940455096","host":"s3://npm-registry-packages-npm-production"}},"0.4.27":{"name":"@nodeblocks/backend-sdk","version":"0.4.27","_id":"@nodeblocks/backend-sdk@0.4.27","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"6f0edb4305674c196742b5ccd9ff9d8c13e7c99b","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.27.tgz","fileCount":220,"integrity":"sha512-5/wxqA9iPV3SHsnkseyBM29Mr0jwoC2ShR31GejYdJx41YaR/NSjDtz/t01CjUFO/bZfRdWI3DKaT95C31BLmA==","signatures":[{"sig":"MEUCIQDhemgt///4subyIWtuaXOYouY9JiWjlNa96rbNEg4noQIgKKokculcIjqf7Oyd2YBI5RO6tUGT/6QRFsaQnpdtthQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"2b79909185bc4a246b3fc1f9459d8d8519147d07","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.27_1752809732940_0.1784949754339702","host":"s3://npm-registry-packages-npm-production"}},"0.4.28":{"name":"@nodeblocks/backend-sdk","version":"0.4.28","_id":"@nodeblocks/backend-sdk@0.4.28","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"f8215c88df23a9165faade333b04ae104df349bb","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.28.tgz","fileCount":220,"integrity":"sha512-ml50+XvScUHn5g5LQyhDMKmA5msREmhI8P8iStCwGh+ggxR3bcXP5MjBiKk2P/T0hcdl9R/N3EyNxWdmFI00Rg==","signatures":[{"sig":"MEYCIQCSKSufHpAoE+8Kywq5Bz8AaaZzq6u6v/Dz8Pl9rfPTQwIhAPpkBQl9NLiBw6c0vIdM5+5Od2M0NqvET65EbVOMfJ5g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"9505bf4499c941c00cc8c34e6d52e2c4703e9919","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.28_1752809791037_0.5898039586209067","host":"s3://npm-registry-packages-npm-production"}},"0.4.29":{"name":"@nodeblocks/backend-sdk","version":"0.4.29","_id":"@nodeblocks/backend-sdk@0.4.29","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ac39f564e0304c1d808d4afe73de7d5a8b7a0ed2","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.29.tgz","fileCount":220,"integrity":"sha512-qyxD2SbnnXJSSSvouLHxQsJU9HQT/dFzl0JZhIXp3hT2SCTofflE1VtdfjGOUlD4b6fQ0Q3M+NKzhKHjPNlUcg==","signatures":[{"sig":"MEYCIQD8ot4SPEyQTDI2ytu19ZQ1qHZ7Y5gXip3pwKqcCQs3lAIhAJ4hmRylBucQVE7z7GHGYnmDADA7/9uJPj0MkGUxmYex","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"29f988bf72151755fb831f5c4e06aca01ccf9024","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.29_1752809863878_0.08023982259932683","host":"s3://npm-registry-packages-npm-production"}},"0.4.30":{"name":"@nodeblocks/backend-sdk","version":"0.4.30","_id":"@nodeblocks/backend-sdk@0.4.30","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"5dae89915d152dda6814efd60e035880150fb25f","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.30.tgz","fileCount":220,"integrity":"sha512-pS7O9aIiSU0fAcoFTJJVRMT7IOnzz9TOarqaZbxdFPy/PkeU1mpKiw5PjPGzD7919stMRpKR6TVeqKY4fMWruA==","signatures":[{"sig":"MEUCIQDZ/mNqloLe3F4TNbY4btUwkFA/79Nmhc5pQRrWrP34GwIgWHP2jUhHTg53vbFMlR70v7VQynAidriwNxyZBCeSoJ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"b844c1f5ba002aed1ba4048f2d3db9f95b13f7c3","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.30_1752809939851_0.2639647064135062","host":"s3://npm-registry-packages-npm-production"}},"0.4.31":{"name":"@nodeblocks/backend-sdk","version":"0.4.31","_id":"@nodeblocks/backend-sdk@0.4.31","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"8d6d2cdd032ee3f7029c65dc10a1ffe89fec01f1","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.31.tgz","fileCount":220,"integrity":"sha512-zPesP1YZ96vywRWo29bmp4HMpI69RVrebeVp2VV1WZZ1DlZe3ZlWz+g8zjMVC7WTe70J0CN/TAIgd0qiqEmElA==","signatures":[{"sig":"MEQCIA+l5eLQMx44mwD0kmBMq1JWEF42rdi0bscOE1t47gL1AiBbU89N5EQuf++W0w/FnNJTUUs9u/vqVccmAQBKH29cDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"eadc50ea4567aa37f8ff14ab63e37581a3dff84b","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.31_1752810045113_0.38109475704491835","host":"s3://npm-registry-packages-npm-production"}},"0.4.32":{"name":"@nodeblocks/backend-sdk","version":"0.4.32","_id":"@nodeblocks/backend-sdk@0.4.32","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"a9af2f998a1df924950e497a4a93f6f6a074138c","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.32.tgz","fileCount":220,"integrity":"sha512-rwcqiQZvHD/zbzDP4Y/TNxAPaB2zr/KKoa4+Gz7NOjiiPp4ysnM4dER+V+Z5lVN8RXYG6uvFWrn+O4Q+4lPqTQ==","signatures":[{"sig":"MEUCIQCtFQkKlyMhtXCJ4IQxk6LR68Wj//n2HCx62MOzMY+mqQIgTIxUCZp5/FLDTBh96Afdw/LbtPEsT3E1QVE9lXEjzqo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"1fbabbfc1acb47984f377ce8eb96d24ad4218166","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.32_1752810096220_0.7105173253357262","host":"s3://npm-registry-packages-npm-production"}},"0.4.35":{"name":"@nodeblocks/backend-sdk","version":"0.4.35","_id":"@nodeblocks/backend-sdk@0.4.35","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"90c34a20e16988e39dcc3a4f32ce58cace9f5393","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.35.tgz","fileCount":220,"integrity":"sha512-9Hdt9s2Geb3gOGOFnxqZ+7V7Ttvw+BFpDnfocYS5sqH3UpZhZW1HiqjOUVMqoEbRk2ehCReM0UC70nmNPX8MWQ==","signatures":[{"sig":"MEUCIE0eEV+eX7BHfvvtwDWroh4cR5dg63IvGO/ZAmWZADaNAiEA8nf35eaRzx9WW51PIucmKkphgcbrx8TH5ljE0iZ06KM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"eb50e667803828b62b722d91a16f52b4f1401df1","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.35_1752810231914_0.1671401979832563","host":"s3://npm-registry-packages-npm-production"}},"0.4.36":{"name":"@nodeblocks/backend-sdk","version":"0.4.36","_id":"@nodeblocks/backend-sdk@0.4.36","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"f230e59913b6b4166bb98909c2856bb7ff793588","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.36.tgz","fileCount":220,"integrity":"sha512-tOu7l0XZMD6sAMcL62d4WLQqI/+hFe+7mRyXbTLHF7sqrju8Skckpz1OlJK1P03LbRFzVAtK+lLH6KuwT6TjNg==","signatures":[{"sig":"MEUCIQDdlfPc+0/G3vL0cBSAKgX+9p8rANKr4osgVfexDb5pVAIgNbe6q+Zno5Cx09X5f2h1PX7zPmLuefupt6V7zm5HDIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"fd955467b238eadafc06209631dc4a8fb896c8b2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.36_1752810293108_0.3728579918644648","host":"s3://npm-registry-packages-npm-production"}},"0.4.37":{"name":"@nodeblocks/backend-sdk","version":"0.4.37","_id":"@nodeblocks/backend-sdk@0.4.37","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"c3dbd949b33ad79327cdbe473688df24d2f710dd","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.37.tgz","fileCount":220,"integrity":"sha512-oV0DDCDn91uWLyOyZcuSxxUjOsc4rfoSPiz1f4t5n7lWpzYTed9JInxeyTL/cRr7KtDwiRkOanxySGV/CZ1KdQ==","signatures":[{"sig":"MEUCIBKGn5721LtlWlZMW38Mkqb4Rfw3N8NkmLNZ3zTOCWKqAiEAhFrJmvSnjTfiRH1M08McD3z0w/WSya6jfLNrwavKTs4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"53f68a80336821240ab1e86b5d8734058825eeea","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.37_1752810355649_0.8571476895145886","host":"s3://npm-registry-packages-npm-production"}},"0.4.38":{"name":"@nodeblocks/backend-sdk","version":"0.4.38","_id":"@nodeblocks/backend-sdk@0.4.38","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"d09ce2c9aa4047d32ce69f19d954c93dfabc3ae4","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.38.tgz","fileCount":220,"integrity":"sha512-5z3S89Oq3/C/MVuJasfjJ5Q0yoWuEcbXf8A/zzoXephwxZveQKuWnECQNFnd903hIr2Y/q/6hvBnOg3S0wd5uQ==","signatures":[{"sig":"MEYCIQDxr8WSVnVP8gnIL/9gSYMf3il4NjbFjvK3lVNmvh54kQIhAK9IJSHSMsJ5/1Ixn8QZuTwU+rzcdh1dT1FCuQc1NglC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f1febebedc26f5589ea433a12e93b223d40d219f","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.38_1752810420500_0.24446230190934504","host":"s3://npm-registry-packages-npm-production"}},"0.4.39":{"name":"@nodeblocks/backend-sdk","version":"0.4.39","_id":"@nodeblocks/backend-sdk@0.4.39","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"cd7d1ad80ce8dc02dbf4cc6341b91f6f46a8114e","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.39.tgz","fileCount":220,"integrity":"sha512-eRFA3hPYYh5+dLqsh6b/Al8+pfjxijFz40+VIu+AFU2VMxz7BnrndqaQc3aKc8aIkSQRe4AyvzQPL/BDt9889g==","signatures":[{"sig":"MEUCIQCfWi5dt3EpV3GAfYhzGd4/2blr8hPJKd0ND90gtRSKCQIgFQL5dlZv67GXpxfIWZX+p+L3Nkoa3PoEwUNn/hUJUlk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"89e9b66365df57ee65d32f8647f30edd3e21f61c","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.39_1752810507977_0.92960791068654","host":"s3://npm-registry-packages-npm-production"}},"0.4.40":{"name":"@nodeblocks/backend-sdk","version":"0.4.40","_id":"@nodeblocks/backend-sdk@0.4.40","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e0a8465e6502006e7f0afa3e221285b955e72b56","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.40.tgz","fileCount":220,"integrity":"sha512-6TEzVTAOAH71UiKcEoOMtlZD/OSGazi24L5aI+CF5Gxvp3NOcA/PBm3tBeyXkQ0+1Ff2AVD3shYIenAHSNLIbA==","signatures":[{"sig":"MEUCIQDieLBBUCXJAJzDZH5+kreY/FZb5zn8iUM9c7EKz1T9vwIgOjaEHQjVb5PF2ZIErxvZ6qzcAXiPriQzhSvPuSKK7og=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"c30f75aa6463fffa6f955ddbc12a60da07beaac0","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.40_1752810591971_0.7279829161897571","host":"s3://npm-registry-packages-npm-production"}},"0.4.43":{"name":"@nodeblocks/backend-sdk","version":"0.4.43","_id":"@nodeblocks/backend-sdk@0.4.43","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ff785f04be155d3027925320938bf07490daf1b9","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.43.tgz","fileCount":220,"integrity":"sha512-J4CI0fwX+c0qjFNjXqzv8T8mzeKUaZbm4R4pUiOsv/7CeF5RjBygKj80KYnW7j8CUtdFJgyDn0AFEz/WPi7Q4w==","signatures":[{"sig":"MEUCIQDFEyz3oUvBLcZgEOeaZWrApKktXyBj6s1qV85EF13D2QIgaCiW95gccgqA3MorvGiGau3sXvcYW3CH6YTEzVoT76w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"af43182e25ea73df20061b4ee5826590d9d76b19","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.43_1752810759828_0.819447844003476","host":"s3://npm-registry-packages-npm-production"}},"0.4.44":{"name":"@nodeblocks/backend-sdk","version":"0.4.44","_id":"@nodeblocks/backend-sdk@0.4.44","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"4aff3d86610aae0edeb31e690a441e168c36e908","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.44.tgz","fileCount":220,"integrity":"sha512-LfQXohBnUk9w3ijncKIeCCB2uaeIPu06wiBfTpWzy68vXaHfwn72ES3noSSmAC0tDnNyDtMDGsnG1I2439L0cA==","signatures":[{"sig":"MEUCIQDi987Iq+/oIxP54P+I5I58McMXZ5dWQSiOS6kS5NzAqgIgaxozKGCbFs7SKZT94qTvgQPOnlSbXMOivo9xd+idyy0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"c1eda05bc36ce02dca2d2fffe616e519894e22d9","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.44_1752810842177_0.45850640017875866","host":"s3://npm-registry-packages-npm-production"}},"0.4.45":{"name":"@nodeblocks/backend-sdk","version":"0.4.45","_id":"@nodeblocks/backend-sdk@0.4.45","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"467f9fbb49c10fbb314e768ed4b4510b40b1eb71","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.45.tgz","fileCount":220,"integrity":"sha512-Hotf9aTIfJG5zBrmWsbXcblfjyWo7pCIyt0iL3F3Xnt0bBhbkG6YSESElPmmFSAxgHAmsonV3kEtF7CidjkgZA==","signatures":[{"sig":"MEUCIQCT+5iFQqXxb3sDEjC6xWYwr22+cK9gAMjbr2IXM7ef1QIgUGoARupT/3jIA4q6w9mR+s2TTb6T6Vcj75gnCvcTiRw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"7e17a730fcd4fb5e276317f82419eadee8e39344","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.45_1752810946714_0.4865155530689358","host":"s3://npm-registry-packages-npm-production"}},"0.4.47":{"name":"@nodeblocks/backend-sdk","version":"0.4.47","_id":"@nodeblocks/backend-sdk@0.4.47","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"41f501a69b58812487f4a977c65594448fa8e3f9","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.47.tgz","fileCount":220,"integrity":"sha512-p1uW4O+C+SCCwxnoC8KhBjJAjfljw+3JXfJ0ozIymYGbpwyp0jvMH7OYag8WfXNsJSMVm7dp1KfRALPHH1ecgg==","signatures":[{"sig":"MEYCIQCN5Y+TtzvX+svSuuRuCp/dqpAJB124i/4wkrNnqGmxDQIhALORWk+dbtVrNjbvoJuUj7g+i4Fy1FyOrJbL1O398Gfs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"0266b56b972ed6f502e594006cc3f72c31ee31bd","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.47_1752811060047_0.8283369167933288","host":"s3://npm-registry-packages-npm-production"}},"0.4.48":{"name":"@nodeblocks/backend-sdk","version":"0.4.48","_id":"@nodeblocks/backend-sdk@0.4.48","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"72046b5eec49e89a2d50ce53d8a60e7f2750555c","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.48.tgz","fileCount":220,"integrity":"sha512-xAPSBduqgEyGnUBCnropMrPmYLGtNsHMYFBeqaToUEqvPXalHw+0zJiD6uan9fq5DlDXs3f7wNDf5Z1/gRrP1g==","signatures":[{"sig":"MEUCIEoOWNQkIko8+bcPB6unDXtjAwDKUI8Cf86EcZPUufpWAiEA+uEQ0NzZwMtpcMpr6bP2QeXLBsFoXV7+bgOItyoTLIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"d968b6dfb3b72aa260030ddcb3a7059874e1fb06","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.48_1752811164845_0.150072834588296","host":"s3://npm-registry-packages-npm-production"}},"0.4.49":{"name":"@nodeblocks/backend-sdk","version":"0.4.49","_id":"@nodeblocks/backend-sdk@0.4.49","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"6e81f28bb945ff12e20ef06ddd79768bfcecf75f","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.49.tgz","fileCount":220,"integrity":"sha512-cRyXTHSNEBZnPlkT32cFBgpvsSV93biAMvUlpeJ4mVpng/jskaLYLpOWtx2ykuZ2tq1dAt/fA3DDUmGR/VDgzw==","signatures":[{"sig":"MEUCIQCej3SOa2GvTAE6hcq+E9KOofv5A77y1705HLSLJDON4AIgWa2h20FLSA6wkuD9B2OsY1/3mxN59+fJakdK9uPD8NI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"94988918357ec4f61a01b9bdf09de833d76d340e","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.49_1752811199435_0.423756901869937","host":"s3://npm-registry-packages-npm-production"}},"0.4.52":{"name":"@nodeblocks/backend-sdk","version":"0.4.52","_id":"@nodeblocks/backend-sdk@0.4.52","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"93829ba12c661cd004de933f131913cca5d7a499","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.52.tgz","fileCount":220,"integrity":"sha512-E+rFNVWAHR0qWwWVBhBNR9OCbUwygA8+NzEWZELcYC72vDJWOZ7qWT4/XywrA7ZbsUSA83rPEngZaLTv7I5NIw==","signatures":[{"sig":"MEUCIQCabu/j+NYcSYyo5xcZqYaPgFbR+n5zE8tN8d2wvBp8dAIgHOdzOzc2kUnzonX3JwftDhztj7CXiEyUGT92H8O4SAI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"10c9371c7735fe98911c167e628b697a5ee14af2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.52_1752811376914_0.16821810932399295","host":"s3://npm-registry-packages-npm-production"}},"0.4.53":{"name":"@nodeblocks/backend-sdk","version":"0.4.53","_id":"@nodeblocks/backend-sdk@0.4.53","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"7a2b7b8e8709bc250a1be4d87831b739dec4c137","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.53.tgz","fileCount":220,"integrity":"sha512-Q9+Gh2kMLzIt7VEsHBm3NedC9zvDr634dlztOWb7+0Xq5uIX2mURy7kCYltp3bficQuCB9yO1iBAIQAwL6K1Aw==","signatures":[{"sig":"MEQCIG17RT+KwGDEtwwJNPdVe2LjEDwysBYAT35pywQACSHGAiADCRlkp4Q/to5FgC3zq5ISmX7GclH1f+NI8Rm8oZFXhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"87f64d1f3f6009d88d26f74bae17f523c33a868a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.53_1752811435222_0.1788135953219896","host":"s3://npm-registry-packages-npm-production"}},"0.4.54":{"name":"@nodeblocks/backend-sdk","version":"0.4.54","_id":"@nodeblocks/backend-sdk@0.4.54","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"370ce67466b580175d3ae87012c6763f8c8a8723","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.54.tgz","fileCount":220,"integrity":"sha512-s7AOtX1gVHMiDuy/YfNW8pjEmGostagqJpSc6IJQ17AEgl3AMlhVfQYXNNu+GP9ODXTc3dE0nXbG18zWkgk4tQ==","signatures":[{"sig":"MEUCIGhQDcyptJxd6ntKtqXP6fSqkQ4r8xaE5rhBFuRWNvXlAiEA2Qpz/gDpRb76fHgZjcpvZhf3NeUm9Gj01UX5OIUnR2Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"d08f9d6d916e8c8f943810280e8094379e2e2546","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.54_1752811499428_0.8202036682063416","host":"s3://npm-registry-packages-npm-production"}},"0.4.55":{"name":"@nodeblocks/backend-sdk","version":"0.4.55","_id":"@nodeblocks/backend-sdk@0.4.55","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"7547e8845726c24463ae83da2b10ba4558d772ec","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.55.tgz","fileCount":220,"integrity":"sha512-IKh4TQL4gYmNMEpmw/9UtIEgN+lvf95rlZrPduVwtqiY/BcHeUsmcHkPbQLGixk4Eh/gGSPAjP9mHlbBQuogiA==","signatures":[{"sig":"MEYCIQCOlKCjUuxFmm9r13WfNyir8OlPVVoj6URcPlxdZVT4DAIhALX/fR/hAQyZwDoTsMvnbm8yd8v2hSzmXiUObTN/45T7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"7e846ff395fb4ad6ddacfa7690e4122d2c886f15","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.55_1752811566210_0.41289016526221056","host":"s3://npm-registry-packages-npm-production"}},"0.4.56":{"name":"@nodeblocks/backend-sdk","version":"0.4.56","_id":"@nodeblocks/backend-sdk@0.4.56","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"236b6d30badc71f47fb8b8670ccf0defc9ede2ea","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.56.tgz","fileCount":220,"integrity":"sha512-ERtXgrHW1xPN6B2zLs0e3m2hKY8lKoEPyQ2/KIJKSHV1JDg3WpxB1lMkvq+HzKVv+ZhSwduxRw9JnJCJfI+dtw==","signatures":[{"sig":"MEYCIQDCDuNXiVVgtSCY/cAgEYcRlBa3PAxCK1zENG7Ra832ewIhAJOPjpgn21pkWzk09vG58Tuzd5XX4kZk5G08fwBNw7CT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"13b7f1905fe25cc83f3fcdca590ff676d85ad31c","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.56_1752811653306_0.22704388193765235","host":"s3://npm-registry-packages-npm-production"}},"0.4.57":{"name":"@nodeblocks/backend-sdk","version":"0.4.57","_id":"@nodeblocks/backend-sdk@0.4.57","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"b560a7a23c30051250b923474b093b3cf3e4fdd8","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.57.tgz","fileCount":220,"integrity":"sha512-0kKH8nP1H4lXTyvVEBn0pw9EJCgkoY/ZTq2XMV3KVdrMHUBjjJKUVVTjPADxxpvr098mt8ZZpP+qP+7m5G3Drw==","signatures":[{"sig":"MEYCIQD7at6tjum+w9uWENjqBf71fuMnV6VHjStZJTiTxbZgTQIhALffMTkRT07AlCThDm9pSLIUKNbkUEDhiQuGb9v2Jutt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"23e5168b1236ff0d2b25af19918012fba739b1df","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.57_1752811739707_0.2781324358620425","host":"s3://npm-registry-packages-npm-production"}},"0.4.60":{"name":"@nodeblocks/backend-sdk","version":"0.4.60","_id":"@nodeblocks/backend-sdk@0.4.60","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"a6f4bbd3cb625d37c64eac73c95a98859ee47681","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.60.tgz","fileCount":220,"integrity":"sha512-K7NwHlo32oezjRAkiZUdvf/BN2JeH3ddeSgzZ/kLZ8fA/FEfbCIFLr2iY0kuKFFrLMOvBW+QIl3kpJnhtspIqg==","signatures":[{"sig":"MEYCIQD5u2H6jxhhTVeTvNotEqr9mRTjfXQluMv3qmyxvHWgOwIhAIoEgs5l0//SJXuZyKgaMG/YA1Pv0QZiZ/0QNN3o+9D2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"4b54b71bef7a08f15ae1c7a27d9c9b614e34e1db","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.60_1752811854971_0.9621963554354616","host":"s3://npm-registry-packages-npm-production"}},"0.4.61":{"name":"@nodeblocks/backend-sdk","version":"0.4.61","_id":"@nodeblocks/backend-sdk@0.4.61","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"757a645ac44157134f4d88df9b94d909ce8d46cc","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.61.tgz","fileCount":220,"integrity":"sha512-/0QCSxA9XahTDGgJh+8zWGJbFnrWIDUkjd8kCWh0K6w0lkqV1LCST/ovvCP5WFkLN1Y5ENzuIzJuYzDVGg0iTA==","signatures":[{"sig":"MEYCIQDv8j5DHa5UaFBiyBbyed8r5viMsNkvWz1M/blqLmYmPwIhAJIClQkSkYK/ejc6WM3o3AUBzwAiyFbC3z4xQ+d/kYhb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"43ce69f765e3a45d33a8fb2a31a2c2a894a835f6","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.61_1752811928250_0.9032905428859257","host":"s3://npm-registry-packages-npm-production"}},"0.4.62":{"name":"@nodeblocks/backend-sdk","version":"0.4.62","_id":"@nodeblocks/backend-sdk@0.4.62","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"61631594d07ac3c73a62a994600c3220beedb2ec","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.62.tgz","fileCount":220,"integrity":"sha512-x/Foi8JIdbhD6rsPt6CMOWljP+PukX5ldH06cpMA6k1UEPRcBSl3uix6IH0t9FBOuSpCvKm8sYIIp6JqKob1Pw==","signatures":[{"sig":"MEUCIQDDRnuuv6seY0XuzE+dqpSUT9G300FMNa0uwXGkWFSTwAIgEUXs8Fc6ttnxCEUyWQPN9giAJt/S49m/Fz9DBaes/qg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"8742ee614ba1d8be2bbcdd3cba44549bc70cdafe","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.62_1752811998693_0.43494651182779576","host":"s3://npm-registry-packages-npm-production"}},"0.4.63":{"name":"@nodeblocks/backend-sdk","version":"0.4.63","_id":"@nodeblocks/backend-sdk@0.4.63","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ede73580cba03718b7410bd4ecb91517f548858f","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.63.tgz","fileCount":220,"integrity":"sha512-XGdnGnjE2/B188+5j/8iSajMIk/kxWQMkkWfqcU6bVq0ihWXeQcCxLMNF0Gzlj5XaVmTLDHTq0WJbAZTHrKuQg==","signatures":[{"sig":"MEUCIQDV7CXB8KEpBDID4Ojz8kVanbuXbpmmqch4k7ULjv3r0AIgHkKDxNajU0zEJ+/93A9M5y1nK6+PILXUooO0xSiISYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"5a45fd3e44881a253450abca93466e0e90eaae45","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.63_1752812072634_0.637414823792019","host":"s3://npm-registry-packages-npm-production"}},"0.4.64":{"name":"@nodeblocks/backend-sdk","version":"0.4.64","_id":"@nodeblocks/backend-sdk@0.4.64","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"c45ab415ba7f6c1fe575eb02f2923c3617e7fa8b","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.64.tgz","fileCount":220,"integrity":"sha512-OXVkkLs4TNRZ8ME1cJJGbf/mBb/G9hjg0mwI91e4cM8ZerbAlsM+2tD5XS9w60YsPitdwWDRc6iGB76yOXx1kw==","signatures":[{"sig":"MEYCIQDXIrYAFP2cunGnZ+yQ9nT28xvgO1MewXllANmSwQO5HgIhAP1Q0svyGswd3dcjeyLlh5SuVmoNQlzNebMM8W3GzUVG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"7b4d2eb04bed4aca696b18ffdad75ed25e4450f2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.64_1752812138720_0.6215616312753902","host":"s3://npm-registry-packages-npm-production"}},"0.4.65":{"name":"@nodeblocks/backend-sdk","version":"0.4.65","_id":"@nodeblocks/backend-sdk@0.4.65","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"b65a64268044ba5700074cde1fc1d957116ac988","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.65.tgz","fileCount":220,"integrity":"sha512-3ZuyUsZ3fKI72YT/KS10xPLBZLKE9wVB09gbbo2eU9JEri+Q/n7xtjOqvRJrvaz0fTlCJCI5kKUz16qrWthRlA==","signatures":[{"sig":"MEUCIAuSs1q0nqKtIiG2PwRJVBjdK1WhmQ6E6A2PjkVovMP7AiEAsOeCE6sB0hi6HO+Y0lbzvM+8UMHenNnquVqhPzFvioo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"47b6563b8b98cb2cd8a524e49b6e2e4da4d5700a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.65_1752812235631_0.638268587692153","host":"s3://npm-registry-packages-npm-production"}},"0.4.66":{"name":"@nodeblocks/backend-sdk","version":"0.4.66","_id":"@nodeblocks/backend-sdk@0.4.66","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"2465675a3e95dcebf124f6dbb1e2f9253183c246","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.66.tgz","fileCount":220,"integrity":"sha512-8wBeawGH+cZiTF4B8d+ooSXvH7s6vhRcHzmr3nFdYtkNQH99e8/lBCPfHxFh/LOqVXg53U/UPdkuYUlO8qj9kw==","signatures":[{"sig":"MEQCIEl5Xv7nJyVH4P37quDBDnccdifMgNO9IuKg/wft/t5bAiBsy6n/idtGunMm/UiTb4zr6IU6ZB48plzvbsPO24x1/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"fbf07e3134099eccd5b2f10aff1854ce66c573ff","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.66_1752812270525_0.24971491155462955","host":"s3://npm-registry-packages-npm-production"}},"0.4.68":{"name":"@nodeblocks/backend-sdk","version":"0.4.68","_id":"@nodeblocks/backend-sdk@0.4.68","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"5fb8304c60fe0c21231d79cea523546ca573de3c","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.68.tgz","fileCount":220,"integrity":"sha512-nwg/bMJPc2n891p3eZGVOnJalMuVavFRuowIAdXG/v4NeGnomD/VWXRFt/nj4SvSoJEkVGbcrvIkquMdnkM4NA==","signatures":[{"sig":"MEUCIEaqtjDN8ao3sHKSPFlamNbK8yJ/hEu1VtT3iQqLOErOAiEAtAEJyLptmz+3zNn/ZuONI1qAxzquKIcwg1VWfq9QUG4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"3839ab122c0efce53f4dab37cdb8bb3523393488","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.68_1752812404041_0.15439896692656463","host":"s3://npm-registry-packages-npm-production"}},"0.4.69":{"name":"@nodeblocks/backend-sdk","version":"0.4.69","_id":"@nodeblocks/backend-sdk@0.4.69","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"68fa98ccc5942dd0f27a11753b711d983235da94","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.69.tgz","fileCount":220,"integrity":"sha512-TO59pM9q72hcad/Npq+jdLimD2zP/duGIAMxc/7/IcwBqZjmpoI0ircc/90hGMEoGXpHmS/caGlA1oxOuvDb4g==","signatures":[{"sig":"MEUCIQDf1yJNolqUXofAZkHCHjyXz+p6IYK38iLNLKn/iHUbAQIgeM1dzl93e3cqJiFNfnyvuxVnDcYD58n/lHd3aElIFb0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"8b83484e40c3dcb19735b0a826ce446141a83496","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.69_1752812457981_0.2257091901295154","host":"s3://npm-registry-packages-npm-production"}},"0.4.70":{"name":"@nodeblocks/backend-sdk","version":"0.4.70","_id":"@nodeblocks/backend-sdk@0.4.70","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"a7a6f740ab3c73949be004a9ee0fe65a0167b3aa","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.70.tgz","fileCount":220,"integrity":"sha512-9EWfBWfgq+RyEMyqeyPd4Ss2jzh/HKD7oahzh2AFAIgEKBR3Eor2SZD7bc1Oc6M77OAvxiNLiT+qiCjIqiirfQ==","signatures":[{"sig":"MEUCIQCg2ttWUZqMmUpdkrThNzR08wL6rFgzKB0zN/5rzpqegAIgR0o4tvFcdKq9MZG0Z+nZGOD+ne9nLRx7hMs+YMutD4k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"ab6baf3a27d0b49c9eb9b0219b88561d97a09c29","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.70_1752812534805_0.4160810283716545","host":"s3://npm-registry-packages-npm-production"}},"0.4.71":{"name":"@nodeblocks/backend-sdk","version":"0.4.71","_id":"@nodeblocks/backend-sdk@0.4.71","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"5d91e72a27a8d53f9905c6052f87cd88c03c7a71","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.71.tgz","fileCount":220,"integrity":"sha512-30qvqBlmwINKQQdjz6RMybXTquifS7vLmQA8ybA4Bz2jyBqVfBSeurw3pBhdNGfT19rgPAx3ZfM67P8lQ5POVQ==","signatures":[{"sig":"MEUCIEVTG0nbjAjnm1oMaUl4n70EfdrduhUCH3u88reS6OZCAiEA+96BVpmgTM9ePWP78k85aV+TSdsZXqweD7PYPMImseQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053546},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"7419f8a9d67af63c13bf67bb004bb66b03ded332","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.71_1752812611466_0.4117269383605109","host":"s3://npm-registry-packages-npm-production"}},"0.4.72":{"name":"@nodeblocks/backend-sdk","version":"0.4.72","_id":"@nodeblocks/backend-sdk@0.4.72","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ef51f5bd548c2d2ebff75b3533ae5b0ea14ef643","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.72.tgz","fileCount":220,"integrity":"sha512-AjH5/jGGLBkbf4wlg+foIJ9mmWSHJuc7Ly0fjS95qTklAJH4r70CexMMxi/wWCKorGpE21V29mzzPz+cVdcgqQ==","signatures":[{"sig":"MEYCIQDjh7/hI8liRHWl6nk02K2FXlj5y/9/+3GZOMCV7xyArgIhAJtlsQrG/Brb3YHNi+lKZXRhNZKVKIELR7HUpelC0URu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1060764},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"9b6d38f9a8a3dbc8329f11e46947dcce503f42f6","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.72_1752812723016_0.5725286250908959","host":"s3://npm-registry-packages-npm-production"}},"0.4.73":{"name":"@nodeblocks/backend-sdk","version":"0.4.73","_id":"@nodeblocks/backend-sdk@0.4.73","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ff44e3b49414be85672ad2b8c8285b9dce19f30c","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.73.tgz","fileCount":220,"integrity":"sha512-IlSShphUUMCcUpxLbgShWFjGn1ACtgEzEd+QX5Gyz7nX1HJ/9T+lsFPUzQ6z6IyThFKW+Dkdlwy4UE9TQQTL6A==","signatures":[{"sig":"MEQCICoOsSyFEJeSArU4V8kv0aGNZffQruMLVgblP87Ne4mMAiBKluaCgsYo1JuYdg/vfl1vzCZMM3YL74TVujs1AXXILQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1060764},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"2e9a1b016541d5b7d029311a3e20964c4ec0140d","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.73_1752812759887_0.29473130047611673","host":"s3://npm-registry-packages-npm-production"}},"0.4.78":{"name":"@nodeblocks/backend-sdk","version":"0.4.78","_id":"@nodeblocks/backend-sdk@0.4.78","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"54628474c938a3ef6e4f97cc6cfbcec71370a0d7","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.78.tgz","fileCount":222,"integrity":"sha512-YHmiFilN7jDBUJEsM52634bvSQ2Ov7vjg40plj9uDG+QBZElVTp1w2B/8oqODBTW7JJmLkr6olvOWsgZ2+eHkA==","signatures":[{"sig":"MEQCIFE+8Qk+fmOwO32/jc+HcsdhcoIKtrjS9/jEQkckRS1EAiALAVi6T6mrgFGIg715yNrd5XsOlzq8RIQrTUpbDiQSMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"10902043f4036fed65dbac667ea5d581cb0aa17b","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.78_1752815452827_0.7254681877861111","host":"s3://npm-registry-packages-npm-production"}},"0.4.79":{"name":"@nodeblocks/backend-sdk","version":"0.4.79","_id":"@nodeblocks/backend-sdk@0.4.79","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"cf3371758eb8bcba3b496b669427d764f83bb586","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.79.tgz","fileCount":222,"integrity":"sha512-2BguGDnJft04p15KFWeR+vrf4X65k+qM4nuXv4BgdVzicgy5qLCINr5oDYcEpZOXHfuyOKuDdX3MAVtkOqimBg==","signatures":[{"sig":"MEQCIDpMaKLCyPxIYttmCoOkVNgQk8t8KbTc5t7vA+nnIA+uAiAZhbUZnxACifyk6iGrBfX9n2I3lwpcpc0viMnd4113+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"e6e35cd6b666f02646491918347163f003bcb844","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.79_1752815514247_0.26393229556647646","host":"s3://npm-registry-packages-npm-production"}},"0.4.80":{"name":"@nodeblocks/backend-sdk","version":"0.4.80","_id":"@nodeblocks/backend-sdk@0.4.80","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"5f5b53519c6c36a46711b2007933cc84799e3d5e","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.80.tgz","fileCount":222,"integrity":"sha512-JCJhMUSXMQC22wubImPa5mb8KWXe+xkgjC7hEbo0lCPoY1bwuh/taiuVsvHDP9ZlPoKUjbGsRkhVJ/rhAezT+Q==","signatures":[{"sig":"MEYCIQCTCuCuGWIi/HyIJzA3jWKj+BswNhlCS4ck/BBlgm1X+AIhAN5TMCFU33dhThYNSl7LHdBLfx9rIiyXDAcj6bMVv8Mi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"6425638fa2f928a8246cdf48a81a7a51ba27609a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.80_1752815573916_0.45675874034530595","host":"s3://npm-registry-packages-npm-production"}},"0.4.81":{"name":"@nodeblocks/backend-sdk","version":"0.4.81","_id":"@nodeblocks/backend-sdk@0.4.81","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"fde4143b6de189159249c0894d9cf89c3fbfb6dc","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.81.tgz","fileCount":222,"integrity":"sha512-QCi6u/60JtDe3VAT86Z2BxZJCfGyI+LSkN2WZIlCzYiw3asfBBfSM14+zZVopp0jVMdU21ZlcTor1E7dhvgfng==","signatures":[{"sig":"MEUCIE+45MlTslqrrxh7D4w8C38Ie/Q5yWfKmwWUH1AQk9G3AiEA9MQaCDGESAStQAaEYonYk9rJDAW65lWBMDo4qz8Fas0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"93ed591ac5dfb590bf790942c4918dca5ea100de","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.81_1752815636831_0.336373576088163","host":"s3://npm-registry-packages-npm-production"}},"0.4.82":{"name":"@nodeblocks/backend-sdk","version":"0.4.82","_id":"@nodeblocks/backend-sdk@0.4.82","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"a85ace5af5c7bdf79f7f235b91cb66f8ee9b96e2","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.82.tgz","fileCount":222,"integrity":"sha512-C7a2CxJQwyIS6f6VQ8G0LNce/j4q6TjqAIGGB8ErIXl3vspsqsA7fDyBCw1nsLQbOA6kNVr96D5YnH1KM08aLA==","signatures":[{"sig":"MEUCIDMN9GNCD6kVK3XTMf5bQm2VcslnTTCC0/HODawRr6zGAiEAkS3H7nEx5sRxeqyPTRk4k+bmcv3d72k23mXToqJwm28=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"6249c3d7a0298bbf85a80ff4de6f7c7e59813f61","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.82_1752815752860_0.7347337412618731","host":"s3://npm-registry-packages-npm-production"}},"0.4.83":{"name":"@nodeblocks/backend-sdk","version":"0.4.83","_id":"@nodeblocks/backend-sdk@0.4.83","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"1846cd824d544df6dc883c1844754a3c715463c4","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.83.tgz","fileCount":222,"integrity":"sha512-81lRCtKUPNiZ9Tk++JC1ntCvWaE3iSa0X8k5Bol+sRo3zSr5tyi2hIk2UM3DIZ8xB0Mxb/zr8FpBVxZa29JYvg==","signatures":[{"sig":"MEUCIEjjt6NwZW3rdwfiSBt+fa9uKvwc3biI48JuATDk4LRNAiEAustGpkMgsfh6BJNZ1pk7EWqdcGI52onHHy9SLtOnO/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"6f79b4a22d5771ba4baeb91154002eb3954393ee","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.83_1752815818414_0.9349605025937942","host":"s3://npm-registry-packages-npm-production"}},"0.4.86":{"name":"@nodeblocks/backend-sdk","version":"0.4.86","_id":"@nodeblocks/backend-sdk@0.4.86","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e6db38efe4394af5832d1fa822b8da649aa1b604","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.86.tgz","fileCount":222,"integrity":"sha512-YZ2uiIKu8eXYLTtv7EthtgD34BxBoKfLr9TPl3mjme1hgMPOJuOX15hRmcGq0hBBvo3EwvYxhypaP6+E6y6gJg==","signatures":[{"sig":"MEUCIQCfUfWXCE9axWivNhcMB5H7psXU3pQ+O4bNVQuYsuWNUQIgCyHSL94ERqqFubYP+spO+b4+LhHGWhNP3Rfi42X7zcY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"1aff3b7d2bf263262eccaccc23f8c316883faa03","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.86_1752815977000_0.18674470368423868","host":"s3://npm-registry-packages-npm-production"}},"0.4.87":{"name":"@nodeblocks/backend-sdk","version":"0.4.87","_id":"@nodeblocks/backend-sdk@0.4.87","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"b24b36c520bce04fba50d9aa614287a3a38d170f","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.87.tgz","fileCount":222,"integrity":"sha512-mFUDdsKl6x19zEZBZZYiUsJbNmHSzUhc/SBJdB8w/JlWy8mHXZgDGmjuxVYBUxq/y+O8dzLksJE/i+IkJV/bjg==","signatures":[{"sig":"MEQCIHGoEoz9jEqQgBjl9YRUSUhj4o4pKWVp1dPUI1kBT0RDAiBvF2nP+5gb3chjWAZTqsfFSEW6WwWn8MuVvq3LM1btWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"ed594ff5be818b654983058e86a15c131aa46d29","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.87_1752816033751_0.03466248589688359","host":"s3://npm-registry-packages-npm-production"}},"0.4.88":{"name":"@nodeblocks/backend-sdk","version":"0.4.88","_id":"@nodeblocks/backend-sdk@0.4.88","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"5818d052b7e88fd07024c6499a6ee23e3e5e8b22","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.88.tgz","fileCount":222,"integrity":"sha512-rEsER4gxPRECq9cRlkX4FYHpJExQh55+wZJReJiBQ4MAA25Noc6eLjiqJfV/u0TPUlzMvt9dqHAP2UzPUC3SXQ==","signatures":[{"sig":"MEQCICWcB8ZsazESeNdIciQNX3bee/2FHUUTu4MRwebuvTDlAiAUmE+MJRoLqKoyogTVlvEF7sDrvlvxi5TBs7xO7yO/xg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"ca8f146e0d7eed4ec3015208539c1e39b77b2537","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.88_1752816108908_0.4278183906134445","host":"s3://npm-registry-packages-npm-production"}},"0.4.89":{"name":"@nodeblocks/backend-sdk","version":"0.4.89","_id":"@nodeblocks/backend-sdk@0.4.89","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"039e888cec1d24f9e788196e3fa8ebad3c83320d","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.89.tgz","fileCount":222,"integrity":"sha512-NN/CMSdI43E07vhakUgJNVn0gyPuFxhbILITpBPJ4jHoGJMQWtclL5DL6wVbDILcW/OKOfPuZa6Ni+1uD3dyxw==","signatures":[{"sig":"MEYCIQCh0MQTcoU2TztjhHi4eA6wUJn9T3EexGewP1h9sIMa9wIhAJPFnlTEX06w7sAMdCWJ4VurYDXGlW1g9lG0D8oXOIXY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"34d56708b8b792bc38b647ed4f68ba12ad19e8f4","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.89_1752816142717_0.07314222819934457","host":"s3://npm-registry-packages-npm-production"}},"0.4.90":{"name":"@nodeblocks/backend-sdk","version":"0.4.90","_id":"@nodeblocks/backend-sdk@0.4.90","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"c9ee40991e4fbbb7ad18827d234672aea48d5807","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.90.tgz","fileCount":222,"integrity":"sha512-9EWCgZ6029qbensfimPjO3ZeaRg0fDFf+H9Fs9yzxyHWv0ycJ39uM+QVukO5mq0Z68Hg88deWbgwAP3zkGigDQ==","signatures":[{"sig":"MEQCIFZkDtr5zI8satCSwmFs9VDnGzkNrTm60ID43K6dE7TpAiBhaI7vESlQX1emTUuLUythRlulCoGm2KHETU3v+PUeiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"292399a7800a59e9bc4a055f9e21c760c188f771","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.90_1752816264845_0.12406263940227791","host":"s3://npm-registry-packages-npm-production"}},"0.4.91":{"name":"@nodeblocks/backend-sdk","version":"0.4.91","_id":"@nodeblocks/backend-sdk@0.4.91","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"1a79098dfb1c5b096953dacf5471cafc4ef904eb","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.91.tgz","fileCount":222,"integrity":"sha512-HeHv8VdbM7vMO9ZLbW/30au8oiuvCZsKOxKGgf1rJk1FnmQM8psnhAj8wVqgqgkb6ZZtSvEeHhA9f3tzhDHiug==","signatures":[{"sig":"MEUCIQDrm0X7m6jaQMLaCV9T3zgJcfrd+DaZ7Xy8d6lyEK2mbwIgcAENzJQqNE584ld+fGO+MbwmGzok2nE3E4wju0NwwLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"49a7d5fab1281811b7ca24be0d86ea1459f4fad6","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.91_1752816303185_0.8660086926745059","host":"s3://npm-registry-packages-npm-production"}},"0.4.94":{"name":"@nodeblocks/backend-sdk","version":"0.4.94","_id":"@nodeblocks/backend-sdk@0.4.94","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e923a74d42563423896e319172f4b799029eed4b","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.94.tgz","fileCount":222,"integrity":"sha512-JiZrNk6coZqek/CEc4XJwWvxdP3Ivfkag7eB5F+KDgIk2NIPxsriaCUy3ot4sRLPgU/j1J6MFztpNEaRt5XOyA==","signatures":[{"sig":"MEYCIQCX4Nojqn1oP6r4Z/v1yaBGd76unGGr8lgd58tblzy1QgIhAJialY9C9KSYuZ3ltZz6L79ue1pnUcK/kwliHYr8D1iF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"604a4a46bab4917cea5dbcce99057a3e1c2b34a2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.94_1752816551416_0.5929096225823376","host":"s3://npm-registry-packages-npm-production"}},"0.4.95":{"name":"@nodeblocks/backend-sdk","version":"0.4.95","_id":"@nodeblocks/backend-sdk@0.4.95","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"676a6bd980d1342a8fbc11d4b646049d9b8c3826","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.95.tgz","fileCount":222,"integrity":"sha512-Xd0VGku4hEZGHR9chv+jiY14GVMEaDxEkdT3SScKEzKlf7akeozSYcKu4TcefUsGKzW5vQlIzUC0DG0v36iIJg==","signatures":[{"sig":"MEYCIQDrFcyFw4MBWJ0TVL79H8ALlt/Z3TBpoD4KTONoXIofLAIhANRBZr2qjSes0cvShOEu8VaWr0rbuZYvOnshhK23pgx5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"ba681ae07e0d893b6d7d496790e1d7743b37fd0a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.95_1752816602033_0.9310914228912057","host":"s3://npm-registry-packages-npm-production"}},"0.4.97":{"name":"@nodeblocks/backend-sdk","version":"0.4.97","_id":"@nodeblocks/backend-sdk@0.4.97","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"f7f6e3eff714c6f3048558b8a586dd76f1b05143","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.97.tgz","fileCount":222,"integrity":"sha512-ZQqYT+V2XT34MEFA3Ku3zXU0Amzug/dkyntorc1ATYUOG8AI4vGflPAyNX3DNHJvZBfc6LATaE3E50KIGNOCHg==","signatures":[{"sig":"MEYCIQCQ3mBu9B0MHpDONJMfihhOL7BZWnbh7OHqltzG9hJW4QIhAM/CGu0gE+F/w1gZEc0CRB2q4KlToOZ/gP3dzIWO/YKP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"e4e18d47fbe8bbc97c39ae2fd48c72473104a325","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.97_1752816681593_0.5058456792655013","host":"s3://npm-registry-packages-npm-production"}},"0.4.98":{"name":"@nodeblocks/backend-sdk","version":"0.4.98","_id":"@nodeblocks/backend-sdk@0.4.98","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"c931eccd775bdf44025cbcab5b1f84232e113d8f","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.98.tgz","fileCount":222,"integrity":"sha512-+7vqTlPR4GZVZUS4TEYhtkTIaK5YYoJHXgbLxHjapG5qxNu6l9I9QEljxIctIc/t37rpww5n/npSKepd4c76Hg==","signatures":[{"sig":"MEUCIB0LvY1VY98e0mThUyjeYFJRGi35gxnYwyio4y0zy8bXAiEAzwLaNN+DzIac9e0nRlNHKQxwtyquDh4ZATxz7nUtG7Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"b7b7037f0e27b1cf8951c62fdbef5881ed79de96","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.98_1753156209949_0.5181999859459947","host":"s3://npm-registry-packages-npm-production"}},"0.4.99":{"name":"@nodeblocks/backend-sdk","version":"0.4.99","_id":"@nodeblocks/backend-sdk@0.4.99","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"010564c3be243890b2a3d16755c1e82fdb248afe","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.99.tgz","fileCount":222,"integrity":"sha512-SAZILgggr5ctph6bhQaIrjXVsiC+wvqAB7hscgZldnCHK3UiYUOmZvdbcT30h5sZHI2uuOfEu4qdT8fbaHZvjQ==","signatures":[{"sig":"MEYCIQDA49uO+78QCw2l6yZkwykxRnwe0Hb+jjY96k2UwdZYbQIhAOQmtcDt9E+oGjJY8arR/bz40CDZ8K0JLteJUPf5gXlm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074059},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"8beda40ed5b7b943802a5fd47f36951ad73f4a56","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.99_1753156269455_0.01598034859789821","host":"s3://npm-registry-packages-npm-production"}},"0.4.100":{"name":"@nodeblocks/backend-sdk","version":"0.4.100","_id":"@nodeblocks/backend-sdk@0.4.100","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"71e508b1165cbff6ce884f1e14e046232a5507d1","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.100.tgz","fileCount":222,"integrity":"sha512-pE9g+w7v4m3QGgKk0kMsySZ+oNXVSCybeaKBUJ7DhCzzQxEQcmdnJe+x4IncWcgLuWBncMotckcOCmpARsAShw==","signatures":[{"sig":"MEUCIAu7FWeTX3mJiOqdX0A3eiHsnBRAogTDmH429GO7bz7LAiEA0XfE6xorBdOapCu3z3iexL6PKcfvShCtS2CO5RKp9k8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1074060},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"664ed4123a6016a2ec928c2b907cb4890a6e5828","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.100_1753156342259_0.7772139496336499","host":"s3://npm-registry-packages-npm-production"}},"0.4.101":{"name":"@nodeblocks/backend-sdk","version":"0.4.101","_id":"@nodeblocks/backend-sdk@0.4.101","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"f67c142555d15ccd6e03f3b7da43801d28b3a2e7","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.101.tgz","fileCount":222,"integrity":"sha512-3t3JWhfpyW6b6xfyRDXOeL0+zaE2RRG3SsGH4m4Kk+59pYt9NiKbtAwOswZEuqikFqEtS4DYueNXPezuXEhNvQ==","signatures":[{"sig":"MEQCIG4rpPEvPQfmNMadY6jHJjEygejKToV3QOikO1Bm30qPAiAK6Woiqo2zNWQR8/JARbmAF1Wv9n3yFCUpacygeCB05A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f7e66d730ffca71cbc14fb2c5ab7a08f7407479e","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.101_1753156394078_0.33890858634629195","host":"s3://npm-registry-packages-npm-production"}},"0.4.102":{"name":"@nodeblocks/backend-sdk","version":"0.4.102","_id":"@nodeblocks/backend-sdk@0.4.102","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"adb7fa864315230477c0d86b0342b3a77b6aa34f","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.102.tgz","fileCount":222,"integrity":"sha512-APSRgUDd/mSWr76LINNWbcnQlYwThOk164NbFYxO1wbHtvltqUtqSZ33XjQeNeZ3OtGNmjCVhQxtK1/rWEJD7g==","signatures":[{"sig":"MEUCIAlj70eArf2rkFtwz/x5A2PhKYfwcZWpZYVnVwBXbmy8AiEApvFdfooHNt7Q8IYPR5Xv92Cf1e3wVjJAlWOhWTRM6CI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"e2a1f2c3cb5b47626528e21ef13563ba0dc7ad34","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.102_1753156488207_0.014355728593075101","host":"s3://npm-registry-packages-npm-production"}},"0.4.106":{"name":"@nodeblocks/backend-sdk","version":"0.4.106","_id":"@nodeblocks/backend-sdk@0.4.106","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"1cf6131d1e7a2e73322e3eb0be36a1872efc5582","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.106.tgz","fileCount":222,"integrity":"sha512-F8gxTp8fib5VkpyUByz3lbFp/6gHW43kQjgvslpHbrK+jwpQxVLx02n7iaKgGEy2BxXr37pM2IZNi34FoNTo/Q==","signatures":[{"sig":"MEUCIQC7O3MQuPMYnjMww1QMIV8AVlU/wLwE8CLZyZENJCUNuwIgcW05oU813H4ULhE2kYKrsF+qOJGgQJolk7szzPcErPo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"d2d4288de29ba9f89b78c3d134cc6062d8334fd0","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.106_1753156671732_0.10238307240785005","host":"s3://npm-registry-packages-npm-production"}},"0.4.107":{"name":"@nodeblocks/backend-sdk","version":"0.4.107","_id":"@nodeblocks/backend-sdk@0.4.107","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"2ef4aebac6a635c0261d2353206eb0bd7b0e5010","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.107.tgz","fileCount":222,"integrity":"sha512-kADv8ZCWdrtZxb6kBBwKAa0r4n8TfMnk0Qvsbf1KqSZOvTnTdmV5yf7gf272uyqwEj9YE4N36Wm2YKquMPzPzQ==","signatures":[{"sig":"MEUCIFqH20vA7Od9n9A9CP9HoetGdjsK91qnMoi0omm+gslPAiEAw9PQlIqfhd+qdAzVlKpzwao12ZbISH1gPBhB8HhnlAs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"654fa28b78efc1a21bfc499022993f0332c83c74","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.107_1753156734079_0.25738542303051126","host":"s3://npm-registry-packages-npm-production"}},"0.4.108":{"name":"@nodeblocks/backend-sdk","version":"0.4.108","_id":"@nodeblocks/backend-sdk@0.4.108","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"4defa8c579a7cb39fb263ffb80e51e6b05c86232","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.108.tgz","fileCount":222,"integrity":"sha512-qulX44BXeNolZrO3CWl9cuCu4XgYRhNn5gIPTDON3OkB90z3MFPOaDckGODAETbPcg84Suy4TsnpJUsvvGLY0Q==","signatures":[{"sig":"MEYCIQDZBfVGrQyVJcjIgaTsJaBeBZFbXANaPeHdN7IyJoPyGgIhANEBCW1wT0C4PZCfF/PJY9DaoGWrUSutmYUIMhhrBTmL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"c17b76a5db43a859753098d170c1b192f13c6fef","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.108_1753156807008_0.9783654292291097","host":"s3://npm-registry-packages-npm-production"}},"0.4.109":{"name":"@nodeblocks/backend-sdk","version":"0.4.109","_id":"@nodeblocks/backend-sdk@0.4.109","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"b2aa249fc13de16129e32b5f1bf7127e1f3f5112","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.109.tgz","fileCount":222,"integrity":"sha512-1Z/qN02vCwK0pnevd4AwBRsdnxTade9DWXt8owkkRT7MrcRJ/SGUd7Y7nvAvFoPRCmSYMnkCZiXr574u54KVOg==","signatures":[{"sig":"MEUCIFvpVEts0Cz1gwGZpzOc9WDgQJFazVSsiVifeKHL8L26AiEA13P+Srt031m+lxa+Zm74j3mXhfIoFTDYePKfHKAFqW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"29f460c4808f3438ae0ca0812bd60d66dec4d35f","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.109_1753156870783_0.3195593809786732","host":"s3://npm-registry-packages-npm-production"}},"0.4.110":{"name":"@nodeblocks/backend-sdk","version":"0.4.110","_id":"@nodeblocks/backend-sdk@0.4.110","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"f41e5f8b4272171c3f4ef64a53a5920bfd915f1e","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.110.tgz","fileCount":222,"integrity":"sha512-Is/WdIWdg6W16K2VF2WVFq1INCDZYSG6ASbpQkRRaC6gi+RoH34QN0+BMIeo20TqhAdUEIjDTNT9qimomZfTWQ==","signatures":[{"sig":"MEUCIHvof7/HrfXvDSU9yjV4R+Sqg8EGnUSEwUs8BDIyFqDdAiEArjMlgJikmPMI/6PrW6GsMEGth+TfhKYDfitQVSH5RFQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"0402d6acba1667b107e2e3dfe626b16cafcb0592","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.110_1753156950964_0.22961722159237152","host":"s3://npm-registry-packages-npm-production"}},"0.4.111":{"name":"@nodeblocks/backend-sdk","version":"0.4.111","_id":"@nodeblocks/backend-sdk@0.4.111","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"db7b8e36c895ce7f0427b26cf1dbb9d7928ee01e","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.111.tgz","fileCount":222,"integrity":"sha512-Pk42cNFAtXJbkoe4mrVoA5VRcDgGsRRjT2OM3MGuvY+0nVfcJb436NlmKQcGa1qTyT8I9kQfrIhBGNRf88KtlQ==","signatures":[{"sig":"MEYCIQDtWsd6ln0MKSYUaIoGcPQN0+XGxFT5uJpScdcSVUthOAIhALAKXe4kP3sN/oG+r8z0DuvDkUNidlbF4e1f5zzDwzqc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"0f6543f245297db5530ea5b9a89029c78e68bee9","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.111_1753157041985_0.19267271973047184","host":"s3://npm-registry-packages-npm-production"}},"0.4.112":{"name":"@nodeblocks/backend-sdk","version":"0.4.112","_id":"@nodeblocks/backend-sdk@0.4.112","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"39ac281a85c40c51ef26a00e565cb3906f818db9","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.112.tgz","fileCount":222,"integrity":"sha512-8VzD73N7jC5obOcHmaOodx5+/CAqCxBTk6bCbPReNGSV144V24nu0ugTe1J+IT6dLCPUXDJEcU9XsQXm3ehmmg==","signatures":[{"sig":"MEYCIQCGCQmFACWT88+kRIeyc40o23Z2pb5gVCRXM7f51FW4QQIhAJwATVIlcYMwU3RHFLzJsSaHJIID2n6TySaOfOdjolX/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"67a202fd652248159e3a5b38ed1ca493c1922181","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.112_1753157049316_0.08102428296483222","host":"s3://npm-registry-packages-npm-production"}},"0.4.114":{"name":"@nodeblocks/backend-sdk","version":"0.4.114","_id":"@nodeblocks/backend-sdk@0.4.114","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"b0b4b0bab1eea6bc04b75dcf25fc4f21c0ae5fb3","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.114.tgz","fileCount":222,"integrity":"sha512-OM+wizW26U+ypIzE4Huxpv6BiTOsYfliJtOvijSyBEQKFH65ezkqoY2ye432sZgkgvGIozdrqcFvV8ziMXlw6Q==","signatures":[{"sig":"MEQCIGSjg7JLcLZPr2a51ttLF5O6iE2Ov2jfHVjH3W7XiJLWAiBNEkwdozaY/jfzCn3Qor1sE8gxBkiijhbuR4K8mH7qPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"02982e17ef75b183fa8489b16305dff563342bf2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.114_1753157187438_0.5620248281936653","host":"s3://npm-registry-packages-npm-production"}},"0.4.115":{"name":"@nodeblocks/backend-sdk","version":"0.4.115","_id":"@nodeblocks/backend-sdk@0.4.115","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"2d3dafb67d4c28c44d0bc56e033367edd149dbee","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.115.tgz","fileCount":222,"integrity":"sha512-pHU5P6ZVqumU3Qp1vpdbZ95TzxFdho0frSEjIpkAb+vp8cqUrdPPWk8acCQzPs0UcWUeI5fcvky0nU9HpZj1Ow==","signatures":[{"sig":"MEUCIDO1YC/M8Wuqopye42eoF6qLi8vuBEe8YHY7eXGQcMNNAiEAx42kSFvhbJR8XhQe3emaLlplQBcEQwelput+35an4o4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"8700f4757cedf1078be984b121542c02927068af","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.115_1753157233963_0.30761231922964627","host":"s3://npm-registry-packages-npm-production"}},"0.4.116":{"name":"@nodeblocks/backend-sdk","version":"0.4.116","_id":"@nodeblocks/backend-sdk@0.4.116","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"d79a716d2b9645fe65cebba136f98e3a354dee3a","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.116.tgz","fileCount":222,"integrity":"sha512-ay98As7uTc31pstT9kkvfvlKzTibA4YcLoxfTuILvrzQyf5cfok6u0RekoGZzaKzxlCvtebY56iTH0Mqa3whiA==","signatures":[{"sig":"MEUCIQDxFKtmHdawZR0V9p5uy9U14/FcXJKGa4e5/gAgdeWqfgIgWX3wUq+tbDAF2mTPPCtJDfc4CoP+5aVFI8r5shntJbo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"05831e6b49f0338e05b93305b5f28bb84770ec22","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.116_1753157303623_0.4413557917950921","host":"s3://npm-registry-packages-npm-production"}},"0.4.117":{"name":"@nodeblocks/backend-sdk","version":"0.4.117","_id":"@nodeblocks/backend-sdk@0.4.117","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"0fcf66e54ce2561d3af1b57903d82233b3de19f1","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.117.tgz","fileCount":222,"integrity":"sha512-T6K1MjP4rvRtiplhEjgNZBi/5JM+Go8Z8jJTDur14f6AbTQJ1AVoMJemIGgwF46dsozIfNqBiEh4rynOin1/jA==","signatures":[{"sig":"MEQCIEPkyw/kV5k+7tMWmRBDhXrnPPa52HXEOm6OFs4tJEW8AiBx/Yyu6xlzSVkRNJFvPpWiwxIq4WMPuuz0M/6t9HY7Qw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"41c8605e7f9d5733cbc55992a5c53f18dae71857","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.117_1753157367509_0.8375343105056461","host":"s3://npm-registry-packages-npm-production"}},"0.4.118":{"name":"@nodeblocks/backend-sdk","version":"0.4.118","_id":"@nodeblocks/backend-sdk@0.4.118","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"3154e99f5e77ee2b4cf57ef2085cf5408d359993","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.118.tgz","fileCount":222,"integrity":"sha512-wyYuUeWOvN+e/bv3atFJn864oRZCPG1yy3RyGTfJATuSBe8M1m1RcF2qvSuR7D7OuBrdriiqfoKG1JVd206/EA==","signatures":[{"sig":"MEUCIBd+kUshRM+3r7YjmtqA1J28+D721ZpCgVGFkEkSIKrnAiEA7mCev8N6w7dduGTeUXnO1nOS6O+QXsI6ret4UATupcw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"86ceedb3026ec0d9b19740ff9068093087083f87","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.118_1753157465665_0.04937876041864042","host":"s3://npm-registry-packages-npm-production"}},"0.4.119":{"name":"@nodeblocks/backend-sdk","version":"0.4.119","_id":"@nodeblocks/backend-sdk@0.4.119","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"88c99d257bf9ab217ea029ac686a7194d66ef513","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.119.tgz","fileCount":222,"integrity":"sha512-C4TenpH04BI9/9JItNVHh0NplvNyO8TQzXmvVnM2LUKG6i6lVUAYeZfkk4LhOUdV+i8KFIBInRAxBKDUbzLv/g==","signatures":[{"sig":"MEQCICQQeOw9RtlwTn6wF5sMlQZhVIinRknqC36iaI9PaO7EAiA5vEvGdlhfnYycIpnOndrCUBcRahBQpizbVra0FC86Nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"3a658f8375de13729b979a1ac936add9b8499f90","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.119_1753157522980_0.4805007295116841","host":"s3://npm-registry-packages-npm-production"}},"0.4.122":{"name":"@nodeblocks/backend-sdk","version":"0.4.122","_id":"@nodeblocks/backend-sdk@0.4.122","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ced08f86a5a28a7b23120cd5a7b6aaf2e99eb43b","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.122.tgz","fileCount":222,"integrity":"sha512-uH3GYYtm2O/pVcI+p94zlmp33tYjk+GA7YNVk/x5Q37hev3ME5pFEfA95MWZd3cwEC63NJrFAsaRj3f+XOaIrQ==","signatures":[{"sig":"MEQCIF3Mkq48mU0fu13vtGPJ2mx+Vu0qAB8q/JFMVhTcBCUBAiAfFz2Y8XLLOvQTI5v4Wv9irFLTUjfXYOhJdb/aJwTcBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f0ec4c73e7286e2381476d7bed21076217f16131","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.122_1753157640311_0.7402119145439177","host":"s3://npm-registry-packages-npm-production"}},"0.4.123":{"name":"@nodeblocks/backend-sdk","version":"0.4.123","_id":"@nodeblocks/backend-sdk@0.4.123","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e73fff90a0c6db599ef43fc4065bce787f65ad26","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.123.tgz","fileCount":222,"integrity":"sha512-W4Q468zHXzeVCPMDlkROfRfRlqIbwIdobVulNF0JteABKjvqIMggW4eIL8w3rGclZw85TZ8erLweN39w87oDug==","signatures":[{"sig":"MEUCICQTqdOA//NFDp9RLGyLsyxqQfK4yMg+3pZFcjyclFHiAiEAq/zCTIZL7ibv3bERbpF66F6HcDcaLuqJVAUKmAACCOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f9ff9f77f8e811ba9e42e72a7100c0409d1015ec","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.123_1753157700717_0.963929068706471","host":"s3://npm-registry-packages-npm-production"}},"0.4.124":{"name":"@nodeblocks/backend-sdk","version":"0.4.124","_id":"@nodeblocks/backend-sdk@0.4.124","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"87bb502357158bf063935b218bb433a1453f5822","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.124.tgz","fileCount":222,"integrity":"sha512-5MnG7G81i6TJ8EL9SLD4xU3eOYan+8OJ+GKq/ZpzuPEeZcjo6kzBm0mnPaoFVPNMCBaPN7e0IYntZgUL508xRw==","signatures":[{"sig":"MEYCIQCSLShvUo3dsiAKXg8C2HCJMmyUBU+9yXAQjLt+UtyNhgIhANjlXgD3l6O613vv1poLKm6R9Sy711fgfIE9SkeqI3Xn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"403adec1712bd8b5a11a74f0b9ef69dde31a455f","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.124_1753157768003_0.44549190324499444","host":"s3://npm-registry-packages-npm-production"}},"0.4.125":{"name":"@nodeblocks/backend-sdk","version":"0.4.125","_id":"@nodeblocks/backend-sdk@0.4.125","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"790e77c06cac22e5f7e3734b0bd0c0789d9931ec","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.125.tgz","fileCount":222,"integrity":"sha512-/gCimELGb+NVCwQ+STkSVbIp1ej19FSUYuwFoh4RdllPwvqpYYLyjq1JPeYbqhScJzT3YQ1mcAtoVPlMeRBX6A==","signatures":[{"sig":"MEYCIQCXOYxa4gvVcIR+mTUYGGOhB/UOAnP7JHVPNT7GH45R5QIhAJiB0o640v0hRuGW83PJLURXXodTl5u/xY2w81v/1Yh/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"6b1be08226f0cc281c922119d7771d4df5e49e19","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.125_1753157824621_0.7290443729922802","host":"s3://npm-registry-packages-npm-production"}},"0.4.126":{"name":"@nodeblocks/backend-sdk","version":"0.4.126","_id":"@nodeblocks/backend-sdk@0.4.126","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e2919ee5c4b39fd9ac7e365b12b893e678e9192a","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.126.tgz","fileCount":222,"integrity":"sha512-qg6OFKBkvNtaIjSMWB98/jx5XaLvfoqFGPExMRut6cmD+OLb+1qdGLGt9OdpC5EZpXcTQlQB6GMLeo0I9yumcA==","signatures":[{"sig":"MEQCIGQuTKB4sIxZj1PTG3URMPzna4OsIY9+lrB3pcaYwQdGAiBlnAYbj2zud2QtAKk/5KWxoj6HiQYghb06OPjBYDKG7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"6efac1ee0fe59a3d93f1ccaefabea1a5d8ee26aa","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.126_1753157915583_0.47319927027947917","host":"s3://npm-registry-packages-npm-production"}},"0.4.127":{"name":"@nodeblocks/backend-sdk","version":"0.4.127","_id":"@nodeblocks/backend-sdk@0.4.127","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"a496921798b0c07a760a9bff1b861a7cbbb1dfc2","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.127.tgz","fileCount":222,"integrity":"sha512-O5v9gx5aVKLizITUvuOKvbNYoU9tGX0hOwh9GxXzn/d2U7i4Fzc6GfMFxedTMG9nBZDHX+JpFGbm09shedo5vQ==","signatures":[{"sig":"MEQCIGk3iozHtK4b0xV3Z/rfDn8SF4ndXhpa9aCFXRBqggcNAiB/oioX5MIw+O8sjkuU+09t+oFcTmt5EoQHPduXDfVyiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"dd6ad2bf4452e6b0bf9ffd127173020d482ce8c8","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.127_1753157962379_0.5747625907334724","host":"s3://npm-registry-packages-npm-production"}},"0.4.130":{"name":"@nodeblocks/backend-sdk","version":"0.4.130","_id":"@nodeblocks/backend-sdk@0.4.130","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"16b5d7b1899be375df2415febe14b80e6695d379","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.130.tgz","fileCount":222,"integrity":"sha512-0DR0XFT1v0RkNahh7GIum9tcX9quOroGqk1RAz4PtSOpl/ZgFMolIViYLCRfNTz2ldXaGcNJuePFpe6/uT0Qqg==","signatures":[{"sig":"MEUCIAiTjR7NBZcZuPxoYe7ZC7XVEdLqYt0qDXVC+JOEC10yAiEAicef+Pn2dPPLDrw2zJZPa4nmb5L8Qa9ERfdP7UCLGyc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"62a16f8d97dd5832875906991a331adea4630570","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.130_1753158086866_0.08946627325242296","host":"s3://npm-registry-packages-npm-production"}},"0.4.131":{"name":"@nodeblocks/backend-sdk","version":"0.4.131","_id":"@nodeblocks/backend-sdk@0.4.131","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"d17154ed7fafa0d53f5cebee0bd4a63bb1967cd0","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.131.tgz","fileCount":222,"integrity":"sha512-Np+HtNDEAz9nhsaSPYGErQM9RFaEIdpXQSGakTyZtJy7dqIe8nd88aK85Ihq3EiT5/kf+f4UEBKzbZas74+CFQ==","signatures":[{"sig":"MEYCIQD8Bhhb9+Dof5wsDGws/2rG/zogryHZ6lZiVfZnOQ9elgIhAIuxFQMoDXfsNRxTHNy9JWatFpAgnqWj6nXpY/muAEa/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"06712eb1687b78b947beb0d5868d304f921e4df1","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.131_1753158136958_0.9950604506155893","host":"s3://npm-registry-packages-npm-production"}},"0.4.132":{"name":"@nodeblocks/backend-sdk","version":"0.4.132","_id":"@nodeblocks/backend-sdk@0.4.132","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ee3f08525b3c5dfc721ce54afd9a767b65101cbb","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.132.tgz","fileCount":222,"integrity":"sha512-ALA1BBDF3+/MJKDLX9gsxSLtX+99MHfVTYBGdyPo1i8A7s8oQ+8BhVeb2DydK1UtOeGkLreKVD0sz/xLdHSAlQ==","signatures":[{"sig":"MEUCIEWROxZGaAXG0z7337bwsY0/pj+yK1zQBHo7ojVtG5RCAiEA4itCrw2DtcbnqrZ0Y9Yvz7UWBJsTaNGZPTaU/EV1Kuw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"be14d5a3930c85a504dd0406f153df4d76b96a69","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.132_1753158200947_0.9372273916111638","host":"s3://npm-registry-packages-npm-production"}},"0.4.133":{"name":"@nodeblocks/backend-sdk","version":"0.4.133","_id":"@nodeblocks/backend-sdk@0.4.133","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e1ae55bc1c79081e10475986ef6fd3c781237278","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.133.tgz","fileCount":222,"integrity":"sha512-ltfLNshGDGezOQhdpZvpivWO8RTNy9Uu8wrVGs+NUz8QMaoVptq/G6EpD+7/238yTcOq/wf+vHYUdfZ4izoZnQ==","signatures":[{"sig":"MEYCIQDj5P2/B+t3yMBXyZZ5dC87YVSgsgtKbwy0ViyANMJK6wIhALlIJb0PzLY6enHItOChWWIDhzYyVfehXcAWtx/RqT4V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"40db86f49c301d577789a60f5d3ef80c9c2c5172","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.133_1753158278631_0.22290796882128405","host":"s3://npm-registry-packages-npm-production"}},"0.4.134":{"name":"@nodeblocks/backend-sdk","version":"0.4.134","_id":"@nodeblocks/backend-sdk@0.4.134","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"329cfe2b7b91ce42537da273916ef6f94bd92682","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.134.tgz","fileCount":222,"integrity":"sha512-LJn65rSTNGnYyys/WHgMDJbq6Y9mhJYwNJQrTa5wDdCwGrXuiWvzyP6OC6t046mSKppJTasnM0z8OfshkmjzRA==","signatures":[{"sig":"MEYCIQDIQ1hhjEQuOc51VcJU/hU8j4wkwP75LfdEaNmKbtAqbgIhANKajsYw3BzeZBbXVj2uai34kMvXop182iDhUgnyNWvo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"5f4682509022842d9e9da9ad8c4c3a29833a2ae3","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.134_1753158331487_0.27744080492318357","host":"s3://npm-registry-packages-npm-production"}},"0.4.135":{"name":"@nodeblocks/backend-sdk","version":"0.4.135","_id":"@nodeblocks/backend-sdk@0.4.135","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"2f8d6e91634f82fe38b81c5ce386fed526cb9700","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.135.tgz","fileCount":222,"integrity":"sha512-08wcdB66Fg+Iz/JM1C7HOZetQwymH3DMIeCCoekOrO6bYxttvw1JG5jNlYwIMvhYlcVOBrVAKGgkxtvwUCEgYg==","signatures":[{"sig":"MEYCIQCdwTVvF6rtVuQRtu0saRSE9IKBeLwGq7yUSFgctnlGDgIhAPEPJYVOaQqRw9S6evXxoGbn/YsECVB7/pQvJS3MnD6c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"939d0b9ef397bb2aa6995dde51cb77193e1890a4","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.135_1753158425015_0.8388176857761367","host":"s3://npm-registry-packages-npm-production"}},"0.4.138":{"name":"@nodeblocks/backend-sdk","version":"0.4.138","_id":"@nodeblocks/backend-sdk@0.4.138","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"230b9fb87c838d839f0e333610186a63bcc4f339","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.138.tgz","fileCount":222,"integrity":"sha512-ffJnoAXyuL+OuzUXtZ+kNR+qwJM+gJD5OufzzzVF3BZuM9BW2y0pL43XmV16vbx+dJMjgF8RlZCexrynJQev5A==","signatures":[{"sig":"MEQCIGlnCvz1NvdMCsoLNn6IueoMenO18fQiddB75LmYmneMAiBApm+6muu5XVoFH37aj38RW6xZIypyPooMcMLljSxN2A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"d6d8b48ca24eedf8d53f3aadffca42ea79fd0d0a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.138_1753158544256_0.5061252076648439","host":"s3://npm-registry-packages-npm-production"}},"0.4.139":{"name":"@nodeblocks/backend-sdk","version":"0.4.139","_id":"@nodeblocks/backend-sdk@0.4.139","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"c236dba61b47aa3e43b9dabe6ceed5688ea01449","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.139.tgz","fileCount":222,"integrity":"sha512-GJb/ebOmK9NAI+GKTCJ5Po/FP6lUJolGO1kFd5Z1JUtEHfOl6AtWXJskq1hwj3GdFqecI9LCOqIYMl8lX9LToA==","signatures":[{"sig":"MEUCIFy3n35xHuy4St+uahCy0HCjLYJTgOLLn634yQ+rKqm+AiEA6ugBtIhPKphIhRy33J/ixJ0cXI5b5TcdIGkf7Doj4ms=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"fb400e6a21700bf9924c8f103e70a7a086af2d40","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.139_1753158594244_0.427963728837752","host":"s3://npm-registry-packages-npm-production"}},"0.4.140":{"name":"@nodeblocks/backend-sdk","version":"0.4.140","_id":"@nodeblocks/backend-sdk@0.4.140","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"d8bafa6e3fd6e41ee61463e27e0acc2ad492cb02","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.140.tgz","fileCount":222,"integrity":"sha512-eJlwxiD5a/KfhtyfK4PNUREGdM8byEX5247KPa6uRVijL5NPttt9c5dkRrxAeo8GuzBqVFdGTl6S3ETRC0aeEA==","signatures":[{"sig":"MEUCIQCw/e1UWEzbMtCbcsJSE/zerN6PfdpGXMjoUnaF4dIZzwIgSy280UTsmjtQx46xtFdH34iqeZVbAqwe3gD5A8NGyG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"b1ca11b7cb4f16bc1fa0c02a511456dfe6420063","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.140_1753158656490_0.9612784173877693","host":"s3://npm-registry-packages-npm-production"}},"0.4.141":{"name":"@nodeblocks/backend-sdk","version":"0.4.141","_id":"@nodeblocks/backend-sdk@0.4.141","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"926ccfef71538671fe1272de33c565de473279bb","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.141.tgz","fileCount":222,"integrity":"sha512-gXsmWpJJ9hRVH6voliPRiAb4KflPowWf2bDuPO6A4EERFZhPRcG5Crij04HQdDRoNUa4RkbKK74zxZQOtUJvYA==","signatures":[{"sig":"MEUCIQDTz/PVZt9dyjh94CK0uQ4XQEzNx1H8rPk94ontvSmSGAIgPDaMkvTSK6NQMZlCoDSoapO4NaNALwMRHts6yUFGObU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"6da78c8b446a8754ffec557c3a4cb619d3526037","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.141_1753158719899_0.8601404524280685","host":"s3://npm-registry-packages-npm-production"}},"0.4.142":{"name":"@nodeblocks/backend-sdk","version":"0.4.142","_id":"@nodeblocks/backend-sdk@0.4.142","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"fd8e7f70da34603d56e0cfddccd5f163c8017b63","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.142.tgz","fileCount":222,"integrity":"sha512-xpY2uZB+yxDD1u6FCRxvqXFZKTlMSMjtfYMZg45YH1O+vZUfsNvDityiv0OI1jqWYmjhROk3mcr8pp4gy/UU6w==","signatures":[{"sig":"MEYCIQDO9oijC5tohvNH8AhEyTn7Y+vur60sztmkw/5SY7oCjgIhALfx/RayZbelHaDVyZ9ubDHxm3Y+iKiyM2vDPSmsOpL9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"530a531e1a8248f8b86c6490f2d2efc145c4caf2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.142_1753158822779_0.5440969479669662","host":"s3://npm-registry-packages-npm-production"}},"0.4.143":{"name":"@nodeblocks/backend-sdk","version":"0.4.143","_id":"@nodeblocks/backend-sdk@0.4.143","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"02f3d2450315383a07186c87677ad6477a1a9c8a","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.143.tgz","fileCount":222,"integrity":"sha512-4KZaqGual5jjHTjNZg+bRSAR/zl5FRUunNPTFRkwx8D8r3sJTHORnMb1SmzUpB4SuCVmTQiDQtkNXD2Cm72hWg==","signatures":[{"sig":"MEUCIQDEV6Zd9rKIFpSuz1Mk0azOKx3wuGVgQbSGjblsM42KXQIgNQS2cFUuRI35XSs/6NL4VbgPdl8YRo8Tie58aV08JHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f8cb520c6e2b033447862a8562cf6a2aff112e2b","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.143_1753158872781_0.24370333134174382","host":"s3://npm-registry-packages-npm-production"}},"0.4.146":{"name":"@nodeblocks/backend-sdk","version":"0.4.146","_id":"@nodeblocks/backend-sdk@0.4.146","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"45d633847e0c74d84074580a5d1cd48e2c81a6dc","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.146.tgz","fileCount":222,"integrity":"sha512-NIrGAbnBNrB4Fvba8FRiV6WnihkDCJ2XePaLUvmA/PDuIuK58X307Mkh53mYxVi675GYthWDLruiRCQ7z7+iWg==","signatures":[{"sig":"MEQCIAzMY577iz6dKP5UvpDqEPHp6+IZzAYpkcH2YtoM/iD/AiB4UEr+SEynaI0AMpF9eNWA7vtJF9QCeDo/eO8sdK9RQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"7843fde4b42ca176fc4a3039b3867b5cb9d454e0","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.146_1753159022285_0.5226609041319936","host":"s3://npm-registry-packages-npm-production"}},"0.4.147":{"name":"@nodeblocks/backend-sdk","version":"0.4.147","_id":"@nodeblocks/backend-sdk@0.4.147","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"5a062bd902d78cba480ff38fffa81ba20b80fb8d","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.147.tgz","fileCount":222,"integrity":"sha512-TbefHfBDSLcxjPWgNcXTpOmlh7snq+xPq9Cl07xyywgDlX34cIjIxogM9CJrPkCKV+qkt7Ro6UrhPDBtehh16g==","signatures":[{"sig":"MEYCIQDHv7ykrTTfhol2Bq9HxvKKrc8Oy8/hJn/7Jb9BAvFBsAIhAMGJQb8D00deoKs4s/EsBD4wMCiuMzrZ5CsumC36/eSY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"5ed9de1e8dac1fcbbbe941b9b1a5a366b4cfbd8b","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.147_1753159095587_0.8615287306769255","host":"s3://npm-registry-packages-npm-production"}},"0.4.148":{"name":"@nodeblocks/backend-sdk","version":"0.4.148","_id":"@nodeblocks/backend-sdk@0.4.148","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"08db552713fc42c7fe49b875300ca27d9078e1d4","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.148.tgz","fileCount":222,"integrity":"sha512-1QMwceQLlcwaO/29bOIXAcMcc//eLP63YkGeGK2wRSmrZuAOhVxRI9q9LJHEyL9MREI9Xq6AKTFkqNYJ0oOsCg==","signatures":[{"sig":"MEQCIFXckI4sDMN7LI5BYcGs3fb8t3tqWVtFme7eEn2rXERWAiAHRsc7yT7ggfZNVDlvZjw5lS9gmZ00seEeHj9nAmVJoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"c21235784fc93ea2034e20cced798582944d0a48","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.148_1753159165160_0.05713604332351285","host":"s3://npm-registry-packages-npm-production"}},"0.4.151":{"name":"@nodeblocks/backend-sdk","version":"0.4.151","_id":"@nodeblocks/backend-sdk@0.4.151","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e91c91a24b744801b1e14faed814c57c6c47c716","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.151.tgz","fileCount":222,"integrity":"sha512-w/MTLtmrPo0NVO0Pq4aQwdUX2961dX2OUWy3p/rpJnFsuyq0JUkAsxSfgzv5Ut41VLUd6NK4/7W1GXudmhBA2g==","signatures":[{"sig":"MEQCICn2b5JH3fx2U1xuhs0sszhhEQP8adHSFBg7PkB6UgcFAiAthZfdhtaaIRLgVwmuVmsXNlRIX4HUmOKSoPtFUjH6AA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"e2d1e321b4a54f6074bfd408b7d1f41000e54229","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.151_1753159309731_0.7389238408258714","host":"s3://npm-registry-packages-npm-production"}},"0.4.152":{"name":"@nodeblocks/backend-sdk","version":"0.4.152","_id":"@nodeblocks/backend-sdk@0.4.152","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"af87d850f02d46b09883f49b6ddf15349b399fd6","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.152.tgz","fileCount":222,"integrity":"sha512-id1Ort4hxaF6ExikU2R9TN6+xrXAr6/sczgCXcJpnh89cSKLZk+GpRjUSawvY3XcaP+ydT7DH7R86Vcwz626Sg==","signatures":[{"sig":"MEUCIQCHSNxDLwz0LjhKib8oKqxjFcFX+TL77RytM+1z5BmNIAIgHAOpbAnfoDKScHeGiFeqNNLWOMe8eTkHl62tyPYY0HM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"8614d82ac6055cee92e4c6a3896eac8d4403f725","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.152_1753159317154_0.7911908358294786","host":"s3://npm-registry-packages-npm-production"}},"0.4.153":{"name":"@nodeblocks/backend-sdk","version":"0.4.153","_id":"@nodeblocks/backend-sdk@0.4.153","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"41bd243bd8ef29cbf1a4687189a744c2c43dbfa9","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.153.tgz","fileCount":222,"integrity":"sha512-9TP/ym27RzS920+iWrw5NLGm9F7IDYfikpqYk5n5Jtb5xRySoRR+SDjE+dPi4s5CVg3yJpBolwUISbGqSzjWFg==","signatures":[{"sig":"MEYCIQDd2PIWy4k3QnmCDM1hqNKMxY0LvTWNEiDIGa9mhIaRRgIhALSXcm6KMWse5q1Ur1cX2CdN7WA6iik6eMW63vge+qx6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"11d0437e9a13ee70769bf005ae49c087ba3d8430","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.153_1753159387062_0.026667277166054992","host":"s3://npm-registry-packages-npm-production"}},"0.4.154":{"name":"@nodeblocks/backend-sdk","version":"0.4.154","_id":"@nodeblocks/backend-sdk@0.4.154","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ffa800484c7f577dc97faa56b4bb8ec15e1e6c88","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.154.tgz","fileCount":222,"integrity":"sha512-FXOerJjdZ6jw6VogBb/ztfHJeWsCEjLMgFfgdLMZMk4J+hxRaRZKUW2stF9gz0ZpESmffyXzgQvTG0Q0f9bJBA==","signatures":[{"sig":"MEYCIQC+Mm5x8gcJOhX+jrfCst7+8LTgEUbj0YMOTwl4j3uGIAIhAJmmowuQz/RzZTkehxQXy10GRfem3o1oyevaW+grDpjA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"215e50fdd4bdeac136145d956d95f67474618a41","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.154_1753159467528_0.010054988782889573","host":"s3://npm-registry-packages-npm-production"}},"0.4.155":{"name":"@nodeblocks/backend-sdk","version":"0.4.155","_id":"@nodeblocks/backend-sdk@0.4.155","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"c5c7090e7d23b98f6f983b433e2a78700211ea50","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.155.tgz","fileCount":222,"integrity":"sha512-Oh3zFlJYtss3BApQmaad+Mad+gXCCytI8l+hCQcqMm7Mi3TZzeYGNAmK43sQOrcGu0iIiwsQkR/3egMTHmx/Rw==","signatures":[{"sig":"MEUCIQCTgsRo3mQs0o2dLqtXU5FG0waBh81+jCl6t7XJ0SAhIAIgFFEANe5qH5bg2YZWe85ZuwGrF6Bur0UpDsnCzR2KEPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"877d0f938d6fd3aae8b0b6508d212820b08fa606","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.155_1753159567141_0.5412306176200685","host":"s3://npm-registry-packages-npm-production"}},"0.4.156":{"name":"@nodeblocks/backend-sdk","version":"0.4.156","_id":"@nodeblocks/backend-sdk@0.4.156","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"a0234ca9044916f212ec45cf3994cc2bbb381986","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.156.tgz","fileCount":222,"integrity":"sha512-SoSK+37KPyiULGkgxc7/Fruzmsm1WCQ0lKYI9lZJb0dUYiemEDCl5iWJDOPEncDb4/uprQmw7m3ZoKkjUjj3sA==","signatures":[{"sig":"MEYCIQDeTuL1ZH6wWIYiaD576DyW0uaT/20lXEyz8lANlz9KRgIhAJH26U71jjTG5ftuoa/ZLROtl8Iii6sXkltfVdRmjAqf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"7ddd978a81989fd6929aa7ec11aac35aef0c14f8","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.156_1753159617015_0.7336816693852779","host":"s3://npm-registry-packages-npm-production"}},"0.4.159":{"name":"@nodeblocks/backend-sdk","version":"0.4.159","_id":"@nodeblocks/backend-sdk@0.4.159","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"dfae491f9eb6207eae964dcde473b8937771c59a","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.159.tgz","fileCount":222,"integrity":"sha512-W+/TtOwrzDco1STPNss3WfxwztGxAx4m5eaKDTFHZp/EUBKgJzhQwT9X9AVnvHOO+tC6MIec8c9JugNBqobk8A==","signatures":[{"sig":"MEYCIQCMAK55CsGb1MyLUA2wW4fV5U4WTQF+59Ge+kzdkyDG8AIhAKvJgx1SkdHgGKCGEWlpcyCsSS78m9wbsiyGKnF5wzfe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"8fbf2350f9270980d9bb5b6a21dbf5dd87070b1c","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.159_1753159739894_0.38635597577787495","host":"s3://npm-registry-packages-npm-production"}},"0.4.160":{"name":"@nodeblocks/backend-sdk","version":"0.4.160","_id":"@nodeblocks/backend-sdk@0.4.160","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"13488d77614ed52a350c4f49b1391ca7dfd63a81","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.160.tgz","fileCount":222,"integrity":"sha512-dKlw2MzOb9kT3n2gqJMMU8HIN0mQ6bITovhm1pVQQpm0Ncy8aWKkyYg7gxIXu0r9UTMY4LPEYGOA+5aifp4vaw==","signatures":[{"sig":"MEUCIEQBTZd4pVNBo4ef7chaK6tDCf3UQiJeqIZ785R6BfwaAiEAgCmK8xpLVSATz1OFzku05k/J+Atde2FHMoggzAIuWok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"e7405ef8dc28bb73749555892ad859cbb42ab07b","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.160_1753159792286_0.1519703025954271","host":"s3://npm-registry-packages-npm-production"}},"0.4.161":{"name":"@nodeblocks/backend-sdk","version":"0.4.161","_id":"@nodeblocks/backend-sdk@0.4.161","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"7e94c43c0616c7a8cf50d69f2cdf196512562982","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.161.tgz","fileCount":222,"integrity":"sha512-XPNgyaI82M30494iLnZc9mVXcjuIRS8mnIY4a+I5Et2Zva1TJEzv1cuBw8P5uks83io+3FL+/pZOqNnBpy7kuw==","signatures":[{"sig":"MEYCIQCHcVjccog0/zFacyiLZXgfc6wbDG2BavvE/P/QALAmeAIhAIPiZ+e7l0ad5ykfZs4P60BMt0z3GkyJQ6iS9A5GsVB6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"99be5d8890ad3f2e66c389969036ed298945b391","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.161_1753159862474_0.6283480198947426","host":"s3://npm-registry-packages-npm-production"}},"0.4.162":{"name":"@nodeblocks/backend-sdk","version":"0.4.162","_id":"@nodeblocks/backend-sdk@0.4.162","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"01ca03bdb297cef16409525067f1cdba93fc74ee","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.162.tgz","fileCount":222,"integrity":"sha512-uf4sDKMw8MTkk8rI0u1xDGFmnuHimcSBgmHZWX/+lqy/uW6k7V1qIlnKX07NJVkHPmj7/kbRtvmHSD9fQwlq2Q==","signatures":[{"sig":"MEUCIQDfm6tRG3AR2E8ovNQjRkRqVzfhFtf1HwJzt1eUyIR9KQIgGiF6jh/ZxqGw134sTetDJ7/8hYjtwkY/oIVaY/C+0Cs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"466bc86d8179212d20e53b7d84755eb1371e882e","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.162_1753159916293_0.746692831062906","host":"s3://npm-registry-packages-npm-production"}},"0.4.163":{"name":"@nodeblocks/backend-sdk","version":"0.4.163","_id":"@nodeblocks/backend-sdk@0.4.163","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"a5cc3b0a3321a1fbdd2130ca2ed4b6693f5fca86","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.163.tgz","fileCount":222,"integrity":"sha512-5HpN6+AMzRFYHeSchDNT0bzQ9jK5jPMhJNGhHARA6+sYbNwOgJarueSsXGZk5Q2Mlsgf6VlFnN+CBolodppHdw==","signatures":[{"sig":"MEQCIEzIYT1GP7PRTvLoj1G73r1Y2P2ZZQwbqBxP81fjmVcTAiABjQvuNul+yuL8KFyBeIwul2Ndew60Y7hqkEM6BTnhEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"0b595bbaf4bd3834cd8da967aa145a7e165f805a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.163_1753160025222_0.0923170608893471","host":"s3://npm-registry-packages-npm-production"}},"0.4.164":{"name":"@nodeblocks/backend-sdk","version":"0.4.164","_id":"@nodeblocks/backend-sdk@0.4.164","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"b6dac6750b2e7e65b23f785755f3e0cf03e86c82","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.164.tgz","fileCount":222,"integrity":"sha512-YniuzwofJdxFPFRksAdvpnl/OrFNF77dYwDmcqmZfRMVK6GLHi1d/O8p1sf0RtU6i3rAkjEFtVGlU9JyJhwjsQ==","signatures":[{"sig":"MEUCIQD+R0nmo9lE/HGuhzbMOuRAw2tDJ5h/neX/sRvjok/iKAIgEqnOTcPCNkJYFlrph8/sGP7cb5yr26G6nA4YO1jy8dk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"5b985dd2046e067e9a752ea58cf2f20928ad6dc1","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.164_1753160076529_0.8969725059689413","host":"s3://npm-registry-packages-npm-production"}},"0.4.167":{"name":"@nodeblocks/backend-sdk","version":"0.4.167","_id":"@nodeblocks/backend-sdk@0.4.167","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"adedebfef3c3460358525b127d79fe0aa2dfb494","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.167.tgz","fileCount":222,"integrity":"sha512-+Y0ilsVeZ1wCZresJuXnlXVEirUo6/sXK8QxeQjuBy/+B1lyEOTy/p0f61CjdtrUkIbW9OtQTQMMYf7bRHqwBg==","signatures":[{"sig":"MEUCIEWJBrmZUTlO8xMeE2EC33hD6nJ0OMba6Acbdf+VwryoAiEAkUREPQuPJmcqXnR1akfMBYK3hNaQEGYbsN7mjiWY4ic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095353},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f0e72f4b192a956a2f6323194f7d384717fccf3b","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.167_1753160246606_0.96635542023105","host":"s3://npm-registry-packages-npm-production"}},"0.4.171":{"name":"@nodeblocks/backend-sdk","version":"0.4.171","_id":"@nodeblocks/backend-sdk@0.4.171","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"2f7850657b961d71004ca55de195c1090543f41a","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.171.tgz","fileCount":222,"integrity":"sha512-2kvmyeceLiCfr6iBEwe0JMeWgTGedKnpN0GO1z5pVJAOGmrFncKZoeOwMNzwH5YXRw6XzcEGKiC/cxqWF08ARA==","signatures":[{"sig":"MEQCIEA14W1vjyOsbhQJz1l8dSC8Rnt6G2WId9z+8KT78Zr6AiBW7bQhRCdwuNbthTS2PVllFSIB2N3S8UkefLgB30BtFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f5a0c1c56f392b809b4092bffe7a263b726aadcd","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.171_1753163210023_0.2979899497860996","host":"s3://npm-registry-packages-npm-production"}},"0.4.172":{"name":"@nodeblocks/backend-sdk","version":"0.4.172","_id":"@nodeblocks/backend-sdk@0.4.172","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"c19c6a2768f62108b723cf02f3499b528aa8f66c","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.172.tgz","fileCount":222,"integrity":"sha512-rjRK65UGGZ8eLk217AjQ0EmfCb0+G+n50cdav1c8dkSHr1OeyJx3uxg++aIW4cyaONUepo0gh28jbbQSctYE5w==","signatures":[{"sig":"MEYCIQCQ7coaArZR0eU3MIuLTJqgjiiEIXJyWlYxg1yCYQ4whwIhAIIV8vfH2Qtu3Zs+XKbhXOnRN4GGvhvPxEWtDu+H18zv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f05dc00750ffe56b1ba9742b81d332b0b09ccf56","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.172_1753163268309_0.5446988339418681","host":"s3://npm-registry-packages-npm-production"}},"0.4.173":{"name":"@nodeblocks/backend-sdk","version":"0.4.173","_id":"@nodeblocks/backend-sdk@0.4.173","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"440dfca6197d7ab1414a50cddae056fa703a402f","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.173.tgz","fileCount":222,"integrity":"sha512-OkhhgCK6tdVp23D4q0c/LZ8Jb8X9vXzLaOjpfACffzGvmjh792iGH1yTSs/4if2uUK3/G/Y2GKZTJKAbVKZ3rw==","signatures":[{"sig":"MEUCIQDy4+GI7U9A0o/xi9cZNvgva96Fl3/s2hb9zIPOJqYdxwIgNXNfvguZcevIgZip8purN/a6n6Bri/m3p8+UaPK1NvE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"24bc6bd21af44efdf54586a7544648d3c74836b2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.173_1753163326175_0.35064320207166944","host":"s3://npm-registry-packages-npm-production"}},"0.4.174":{"name":"@nodeblocks/backend-sdk","version":"0.4.174","_id":"@nodeblocks/backend-sdk@0.4.174","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"62d1a6391f7e1fdc20fcd0d30ff5121b4ef2e556","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.174.tgz","fileCount":222,"integrity":"sha512-TtZBHxd2sr+SSNqChcxawadQS2SRuiZmeVcpd4IPvINhfZ4iv5E8F4A0AGIrCBOV+aX4W7ri9HcmqlsN2YwsvA==","signatures":[{"sig":"MEUCIBl/9PI/1/TBHIcKCCFHVdgGG2hKm9tELpC3EYZpP9TXAiEAhDEsJbkKHV+brKOS5I90hmXAuagvLwPDILxYCmrIPcY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"b3b1a8a98860475ffa114466512cf16fbf995455","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.174_1753163389665_0.2060068851562591","host":"s3://npm-registry-packages-npm-production"}},"0.4.175":{"name":"@nodeblocks/backend-sdk","version":"0.4.175","_id":"@nodeblocks/backend-sdk@0.4.175","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"7445450c344ae4fd42c76483b8229043fe56bed2","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.175.tgz","fileCount":222,"integrity":"sha512-optYHysZSFNoCnixkdLLh4ecqveqd5Zjcu5SNaxpCI8StKRdsbvu7wUTyo/ldJv+wvZVkTiZFZHA1RBH4cFdmQ==","signatures":[{"sig":"MEUCIQDfdMSHgR8zy+p8P3rAaYjAAtdWPOxtvQO02bVrdHpQnwIge6cTQDZwR0X9eHLiP32++HeZDPoi0LYhiv8ZYo56F6g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"1c1effec7e3be42786817de8c702b1f84e430305","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.175_1753163492512_0.6447830006541959","host":"s3://npm-registry-packages-npm-production"}},"0.4.176":{"name":"@nodeblocks/backend-sdk","version":"0.4.176","_id":"@nodeblocks/backend-sdk@0.4.176","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"6a5ce8f1e8685f0fb079d503b7c1263b27bfd865","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.176.tgz","fileCount":222,"integrity":"sha512-X+160XnqbhA3fOjHddYSm9xkve+zdDRB2YzreSMANX03XBziAEVaa8v/hlSvmHBvlg2VeDrsa0A3Jj1WqoAlOQ==","signatures":[{"sig":"MEUCIQD7iTIf8Bua5LMTgH27vKvynb+ivRYmknXyEZ1TdFyI7AIgb3IbS/jXvpbMiAgQuXwXKMsgIU9enekNAY5Ecev52hU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"bbe8ba6a75c3cbfb0a8caa8d9de646fbd74d915e","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.176_1753163557889_0.04998866655647993","host":"s3://npm-registry-packages-npm-production"}},"0.4.179":{"name":"@nodeblocks/backend-sdk","version":"0.4.179","_id":"@nodeblocks/backend-sdk@0.4.179","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"103a5a0216b6dbabf6b58924b4df5da8fce4e514","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.179.tgz","fileCount":222,"integrity":"sha512-D2AJzh54lID1cwdsjQ6u+1zeK3wYXNQVZ5+H0/7YUJyOqf9iW4/61cQ4b9GOaySijDPb8oB6SgCI0tcIuzZTmg==","signatures":[{"sig":"MEUCIBvY8TEbjNmC/sNa/DQ+voIEEQm1CKXLMVczDfRsUotwAiEAytcHF0kRo6lY5WhsslFshLgsflcU+1paKMsW4D7aYnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"22cd5bc25e3b197b31a3608f7b2b215a58581fd2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.179_1753163674078_0.21916557273540405","host":"s3://npm-registry-packages-npm-production"}},"0.4.180":{"name":"@nodeblocks/backend-sdk","version":"0.4.180","_id":"@nodeblocks/backend-sdk@0.4.180","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"54b00c7fd2cb10bb7e3d5e267b7ed03729252214","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.180.tgz","fileCount":222,"integrity":"sha512-BYF/hNpaJvQgFaYo8kprpfj79oI/PA/SKrAJrvoiIcUSudd7pLhunctL10lLItO7evRdEe19E8289S534cjkPw==","signatures":[{"sig":"MEYCIQD11UP+lo16vg+H3ED8XxRI5oqttrftBB0T+L//9DxlIwIhAPOMfwjP4DbDoeTzRkydFkZzv+JWkkoiT42CqTPIlzXu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"e758ee780086e37fac8b9d30e8a4d2f39f82c47c","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.180_1753163721332_0.21234966373668307","host":"s3://npm-registry-packages-npm-production"}},"0.4.181":{"name":"@nodeblocks/backend-sdk","version":"0.4.181","_id":"@nodeblocks/backend-sdk@0.4.181","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e97338f0c9a1f77776879914a4fd9b91c9e66647","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.181.tgz","fileCount":222,"integrity":"sha512-rbUb7MaixYMRDpuWn0Q4abgQfjVinFOePhLR6viBeEIzF1mvLozH88yVCPenZLVNUckFv5vHmFcSsrfYJ7gDTA==","signatures":[{"sig":"MEUCIQCaiabU5Bq64GT4k3a4bDBOrgQvvmtbiFkVdbsemZBBSAIgRfNATJUWDmn7YbEWSvkm+eWr5mMb2t0XEI21TbKL3G8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"9f1d26b427c2422ee045992ed92be235239ab5dc","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.181_1753163794464_0.17160259607001738","host":"s3://npm-registry-packages-npm-production"}},"0.4.182":{"name":"@nodeblocks/backend-sdk","version":"0.4.182","_id":"@nodeblocks/backend-sdk@0.4.182","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e702a0f48ceaecb6f718c45b61e01c5b301d2371","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.182.tgz","fileCount":222,"integrity":"sha512-v2EnefGvoLJMFRD6MYHL4lxHB4A9/eP7GEy1eYPnx/OrBmA6Wm7Y8SJzvWaeyy0csknlNIIoGXjkaw4rIwFCBQ==","signatures":[{"sig":"MEQCIG5iuSd5SNZfwP+YgVGvrz3rfSQk8DvVVjprz3PAf30nAiB9zRKILfhuNQWgxIH6AEkFsSecMcsA9uUc1SSsYCUFow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"102b32e4d74b7b2da4bba918ea94e8bf3a586ba9","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.182_1753163853302_0.43047981211592723","host":"s3://npm-registry-packages-npm-production"}},"0.4.183":{"name":"@nodeblocks/backend-sdk","version":"0.4.183","_id":"@nodeblocks/backend-sdk@0.4.183","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"823514470aaba8299540882240ef5858f7a5bf88","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.183.tgz","fileCount":222,"integrity":"sha512-eQDuAimcZZWjfRGT8OHbpFxxu6UqGzXSVfbif5p4uzuG3r5CQ+4C0qqIHc9nKYTAmV2t1frJkETRLtm2jFe/LA==","signatures":[{"sig":"MEQCIEW/59OF2OyTP16FSTbA8L5gAHuGBijS9uP0jy8+BNyAAiB3V0XlEoGAyhRwxARtdtBpMu76BGaFDDI8dYgZuKoQ+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"70445a6cb6aac30a0509cc7f9dba55a4fee66de5","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.183_1753163959779_0.6488840079528109","host":"s3://npm-registry-packages-npm-production"}},"0.4.184":{"name":"@nodeblocks/backend-sdk","version":"0.4.184","_id":"@nodeblocks/backend-sdk@0.4.184","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ddb493b2fb04868b46bb4d7b292e901e9833d7ea","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.184.tgz","fileCount":222,"integrity":"sha512-Ms1NdK9Tnbf3eBt9nUYdqYY+jjRAU1t5yDKfD7P4ZN6dfywpzT61wU4iUwFNebr5NdMXv7ok2+tci3KktlgpCg==","signatures":[{"sig":"MEQCIHL5NwuPXs1FGZsL8QBqCxhI761bNPkPwMl8MEi4kfZlAiAyncFcR9h3Va/IfUpxjF/bOVT7e3HAE/U4RMZTqLiBGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"d199cc1dac0ae9bf0e07b105ec9ecc3d94466e1f","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.184_1753164000376_0.022800658340871305","host":"s3://npm-registry-packages-npm-production"}},"0.4.187":{"name":"@nodeblocks/backend-sdk","version":"0.4.187","_id":"@nodeblocks/backend-sdk@0.4.187","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"42962d2250893732d7f2abfa96c695fb91518c2e","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.187.tgz","fileCount":222,"integrity":"sha512-JydfObpCrMwyeq6u8A8gp/ca2SL9xCtPzwi0jCT98pCI1A43oG44gvypLQN+t7pDxexrSQgK7+9V1i5xR6HFow==","signatures":[{"sig":"MEUCIGAhDaP+TZlqpr36BTLsM65Snlq55ECFthfPo94FAEinAiEAjlB0viKBHSeoP4ydcFaSvOtbYrVRJa7lOKzezh4LHL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"a775efa821d0084fe571ec6639d7d314998a299d","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.187_1753164119494_0.06655177804394219","host":"s3://npm-registry-packages-npm-production"}},"0.4.188":{"name":"@nodeblocks/backend-sdk","version":"0.4.188","_id":"@nodeblocks/backend-sdk@0.4.188","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"b987650cbd3749a7f5677936c6ed9efd3eb9d995","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.188.tgz","fileCount":222,"integrity":"sha512-EQ2J4AP8oxldRfbiou/M01qFcvlx6gXR6KfNRMuODvcjaQPE82qGDzloDwfSxKYbZG5tNme4Q2++C2fZ17w48Q==","signatures":[{"sig":"MEYCIQCS04e9mJwvMW3C0Cv2FOQFIGJStehlmjzyTxuVxzJgcwIhAJphkcAVx7HPqohQx5ZUrnLGod2xFEIve4ic9Y+Qo87K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"14ce496c7d748e42910221ae80ea41bd6ab73122","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.188_1753164177020_0.8606970034762456","host":"s3://npm-registry-packages-npm-production"}},"0.4.189":{"name":"@nodeblocks/backend-sdk","version":"0.4.189","_id":"@nodeblocks/backend-sdk@0.4.189","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"d95e873d8411eca29e92fac9efc43bf2aba42040","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.189.tgz","fileCount":222,"integrity":"sha512-upNw2FskjkRTYfqEnlCcqybxd/29JLkLmnbQ0uH4DgKXbaWkaoHOv4n6zuSU3AIyy1+XuubT6CO5ltJaqWWv7g==","signatures":[{"sig":"MEUCIQCtAT/MshtoOGC77E2UpkfhAU+2GHHQRYWp9gy02ImMdwIgQbYhx+A2Qm0L7v7Vh29avBiujB+4njQRnrlceHlVa3w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"971f15cad5a3c07680fd6c24d79d961f8f7b05b0","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.189_1753164245767_0.2676555802489353","host":"s3://npm-registry-packages-npm-production"}},"0.4.190":{"name":"@nodeblocks/backend-sdk","version":"0.4.190","_id":"@nodeblocks/backend-sdk@0.4.190","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"31362044180a2f5abab349581faf1c2fe25fdcd9","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.190.tgz","fileCount":222,"integrity":"sha512-Os/NndTBn/eCsxMu/yveI3B/bj9xgAaahLq+n5nzI/Gf4fZ1Zdrjt7ebjV5iZEh6Bu3V87fj7yUvTunaIZZfew==","signatures":[{"sig":"MEUCIAasFDHTGEBMLX5OBDU4PvtjSwY7fNBYSMd1ztuF/o8VAiEAxOouv2cJYN1fKW+QE/0MPVdzWh0GXUxz9/EHoBh/jhI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"91ccf4fc97009d9452aa419f9890f863514edb46","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.190_1753164302714_0.7282477872163302","host":"s3://npm-registry-packages-npm-production"}},"0.4.191":{"name":"@nodeblocks/backend-sdk","version":"0.4.191","_id":"@nodeblocks/backend-sdk@0.4.191","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"71f66d765a695db4a4801d151e866b3512443cf8","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.191.tgz","fileCount":222,"integrity":"sha512-NJTGWhG0/+97SAQbEwsxRXAuR0zVFQZvSoSkxxGZDmq4gFK1utCMSoSQDmeQq/gsLHIxd3ea92+EI3W1H/nT0A==","signatures":[{"sig":"MEUCIHY1DGnnHxRAGu7ZlJ255MnGdYzzA27bZqZPNa9K+8bKAiEAoMiAYkyjXAy1cdKAx79QzX50OcXA2xwlD9hCmht4dqk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"363027e2ae2e411f4f59e9487f0917a5322e7ccf","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.191_1753164406010_0.018580644550833192","host":"s3://npm-registry-packages-npm-production"}},"0.4.192":{"name":"@nodeblocks/backend-sdk","version":"0.4.192","_id":"@nodeblocks/backend-sdk@0.4.192","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e74e4020d6f633c11f314e04c59848afb947a790","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.192.tgz","fileCount":222,"integrity":"sha512-k1trlVpGgPdu1uSy/E/HABRS1bkHGngOVgzsZf4Il9OwTKkqcJhQGtlcOr8haK0lr8Yq+vrt5OaAZOfsp3sriw==","signatures":[{"sig":"MEYCIQDSqU5OTEMajlGuAIuKg+1BX2jS7iyvU7m4e8bNmHwikwIhAOdMxUkwKQvclKu1bOO7GXhysGlPTw2C8ETvuijkm4Ne","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"63620da943e0f9ce74aa479b256b4aaf068601ee","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.192_1753164443582_0.007064379217369021","host":"s3://npm-registry-packages-npm-production"}},"0.4.195":{"name":"@nodeblocks/backend-sdk","version":"0.4.195","_id":"@nodeblocks/backend-sdk@0.4.195","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"46fa696164937ff43fe589f89b9f64e0902d059c","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.195.tgz","fileCount":222,"integrity":"sha512-R85lWbJCVTaYeCrQuqqeS6uNmdPlSB+Ke6d8+0NjDxjNDcogWtMZREOux1pemiNVXWxP5yTRIRqFoaZHBpQYeg==","signatures":[{"sig":"MEUCIQCVXBKnJeTpErqFtRxf87M+2sP8uwUibv27vXfloUtsGQIgJUdb8BgoDAMVV4jv0lE+Km7b/r4LErSuuV42//q+ZrI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"32e329200a7cae48f40ef54a2f3fd5d582f84546","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.195_1753164575056_0.9111371886951138","host":"s3://npm-registry-packages-npm-production"}},"0.4.196":{"name":"@nodeblocks/backend-sdk","version":"0.4.196","_id":"@nodeblocks/backend-sdk@0.4.196","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ee774c0799e4b9b881b094a8f327d89d786c55c0","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.196.tgz","fileCount":222,"integrity":"sha512-aKNf6pePLkR4wriikq3o62YGnfGXuO1LokXJ+3KdR2G+03nmR3DfFagZqyngnsxDvx4ai5dUjblS4akBuKPGpQ==","signatures":[{"sig":"MEQCIAPHWjHQlhrkxQGNCj6GCU7+sbglaaQYvCoVVX/mwnQzAiB94y73QlpZXrNkBQILhwtt/WvfAl0OhIUWUFnAqEIPig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"ece3f370479a3d2fbf8f91153ae0d233c397d611","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.196_1753164614557_0.4769845420081751","host":"s3://npm-registry-packages-npm-production"}},"0.4.197":{"name":"@nodeblocks/backend-sdk","version":"0.4.197","_id":"@nodeblocks/backend-sdk@0.4.197","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"f809ae65f256fa20f883cf429b4049bb5f955acd","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.197.tgz","fileCount":222,"integrity":"sha512-7/PSwCwukiwpUyv3RPYl2acUYnRiaV0U99hef7UzFmyb6uwGaRoGzLDdov15VO2RRtb3aYoqmakOd1USq0Dlzg==","signatures":[{"sig":"MEUCIHwTbYPbLe+4U9qS/mSNSrVEmpWnu0AjE/jEJ95akGJ7AiEAwq116q//mEaFlht0XDwRydlCK/7YBW/2LCVejHBWHSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"aa15f5377cff2bade22b41e87459491c074e0868","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.197_1753164693565_0.8521415676152293","host":"s3://npm-registry-packages-npm-production"}},"0.4.198":{"name":"@nodeblocks/backend-sdk","version":"0.4.198","_id":"@nodeblocks/backend-sdk@0.4.198","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"9a404521aa66038a46899403e8dd2e3b4b53004e","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.198.tgz","fileCount":222,"integrity":"sha512-bAGPKTTY6j6C/7kUxhge42dYhcfZWFwgA8HU2st/X1s4mH7yboJuuNn1JD3oCqIr7sof5ezYLZkRFjkcLqfCcQ==","signatures":[{"sig":"MEYCIQCUv2OjJec1BtWRp0dRrN+LbWz2lmOiFQF2CeqcACvMKgIhAIIUwg3DqKo4fiu6EdTf5uVjarkyE1HtL4WP3uqnva7O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"852cbc313ec20cd7125fe9e098c3c128c3a6c1e0","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.198_1753164763302_0.7558108662499738","host":"s3://npm-registry-packages-npm-production"}},"0.4.199":{"name":"@nodeblocks/backend-sdk","version":"0.4.199","_id":"@nodeblocks/backend-sdk@0.4.199","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e3b23c37abf98141a8167cccaac717575d6abe74","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.199.tgz","fileCount":222,"integrity":"sha512-pcY9NxW+1aCzOFroqla65tKLK7Xnt5rmr2rlQytXqAHXoaK1HqXXDnbFHY6oKw2zjtqNRo5Uiq8691XdStYVbg==","signatures":[{"sig":"MEUCIQDt7gv+AIEQSfNJLueZBMiPlBO+4bVAG1JI0HpNY+dXxAIgWzBEzZlkmtV9+yPZTUPVOO88G4Sz2bevQ8fZSv9oXJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"fe0ef866088e802a8f4c9e130707e5eb6ddc6cbe","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.199_1753164859364_0.6356133278580001","host":"s3://npm-registry-packages-npm-production"}},"0.4.200":{"name":"@nodeblocks/backend-sdk","version":"0.4.200","_id":"@nodeblocks/backend-sdk@0.4.200","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"73eefd3d82323b31ea328450fd7059167ec5e750","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.200.tgz","fileCount":222,"integrity":"sha512-DWl4DNlpqxVwS6yNYCaM3tTAh/4QcoWyfluazavs+kNp3qwwjsfSPP/ANF/De9ooaZ670G65YcUwe5bLzx89Eg==","signatures":[{"sig":"MEUCIQCr2a6v5OIgb13hvca0WCCXGv6uRC56J49tjVTY29+p5gIgL3Qou2tY1S2gNP+OQOq8aarLebbGJL7+o90g8+QsPlk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"663d8198185f1c56dd271680f58c9172dee2c8e4","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.200_1753164908967_0.5848254076678305","host":"s3://npm-registry-packages-npm-production"}},"0.4.203":{"name":"@nodeblocks/backend-sdk","version":"0.4.203","_id":"@nodeblocks/backend-sdk@0.4.203","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"1ae63b78dee03f5b0efb4db143d3b6a940ed832c","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.203.tgz","fileCount":222,"integrity":"sha512-fmzDZuvPT5jfsXU7Vp0BWbN5LkB/EutGnvwrTrYuYcOGXYbnK9Hwp6RCeT6Ubgr9WBApNJsd9KhSqW9t3K5OZg==","signatures":[{"sig":"MEYCIQDmvqjH6v+LZF0l8buWxfUxf4tlyp1r54A8ivCzg7ObSAIhAOTKFJtSInFMP/mDXabDhtA5ZG/2bNavCAPWYEDCHaMo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1095612},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"435b2013868c4a8c0b6b339d23e8b081108748ee","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.203_1753164989062_0.3736226548354822","host":"s3://npm-registry-packages-npm-production"}},"0.4.204":{"name":"@nodeblocks/backend-sdk","version":"0.4.204","_id":"@nodeblocks/backend-sdk@0.4.204","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"7b5124c0d5bda4d1d14d75f2f560d6b577fff9f8","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.204.tgz","fileCount":222,"integrity":"sha512-47ieEimhsDerO5/N3V5FgOHmtUVNU+UIdMJrrIYLJoFBTk9hXBD08mbPmcWWVVL1KxdckvdBOsWpk2vlWkFgHQ==","signatures":[{"sig":"MEUCIHKA1BOoCNHRJKITJSnm/uS4+NtLySoaVdocmdg3qYjnAiEAnlG/cfu3G5vvHASziAiTlJOdCYEQsGWfBJdDmn4XOlI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"9033ab4d507ee80bae9f26fedd78fafa9679478e","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.204_1753172855436_0.44861039350256027","host":"s3://npm-registry-packages-npm-production"}},"0.4.205":{"name":"@nodeblocks/backend-sdk","version":"0.4.205","_id":"@nodeblocks/backend-sdk@0.4.205","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"d7372cce4e975bfee7f989b97daa1b3f488aec7f","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.205.tgz","fileCount":222,"integrity":"sha512-Agdm4oJxgY7WQO+v4tPPAIsa7psOXLrcEGkNQaAljrAl7ZE+Aey8YTVhnrVELC2pknT3he+AlDXGtGuig5nIwg==","signatures":[{"sig":"MEQCIDgmQ9R3c6TntVof048PCI49LONLXEzgCO+EKJVBZkCVAiB+swVIq8xvhX+RfMJZIZDfQ8/Hhu3v1n4VW/uHRWQG0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f4975a6dec7f0bb6af97ee03a6bb9bb974b11586","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.205_1753172911553_0.9668988264651239","host":"s3://npm-registry-packages-npm-production"}},"0.4.206":{"name":"@nodeblocks/backend-sdk","version":"0.4.206","_id":"@nodeblocks/backend-sdk@0.4.206","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"db7633aeab43a9ef2d3eb1c706bb3b74fc519cf6","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.206.tgz","fileCount":222,"integrity":"sha512-u/29ebM4gCcGJmb46xYSw/7yTcnWwxHpjIncBHB7prpLiNE1D/VUi9cy0upKLEqIPsK0kJQ6laa758Ezu+VKHQ==","signatures":[{"sig":"MEUCIGIsOQtWiAO1oTTO2xkQE5SjHFijzlxYK3z+vJ8dY1p+AiEA3QWOZRBRMVhHNDeImtZsdawPeTIh6/Tl5bC6ug4Q6JY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"10ce415b381f49ee095aaeb7d1a0430ca9003216","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.206_1753172979709_0.3896918132763689","host":"s3://npm-registry-packages-npm-production"}},"0.4.207":{"name":"@nodeblocks/backend-sdk","version":"0.4.207","_id":"@nodeblocks/backend-sdk@0.4.207","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"60000e8b85af2cf0659c32b4776725fe6f702476","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.207.tgz","fileCount":222,"integrity":"sha512-w2+BMJE0Cv9YH3H50eZh2Z7FgkOYjlPdtTCnQyd12liPgmtSxqz00him9oH2SeVkCQh6gpj7ksOaqT9CQNhGZA==","signatures":[{"sig":"MEQCIAKL5B6z+WTNhkYkgkDGO+EPWO1MIIHh2TdxxgNvI0vPAiAJCdzkI8rZGyAMMmFmUV8UOwru3Wum2+Pdme2hSAlhJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"e933425a7b26580381566cd1b75e1e08965bf1bd","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.207_1753173067311_0.6044239924329347","host":"s3://npm-registry-packages-npm-production"}},"0.4.208":{"name":"@nodeblocks/backend-sdk","version":"0.4.208","_id":"@nodeblocks/backend-sdk@0.4.208","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"21300cb4d5f0398c52ca32cda49ef26381f33df6","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.208.tgz","fileCount":222,"integrity":"sha512-GcGwE38jwlUo0PRIVESQmH4w1TDpHu0HGYvOvKWr7pdPhLpayn6tpnI9s7ES6T4d6sfcQU8ZrBjpcA/Ic81ENQ==","signatures":[{"sig":"MEUCIQCER8DjuAT1088/yicbBymoRVKYYWMukXhDWxCeZnrkOgIgd9GirXN92dlcMh9V+U5OcoN4A81n76Kc98W6fSHXlRM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"830542f1639b05019b98cf547559af74541227f9","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.208_1753173084155_0.990370329327976","host":"s3://npm-registry-packages-npm-production"}},"0.4.210":{"name":"@nodeblocks/backend-sdk","version":"0.4.210","_id":"@nodeblocks/backend-sdk@0.4.210","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"5442b0018e0591d6925d01a18aa2f08a010351e1","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.210.tgz","fileCount":222,"integrity":"sha512-gQoJMuuuKMa9a3pbnq/5bjf5ni+xWDaeAtDJsq0TbbP/3Mf7Nqs40z67e+AD34DV0dFJcNdBYinbEWnOUFyR9w==","signatures":[{"sig":"MEUCIQDstDTa4NaiOm0XAxIyUuOIMarolVoumr3OnJElq6GekAIgQGKmitQjKf8R25WOjZ4J73TGnzHPfuVHFK1MCuXBF1M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"d2a86e90649104a1e87debe0277a17198a44ffe0","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.210_1753173226516_0.18562257232000734","host":"s3://npm-registry-packages-npm-production"}},"0.4.212":{"name":"@nodeblocks/backend-sdk","version":"0.4.212","_id":"@nodeblocks/backend-sdk@0.4.212","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"32ddf723c50dcfc183e3562a4925dfa671298b89","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.212.tgz","fileCount":222,"integrity":"sha512-tsxuba+iPcFELDVMzhmE+mIbl8KCdfhxrXJcFY++8kEkVwI71114WvfEMe/jnMwBtHh/90BgeEieS71if4Fkvg==","signatures":[{"sig":"MEUCIEtk6tRlbdLKQy+waKrcNv4fIldcvaUKURgUmc7O83QfAiEAsDd0ublqN+e/ltmngpNPUpHIm1T2TMB0zcv9C1OQpuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"a5ec3c272ebc741c8f903ccc789db2745e45baff","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.212_1753173341078_0.4700890111923941","host":"s3://npm-registry-packages-npm-production"}},"0.4.216":{"name":"@nodeblocks/backend-sdk","version":"0.4.216","_id":"@nodeblocks/backend-sdk@0.4.216","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"3b9f790cc0a9d8e0c0cc778b4c4c9aee3dc240e2","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.216.tgz","fileCount":222,"integrity":"sha512-JuDHZlWhiNArsYCwJAhtnC2avvZs9aw0J3wARoD0prPeqSZAYT8jwE6i5q7MnFRN9bfakIEMHSZ4l+Klimj6aQ==","signatures":[{"sig":"MEYCIQDkwn19nHbucxk1Fc0GoOSp/P9K18xmMd0Po1dsAdfjrwIhAKVEP/VSctWORT33K0wcdKE3ASf4WxYj9cHAlR38S5vB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"d7fd04bb04a9be1b0e9827e9026b83674900cedd","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.216_1753173539998_0.9378243260882104","host":"s3://npm-registry-packages-npm-production"}},"0.4.215":{"name":"@nodeblocks/backend-sdk","version":"0.4.215","_id":"@nodeblocks/backend-sdk@0.4.215","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e19de3f53ae3ba64417091e0a3daaa511ce21294","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.215.tgz","fileCount":222,"integrity":"sha512-2RnsKXipyT618Atft56LNIO339JoQXlsJnBC9KWIXsJVn692WLTOy9rgvRffPQ9B3Wd5W91ltpSm3UfpCiv2SQ==","signatures":[{"sig":"MEQCIFiFii8H6jjfYCmzGVnU6uzznXTkX8zh+HcusooppyxnAiBVfnxkNr151B4+Tr8rplhsS/8UTlykkLvM0l45NjogMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"fd9c0544c61678c74631360703be00b19d282704","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.215_1753173541038_0.6873854622755178","host":"s3://npm-registry-packages-npm-production"}},"0.4.217":{"name":"@nodeblocks/backend-sdk","version":"0.4.217","_id":"@nodeblocks/backend-sdk@0.4.217","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"bde35c05e7388470c76dec78d141f14cab407c14","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.217.tgz","fileCount":222,"integrity":"sha512-Y55m0wdaH08v0x9SynGlithQGVgZ5yUO1VMN7Pc+8/eNZFBmu0M+1u9jOjPbdxzMwfnoy7f1jsw9IUxBDdZqRg==","signatures":[{"sig":"MEUCIQCvTSPS+I7AcV3vlJkEhlPhTkuCDNmchA48KRKlyLcJjAIgYDMr+M+epX09JH1A+kOPnJfDbtFQJst1iSO3NsJDWas=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"b0115fd29f9124051c70fa1a0175cfbacb71bd81","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.217_1753173614548_0.4675369400595517","host":"s3://npm-registry-packages-npm-production"}},"0.4.218":{"name":"@nodeblocks/backend-sdk","version":"0.4.218","_id":"@nodeblocks/backend-sdk@0.4.218","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"f545119043469317f29552b54cf55ca78a5d9bb2","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.218.tgz","fileCount":222,"integrity":"sha512-07Aj1eOGvYdS32S2OnNzDP3PKuHiDtHGXvsrEjV4oTNnUuxOMwO2fVRl7maIdwMmL2ITwQecDS+hzG0u7MxO/Q==","signatures":[{"sig":"MEUCIQDDzFsM7GmWw9ZfxlyqQ3sAN29CRvhYhxVPi7gcBMvVAQIgWNuiuE/xuw0CHNA9QzOdTqsVzQo/fk4/iYwWyJT2ACY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"3bc77adc88c7d943f384c2896aba8ec36fc2cbed","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.218_1753173696732_0.4634651189012773","host":"s3://npm-registry-packages-npm-production"}},"0.4.219":{"name":"@nodeblocks/backend-sdk","version":"0.4.219","_id":"@nodeblocks/backend-sdk@0.4.219","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"4c3546961d89c6e2c7e4d252ebeab7c85c7f2fc6","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.219.tgz","fileCount":222,"integrity":"sha512-Tp/Qq9JZWtIjscB/abmGoGz+3Fg0U0l1o7wywGWmDMx79IRrXiMceF+LtyAv0YOn6qxBpf8eaCB5Lio9mwJPLg==","signatures":[{"sig":"MEUCIQCnTVwV8rwvLtdX+8ctkt/R+mWKarKxFZqSj+/LFEF3BgIgP4Lku9CaKorA5BA1D5yNICZnet/AHz/ceq8scrFuUEg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"12e9ded26ebdee478c526c590c846ec2f545fc2a","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.219_1753173752252_0.4128461921427715","host":"s3://npm-registry-packages-npm-production"}},"0.4.220":{"name":"@nodeblocks/backend-sdk","version":"0.4.220","_id":"@nodeblocks/backend-sdk@0.4.220","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"70a18b6994a8eb1fa949e9f6808e3bea897b60da","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.220.tgz","fileCount":222,"integrity":"sha512-aAQEHpiouL7gVpEc73qWJ8gJEYXQ9BE49f75Q/nXs6Qj2Pwv7UJ75Zj7EqC/IuRG90YcqieT2Nxyu+jqIlRSzQ==","signatures":[{"sig":"MEYCIQCeuqxNCfsrfw/3oh5b4ikvpZxBmpMW3Kumkay8uGOtTwIhALhk10Zax1Lkk7oDK0/+schb1pWXyWD3QOqnfD6sf9mM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"c6b0157dc0fc34b70a1fb042f36476f6fda3eb88","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.220_1753173821532_0.9794121782081142","host":"s3://npm-registry-packages-npm-production"}},"0.4.221":{"name":"@nodeblocks/backend-sdk","version":"0.4.221","_id":"@nodeblocks/backend-sdk@0.4.221","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"7a3f45852c70d3f9d2fff63048f62b68812b89fe","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.221.tgz","fileCount":222,"integrity":"sha512-0q9/YYHyXZlIUUxOlDk+UDtGe6eBYP/B1xxIq7LvG31M5GsjjfIhpe3WHIOjHePhwn+QJKY+pzyB49holuYENw==","signatures":[{"sig":"MEYCIQDTMpWZsHwGH+Y6qYevBP3UiodLruU9EF8LGvqUjTbRsAIhAM/lIl/j+hUHnStXo7JUK0JTr/r90CipOJb+ukf4bRyW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"bd698847dd18368f0db3efbe7a998d840a2c5776","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.221_1753173870308_0.8422488373719517","host":"s3://npm-registry-packages-npm-production"}},"0.4.223":{"name":"@nodeblocks/backend-sdk","version":"0.4.223","_id":"@nodeblocks/backend-sdk@0.4.223","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"0fb2f89c4e8cf85a073223e127418319ec41e962","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.223.tgz","fileCount":222,"integrity":"sha512-IGd0IHzn6eJgcbX8x5MqqcaZ269onvyfhSYf1YSYAVgwd5IaWsD2mYjk/7KUZuqc0/SHe4Sg0xyOSiY+ZR3saw==","signatures":[{"sig":"MEYCIQDoHbrSV3EfKIYbLy++GflHqgn3cbB5I6HLnBHVA+aDUwIhANhju/MSoPQm/a6tlqgwQU98lvarDcnjWZySKwDCYUtm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"fbc86fdf5da8a72b57681123e1dd2219f2afb20c","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.223_1753174003313_0.06515287352663313","host":"s3://npm-registry-packages-npm-production"}},"0.4.224":{"name":"@nodeblocks/backend-sdk","version":"0.4.224","_id":"@nodeblocks/backend-sdk@0.4.224","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"cb54df3b7322db37aba4b88d27ea1fa2d37512a2","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.224.tgz","fileCount":222,"integrity":"sha512-/MIpwkzpPssNhfPQ+vZ1XNF9wZk+52F7/55H6Dfurx+Dc0AndThVx5SqdziwHv5AEtzGagg0rg/uTH2e1KFpjQ==","signatures":[{"sig":"MEYCIQC96pIhnaP1BC/Ctm7xIyA9gAciTMxp2kNm/18iKaSz2AIhAJF2e0KzeOZXHn5i2Z4/z532nSSsfpXqntheOOJVWCKP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"3828979ad2c61f7a746862899bec633a7357e115","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.224_1753174059748_0.37574455895575354","host":"s3://npm-registry-packages-npm-production"}},"0.4.225":{"name":"@nodeblocks/backend-sdk","version":"0.4.225","_id":"@nodeblocks/backend-sdk@0.4.225","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"bf9640ae0c0f869d095af1dc90a9313f6ab473cb","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.225.tgz","fileCount":222,"integrity":"sha512-y1ysKBTpih34bKWraI21Fhuxjp5/wpCq9yQu0xh5+4p5jyIhoNk80LT7YdR+RG8S/YVW0A68xQ6Di1v8Q7DWsA==","signatures":[{"sig":"MEQCIFe4fgCkxP67sD8K/MWg0Gr3Xc1Ec3rJGTYBNESnXasRAiAxXai6l+vWej/qOquNKCklBcAe3nmJmDqbqKnjOtokYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"600631ed3b40b99d5e295c00de1d2f150cd15085","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.225_1753174128346_0.8266460214527513","host":"s3://npm-registry-packages-npm-production"}},"0.4.226":{"name":"@nodeblocks/backend-sdk","version":"0.4.226","_id":"@nodeblocks/backend-sdk@0.4.226","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"b53808b4634225e6441d410a76bf366aa4656fa3","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.226.tgz","fileCount":222,"integrity":"sha512-VSKaFI2uMYJVTl1Xz5IRJMJzCLJJBvnlnQRumJP8HfpLNNehfO36wrDkWa7ocC/8lRC1WvobzzBTOS7Q3gC95A==","signatures":[{"sig":"MEUCIGwKmuWDuieUXMCLxouxaFXZ9SXQVemAx+/HEObquq6GAiEAkO+Z42giMtPA20kFf/WDaBnaPQDIKqOCLrWPMh8ELYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"298d494d8c7a8b165830254bc99b519cfe56e3ef","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.226_1753174198371_0.6661573554971134","host":"s3://npm-registry-packages-npm-production"}},"0.4.228":{"name":"@nodeblocks/backend-sdk","version":"0.4.228","_id":"@nodeblocks/backend-sdk@0.4.228","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"445f8db7f7fecb5a58c211d8831bbf63758e7cac","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.228.tgz","fileCount":222,"integrity":"sha512-g13fuFlViZLpyTGhsJpAWyM36eUraDa0qhq+kbdVXbdgqQBxoYKkeuFUHP1/gIEcMzs5Xjf2Qi2RvqT1Xn/yjg==","signatures":[{"sig":"MEUCIEfsESgfGpEHkdmSEVYLPyC+XxqMH75YWNJrVyS4czG4AiEA2g+Nlk9pA4owKCege24T0NQbn+9qWRwaLa+Eam20lZg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"cae4896c70a7c4edeab7ac9adb8a693afc7c4fec","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.228_1753174254524_0.30544820821203444","host":"s3://npm-registry-packages-npm-production"}},"0.4.229":{"name":"@nodeblocks/backend-sdk","version":"0.4.229","_id":"@nodeblocks/backend-sdk@0.4.229","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"31b702041ff49ebc08d9ece93f194aa778615eb7","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.229.tgz","fileCount":222,"integrity":"sha512-CnlqzMZP4RDIqqU4C91uTWp0GsA6Sg/DDHUIIGkwb7YwwtSak5pCHA8ihI79cKs1bsipdabkmPvmF7L85crH0g==","signatures":[{"sig":"MEUCIQDgbZ82Gud31J6XEPubVTJ6fb8ayHjvNsRRPvCyg7k7wAIgcHvDfeaBSjWk9PAC1eDERxPByAyRgdHj7f3H7UnFnts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"badc5c1558dce7ca829fdf4646f5f75f160a660e","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.229_1753174335845_0.6478619384003184","host":"s3://npm-registry-packages-npm-production"}},"0.4.230":{"name":"@nodeblocks/backend-sdk","version":"0.4.230","_id":"@nodeblocks/backend-sdk@0.4.230","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"b2c2c7f615d8150467e00160fb24c90663b043a7","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.230.tgz","fileCount":222,"integrity":"sha512-H5xsTqMxP8mUoZbPF5QEL/RZ6bpO80ubgIfPKzpJLxIAEiTItqe3OH0ytO2KPhGk+5hoz4mVHh7ZB1uVazFlug==","signatures":[{"sig":"MEYCIQCBRMnyy1bIuhOTUQhD/3rE0vCUwie8VTj0qk140iOIdgIhAIT/EtwaP1hZ8hixUNSkrNKYiCvkIqvBegQ5MdXbWkYh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"f177df3d4ba40606ebd00b8b154bda215a0261e7","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.230_1753174415692_0.3166794165305242","host":"s3://npm-registry-packages-npm-production"}},"0.4.231":{"name":"@nodeblocks/backend-sdk","version":"0.4.231","_id":"@nodeblocks/backend-sdk@0.4.231","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"4fea36d041c8b0eac37f7451782f4046d3331d4a","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.231.tgz","fileCount":222,"integrity":"sha512-703KkA/fh52TsU6MNhvbkpsLnUnKaRX6MrHuSB76SZqvPqfV3nVCWMIaK8biGJIJWvMnZZ7tKmYfc0eXlGIjHg==","signatures":[{"sig":"MEYCIQDrhcEByVMHgt9sEij9Jnfk1eYXM1WaPp/d7ix7a2ichwIhAPVCkeANpdFX9vgPxgQP+Xmu7Bw0coWbtIIKVjMPH/FW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"97f3417723abb618bb2f29ceda30df268d7e33f2","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.231_1753174462065_0.3189114044122221","host":"s3://npm-registry-packages-npm-production"}},"0.4.235":{"name":"@nodeblocks/backend-sdk","version":"0.4.235","_id":"@nodeblocks/backend-sdk@0.4.235","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"9e350e03c1dc91d58c59a48ea0f9d1e6a2830684","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.235.tgz","fileCount":222,"integrity":"sha512-NM4ISwNmJ18H12bHGf7XfjP9v7R+hIN+TvhsqodH6vUd/i6PQAxim6yuX5QzAK3AApC0qDOIHjMFSHFoqnAUrw==","signatures":[{"sig":"MEUCIQC7ApdTbSCD6TROf8BX2A82m15x6SWl9RkydQIrKU+rpwIgT6dVvCAVqxTQUd80YwqMEDV4YCw+OJb8G8WHbKg8Ukk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"9ce5e653559ea78df16fd16d3a6d386a7c361c4d","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.235_1753174645021_0.9167125372486022","host":"s3://npm-registry-packages-npm-production"}},"0.4.236":{"name":"@nodeblocks/backend-sdk","version":"0.4.236","_id":"@nodeblocks/backend-sdk@0.4.236","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"0aec73570c88fd5c8aba6cce5b60392bd604f330","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.236.tgz","fileCount":222,"integrity":"sha512-dda5Ze9XIrtdhzTTU116Rt2HCT9Rge6YyT00FvXybagnRllAca36ELvAmO5uzdhKEPjUiseyeSZ84D2C8sqCTQ==","signatures":[{"sig":"MEUCIBs1qNonKsIMRT1Eukz6kuPGX04W7y0UGt1EhEXqh4isAiEA11+P/uzLFE175AWKCl7uzPDHIGRIqkHxJ5WtaA8iZvo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"1bcc397f0161b29be6a92376d33ce4e31c629767","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.236_1753174698472_0.1544324644691457","host":"s3://npm-registry-packages-npm-production"}},"0.4.237":{"name":"@nodeblocks/backend-sdk","version":"0.4.237","_id":"@nodeblocks/backend-sdk@0.4.237","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"da6266ae2210bea3a7f343649d9dacce39f8cbd1","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.237.tgz","fileCount":222,"integrity":"sha512-f5m99jtii46f7Rhwj45qLJd06SEaS9Ye+qeeNtZguA9J1R3Tc6TpF/oBlyCWPV2q7Dge6Soi5NieOgASmmOPpw==","signatures":[{"sig":"MEQCIA984vDi0cBJI33pc+CFckaGDOsGWkI4f6lxiSto0mzUAiAz3kPu4HEd8KOmvvU4Aa9zdlFM3x+T7FnL6MwlM9H1oA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"6b8df098641fb83accb8c64eeeed95b8fafd16e8","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.237_1753174761526_0.4222897071985878","host":"s3://npm-registry-packages-npm-production"}},"0.4.238":{"name":"@nodeblocks/backend-sdk","version":"0.4.238","_id":"@nodeblocks/backend-sdk@0.4.238","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e3a16b95470a8fdbd95e2a1d9b222f1f55fffa67","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.238.tgz","fileCount":222,"integrity":"sha512-gTPhSX9tqlF2f34RR0qFCIcHFr6GOhDhEECdesBuxu2zOPGnT0nd7YSDCDKFy1H9VEqdg9icgVL3cutD3fzSDQ==","signatures":[{"sig":"MEYCIQDx+V8QW+h5/gIZsJYkkr3h7tCuhZ0H7PdGtwZDnnTdhAIhAI6a5RKSCPsWfJMJh8i0jmBk+yepWkRHZkyTDjElwcIC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"10592196c2909df60e85531f90902ebd193d3467","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.238_1753174821769_0.7379183512441028","host":"s3://npm-registry-packages-npm-production"}},"0.4.239":{"name":"@nodeblocks/backend-sdk","version":"0.4.239","_id":"@nodeblocks/backend-sdk@0.4.239","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"9c38284f4a85c497506e2d75921776bbd15362a3","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.239.tgz","fileCount":222,"integrity":"sha512-bmUUZLe1v2aNhvoLfXqYtdRc5Noz622M9oCTcVAlvGZpAmOKfwX902vFmwRrq5Kbr4XqGdNOnK3rhtNA53VllA==","signatures":[{"sig":"MEYCIQC1BwYIZulwITHe+tzNyHRgmCSQ/hwyIWHqqkqtd/jNuQIhAMDcnXvA1sL/NNNlVd+S2asSZAodz3qhvYdEo7mDAyRP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"8c70d2fa56237d42d9b261abc84ffaa4ae59e723","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.239_1753174908315_0.9557674514156453","host":"s3://npm-registry-packages-npm-production"}},"0.4.242":{"name":"@nodeblocks/backend-sdk","version":"0.4.242","_id":"@nodeblocks/backend-sdk@0.4.242","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"c4fe0f5aaf0becc3996fc72c7e7a1746fecebd0a","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.242.tgz","fileCount":222,"integrity":"sha512-GEiBI/d/07KA8wd3CozgV7kpTNt7cLVm4VtzfHL6w3obDplEG/Sh4lojvEQCPjvX9h14Jz/WXUVmZP/JA60dqw==","signatures":[{"sig":"MEUCIBHofwEFz8PqwYPKNtpbRIz1F1CJj6Kgw62LlRmr0G7TAiEAiUgLMLh/8pQJdmttLJiNMZSrtrelkBjPNY5pxoXzGMo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"7b49bd4a4f7ecc337c3b6fa90018f5bf20d73c00","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.242_1753175067026_0.10960562069785618","host":"s3://npm-registry-packages-npm-production"}},"0.4.244":{"name":"@nodeblocks/backend-sdk","version":"0.4.244","_id":"@nodeblocks/backend-sdk@0.4.244","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"e542ce4359830b5d524efbaed64b8d9aff0e73e5","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.244.tgz","fileCount":222,"integrity":"sha512-ry3uJOkzhR5pnO+Ex8czVLK9O4guwul5zU/gSz0J4FnA7lFom7atQ2trPs/TrnfTa+r8Ov9AN3GIpOR4l2vpoQ==","signatures":[{"sig":"MEQCIGEGgo8fXC4aitg9adh6DrzglOEzIUZn34eqgoOtnNO+AiBUh9Wt4Ybj2rOdMEQ6/tXE8Sq2/5EOb/RamnmIKIQbvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"c524461742009c19b318475c75206fe2ed785c89","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.244_1753175116001_0.04279393748755145","host":"s3://npm-registry-packages-npm-production"}},"0.4.245":{"name":"@nodeblocks/backend-sdk","version":"0.4.245","_id":"@nodeblocks/backend-sdk@0.4.245","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"f311df8b8bb8696e33d2cf1b99b2fd06c239b375","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.245.tgz","fileCount":222,"integrity":"sha512-enQ6M56KcszW4mIEiTSF/DbIvsTiNKyUvTGOaa1vMi0qI+5al6ca+/KPkkz6KpH6dVXEjMbGv2KAjQZvZO2o/w==","signatures":[{"sig":"MEUCIBSn42jxcZ1JRVYnptq3s858zOSaFaSFysf9/uVj/+vhAiEAnfnGDc3svYV7aBVMsHWdRAub6pIuWxNAzYYVYEkTnng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"016576a2261f202e0c048094a0ea059017f2594f","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.245_1753175193391_0.7779140599569867","host":"s3://npm-registry-packages-npm-production"}},"0.4.246":{"name":"@nodeblocks/backend-sdk","version":"0.4.246","_id":"@nodeblocks/backend-sdk@0.4.246","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"44502a505b204681021e2cca4eb3dee7fd3a9376","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.246.tgz","fileCount":222,"integrity":"sha512-WWw8n3ZlsuBh6U12wrXD6SDOX9i5zmuuXqNPqqqd7mskXgnU61TWp3oh/bZOIBd5TZ4hrff7I5dkp0l7fhpKfQ==","signatures":[{"sig":"MEUCIQDGpN+Fwrato73esd1yKl0aprHmWlmjFufzVA0wma2F2gIgWPQTf5taoDF5MTVlL+aE2G5FBhA6UmgP2MIyg2FmoVs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"e242a0bab7b52700b62af6a73c0ad665a03a418d","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.246_1753175264884_0.6996140675321585","host":"s3://npm-registry-packages-npm-production"}},"0.4.247":{"name":"@nodeblocks/backend-sdk","version":"0.4.247","_id":"@nodeblocks/backend-sdk@0.4.247","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"71e1e997a85f6addb792f1e5b1ed380bb398689c","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.247.tgz","fileCount":222,"integrity":"sha512-7L3nwuEPfYsSKMIzrFAof+yNKsUIKGV0MCt/XWom9GJ1zmIHCzcfP9o7wMY+ejRaSPAWU7viTcn5ynVgVFEqmw==","signatures":[{"sig":"MEUCIHXCN8+RIhn77UV5NGqvuVzQuMwmIHMt2ZfWCwWW3leOAiEAh9qtVh4qY63rCmJ2AoStmK6h1goAq9qW1ufFUsZPSw0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1122107},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"3ac4d4c38f0cadc03a8156364577df9a77e1fada","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.17.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.247_1753175333156_0.9074028609806477","host":"s3://npm-registry-packages-npm-production"}},"0.4.300":{"name":"@nodeblocks/backend-sdk","version":"0.4.300","_id":"@nodeblocks/backend-sdk@0.4.300","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"aaf1accd7f689afd0ab46a65248e9077f62452e1","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.4.300.tgz","fileCount":232,"integrity":"sha512-aBHlM53QJvBjZ5XdokXzVfpRzEfXMp/jZvN28xTYGP7C+ZwKyLLDjaKguJRh6TdlO9I/Rj7KXvLi95XGVISOZw==","signatures":[{"sig":"MEUCIQDjwI3uEmhxxzy8BPnhYdtuII2kB89iYnKL41gaZ6fNdQIgEvbGBq63ngWmZhfXhU7Mr6ku7K/spmCExhnq2U+PsA8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1111875},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"a70b39463b1a863eb6ecc03cca4af58c079905e5","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell '**/*.{ts,js,md,json,yml}'","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.15.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","pino-http":"^10.4.0","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","cspell":"^9.0.1","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/supertest":"^6.0.3","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.4.300_1753176277763_0.4534220756132239","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@nodeblocks/backend-sdk","version":"0.5.0","_id":"@nodeblocks/backend-sdk@0.5.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"a5cec023c61747e07fbbf1abf77b73a622ab622a","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.5.0.tgz","fileCount":332,"integrity":"sha512-a3aEFPhNU47xFYQiPjIuAm/QoilgG3+ArEjanD4adymY/JYoP+KmFm85EBOAB9wZkyQJrlblDqKHiwBeqyhkpw==","signatures":[{"sig":"MEYCIQC6Obr4PWsHeGozxk61KUMQZyxYpHDfHQWdRzgt6END0AIhAKzKP3ShyqXgn8R5UGgHihQ1o9CZIGvwnIKNV6M2jhu/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1602742},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"179eb8f5ebce878ffce24a184d1635dbfa3edaea","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.15.1","dependencies":{"ms":"^2.1.3","ajv":"^8.17.1","pino":"^9.7.0","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","passport":"^0.7.0","pino-http":"^10.4.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.32.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.5.0_1755592934852_0.3014410039646629","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@nodeblocks/backend-sdk","version":"0.6.0","_id":"@nodeblocks/backend-sdk@0.6.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"ba12f6443df0211cff9a0139010f6711dbafc078","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.6.0.tgz","fileCount":734,"integrity":"sha512-8OVazR8CQfV04Ia2u9iki8rd016FnpT4kpLrciuT+sdngDnUmkCmbedT8qE0sHs9pc+VEmpbkG+FId1ux3ufew==","signatures":[{"sig":"MEQCIDX2IaCD/ap8Z03xkBniW/TisLfv4aiPNuODVEjtWQjuAiAjwHjcSQ6ut1NKDoXwp6qxxPrESDbYap4WcGmnxW1f6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3370513},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"8224eec9478c4161b31ba4c782753db93cb3a377","scripts":{"lint":"eslint --fix","repl":"ts-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.15.1","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.7.0","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","passport":"^0.7.0","pino-http":"^10.4.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","path-to-regexp":"^8.2.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","superwstest":"^2.1.1","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.32.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.6.0_1756384240272_0.7359418165912406","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@nodeblocks/backend-sdk","version":"0.7.0","_id":"@nodeblocks/backend-sdk@0.7.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basal-chris","email":"chris@basal.dev"}],"dist":{"shasum":"5479c1024418b02769b07e9bffb3d0365035148b","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.7.0.tgz","fileCount":334,"integrity":"sha512-76wottBxzYvYUKRk5aMrY0xX/hh9MNkCr1AmF8BhmrXiQu6o4/fztmpxz1zui7UNA67ufUIbLpwX4ELFJ3JJvw==","signatures":[{"sig":"MEYCIQCBcx0lr1JSZw8OYQaMTksoftXi4wvF/6GW8SGsZbiPiwIhAIq7mqRMGPVrRz1YRueGc7UiTV489kKTAUEgDpRNSchX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1843348},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"9e7e268e53ede3435194d9fc0afff4961a612055","scripts":{"lint":"eslint --fix","repl":"babel-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.15.1","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.7.0","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","passport":"^0.7.0","pino-http":"^10.4.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","path-to-regexp":"^8.2.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.1","@babel/cli":"^7.28.3","typescript":"^5.8.3","@babel/core":"^7.28.3","@babel/node":"^7.28.0","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","superwstest":"^2.1.1","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@babel/preset-env":"^7.28.3","@types/mime-types":"^3.0.1","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.32.1","eslint-plugin-simple-import-sort":"^12.1.1","@babel/plugin-proposal-pipeline-operator":"^7.27.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.7.0_1757640209025_0.1296547770007901","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@nodeblocks/backend-sdk","version":"0.8.0","_id":"@nodeblocks/backend-sdk@0.8.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"dist":{"shasum":"924b6fa1c9ad91417bc4728cd344ddf314a3d7ce","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.8.0.tgz","fileCount":582,"integrity":"sha512-wIKOzeksTMXWykUPhQ6sJPi6uRFqXeOkCke7vA1jaM0SqPtseEFUe1OCYodeEnYm9Hr8Cve9j6lFi5IOIyKcvQ==","signatures":[{"sig":"MEYCIQCavQZcgyQvm7n7sKc3FP9bH+NcPCK2kw/sdL2Fxc1sSQIhAO48vDAowBBHpP7zzjJxzZzKwK8O2sTz79kP5aBCtvX+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3634133},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"659cbe572d536b8abbaa9165e0035f399008f16e","scripts":{"lint":"eslint --fix","repl":"babel-node","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","prepare":"husky","lint:check":"eslint","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.15.1","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.7.0","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.30.1","bcrypt":"^6.0.0","express":"^4.18.2","mongodb":"^6.17.0","passport":"^0.7.0","pino-http":"^10.4.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.0.0","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.5","lodash.isempty":"^4.4.0","path-to-regexp":"^8.2.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.16.0","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.3","cspell":"^9.0.1","dotenv":"^17.2.0","eslint":"^9.26.0","vitest":"^3.1.3","globals":"^16.1.0","ts-node":"^10.9.2","prettier":"^3.5.3","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.1","@babel/cli":"^7.28.3","typescript":"^5.8.3","@babel/core":"^7.28.3","@babel/node":"^7.28.0","@types/jest":"^29.5.12","@types/node":"^20.11.19","lint-staged":"^16.0.0","superwstest":"^2.1.1","@types/ramda":"^0.30.2","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.2.9","@types/express":"^4.17.21","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@babel/preset-env":"^7.28.3","@types/mime-types":"^3.0.1","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3","eslint-plugin-import":"^2.31.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.1.4","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.4.0","@typescript-eslint/parser":"^8.31.0","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.32.1","eslint-plugin-simple-import-sort":"^12.1.1","@babel/plugin-proposal-pipeline-operator":"^7.27.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.8.0_1758780554764_0.09370188179614591","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@nodeblocks/backend-sdk","version":"0.9.0","_id":"@nodeblocks/backend-sdk@0.9.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"dist":{"shasum":"fb0a090ad68d7767788cd04958bb3110430357be","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.9.0.tgz","fileCount":360,"integrity":"sha512-Bfod1fUC1LtDSl/oc3Ng0pWa1WekQAxcmzGcamzEsLcRBmfWa85Ja+68PetVi7NOhHaOY9SsEVVYtjtLMbL7Zw==","signatures":[{"sig":"MEUCIQDINd2fJ09PgGoh86XLn3v0IukZrRsQ9ADc/n5Qra7UJAIgIKA7q3gjOoM6XnfDoYqMamEgemcxNKaaiz8l4qYPhiA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2383442},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"4f07ea6ddd7eb6e9dda3380a1f13188f0e994554","scripts":{"lint":"eslint --fix","repl":"npx ts-node@latest","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","pr-tree":"node --env-file .env.local ./scripts/pr-tree.js --current-branch","prepare":"husky","lint:check":"eslint","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","generate-openapi":"ts-node scripts/openapi/index.ts","coverage:functions":"node scripts/function-coverage.mjs","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.2","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.15.1","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.13.1","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.32.0","bcrypt":"^6.0.0","express":"^4.21.2","mongodb":"^6.20.0","passport":"^0.7.0","pino-http":"^10.5.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","ajv-formats":"^3.0.1","pino-pretty":"^13.1.2","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.6","lodash.isempty":"^4.4.0","path-to-regexp":"^8.3.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.17.2","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.4","cspell":"^9.2.1","dotenv":"^17.2.3","eslint":"^9.37.0","vitest":"^3.2.4","globals":"^16.4.0","ts-node":"^10.9.2","prettier":"^3.6.2","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.4","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^20.19.21","lint-staged":"^16.2.4","superwstest":"^2.1.1","@types/ramda":"^0.31.1","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.4.0","@types/express":"^4.17.23","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.2.4","eslint-plugin-import":"^2.32.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.2.3","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.1","@vitest/coverage-istanbul":"^3.2.4","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.46.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.9.0_1762242212988_0.9085340728489206","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@nodeblocks/backend-sdk","version":"0.9.1","_id":"@nodeblocks/backend-sdk@0.9.1","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"dist":{"shasum":"a4541eea1dc36f6eaf15fea45ece74052ef28906","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.9.1.tgz","fileCount":362,"integrity":"sha512-0LaQ/xYalvzsEpnb9vQajYlJX47lnLBA/iinh/xI5a1GbWZ9vP5vr1OVKCvlvPeo0x1fhUH/F5cPKfCN03Qk1w==","signatures":[{"sig":"MEUCIBO7e0Xqd91hOHtCDYp4Rhg402jAaQ1MSK0vr2O14UojAiEAq99+785T6x4flOyx1eRNdr8+MP37ee5AQaMr7dpzN/g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2412992},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"378be200bf7f1635444547a8bf6bf92f13b60449","scripts":{"lint":"eslint --fix","repl":"npx ts-node@latest","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","pr-tree":"node --env-file .env.local ./scripts/pr-tree.js --current-branch","prepare":"husky","lint:check":"eslint","spec:serve":"npx @scalar/cli document serve -p 8080 docs/openapi/openapi.json","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","spec:generate":"ts-node scripts/openapi/index.ts","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","coverage:functions":"node scripts/function-coverage.mjs","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"_npmVersion":"10.9.4","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.22.0","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.13.1","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.32.0","bcrypt":"^6.0.0","express":"^4.21.2","mongodb":"^6.20.0","passport":"^0.7.0","pino-http":"^10.5.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","safe-regex":"^2.1.1","ajv-formats":"^3.0.1","pino-pretty":"^13.1.2","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.6","lodash.isempty":"^4.4.0","path-to-regexp":"^8.3.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.17.2","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","sharp":"^0.34.4","cspell":"^9.2.1","dotenv":"^17.2.3","eslint":"^9.37.0","vitest":"^3.2.4","globals":"^16.4.0","ts-node":"^10.9.2","prettier":"^3.6.2","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.4","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^20.19.21","lint-staged":"^16.2.4","superwstest":"^2.1.1","@types/ramda":"^0.31.1","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.4.0","@types/express":"^4.17.23","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/safe-regex":"^1.1.6","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.2.4","eslint-plugin-import":"^2.32.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.2.3","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.1","@vitest/coverage-istanbul":"^3.2.4","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.46.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.9.1_1769048409385_0.2867018871495828","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@nodeblocks/backend-sdk","version":"0.10.0","_id":"@nodeblocks/backend-sdk@0.10.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"dist":{"shasum":"4802da95afaa3e0874c61f4ba3870c34aa8d4023","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.10.0.tgz","fileCount":396,"integrity":"sha512-Y8/vgKoz07qnoi2Exnmx0RtJiClc9lcFQg10aEcUwIK1RJGfjI9ChT/Loqk7jRDPwsUfZllriS+vtg2ERSysTQ==","signatures":[{"sig":"MEYCIQC5W+bEs5H7SOo5UlW4x4Pc4YCfxrPWixnDYttBWlWtOgIhAPpduHk1Z/xHK4uIHi6ntey6c0EIQSRBnXW8sv05jk7e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2521340},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"1e7442b5cd9ab563eb35353bcc47b2dd6a1c58fb","scripts":{"lint":"eslint --fix","repl":"npx ts-node@latest","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","pr-tree":"node --env-file .env.local ./scripts/pr-tree.js --current-branch","prepare":"husky","lint:check":"eslint","spec:serve":"npx @scalar/cli document serve -p 8080 docs/openapi/openapi.json","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","spec:generate":"ts-node scripts/openapi/index.ts","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","coverage:functions":"node scripts/function-coverage.mjs","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"overrides":{"@google-cloud/storage":{"fast-xml-parser":">=5.3.4"}},"_npmVersion":"10.9.4","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.22.1","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.13.1","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.32.0","bcrypt":"^6.0.0","express":"^4.21.2","mongodb":"^6.20.0","passport":"^0.7.0","pino-http":"^10.5.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","safe-regex":"^2.1.1","ajv-formats":"^3.0.1","pino-pretty":"^13.1.2","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.6","lodash.isempty":"^4.4.0","path-to-regexp":"^8.3.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.17.2","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.12.10","husky":"^9.1.7","sharp":"^0.34.4","cspell":"^9.2.1","dotenv":"^17.2.3","eslint":"^9.37.0","vitest":"^3.2.4","globals":"^16.4.0","ts-node":"^10.9.2","prettier":"^3.6.2","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.4","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^20.19.21","lint-staged":"^16.2.4","superwstest":"^2.1.1","@types/ramda":"^0.31.1","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.4.0","@types/express":"^4.17.23","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/safe-regex":"^1.1.6","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.2.4","eslint-plugin-import":"^2.32.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.2.3","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.1","@vitest/coverage-istanbul":"^3.2.4","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.46.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.10.0_1773725563453_0.43188841816125834","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@nodeblocks/backend-sdk","version":"0.10.1","_id":"@nodeblocks/backend-sdk@0.10.1","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"dist":{"shasum":"9b8d76c632e36c0c89b385892f9434811c2e2ae3","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.10.1.tgz","fileCount":396,"integrity":"sha512-hm/ZJAvJiveB6v4nOwx2XNlw0fXMtI7I6OZC6IW0KKF5vDGf1C8SbsHstCBv8W5ZJGI7TQUhxfMkuW8N2CKCPw==","signatures":[{"sig":"MEQCIGs07ZI9+7wNNu/o3mbNHB4GW2za5vTHUE0LLYukoh2tAiAaW93+pNNSSNj5Yke0eSlub788T8QmnlF0DpZNOuJdCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2521385},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"1bb9a095abe62a291faac08dda13c0118ad9e40d","scripts":{"lint":"eslint --fix","repl":"npx ts-node@latest","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","pr-tree":"node --env-file .env.local ./scripts/pr-tree.js --current-branch","prepare":"husky","lint:check":"eslint","spec:serve":"npx @scalar/cli document serve -p 8080 docs/openapi/openapi.json","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","spec:generate":"ts-node scripts/openapi/index.ts","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","coverage:functions":"node scripts/function-coverage.mjs","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"overrides":{"@google-cloud/storage":{"fast-xml-parser":">=5.3.4"}},"_npmVersion":"10.9.7","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.22.2","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.13.1","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.32.0","bcrypt":"^6.0.0","express":"^4.21.2","mongodb":"^6.20.0","passport":"^0.7.0","pino-http":"^10.5.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","safe-regex":"^2.1.1","ajv-formats":"^3.0.1","pino-pretty":"^13.1.2","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.6","lodash.isempty":"^4.4.0","path-to-regexp":"^8.3.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.17.2","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.12.10","husky":"^9.1.7","sharp":"^0.34.4","cspell":"^9.2.1","dotenv":"^17.2.3","eslint":"^9.37.0","vitest":"^3.2.4","globals":"^16.4.0","ts-node":"^10.9.2","prettier":"^3.6.2","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.4","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^20.19.21","lint-staged":"^16.2.4","superwstest":"^2.1.1","@types/ramda":"^0.31.1","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.4.0","@types/express":"^4.17.23","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/safe-regex":"^1.1.6","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.2.4","eslint-plugin-import":"^2.32.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.2.3","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.1","@vitest/coverage-istanbul":"^3.2.4","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.46.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.10.1_1777621177296_0.9083779185086296","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@nodeblocks/backend-sdk","version":"0.11.0","_id":"@nodeblocks/backend-sdk@0.11.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"dist":{"shasum":"331a987adc1a6e987db1e67eda22c447ced6f430","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.11.0.tgz","fileCount":386,"integrity":"sha512-hzW/ZS0vW6CqbDRvGk/CNXkDRLshw0ZAUvnXAp+VldomoOe+2gfV7zk3eGZaHz4QLtJNOmlC3T13pmeJM5/eAQ==","signatures":[{"sig":"MEUCIQDIq+4BeyY8G81KL/bXrqvpShHwyigEhmSR6r+jxi+TsAIge0LbkPNNYdJ7CupoeMXRFp3gtO2Lf0n2EkuWByToWkA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2520010},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"2c5e74eae247cfcdae04e62da2248cc4205b085b","scripts":{"lint":"eslint --fix","repl":"npx ts-node@latest","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","pr-tree":"node --env-file .env.local ./scripts/pr-tree.js --current-branch","prepare":"husky","lint:check":"eslint","spec:serve":"npx @scalar/cli document serve -p 8080 docs/openapi/openapi.json","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","spec:generate":"ts-node scripts/openapi/index.ts","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","coverage:functions":"node scripts/function-coverage.mjs","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"overrides":{"@google-cloud/storage":{"fast-xml-parser":">=5.3.4"}},"_npmVersion":"10.9.8","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.22.3","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.13.1","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.32.0","bcrypt":"^6.0.0","express":"^4.21.2","mongodb":"^6.20.0","passport":"^0.7.0","pino-http":"^10.5.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","safe-regex":"^2.1.1","ajv-formats":"^3.0.1","pino-pretty":"^13.1.2","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.6","lodash.isempty":"^4.4.0","path-to-regexp":"^8.3.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.17.2","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.12.10","husky":"^9.1.7","sharp":"^0.34.4","cspell":"^9.2.1","dotenv":"^17.2.3","eslint":"^9.37.0","vitest":"^3.2.4","globals":"^16.4.0","ts-node":"^10.9.2","prettier":"^3.6.2","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.4","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^20.19.21","lint-staged":"^16.2.4","superwstest":"^2.1.1","@types/ramda":"^0.31.1","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.4.0","@types/express":"^4.17.23","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/safe-regex":"^1.1.6","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.2.4","eslint-plugin-import":"^2.32.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.2.3","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.1","@vitest/coverage-istanbul":"^3.2.4","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.46.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.11.0_1779776924646_0.8618604073852854","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@nodeblocks/backend-sdk","version":"0.12.0","_id":"@nodeblocks/backend-sdk@0.12.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"dist":{"shasum":"1c51a96e617fc99fdcbb8dacf536ab11c176fc40","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.12.0.tgz","fileCount":386,"integrity":"sha512-fF3MAUrCXRmu/saYAanjBb2Pka4/CRHt4xBWOtFPtewhn1LATxT3XFKtX28H7IhEILmynWBbUP0hhRHzn4CFCA==","signatures":[{"sig":"MEUCIB33pjJ3G1vNyFmIwvgHYJJCZ8PRTaWwXwdvjwza9IA7AiEAk1RQohs6ZynmGdjZSrwSF3GuccTxRZloi9Xpqml80nE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2522694},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"dc231157c31624f1e8dff134e8697beef12c0144","scripts":{"lint":"eslint --fix","repl":"npx ts-node@latest","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","pr-tree":"node --env-file .env.local ./scripts/pr-tree.js --current-branch","prepare":"husky","lint:check":"eslint","spec:serve":"npx @scalar/cli document serve -p 8080 docs/openapi/openapi.json","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","spec:generate":"ts-node scripts/openapi/index.ts","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","coverage:functions":"node scripts/function-coverage.mjs","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"overrides":{"form-data":">=2.5.6","@google-cloud/storage":{"fast-xml-parser":">=5.3.4"}},"_npmVersion":"10.9.8","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.23.1","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.13.1","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.32.0","bcrypt":"^6.0.0","express":"^4.21.2","mongodb":"^6.20.0","passport":"^0.7.0","pino-http":"^10.5.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","safe-regex":"^2.1.1","ajv-formats":"^3.0.1","pino-pretty":"^13.1.2","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.6","lodash.isempty":"^4.4.0","path-to-regexp":"^8.3.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.17.2","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.12.10","husky":"^9.1.7","sharp":"^0.34.4","cspell":"^9.2.1","dotenv":"^17.2.3","eslint":"^9.37.0","vitest":"^3.2.6","globals":"^16.4.0","ts-node":"^10.9.2","prettier":"^3.6.2","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.4","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^20.19.21","lint-staged":"^16.2.4","superwstest":"^2.1.1","@types/ramda":"^0.31.1","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.4.0","@types/express":"^4.17.23","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/safe-regex":"^1.1.6","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.2.6","eslint-plugin-import":"^2.32.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.2.3","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.1","@vitest/coverage-istanbul":"^3.2.6","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.46.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.12.0_1783390323993_0.9609958032008596","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@nodeblocks/backend-sdk","version":"0.13.0","_id":"@nodeblocks/backend-sdk@0.13.0","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"dist":{"shasum":"71ca8ada86f666f7dceb7ae7b8db4d5223f27b85","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.13.0.tgz","fileCount":374,"integrity":"sha512-tZjGtcO6WLr+PAaV26IoaQUAoWnmQc3bYgRTPfWeCe/jBZEs/XJ7hWmcOYiqduoM9eW+IQZledsMVmh2hNsgoA==","signatures":[{"sig":"MEUCIEVKINtZUUCBWaJWscdyX7NKUMOgbcKY5+410e5cagxiAiEA7LsbbDOgYjIwyyhS/Cye4IdYqLyRKk1/vbXgzHVcBo0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2515020},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"890d7b91bf92be8b33cec3fb48eb95f9ba322ec2","scripts":{"lint":"eslint --fix","repl":"npx ts-node@latest","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","pr-tree":"node --env-file .env.local ./scripts/pr-tree.js --current-branch","prepare":"husky","lint:check":"eslint","spec:serve":"npx @scalar/cli document serve -p 8080 docs/openapi/openapi.json","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","spec:generate":"ts-node scripts/openapi/index.ts","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","coverage:functions":"node scripts/function-coverage.mjs","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},"overrides":{"form-data":">=2.5.6","@google-cloud/storage":{"fast-xml-parser":">=5.3.4"}},"_npmVersion":"10.9.8","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"22.23.1","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.13.1","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.32.0","bcrypt":"^6.0.0","express":"^4.21.2","mongodb":"^6.20.0","passport":"^0.7.0","pino-http":"^10.5.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","safe-regex":"^2.1.1","ajv-formats":"^3.0.1","pino-pretty":"^13.1.2","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.6","lodash.isempty":"^4.4.0","path-to-regexp":"^8.3.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.17.2","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.12.10","husky":"^9.1.7","sharp":"^0.34.4","cspell":"^9.2.1","dotenv":"^17.2.3","eslint":"^9.37.0","vitest":"^3.2.6","globals":"^16.4.0","ts-node":"^10.9.2","prettier":"^3.6.2","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.4","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^20.19.21","lint-staged":"^16.2.4","superwstest":"^2.1.1","@types/ramda":"^0.31.1","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.4.0","@types/express":"^4.17.23","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/safe-regex":"^1.1.6","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.2.6","eslint-plugin-import":"^2.32.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.2.3","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.1","@vitest/coverage-istanbul":"^3.2.6","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.46.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.13.0_1784036518372_0.7711528690071634","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@nodeblocks/backend-sdk","version":"0.13.1","_id":"@nodeblocks/backend-sdk@0.13.1","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"dist":{"shasum":"f04af954db1fe7f9b9e31c371d9c41c3767ae7f6","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.13.1.tgz","fileCount":374,"integrity":"sha512-HEpVN+s5P2/irD9yg5N+AbmhI1knPnNE4FosW798YwJeKlNK8l6N2uKKw+E9b0UNZJXuZdfkO2En0csc5uKqug==","signatures":[{"sig":"MEUCIGGqt8B6Ksxa3lBNSnWVLv11oB7CWnd3qIj7RO5T3vfwAiEAhLmVGORaejlDmMO1UpTZJEGE4cphQtPDc0zjrpWqncE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2515020},"main":"dist/src/index.js","types":"./dist/src/index.d.ts","gitHead":"070d7dd8680481370c356505dc17a4f68c61f79b","scripts":{"lint":"eslint --fix","repl":"npx ts-node@latest","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","pr-tree":"node --env-file .env.local ./scripts/pr-tree.js --current-branch","prepare":"husky","lint:check":"eslint","spec:serve":"npx @scalar/cli document serve -p 8080 docs/openapi/openapi.json","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","spec:generate":"ts-node scripts/openapi/index.ts","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","coverage:functions":"node scripts/function-coverage.mjs","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev","approver":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"}},"overrides":{"form-data":">=2.5.6","@google-cloud/storage":{"fast-xml-parser":">=5.3.4"}},"_npmVersion":"11.19.0","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"_nodeVersion":"26.7.0","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.13.1","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.32.0","bcrypt":"^6.0.0","express":"^4.21.2","mongodb":"^6.20.0","passport":"^0.7.0","pino-http":"^10.5.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","safe-regex":"^2.1.1","ajv-formats":"^3.0.1","pino-pretty":"^13.1.2","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.6","lodash.isempty":"^4.4.0","path-to-regexp":"^8.3.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.17.2","passport-google-oauth20":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.12.10","husky":"^9.1.7","sharp":"^0.35.3","cspell":"^9.2.1","dotenv":"^17.2.3","eslint":"^9.37.0","vitest":"^3.2.6","globals":"^16.4.0","ts-node":"^10.9.2","prettier":"^3.6.2","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.4","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^20.19.21","lint-staged":"^16.2.4","superwstest":"^2.1.1","@types/ramda":"^0.31.1","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.4.0","@types/express":"^4.17.23","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/safe-regex":"^1.1.6","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.2.6","eslint-plugin-import":"^2.32.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.2.3","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.1","@vitest/coverage-istanbul":"^3.2.6","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.46.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/backend-sdk_0.13.1_1786679061910_0.9331127707654312","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"_id":"@nodeblocks/backend-sdk@0.14.0","dist":{"shasum":"18bc15b87f45605e44d8711b0bc82d952df3b9a3","tarball":"https://registry.npmjs.org/@nodeblocks/backend-sdk/-/backend-sdk-0.14.0.tgz","integrity":"sha512-TKsP6l1JiNC455PiDf/P92R2RMSKu/tXrT7yhON+Wp6mhPYTDdVEHXwTg6nDQ1FvE45LaFSJHXu6x6+7mRZrNw==","fileCount":374,"unpackedSize":2514459,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDjcqbxdzbHOQnX+WajupTiv+F8OzzYkMkpMaobnr4qTAIgCYJFangWQMyLxExAA04zQIzwkXbGvI9uZCz4d2U+EhU="}]},"main":"dist/src/index.js","name":"@nodeblocks/backend-sdk","types":"./dist/src/index.d.ts","gitHead":"537368683f2770ffef936d5ab5b827ecbc6186d4","scripts":{"lint":"eslint --fix","repl":"npx ts-node@latest","test":"cross-env DISABLE_LOGGING=true vitest run --silent --typecheck.tsconfig tsconfig.test.json","build":"tsc --project tsconfig.build.json","start":"node dist/src/index.js","format":"prettier --write \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","pr-tree":"node --env-file .env.local ./scripts/pr-tree.js --current-branch","prepare":"husky","lint:check":"eslint","spec:serve":"npx @scalar/cli document serve -p 8080 docs/openapi/openapi.json","spellcheck":"cspell \"**/*.{ts,js,md,json,yml}\"","test:watch":"vitest --watch --typecheck.tsconfig tsconfig.test.json","build:watch":"tsc --watch --project tsconfig.build.json","format:check":"prettier --check \"**/*.{js,ts,json,css,scss,md,yaml,yml}\"","test:verbose":"vitest run --typecheck.tsconfig tsconfig.test.json","spec:generate":"ts-node scripts/openapi/index.ts","test:coverage":"cross-env DISABLE_LOGGING=true vitest run --silent --coverage --typecheck.tsconfig tsconfig.test.json","coverage:functions":"node scripts/function-coverage.mjs","test:coverage:verbose":"vitest run --coverage --typecheck.tsconfig tsconfig.test.json","test:partial-coverage:verbose":"vitest run --coverage --coverage.all=false --typecheck.tsconfig tsconfig.test.json"},"version":"0.14.0","_npmUser":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev","approver":{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"}},"overrides":{"form-data":">=2.5.6","@google-cloud/storage":{"fast-xml-parser":">=5.3.4"}},"_npmVersion":"11.19.0","description":"Type-safe Nodeblocks backend implementation","directories":{},"lint-staged":{"*.{js,ts,json,css,scss,md,yaml,yml}":["eslint --fix","prettier --write","cspell --no-progress --no-summary --no-must-find-files"]},"maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"_nodeVersion":"26.7.0","dependencies":{"ms":"^2.1.3","ws":"^8.18.3","ajv":"^8.17.1","pino":"^9.13.1","rxjs":"^7.8.2","uuid":"^11.1.0","ramda":"^0.32.0","bcrypt":"^6.0.0","express":"^4.21.2","mongodb":"^6.20.0","passport":"^0.7.0","pino-http":"^10.5.0","mime-types":"^3.0.1","neverthrow":"^8.2.0","safe-regex":"^2.1.1","ajv-formats":"^3.0.1","pino-pretty":"^13.1.2","jsonwebtoken":"^9.0.2","@sendgrid/mail":"^8.1.6","lodash.isempty":"^4.4.0","path-to-regexp":"^8.3.0","express-session":"^1.18.2","lodash.isstring":"^4.0.1","@google-cloud/storage":"^7.17.2","passport-google-oauth20":"^2.0.0"},"devDependencies":{"msw":"^2.12.10","husky":"^9.1.7","sharp":"^0.35.3","cspell":"^9.2.1","dotenv":"^17.2.3","eslint":"^9.37.0","vitest":"^3.2.6","globals":"^16.4.0","ts-node":"^10.9.2","prettier":"^3.6.2","@types/ws":"^8.18.1","cross-env":"^7.0.3","supertest":"^7.1.4","typescript":"^5.9.3","@types/jest":"^29.5.14","@types/node":"^20.19.21","lint-staged":"^16.2.4","superwstest":"^2.1.1","@types/ramda":"^0.31.1","@types/bcrypt":"^5.0.2","@eslint/compat":"^1.4.0","@types/express":"^4.17.23","tsconfig-paths":"^4.2.0","@types/passport":"^1.0.17","@types/supertest":"^6.0.3","@types/mime-types":"^3.0.1","@types/safe-regex":"^1.1.6","@types/json-schema":"^7.0.15","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.2.6","eslint-plugin-import":"^2.32.0","@types/lodash.isempty":"^4.4.9","mongodb-memory-server":"^10.2.3","@types/express-session":"^1.18.2","@types/lodash.isstring":"^4.0.9","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.1","@vitest/coverage-istanbul":"^3.2.6","eslint-plugin-security-node":"^1.1.4","eslint-plugin-sort-keys-fix":"^1.1.2","@types/passport-google-oauth20":"^2.0.16","@typescript-eslint/eslint-plugin":"^8.46.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/backend-sdk_0.14.0_1787104436016_0.15462437843399157"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-12T02:39:53.413Z","modified":"2026-08-19T01:53:56.333Z","0.0.2":"2025-06-12T02:39:53.590Z","0.0.3":"2025-06-19T02:08:11.965Z","0.1.0":"2025-07-04T03:05:04.983Z","0.2.0":"2025-07-04T06:46:22.109Z","0.3.0":"2025-07-05T08:39:17.407Z","0.4.0":"2025-07-07T00:47:14.816Z","0.4.1":"2025-07-09T01:30:42.932Z","0.4.2":"2025-07-09T04:54:44.509Z","0.4.3":"2025-07-18T03:11:03.152Z","0.4.4":"2025-07-18T03:12:02.419Z","0.4.5":"2025-07-18T03:13:19.444Z","0.4.6":"2025-07-18T03:14:42.197Z","0.4.7":"2025-07-18T03:15:55.505Z","0.4.8":"2025-07-18T03:17:05.060Z","0.4.11":"2025-07-18T03:19:33.122Z","0.4.12":"2025-07-18T03:20:30.200Z","0.4.13":"2025-07-18T03:21:39.481Z","0.4.14":"2025-07-18T03:22:51.218Z","0.4.15":"2025-07-18T03:24:22.091Z","0.4.19":"2025-07-18T03:27:25.005Z","0.4.20":"2025-07-18T03:28:20.591Z","0.4.21":"2025-07-18T03:29:29.742Z","0.4.22":"2025-07-18T03:30:35.448Z","0.4.23":"2025-07-18T03:32:00.976Z","0.4.24":"2025-07-18T03:33:44.965Z","0.4.27":"2025-07-18T03:35:33.189Z","0.4.28":"2025-07-18T03:36:31.287Z","0.4.29":"2025-07-18T03:37:44.139Z","0.4.30":"2025-07-18T03:39:00.085Z","0.4.31":"2025-07-18T03:40:45.426Z","0.4.32":"2025-07-18T03:41:36.394Z","0.4.35":"2025-07-18T03:43:52.170Z","0.4.36":"2025-07-18T03:44:53.312Z","0.4.37":"2025-07-18T03:45:55.936Z","0.4.38":"2025-07-18T03:47:00.709Z","0.4.39":"2025-07-18T03:48:28.188Z","0.4.40":"2025-07-18T03:49:52.223Z","0.4.43":"2025-07-18T03:52:40.098Z","0.4.44":"2025-07-18T03:54:02.440Z","0.4.45":"2025-07-18T03:55:46.930Z","0.4.47":"2025-07-18T03:57:40.321Z","0.4.48":"2025-07-18T03:59:25.189Z","0.4.49":"2025-07-18T03:59:59.698Z","0.4.52":"2025-07-18T04:02:57.153Z","0.4.53":"2025-07-18T04:03:55.421Z","0.4.54":"2025-07-18T04:05:00.015Z","0.4.55":"2025-07-18T04:06:06.473Z","0.4.56":"2025-07-18T04:07:33.542Z","0.4.57":"2025-07-18T04:08:59.975Z","0.4.60":"2025-07-18T04:10:55.200Z","0.4.61":"2025-07-18T04:12:08.593Z","0.4.62":"2025-07-18T04:13:18.931Z","0.4.63":"2025-07-18T04:14:32.859Z","0.4.64":"2025-07-18T04:15:38.944Z","0.4.65":"2025-07-18T04:17:15.854Z","0.4.66":"2025-07-18T04:17:50.769Z","0.4.68":"2025-07-18T04:20:04.302Z","0.4.69":"2025-07-18T04:20:58.164Z","0.4.70":"2025-07-18T04:22:15.019Z","0.4.71":"2025-07-18T04:23:31.765Z","0.4.72":"2025-07-18T04:25:23.218Z","0.4.73":"2025-07-18T04:26:00.166Z","0.4.78":"2025-07-18T05:10:53.061Z","0.4.79":"2025-07-18T05:11:54.522Z","0.4.80":"2025-07-18T05:12:54.218Z","0.4.81":"2025-07-18T05:13:57.133Z","0.4.82":"2025-07-18T05:15:53.035Z","0.4.83":"2025-07-18T05:16:58.671Z","0.4.86":"2025-07-18T05:19:37.222Z","0.4.87":"2025-07-18T05:20:34.034Z","0.4.88":"2025-07-18T05:21:49.166Z","0.4.89":"2025-07-18T05:22:23.054Z","0.4.90":"2025-07-18T05:24:25.151Z","0.4.91":"2025-07-18T05:25:03.555Z","0.4.94":"2025-07-18T05:29:11.737Z","0.4.95":"2025-07-18T05:30:02.284Z","0.4.97":"2025-07-18T05:31:21.814Z","0.4.98":"2025-07-22T03:50:10.165Z","0.4.99":"2025-07-22T03:51:09.661Z","0.4.100":"2025-07-22T03:52:22.473Z","0.4.101":"2025-07-22T03:53:14.286Z","0.4.102":"2025-07-22T03:54:48.470Z","0.4.106":"2025-07-22T03:57:51.932Z","0.4.107":"2025-07-22T03:58:54.319Z","0.4.108":"2025-07-22T04:00:07.222Z","0.4.109":"2025-07-22T04:01:11.002Z","0.4.110":"2025-07-22T04:02:31.177Z","0.4.111":"2025-07-22T04:04:02.211Z","0.4.112":"2025-07-22T04:04:09.544Z","0.4.114":"2025-07-22T04:06:27.631Z","0.4.115":"2025-07-22T04:07:14.139Z","0.4.116":"2025-07-22T04:08:23.833Z","0.4.117":"2025-07-22T04:09:27.697Z","0.4.118":"2025-07-22T04:11:05.903Z","0.4.119":"2025-07-22T04:12:03.207Z","0.4.122":"2025-07-22T04:14:00.530Z","0.4.123":"2025-07-22T04:15:00.976Z","0.4.124":"2025-07-22T04:16:08.240Z","0.4.125":"2025-07-22T04:17:04.844Z","0.4.126":"2025-07-22T04:18:35.816Z","0.4.127":"2025-07-22T04:19:22.621Z","0.4.130":"2025-07-22T04:21:27.032Z","0.4.131":"2025-07-22T04:22:17.209Z","0.4.132":"2025-07-22T04:23:21.136Z","0.4.133":"2025-07-22T04:24:38.854Z","0.4.134":"2025-07-22T04:25:31.683Z","0.4.135":"2025-07-22T04:27:05.203Z","0.4.138":"2025-07-22T04:29:04.476Z","0.4.139":"2025-07-22T04:29:54.449Z","0.4.140":"2025-07-22T04:30:56.701Z","0.4.141":"2025-07-22T04:32:00.114Z","0.4.142":"2025-07-22T04:33:42.964Z","0.4.143":"2025-07-22T04:34:32.985Z","0.4.146":"2025-07-22T04:37:02.480Z","0.4.147":"2025-07-22T04:38:15.874Z","0.4.148":"2025-07-22T04:39:25.348Z","0.4.151":"2025-07-22T04:41:49.935Z","0.4.152":"2025-07-22T04:41:57.419Z","0.4.153":"2025-07-22T04:43:07.281Z","0.4.154":"2025-07-22T04:44:27.736Z","0.4.155":"2025-07-22T04:46:07.374Z","0.4.156":"2025-07-22T04:46:57.224Z","0.4.159":"2025-07-22T04:49:00.273Z","0.4.160":"2025-07-22T04:49:52.520Z","0.4.161":"2025-07-22T04:51:02.695Z","0.4.162":"2025-07-22T04:51:56.468Z","0.4.163":"2025-07-22T04:53:45.447Z","0.4.164":"2025-07-22T04:54:36.774Z","0.4.167":"2025-07-22T04:57:26.776Z","0.4.171":"2025-07-22T05:46:50.208Z","0.4.172":"2025-07-22T05:47:48.526Z","0.4.173":"2025-07-22T05:48:46.345Z","0.4.174":"2025-07-22T05:49:49.917Z","0.4.175":"2025-07-22T05:51:32.721Z","0.4.176":"2025-07-22T05:52:38.095Z","0.4.179":"2025-07-22T05:54:34.302Z","0.4.180":"2025-07-22T05:55:21.523Z","0.4.181":"2025-07-22T05:56:34.678Z","0.4.182":"2025-07-22T05:57:33.506Z","0.4.183":"2025-07-22T05:59:19.955Z","0.4.184":"2025-07-22T06:00:00.612Z","0.4.187":"2025-07-22T06:01:59.711Z","0.4.188":"2025-07-22T06:02:57.202Z","0.4.189":"2025-07-22T06:04:05.942Z","0.4.190":"2025-07-22T06:05:02.992Z","0.4.191":"2025-07-22T06:06:46.233Z","0.4.192":"2025-07-22T06:07:23.884Z","0.4.195":"2025-07-22T06:09:35.314Z","0.4.196":"2025-07-22T06:10:14.826Z","0.4.197":"2025-07-22T06:11:33.787Z","0.4.198":"2025-07-22T06:12:43.567Z","0.4.199":"2025-07-22T06:14:19.531Z","0.4.200":"2025-07-22T06:15:09.258Z","0.4.203":"2025-07-22T06:16:29.263Z","0.4.204":"2025-07-22T08:27:35.680Z","0.4.205":"2025-07-22T08:28:31.727Z","0.4.206":"2025-07-22T08:29:39.931Z","0.4.207":"2025-07-22T08:31:07.550Z","0.4.208":"2025-07-22T08:31:24.353Z","0.4.210":"2025-07-22T08:33:46.783Z","0.4.212":"2025-07-22T08:35:41.302Z","0.4.216":"2025-07-22T08:39:00.348Z","0.4.215":"2025-07-22T08:39:01.244Z","0.4.217":"2025-07-22T08:40:14.750Z","0.4.218":"2025-07-22T08:41:36.950Z","0.4.219":"2025-07-22T08:42:32.463Z","0.4.220":"2025-07-22T08:43:41.811Z","0.4.221":"2025-07-22T08:44:30.513Z","0.4.223":"2025-07-22T08:46:43.500Z","0.4.224":"2025-07-22T08:47:39.978Z","0.4.225":"2025-07-22T08:48:48.579Z","0.4.226":"2025-07-22T08:49:58.582Z","0.4.228":"2025-07-22T08:50:54.757Z","0.4.229":"2025-07-22T08:52:16.103Z","0.4.230":"2025-07-22T08:53:35.906Z","0.4.231":"2025-07-22T08:54:22.256Z","0.4.235":"2025-07-22T08:57:25.261Z","0.4.236":"2025-07-22T08:58:18.688Z","0.4.237":"2025-07-22T08:59:21.751Z","0.4.238":"2025-07-22T09:00:21.990Z","0.4.239":"2025-07-22T09:01:48.497Z","0.4.242":"2025-07-22T09:04:27.264Z","0.4.244":"2025-07-22T09:05:16.273Z","0.4.245":"2025-07-22T09:06:33.631Z","0.4.246":"2025-07-22T09:07:45.074Z","0.4.247":"2025-07-22T09:08:53.372Z","0.4.300":"2025-07-22T09:24:37.978Z","0.5.0":"2025-08-19T08:42:15.116Z","0.6.0":"2025-08-28T12:30:40.502Z","0.7.0":"2025-09-12T01:23:29.245Z","0.8.0":"2025-09-25T06:09:14.994Z","0.9.0":"2025-11-04T07:43:33.198Z","0.9.1":"2026-01-22T02:20:09.609Z","0.10.0":"2026-03-17T05:32:43.630Z","0.10.1":"2026-05-01T07:39:37.515Z","0.11.0":"2026-05-26T06:28:44.805Z","0.12.0":"2026-07-07T02:12:04.176Z","0.13.0":"2026-07-14T13:41:58.581Z","0.13.1":"2026-08-14T03:44:22.032Z","0.14.0":"2026-08-19T01:53:56.156Z"},"description":"Type-safe Nodeblocks backend implementation","maintainers":[{"name":"basal-adam","email":"adam@basal.dev"},{"name":"basal-nodeblocks","email":"nodeblocks-dev@basal.dev"},{"name":"basal-joe","email":"joe@basal.dev"},{"name":"basalmarty","email":"marty@basal.dev"}],"readme":"# Nodeblocks Backend SDK\n\nNodeblocks Backend SDK is a comprehensive library for building backend services in Node.js using a functional and compositional approach. Instead of relying on a large, opinionated framework, you construct your application by composing small, independent functions and modules.\n\nAt the heart of the SDK is the idea of building systems by putting together smaller parts. This is achieved through a set of primitives and a composition function, allowing you to assemble services from simple building blocks.\n\n## What's Included\n\nThe SDK provides a complete set of pre-built services and components for modern applications:\n\n- **🔐 Authentication & Identity Management** - Complete user authentication with OAuth, MFA, and session management\n- **💬 Real-time Chat System** - Full-featured chat with channels, messages, subscriptions, and WebSocket streaming\n- **🛍️ E-commerce Features** - Product management, orders, categories, and inventory\n- **👥 User & Profile Management** - User profiles, avatars, follows, and social features\n- **🏢 Organization Management** - Multi-tenant organization support with roles and permissions\n- **📁 File Storage** - File upload, management, and CDN integration\n- **📍 Location Services** - Address management and location-based features\n- **🔧 Dynamic Attributes** - Flexible attribute system for custom data\n- **📊 Pagination & Filtering** - Built-in pagination and advanced filtering\n- **🔍 Search & Discovery** - Advanced search capabilities across all entities\n\n## Key Features\n\n### 🚀 Production Ready\n\n- **Comprehensive Test Coverage** - Extensive test suite with high coverage\n- **TypeScript Support** - Full TypeScript definitions and type safety\n- **Error Handling** - Structured error responses with proper HTTP status codes\n- **Logging** - Built-in logging with configurable levels and sanitization\n- **Validation** - Request validation with JSON Schema and OpenAPI support\n- **Security** - Authentication, authorization, input sanitization, and NoSQL injection protection\n\n### 🔧 Developer Experience\n\n- **Functional Composition** - Build complex features from simple, composable functions\n- **Declarative API** - Describe what you want, not how to build it\n- **Hot Reloading** - Fast development with instant updates\n- **Comprehensive Documentation** - Detailed docs with examples for every component\n- **Flexible Architecture** - Use pre-built services or compose your own features\n\n### 📊 Enterprise Features\n\n- **Multi-tenancy** - Organization-based data isolation and access control\n- **Role-based Access Control** - Fine-grained permissions and authorization\n- **Audit Logging** - Track all changes and user actions\n- **Pagination** - Built-in pagination for all list endpoints\n- **File Management** - Upload, storage, and CDN integration\n- **Real-time Communication** - WebSocket support for live updates\n\n## A Functional, Compositional Approach to Backend Services\n\nThe core philosophy of the Nodeblocks Backend SDK is that complex systems can be built from simple, pure functions. Rather than creating large classes or objects that hold a lot of state and logic, you define small, focused functions and compose them into more complex ones.\n\nThis approach provides:\n\n- **Modularity**: Each piece of your application is small and self-contained, making it easy to understand, test, and reuse.\n- **Declarative Style**: You declare what your service _is_, rather than specifying how it should be built step-by-step.\n- **Predictability**: With a foundation in functional principles, the behavior of your system is more predictable and easier to reason about.\n\n## Core Concepts\n\n### Services\n\nA **service** is a composable piece of your application that provides HTTP and WebSocket endpoints. It's implemented as Express middleware that you can mount on your Express application. You create a service using the `defService` function, which takes a composed set of features and configurations and returns an Express router ready to be used as middleware. When using WebSockets, pass a `WebSocketServer` to `defService`.\n\n### Composition\n\nComposition is the central pattern in the SDK. The `compose` function (a wrapper around `ramda.pipe`) allows you to chain together different parts of your application. You start with simple functions and progressively build them up into more complex ones.\n\n```typescript\n// Compose multiple features into a single service definition\nconst serviceDefinition = compose(feature1, feature2, feature3);\n\n// Create the service from the composed definition\nconst service = defService(serviceDefinition);\n```\n\n### Composers\n\n**Composers** are higher-order functions that create the building blocks of your service. They are designed to be used with `compose`. The primary composers are `withSchema` and `withRoute`.\n\n#### `withSchema`\n\nThe `withSchema` composer provides comprehensive request validation with support for both JSON Schema and OpenAPI specifications. It supports two distinct usage patterns:\n\n**1. JSON Schema Validation (Shorthand)**\n\nThe simplified approach validates only the request body using [JSON Schema](https://json-schema.org/):\n\n```typescript\n// Define a reusable schema for request body validation\nconst userSchema = withSchema({\n  type: 'object',\n  properties: {\n    name: { type: 'string' },\n    email: { type: 'string', format: 'email' },\n  },\n  required: ['name', 'email'],\n});\n\n// Apply the same schema to multiple routes\nconst createUserFeature = compose(userSchema, createUserRoute);\nconst updateUserFeature = compose(userSchema, updateUserRoute);\n```\n\n**2. OpenAPI Validation (Enhanced)**\n\nThe enhanced OpenAPI syntax allows you to validate **URL path parameters** and **query parameters** in addition to request bodies:\n\n```typescript\n// Validate URL parameters (/:userId) and query parameters (?include=profile)\nconst getUserSchema = withSchema({\n  parameters: [\n    {\n      name: 'userId', // Validates the :userId in /users/:userId\n      in: 'path',\n      required: true,\n      schema: { type: 'string', format: 'uuid' },\n    },\n    {\n      name: 'include', // Validates ?include=profile query parameter\n      in: 'query',\n      required: false,\n      schema: { type: 'string', enum: ['profile', 'settings'] },\n    },\n  ],\n  requestBody: {\n    // Still validates request body like before\n    required: true,\n    content: {\n      'application/json': {\n        schema: {\n          type: 'object',\n          properties: {\n            name: { type: 'string' },\n            email: { type: 'string', format: 'email' },\n          },\n          required: ['name', 'email'],\n        },\n      },\n    },\n  },\n});\n\n// Now validates ALL parts: URL params, query params, AND request body\nconst updateUserRoute = withRoute({\n  method: 'PATCH',\n  path: '/users/:userId', // :userId will be validated\n  handler: updateUserHandler,\n});\n\nconst updateUserFeature = compose(getUserSchema, updateUserRoute);\n```\n\nThis is a major enhancement because previously `withSchema` only validated request bodies. Now you can validate the entire HTTP request - URL parameters, query parameters, and request body - all in one schema definition.\n\n**Automatic Security Enhancements**\n\nWhen using `withSchema`, the SDK automatically applies security enhancements to all object schemas:\n\n- **`additionalProperties: false`** - Prevents injection of undefined fields by rejecting any properties not explicitly defined in the schema\n- **`queryFilter: true`** - Validates MongoDB query operators to prevent NoSQL injection attacks\n\nThese enhancements are applied recursively to nested object schemas as well. You can override these defaults by explicitly specifying `additionalProperties: true` or `queryFilter: false` in your schema definition.\n\n```typescript\n// Automatic security enhancements are applied\nconst secureSchema = withSchema({\n  type: 'object',\n  properties: {\n    email: { type: 'string' },\n  },\n});\n// Result: additionalProperties: false, queryFilter: true (automatically applied)\n\n// Override if needed (e.g., for flexible data structures)\nconst flexibleSchema = withSchema({\n  type: 'object',\n  additionalProperties: true, // Explicitly allow extra properties\n  properties: {\n    address: {\n      type: 'object',\n      additionalProperties: true, // Nested objects also respect explicit settings\n    },\n  },\n});\n```\n\n**NoSQL Injection Protection with `queryFilter`**\n\nThe `queryFilter` keyword provides comprehensive protection against NoSQL injection attacks:\n\n- **Operator Whitelisting**: Only allows safe MongoDB operators (`$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$in`, `$nin`, `$regex`, `$options`, `$and`, `$or`)\n- **ReDoS Protection**: Validates `$regex` patterns using `safe-regex` to prevent catastrophic backtracking\n- **Length Limits**: Restricts `$regex` patterns to 100 characters maximum\n- **Prototype Pollution Protection**: Blocks dangerous keys like `__proto__`, `constructor`, and `prototype`\n- **Recursive Validation**: Validates nested query objects at all levels\n\n```typescript\n// Valid query with allowed operators\nconst validQuery = {\n  email: { $in: ['user@example.com', 'admin@example.com'] },\n  age: { $gte: 18, $lte: 65 },\n};\n\n// Invalid queries are automatically rejected\nconst invalidQuery1 = {\n  email: 'user@example.com',\n  $where: 'sleep(10000)', // ❌ Forbidden operator\n};\n\nconst invalidQuery2 = {\n  email: { $regex: '^(a+)+$' }, // ❌ ReDoS pattern\n};\n\nconst invalidQuery3 = {\n  email: 'user@example.com',\n  __proto__: { isAdmin: true }, // ❌ Prototype pollution attempt\n};\n```\n\n#### `withRoute`\n\nThe `withRoute` composer defines an endpoint. It supports both HTTP and WebSocket routes via the `protocol` option.\n\n```typescript\n// HTTP route (default protocol: 'http')\nconst createUserRoute = withRoute({\n  method: 'POST',\n  path: '/users',\n  handler: async (payload) => {\n    const newUser = await payload.context.db.users.create(\n      payload.params.requestBody\n    );\n    return { user: newUser };\n  },\n});\n```\n\nThe handler receives a `payload` object containing:\n\n- `params`: An object with `requestBody`, `requestParams`, and `requestQuery`\n- `context`: An object with `db` connections and the original `request` object\n\n#### WebSocket routes (protocol: `ws`)\n\nYou can expose real-time endpoints using WebSockets. Define a route with `protocol: 'ws'` and a handler that returns an RxJS `Subject` (or a `Promise<Subject>`). Messages sent by your handler via `subject.next(value)` will be delivered to connected clients. Incoming client messages are JSON-parsed and pushed into your subject.\n\nValidation:\n\n- **Schema validation (message-level)**: Compose `withSchema(jsonSchema)` before your WebSocket route (same order as HTTP). The schema is applied to each inbound client message. Invalid messages cause a structured error and the connection to close with a policy violation.\n- **Validators (connection-level)**: Provide `validators` on the route (same shape as HTTP). They run once at connection time and can reject the connection (useful for auth/permissions) by throwing an error.\n\n```typescript\nimport { withSchema, withRoute, compose } from '@nodeblocks/backend-sdk';\n\nconst chatMessageSchema = withSchema({\n  type: 'object',\n  required: ['type', 'text'],\n  properties: {\n    type: { type: 'string', enum: ['chat'] },\n    text: { type: 'string', minLength: 1 },\n  },\n});\n\nconst authValidator = async ({ context }: any) => {\n  if (!context.request?.headers['x-api-key']) {\n    throw new Error('Unauthorized');\n  }\n};\n\nconst wsFeature = compose(\n  chatMessageSchema, // validates each inbound message\n  withRoute({\n    protocol: 'ws',\n    path: '/ws/chat',\n    validators: [authValidator], // validates the connection\n    handler: () => new Subject(),\n  })\n);\n```\n\nExample:\n\n```typescript\nimport { createServer } from 'http';\nimport express from 'express';\nimport { Subject, interval } from 'rxjs';\nimport { primitives } from '@nodeblocks/backend-sdk';\nimport { WebSocketServer } from 'ws';\n\nconst { compose, withRoute, defService } = primitives;\n\n// Feature with a WebSocket route\nconst wsFeature = compose(\n  withRoute({\n    protocol: 'ws',\n    path: '/ws/time',\n    handler: () => {\n      const subject = new Subject<{\n        type: string;\n        at?: number;\n        [k: string]: any;\n      }>();\n\n      // Periodically broadcast a tick to all connected clients\n      interval(1000).subscribe(() => {\n        subject.next({ type: 'tick', at: Date.now() });\n      });\n\n      // You can also react to client messages as they are pushed into this subject\n      // e.g., subject.subscribe(msg => { ... })\n\n      return subject;\n    },\n  })\n);\n\nconst app = express();\nconst server = createServer(app);\nconst wss = new WebSocketServer({ server });\n\nconst router = defService(wsFeature, wss);\napp.use('/', router);\n\nserver.listen(3000, () => {\n  console.log('HTTP on :3000, WebSocket at ws://localhost:3000/ws/time');\n});\n```\n\nRx helper for convenience:\n\n```typescript\nimport { filter } from 'rxjs';\nimport { notFromEmitter } from '@nodeblocks/backend-sdk';\n\n// Use inside observable pipelines to ignore messages from a specific emitter id\n// observable$.pipe(filter(notFromEmitter(someEmitterId)))\n```\n\n### Handlers\n\nA **handler** is a function that contains the business logic for a route. In the spirit of composition, handlers themselves can be composed of smaller functions. The SDK provides utilities like `lift` and `flatMapAsync` to help compose asynchronous operations and handle errors in composition.\n\n```typescript\n// A handler composed of multiple steps\nconst createUserHandler = compose(\n  createUserInDb,\n  flatMapAsync(findUserById), // Continues if createUserInDb is successful\n  lift(normalizeUserResponse) // Transforms the final result\n);\n\nconst createUserRoute = withRoute({\n  method: 'POST',\n  path: '/users',\n  handler: createUserHandler,\n});\n```\n\nThis allows you to create reusable pieces of business logic that can be combined in different ways.\n\n### Features\n\nA **feature** is a logical grouping of related functionality, typically consisting of one or more routes and their associated schemas. You create a feature by composing its parts.\n\n```typescript\n// schemas/user.ts\nexport const createUserSchema = withSchema({\n  /* ... */\n});\n\n// routes/user.ts\nexport const createUserRoute = withRoute({\n  /* ... */\n});\n\n// features/user.ts\nimport { compose } from '@nodeblocks/backend-sdk';\nimport { createUserSchema } from '../schemas/user';\nimport { createUserRoute } from '../routes/user';\n\nexport const userFeature = compose(createUserSchema, createUserRoute);\n```\n\n## Building a Service from First Principles\n\nLet's walk through the process of building a complete service from scratch.\n\n### 1. Define a Handler\n\nFirst, we define a handler function that will contain our business logic.\n\n```typescript\n// handlers/products.ts\nexport const createProductHandler = async (payload) => {\n  const { name, price } = payload.params.requestBody;\n  // In a real app, you would save this to a database\n  const newProduct = { id: 'prod_123', name, price };\n  return { product: newProduct };\n};\n```\n\n### 2. Define a Route\n\nNext, we use `withRoute` to associate our handler with an HTTP endpoint.\n\n```typescript\n// routes/products.ts\nimport { withRoute } from '@nodeblocks/backend-sdk';\nimport { createProductHandler } from '../handlers/products';\n\nexport const createProductRoute = withRoute({\n  method: 'POST',\n  path: '/products',\n  handler: createProductHandler,\n});\n```\n\n### 3. Define a Schema\n\nTo validate the incoming data, we define a schema using `withSchema`.\n\n```typescript\n// schemas/products.ts\nimport { withSchema } from '@nodeblocks/backend-sdk';\n\nexport const createProductSchema = withSchema({\n  type: 'object',\n  properties: {\n    name: { type: 'string' },\n    price: { type: 'number', minimum: 0 },\n  },\n  required: ['name', 'price'],\n});\n```\n\n### 4. Compose into a Feature\n\nNow we compose the schema and the route into a single feature.\n\n```typescript\n// features/products.ts\nimport { compose } from '@nodeblocks/backend-sdk';\nimport { createProductSchema } from '../schemas/products';\nimport { createProductRoute } from '../routes/products';\n\nexport const productFeature = compose(createProductSchema, createProductRoute);\n```\n\nThe order is important here: `createProductSchema` comes first, so its validation is applied to `createProductRoute`.\n\n### 5. Create the Service\n\nFinally, we use `defService` to create the service from our feature.\n\n```typescript\n// index.ts\nimport express from 'express';\nimport { defService } from '@nodeblocks/backend-sdk';\nimport { productFeature } from './features/products';\n\nconst app = express();\nconst service = defService(productFeature);\napp.use('/api', service);\n\napp.listen(3000, () => {\n  console.log('Server is running on port 3000');\n});\n```\n\n### 6. Composing Multiple Features\n\nAs your application grows, you can define more features and compose them together at the service level.\n\n```typescript\n// index.ts\nimport { compose, defService } from '@nodeblocks/backend-sdk';\nimport { productFeature } from './features/products';\nimport { userFeature } from './features/users';\nimport { orderFeature } from './features/orders';\n\n// Compose all features into one service definition\nconst allFeatures = compose(productFeature, userFeature, orderFeature);\n\nconst service = defService(allFeatures);\n```\n\n## Advanced Concepts\n\n### Handler Composition\n\nFor more business logic, you can compose handlers from smaller, specialized functions. The SDK provides helpers for working with `Result` types:\n\n- `lift`: Lifts a regular function into a context where it can work with promises\n- `flatMap`: Chains synchronous operations that return a `Result` type, short-circuiting on errors\n- `flatMapAsync`: Chains asynchronous operations that return a `Result` type, enabling error-safe composition\n\n```typescript\nimport { Result, ok, err } from 'neverthrow';\nimport { flatMapAsync, lift } from '@nodeblocks/backend-sdk';\n\nconst validateUser = (data: any): Result<ValidatedUser, ValidationError> => {\n  // validation logic\n  return ok(validatedData);\n};\n\nconst saveUser = async (\n  user: ValidatedUser\n): Promise<Result<User, DatabaseError>> => {\n  // database operation\n  return ok(savedUser);\n};\n\nconst formatResponse = (user: User) => ({\n  user,\n  message: 'Created successfully',\n});\n\n// Compose operations that can fail\nconst createUserHandler = compose(\n  (payload) => validateUser(payload.params.requestBody),\n  flatMapAsync(saveUser),\n  lift(formatResponse)\n);\n```\n\nThis pattern ensures that if any step fails, the error is propagated without executing subsequent steps, making your error handling both explicit and safe.\n\n### Function Combinators\n\nThe SDK provides several powerful combinators for building robust, composable functions:\n\n#### Core Functional Primitives\n\n**`compose`** - Function composition using `pipe` from Ramda\n\n```typescript\nimport { compose } from '@nodeblocks/backend-sdk';\n\n// Compose functions from left to right\nconst processUser = compose(\n  validateUser,\n  saveUser,\n  sendWelcomeEmail,\n  formatResponse\n);\n```\n\n**`ifElse`** - Conditional function application\n\n```typescript\nimport { ifElse } from '@nodeblocks/backend-sdk';\n\nconst processUser = ifElse(\n  (user) => user.isAdmin,\n  (user) => processAdminUser(user),\n  (user) => processRegularUser(user)\n);\n```\n\n**`match`** - Path-based condition checking\n\n```typescript\nimport { match } from '@nodeblocks/backend-sdk';\n\nconst isAdminUser = match(Boolean, ['role', 'isAdmin']);\n```\n\n#### `withLogging` - Function Logging\n\nThe `withLogging` combinator wraps any function to provide logging capabilities with configurable options.\n\n**What does `withLogging` do?**\n\n- **Wraps any function** to add logging of function calls, arguments, and results\n- **Supports multiple log levels**: `info`, `debug`, `warn`, `error`, `fatal`, and `trace`\n- **Configurable options**: Pass logger, level, and redaction rules via options object\n- **Automatic logger injection**: Injects logger into payload objects for downstream functions\n- **Smart sanitization**: Sanitizes sensitive objects (database connections, configs) in logs\n- **Promise awareness**: Handles both sync and async functions with proper promise logging\n\n#### Basic Usage\n\n```typescript\nimport { withLogging } from '@nodeblocks/backend-sdk';\n\n// Simple logging with default settings (info level, default logger)\nconst loggedHandler = withLogging(createUserHandler);\n\n// With options object\nconst debugHandler = withLogging(createUserHandler, {\n  level: 'debug',\n  logger: customLogger,\n  redact: [/password/i, /token/i],\n});\n\n// With custom redaction patterns\nconst secureHandler = withLogging(createUserHandler, {\n  level: 'trace',\n  redact: [\n    { approach: 'fields', pattern: /password/i, replacement: '[REDACTED]' },\n    {\n      approach: 'patterns',\n      pattern: /Bearer\\s+[^\\s]+/i,\n      replacement: '[REDACTED_TOKEN]',\n    },\n  ],\n});\n```\n\n#### Log Output\n\nAll log levels produce structured logs with:\n\n- Function name\n- Sanitized input arguments\n- Sanitized result/return value\n- Promise detection for async functions\n\n```typescript\n// Example log output\n{\n  \"args\": [{\"params\": {\"requestBody\": {\"name\": \"John\"}}}],\n  \"functionName\": \"createUserHandler\",\n  \"msg\": \"Function: createUserHandler\",\n  \"result\": {\"user\": {\"id\": \"123\", \"name\": \"John\"}}\n}\n```\n\n#### Example: Logging a Handler\n\n```typescript\nimport { withLogging } from '@nodeblocks/backend-sdk';\n\nconst createUserHandler = async (payload) => {\n  const { name, email } = payload.params.requestBody;\n  const newUser = await payload.context.db.users.create({ name, email });\n  return { user: newUser };\n};\n\nconst loggedCreateUserHandler = withLogging(createUserHandler, 'trace');\n\n// Use in your route\nconst createUserRoute = withRoute({\n  method: 'POST',\n  path: '/users',\n  handler: loggedCreateUserHandler,\n});\n```\n\n#### Integration with Composition\n\nThe `withLogging` combinator works seamlessly with the SDK's composition patterns:\n\n```typescript\nimport { compose, withLogging } from '@nodeblocks/backend-sdk';\n\n// Log individual functions\nconst loggedValidateUser = withLogging(validateUser, 'debug');\nconst loggedSaveUser = withLogging(saveUser, 'debug');\nconst loggedFormatResponse = withLogging(formatResponse, 'info');\n\n// Compose with logging\nconst createUserFeature = compose(\n  createUserSchema,\n  withRoute({\n    method: 'POST',\n    path: '/users',\n    handler: compose(\n      loggedValidateUser,\n      flatMapAsync(loggedSaveUser),\n      lift(loggedFormatResponse)\n    ),\n  })\n);\n```\n\n#### Sanitization Features\n\nThe `withLogging` function automatically sanitizes sensitive objects in logs:\n\n- Database connections are shown as `🗄️ [Database]`\n- Config objects are shown as `⚙️ [Config]`\n- Mail services are shown as `📧 [MailService]`\n- Request/Response objects are shown as `📤 [Request]`/`📥 [Response]`\n- Logger instances are shown as `📝 [Logger]`\n\nThis prevents logging of sensitive data while still providing useful debugging information.\n\n### Result-Based Error Handling\n\nThe SDK embraces functional error handling using the `Result` type from the `neverthrow` library. This approach makes error handling explicit and composable, avoiding the unpredictability of thrown exceptions.\n\n```typescript\nimport { Result, ok, err } from 'neverthrow';\n\n// A handler that returns a Result\nconst createUserHandler = async (payload): Promise<Result<User, Error>> => {\n  const validation = validateUserData(payload.params.requestBody);\n  if (validation.isErr()) {\n    return err(validation.error);\n  }\n\n  const user = await createUser(validation.value);\n  return ok(user);\n};\n```\n\nThe `Result` type has two states:\n\n- `Ok<T>` - Contains a successful value of type T\n- `Err<E>` - Contains an error of type E\n\nThis makes error handling explicit in your type signatures and enables composition patterns with `flatMap` and `flatMapAsync`.\n\n### Throwing Errors\n\nWhile `Result` types are preferred for business logic composition, you can still throw errors when appropriate. This is common in:\n\n- **Formatters/Terminators**: Functions at the end of composition chains that format responses\n- **Validation failures**: When input validation fails and you want to return an HTTP error\n- **Unexpected errors**: When something goes wrong that should result in a 500 error\n\nThe SDK provides `NodeblocksError` for structured HTTP error responses:\n\n```typescript\nimport {\n  NodeblocksError,\n  nodeBlocksErrorMiddleware,\n} from '@nodeblocks/backend-sdk';\n\n// Use for structured HTTP errors\nthrow new NodeblocksError(400, 'Invalid input', 'validation', [\n  'Name is required',\n]);\n\n// Add middleware to handle NodeblocksError and other thrown errors\napp.use(nodeBlocksErrorMiddleware());\n```\n\nThe error middleware will catch thrown errors and format appropriate HTTP responses.\n\n### Schema Merging and Extraction\n\nYou can merge multiple schemas together and extract schema definitions for reuse using helper functions.\n\n**JSON Schema Merging (Shorthand)**\n\n```typescript\nexport const createCategorySchema = withSchema(\n  getSchemaDefinition(categorySchema),\n  {\n    $schema: 'http://json-schema.org/draft-07/schema#',\n    required: ['name', 'description', 'status'],\n    type: 'object',\n  }\n);\n```\n\nThe SDK provides the `getSchemaDefinition()` function to extract JSON Schema definitions from shorthand `withSchema` composers for reuse and extension.\n\nThis function allows you to:\n\n- **Reuse existing schemas**: Extract schema definitions from pre-built components\n- **Extend schemas**: Add new properties and validation rules to existing schemas\n- **Combine schemas**: Merge multiple schema definitions into a single schema\n- **Share validation logic**: Reuse complex validation definitions across multiple routes\n\n### Custom Validators\n\nThe `withRoute` configuration accepts a `validators` array for custom validation logic that goes beyond schema validation. A validator is an async function that receives the request payload and should throw an error if validation fails.\n\n```typescript\n// Custom validator to check if user has permission to access a resource\nconst checkUserPermission = async (payload) => {\n  const { userId } = payload.params.requestParams;\n  const { user } = payload.context;\n\n  if (user.id !== userId && user.role !== 'admin') {\n    throw new NodeblocksError(403, 'Access denied', 'permission', {\n      requiredRole: 'admin',\n      userId: user.id,\n      targetUserId: userId,\n    });\n  }\n};\n\n// Custom validator to check business rules\nconst checkBusinessHours = async (payload) => {\n  const now = new Date();\n  const hour = now.getHours();\n\n  if (hour < 9 || hour > 17) {\n    throw new NodeblocksError(400, 'Service unavailable', 'business_hours', {\n      currentHour: hour,\n      availableHours: '9:00 AM - 5:00 PM',\n    });\n  }\n};\n\n// Use custom validators in a route\nconst updateUserRoute = withRoute({\n  method: 'PATCH',\n  path: '/users/:userId',\n  validators: [checkUserPermission, checkBusinessHours],\n  handler: updateUserHandler,\n});\n```\n\n### Pre-built Services\n\nThe SDK includes complete services for all major functionality areas. Each service provides a full set of CRUD operations and specialized endpoints:\n\n#### Authentication Service\n\nComplete identity lifecycle and OAuth management:\n\n```typescript\nimport { authService } from '@nodeblocks/backend-sdk';\n\n// Register authentication service with OAuth providers\napp.use(\n  '/api',\n  authService(database, config, {\n    mailService,\n    googleOAuthDriver,\n    twitterOAuthDriver,\n    lineOAuthDriver,\n  })\n);\n```\n\n**Features:**\n\n- User registration and login with credentials\n- Email verification and password reset\n- Multi-factor authentication (MFA)\n- OAuth integration (Google, Twitter, LINE)\n- Session management and token refresh\n- User invitations and role management\n- Account activation/deactivation\n\n#### Chat Service\n\nReal-time chat system with WebSocket support:\n\n```typescript\nimport { chatService } from '@nodeblocks/backend-sdk';\n\n// Register chat service with WebSocket server\napp.use('/api/chat', chatService(database, config, { webSocketServer }));\n```\n\n**Features:**\n\n- Channel creation and management\n- Real-time messaging with WebSocket streaming\n- Message templates and attachments\n- User subscriptions and read states\n- File upload for message attachments\n- Message search and filtering\n\n#### User Service\n\nComplete user and profile management:\n\n```typescript\nimport { userService } from '@nodeblocks/backend-sdk';\n\n// Register user service with file storage\napp.use('/api/users', userService(database, config, { fileStorageDriver }));\n```\n\n**Features:**\n\n- User profile creation and management\n- Avatar upload and management\n- Social features (follows, likes)\n- Profile discovery and search\n- User blocking and privacy controls\n\n#### Product Service\n\nE-commerce product management:\n\n```typescript\nimport { productService } from '@nodeblocks/backend-sdk';\n\n// Register product service\napp.use(\n  '/api/products',\n  productService(database, config, { fileStorageDriver })\n);\n```\n\n**Features:**\n\n- Product CRUD operations\n- Batch operations for bulk management\n- Product variants and attributes\n- Image upload and management\n- Product copying and duplication\n- Advanced search and filtering\n- Product likes and social features\n\n#### Organization Service\n\nMulti-tenant organization management:\n\n```typescript\nimport { organizationService } from '@nodeblocks/backend-sdk';\n\n// Register organization service\napp.use('/api/organizations', organizationService(database, config));\n```\n\n**Features:**\n\n- Organization creation and management\n- Role-based access control\n- Member management\n- Organization settings and configuration\n- Multi-tenant data isolation\n\n#### Order Service\n\nOrder processing and management:\n\n```typescript\nimport { orderService } from '@nodeblocks/backend-sdk';\n\n// Register order service\napp.use('/api/orders', orderService(database, config));\n```\n\n**Features:**\n\n- Order creation and processing\n- Order status management\n- Order history and tracking\n- Payment integration hooks\n- Order search and filtering\n\n#### Category Service\n\nProduct categorization system:\n\n```typescript\nimport { categoryService } from '@nodeblocks/backend-sdk';\n\n// Register category service\napp.use('/api/categories', categoryService(database, config));\n```\n\n**Features:**\n\n- Category hierarchy management\n- Category enable/disable functionality\n- Category-based product filtering\n- Admin-only category management\n\n#### Attributes Service\n\nDynamic attribute management:\n\n```typescript\nimport { attributesService } from '@nodeblocks/backend-sdk';\n\n// Register attributes service\napp.use('/api/attributes', attributesService(database, config));\n```\n\n**Features:**\n\n- Dynamic attribute group creation\n- Flexible attribute schemas\n- Attribute-based filtering\n- Custom data type support\n\n#### Identity Service\n\nIdentity management and administration:\n\n```typescript\nimport { identityService } from '@nodeblocks/backend-sdk';\n\n// Register identity service\napp.use('/api/identities', identityService(database, config));\n```\n\n**Features:**\n\n- Identity administration\n- User account management\n- Identity type management\n- Bulk identity operations\n\n### Individual Components\n\nYou can also use individual components to build custom features:\n\n```typescript\nimport {\n  // Routes\n  createUserRoute,\n  getUserRoute,\n  updateUserRoute,\n  deleteUserRoute,\n  createProductRoute,\n  findProductsRoute,\n  createChannelRoute,\n  findChannelsRoute,\n\n  // Schemas\n  createUserSchema,\n  updateUserSchema,\n  createProductSchema,\n  createChannelSchema,\n\n  // Handlers\n  createUser,\n  getUserById,\n  createProduct,\n  findProducts,\n  createChannel,\n  findChannels,\n\n  // Validators\n  isAuthenticated,\n  checkIdentityType,\n} from '@nodeblocks/backend-sdk';\n\n// Compose your own features using pre-built components\nconst customUserFeature = compose(\n  createUserSchema,\n  createUserRoute,\n  getUserRoute,\n  updateUserSchema,\n  updateUserRoute,\n  deleteUserRoute\n);\n```\n\n### Available Components\n\n#### Routes\n\n**Authentication Routes:**\n\n- `registerCredentialsRoute`, `loginWithCredentialsRoute`, `loginWithOnetimeTokenRoute`\n- `emailVerificationRoute`, `confirmEmailRoute`, `changeEmailRoute`, `confirmNewEmailRoute`\n- `sendResetPasswordLinkEmailRoute`, `completePasswordResetRoute`, `changePasswordRoute`\n- `deactivateRoute`, `activateRoute`, `refreshTokenRoute`, `deleteRefreshTokensRoute`\n- `resendMfaCodeRoute`, `verifyMfaCodeRoute`\n- `googleOAuthRoute`, `googleOAuthCallbackRoute`\n- `twitterOAuthRoute`, `twitterOAuthCallbackRoute`\n- `lineOAuthRoute`, `lineOAuthCallbackRoute`\n\n**User Routes:**\n\n- `createUserRoute`, `getUserRoute`, `findUsersRoute`, `updateUserRoute`, `deleteUserRoute`\n- `lockUserRoute`, `unlockUserRoute`, `getAvatarUploadUrlRoute`\n- `createProfileFollowRoute`, `deleteProfileFollowRoute`, `getProfileFollowersRoute`\n- `createOrganizationFollowRoute`, `deleteOrganizationFollowRoute`\n- `createProductLikeRoute`, `deleteProductLikeRoute`\n\n**Product Routes:**\n\n- `createProductRoute`, `getProductRoute`, `findProductsRoute`, `updateProductRoute`, `deleteProductRoute`\n- `createProductBatchRoute`, `updateProductBatchRoute`, `deleteProductBatchRoute`\n- `copyProductRoute`, `copyProductBatchRoute`\n- `getProductImageUploadUrlRoute`, `createProductImageRoute`, `deleteProductImageRoute`\n- `createProductVariantRoute`, `getProductVariantRoute`, `updateProductVariantRoute`, `deleteProductVariantRoute`\n- `findProductVariantsRoute`, `createProductVariantBulkRoute`, `updateProductVariantBulkRoute`, `deleteProductVariantBulkRoute`\n- `getProductLikersRoute`\n\n**Chat Routes:**\n\n- `createChannelRoute`, `getChannelRoute`, `findChannelsRoute`, `updateChannelRoute`, `deleteChannelRoute`\n- `createChatSubscriptionRoute`, `getChatSubscriptionRoute`, `findChatSubscriptionsRoute`, `deleteChatSubscriptionRoute`\n- `createChatMessageRoute`, `getChatMessageRoute`, `findChatMessagesRoute`, `updateChatMessageRoute`, `deleteChatMessageRoute`\n- `getChatMessageAttachmentUrlRoute`, `createChatMessageAttachmentRoute`, `deleteChatMessageAttachmentRoute`\n- `getChannelIconUploadUrlRoute`, `createChatMessageTemplateRoute`, `getChatMessageTemplateRoute`\n- `updateChatMessageTemplateRoute`, `deleteChatMessageTemplateRoute`, `findChatMessageTemplatesRoute`\n- `findChatMessageTemplatesForOrganizationRoute`, `getChannelMessagesRoute`\n- `upsertChatChannelReadStateRoute`, `streamChatMessagesRoute`\n\n**Organization Routes:**\n\n- `createOrganizationRoute`, `getOrganizationRoute`, `findOrganizationsRoute`, `updateOrganizationRoute`, `deleteOrganizationRoute`\n\n**Order Routes:**\n\n- `createOrderRoute`, `getOrderRoute`, `findOrdersRoute`, `updateOrderRoute`, `deleteOrderRoute`\n\n**Category Routes:**\n\n- `createCategoryRoute`, `getCategoryRoute`, `findCategoriesRoute`, `updateCategoryRoute`, `deleteCategoryRoute`\n- `enableCategoryRoute`, `disableCategoryRoute`\n\n**Attributes Routes:**\n\n- `createAttributeRoute`, `getAttributeRoute`, `findAttributesRoute`, `updateAttributeRoute`, `deleteAttributeRoute`\n\n**Identity Routes:**\n\n- `findIdentitiesRoute`, `getIdentityRoute`, `updateIdentityRoute`, `deleteIdentityRoute`\n\n#### Schemas\n\n**Authentication Schemas:**\n\n- `registerCredentialsSchema`, `loginWithCredentialsSchema`, `loginWithOnetimeTokenSchema`\n- `emailVerificationSchema`, `confirmEmailSchema`, `changeEmailSchema`, `confirmNewEmailSchema`\n- `sendResetPasswordLinkEmailSchema`, `completePasswordResetSchema`, `changePasswordSchema`\n- `deactivateSchema`, `activateSchema`, `refreshTokenSchema`, `deleteRefreshTokensSchema`\n- `resendMfaCodeSchema`, `verifyMfaCodeSchema`\n- `googleOAuthSchema`, `googleOAuthCallbackSchema`\n- `twitterOAuthSchema`, `twitterOAuthCallbackSchema`\n- `lineOAuthSchema`, `lineOAuthCallbackSchema`\n\n**User Schemas:**\n\n- `createUserSchema`, `updateUserSchema`, `userSchema`, `profileIdPathParameter`\n- `avatarSchema`, `createProfileFollowSchema`, `createOrganizationFollowSchema`, `createProductLikeSchema`\n\n**Product Schemas:**\n\n- `createProductSchema`, `updateProductSchema`, `productSchema`\n- `createProductBatchSchema`, `updateProductBatchSchema`, `deleteProductBatchSchema`, `copyProductBatchSchema`\n- `createProductVariantSchema`, `updateProductVariantSchema`, `productVariantSchema`\n- `createProductVariantBulkSchema`, `updateProductVariantBulkSchema`, `deleteProductVariantBulkSchema`\n\n**Chat Schemas:**\n\n- `createChannelSchema`, `updateChannelSchema`, `channelSchema`\n- `createChatSubscriptionSchema`, `chatSubscriptionSchema`\n- `createChatMessageSchema`, `updateChatMessageSchema`, `chatMessageSchema`\n- `createChatMessageTemplateSchema`, `updateChatMessageTemplateSchema`, `chatMessageTemplateSchema`\n- `upsertChatChannelReadStateSchema`, `chatChannelReadStateSchema`\n\n**Organization Schemas:**\n\n- `createOrganizationSchema`, `updateOrganizationSchema`, `organizationSchema`\n- `organizationCommonSchema`, `organizationAdminApprovedSchema`\n\n**Order Schemas:**\n\n- `createOrderSchema`, `updateOrderSchema`, `orderSchema`\n\n**Category Schemas:**\n\n- `createCategorySchema`, `updateCategorySchema`, `categorySchema`\n\n**Attributes Schemas:**\n\n- `createAttributeSchema`, `updateAttributeSchema`, `attributeSchema`\n\n**Common Schemas:**\n\n- `baseSchema`, `baseUpdateSchema`, `arrayOfStringsSchema`\n- `auditSchema`, `paginationSchema`, `fileSchema`, `addressSchema`, `contactSchema`\n- `paginationQueryParametersSchema`, `contentLengthQueryParameter`\n\n#### Handlers\n\n**Authentication Handlers:**\n\n- `registerCredentials`, `loginWithCredentials`, `loginWithOnetimeToken`\n- `emailVerification`, `confirmEmail`, `changeEmail`, `confirmNewEmail`\n- `sendResetPasswordLinkEmail`, `completePasswordReset`, `changePassword`\n- `deactivate`, `activate`, `refreshToken`, `deleteRefreshTokens`\n- `resendMfaCode`, `verifyMfaCode`\n- `googleOAuth`, `googleOAuthCallback`\n- `twitterOAuth`, `twitterOAuthCallback`\n- `lineOAuth`, `lineOAuthCallback`\n\n**User Handlers:**\n\n- `createUser`, `getUserById`, `findUsers`, `updateUser`, `deleteUser`\n- `lockUser`, `unlockUser`, `normalizeUserTerminator`, `normalizeUsersListTerminator`\n- `deleteUserTerminator`, `lockUserTerminator`, `unlockUserTerminator`\n- `createProfileFollow`, `deleteProfileFollow`, `getProfileFollowers`\n- `createOrganizationFollow`, `deleteOrganizationFollow`\n- `createProductLike`, `deleteProductLike`, `findProfilesByIdentityId`\n\n**Product Handlers:**\n\n- `createProduct`, `getProductById`, `findProducts`, `updateProduct`, `deleteProduct`\n- `createProductBatch`, `updateProductBatch`, `deleteProductBatch`\n- `copyProduct`, `copyProductBatch`\n- `normalizeProductTerminator`, `normalizeProductsListTerminator`\n- `deleteProductTerminator`, `deleteBatchProductsTerminator`\n- `createProductVariant`, `getProductVariant`, `updateProductVariant`, `deleteProductVariant`\n- `findProductVariants`, `createProductVariantBulk`, `updateProductVariantBulk`, `deleteProductVariantBulk`\n- `getProductLikers`\n\n**Chat Handlers:**\n\n- `createChannel`, `getChannelById`, `findChannels`, `updateChannel`, `deleteChannel`\n- `createChatSubscription`, `getChatSubscriptionById`, `findChatSubscriptions`, `deleteChatSubscription`\n- `createChatMessage`, `getChatMessageById`, `findChatMessages`, `updateChatMessage`, `deleteChatMessage`\n- `getChatMessageAttachmentUrl`, `createChatMessageAttachment`, `deleteChatMessageAttachment`\n- `getChannelIconUploadUrl`, `createChatMessageTemplate`, `getChatMessageTemplateById`\n- `updateChatMessageTemplate`, `deleteChatMessageTemplate`, `findChatMessageTemplates`\n- `findChatMessageTemplatesForOrganization`, `getChannelMessages`\n- `upsertChatChannelReadState`, `streamChatMessages`\n\n**Organization Handlers:**\n\n- `createOrganization`, `getOrganizationById`, `findOrganizations`, `updateOrganization`, `deleteOrganization`\n- `normalizeOrganizationTerminator`, `normalizeOrganizationsListTerminator`, `deleteOrganizationTerminator`\n\n**Order Handlers:**\n\n- `createOrder`, `getOrderById`, `findOrders`, `updateOrder`, `deleteOrder`\n- `normalizeOrderTerminator`, `normalizeOrdersListTerminator`, `deleteOrderTerminator`\n\n**Category Handlers:**\n\n- `createCategory`, `getCategoryById`, `findCategories`, `updateCategory`, `deleteCategory`\n- `enableCategory`, `disableCategory`\n- `normalizeCategoryTerminator`, `normalizeCategoriesListTerminator`\n- `deleteCategoryTerminator`, `enableCategoryTerminator`, `disableCategoryTerminator`\n\n**Attributes Handlers:**\n\n- `createAttributeGroup`, `getAttributeGroupById`, `findAttributeGroups`, `updateAttributeGroup`, `deleteAttributeGroup`\n- `normalizeAttributeGroupTerminator`, `normalizeAttributesListTerminator`, `deleteAttributeGroupTerminator`\n\n**Identity Handlers:**\n\n- `findIdentities`, `getIdentityById`, `updateIdentity`, `deleteIdentity`\n- `normalizeIdentitiesWithoutPassword`, `normalizeIdentity`, `deleteIdentityTerminator`\n\n#### Validators\n\n**Authentication Validators:**\n\n- `isAuthenticated()`, `checkIdentityType(types)`, `isSelf(path)`, `hasOrgRole(roles, orgIdPath)`\n\n**Domain-Specific Validators:**\n\n- `doesCategoryExist`, `channelExists`, `ownsOrder(path)`, `some(...validators)`\n\n#### Features\n\n**Authentication Features:**\n\n- `registerCredentialsFeature`, `loginWithCredentialsFeature`, `loginWithOnetimeTokenFeature`\n- `emailVerificationFeature`, `confirmEmailFeature`, `changeEmailFeature`, `confirmNewEmailFeature`\n- `sendResetPasswordLinkEmailFeature`, `completePasswordResetFeature`, `changePasswordFeature`\n- `deactivateFeature`, `activateFeature`, `refreshTokenFeature`, `deleteRefreshTokensFeature`\n- `resendMfaCodeFeature`, `verifyMfaCodeFeature`\n- `googleOAuthFeature`, `googleOAuthCallbackFeature`\n- `twitterOAuthFeature`, `twitterOAuthCallbackFeature`\n- `lineOAuthFeature`, `lineOAuthCallbackFeature`\n\n**User Features:**\n\n- `createUserFeature`, `getUserFeatures`, `findUsersFeatures`, `editUserFeatures`, `deleteUserFeatures`\n- `lockUserFeatures`, `unlockUserFeatures`, `getAvatarUploadUrlFeature`\n- `createProfileFollowFeature`, `deleteProfileFollowFeature`, `getProfileFollowersFeature`\n- `createOrganizationFollowFeature`, `deleteOrganizationFollowFeature`\n- `createProductLikeFeature`, `deleteProductLikeFeature`, `findProfilesByIdentityIdFeature`\n\n**Product Features:**\n\n- `createProductFeature`, `getProductFeatures`, `findProductsFeatures`, `editProductFeatures`, `deleteProductFeatures`\n- `createProductBatchFeature`, `editProductBatchFeatures`, `deleteProductBatchFeatures`\n- `copyProductFeatures`, `copyProductBatchFeatures`\n- `getProductImageUploadUrlFeature`, `createProductImageFeature`, `deleteProductImageFeature`\n- `createProductVariantFeature`, `getProductVariantFeature`, `updateProductVariantFeature`, `deleteProductVariantFeature`\n- `findProductVariantsFeature`, `createProductVariantBulkFeature`, `updateProductVariantBulkFeature`, `deleteProductVariantBulkFeature`\n- `getProductLikersFeature`\n\n**Chat Features:**\n\n- `createChannelFeature`, `getChannelFeature`, `findChannelsFeature`, `updateChannelFeature`, `deleteChannelFeature`\n- `createChatSubscriptionFeature`, `getChatSubscriptionFeature`, `findChatSubscriptionsFeature`, `deleteChatSubscriptionFeature`\n- `createChatMessageFeature`, `getChatMessageFeature`, `findChatMessagesFeature`, `updateChatMessageFeature`, `deleteChatMessageFeature`\n- `getChatMessageAttachmentUrlFeature`, `createChatMessageAttachmentFeature`, `deleteChatMessageAttachmentFeature`\n- `getChannelIconUploadUrlFeature`, `createChatMessageTemplateFeature`, `getChatMessageTemplateFeature`\n- `updateChatMessageTemplateFeature`, `deleteChatMessageTemplateFeature`, `findChatMessageTemplatesFeature`\n- `findChatMessageTemplatesForOrganizationFeature`, `getChannelMessagesFeature`\n- `upsertChatChannelReadStateFeature`, `streamChatMessagesFeature`\n\n**Organization Features:**\n\n- `createOrganizationFeature`, `getOrganizationFeature`, `findOrganizationsFeature`, `updateOrganizationFeature`, `deleteOrganizationFeature`\n\n**Order Features:**\n\n- `createOrderFeature`, `getOrderFeature`, `findOrdersFeature`, `updateOrderFeature`, `deleteOrderFeature`\n\n**Category Features:**\n\n- `createCategoryFeature`, `getCategoryFeature`, `findCategoriesFeature`, `updateCategoryFeature`, `deleteCategoryFeature`\n- `enableCategoryFeature`, `disableCategoryFeature`\n\n**Attributes Features:**\n\n- `createAttributeFeature`, `getAttributeFeature`, `findAttributesFeature`, `updateAttributeFeature`, `deleteAttributeFeature`\n\n**Identity Features:**\n\n- `findIdentitiesFeature`, `getIdentityFeature`, `updateIdentityFeature`, `deleteIdentityFeature`\n\n### Pagination with `withPagination`\n\nThe SDK provides a powerful utility, `withPagination`, to add automatic pagination to your database-backed route handlers. This is especially useful for MongoDB-style collections, but can be adapted for any database interface that supports `find` and `toArray`/`count` methods.\n\n#### What does `withPagination` do?\n\n- **Monkey-patches** your database collections' `find` method to automatically apply pagination parameters (`page`, `limit`).\n- **Automatically calculates skip** from page and limit parameters (skip = (page - 1) \\* limit).\n- Injects pagination metadata (like `total`, `totalPages`, `hasNext`, `hasPrev`, etc.) into the handler payload.\n- Makes it easy to build paginated endpoints without manually handling skip/limit logic in every handler.\n\n#### How to use\n\n1. **Wrap your handler** with `withPagination`:\n\n```typescript\nimport { withPagination } from '@nodeblocks/backend-sdk';\n\nconst paginatedHandler = withPagination(myHandler);\n```\n\n2. **Handler signature**: Your handler receives a payload whose `context.db` collections have a monkey-patched `find` method. When you call `.find().toArray()`, pagination is applied and metadata is injected into the payload.\n\n3. **Query parameter handling**: The `page` and `limit` parameters are extracted from `requestQuery` and used for pagination. Default values are `page = 1` and `limit = 10`. All other query parameters are preserved as filter parameters for your handler to use.\n\n4. **Accessing pagination metadata**: After calling `.toArray()` on a collection, the payload will have a `paginationResult` property with the following structure:\n\n```typescript\n{\n  data: [...],\n  pagination: {\n    page: number,\n    limit: number,\n    total: number,\n    totalPages: number,\n    hasNext: boolean,\n    hasPrev: boolean,\n  }\n}\n```\n\n#### Example: Paginated Query with MongoDB (from `__scratch__.ts`)\n\n```typescript\nimport { MongoMemoryServer } from 'mongodb-memory-server';\nimport { MongoClient } from 'mongodb';\nimport { withPagination } from '@nodeblocks/backend-sdk';\n\nconst server = await MongoMemoryServer.create();\nconst uri = server.getUri();\nconst client = new MongoClient(uri);\nconst db = client.db();\n\n// Insert some test data\nfor (let i = 0; i < 100; i++) {\n  await db.collection('attributes').insertOne({ name: 'test' + i });\n}\n\n// Define a handler that returns all attribute groups\nconst findAttributeGroups = async (payload) => {\n  const data = await payload.context.db.attributes.find({}).toArray();\n  return { attributeGroups: data };\n};\n\n// Wrap the handler with pagination\nconst paginatedHandler = withPagination(findAttributeGroups);\n\n// Call the paginated handler\nconst result = await paginatedHandler({\n  context: {\n    db: { attributes: db.collection('attributes') },\n    request: {} as any,\n  },\n  params: {\n    requestQuery: {\n      page: 1, // Current page (1-based)\n      limit: 10, // Items per page\n      // Note: skip is automatically calculated as (page - 1) * limit\n    },\n  },\n});\n\nconsole.log(result.paginationResult);\n// {\n//   data: [...],\n//   pagination: {\n//     page: 1,\n//     limit: 10,\n//     total: 100,\n//     totalPages: 10,\n//     hasNext: true,\n//     hasPrev: false,\n//   }\n// }\n```\n\n#### Testing Pagination Logic\n\nWhen testing handlers wrapped with `withPagination`, make sure to call `.toArray()` on the cursor to trigger the pagination logic and metadata injection. Example:\n\n```typescript\nconst payload = createMockPayload({ page: 2, limit: 5 }, mockData, 25);\nconst paginatedHandler = withPagination(mockHandler);\nawait paginatedHandler(payload);\nconst cursor = payload.context.db.users.find({});\nawait cursor.toArray();\nexpect(payload.paginationResult?.pagination).toEqual({\n  page: 2,\n  limit: 5,\n  total: 25,\n  totalPages: 5,\n  hasNext: true,\n  hasPrev: true,\n});\n```\n\nThis ensures your tests accurately reflect how pagination metadata is set in real usage.\n\n#### `withSoftDelete` - Soft Delete Support\n\nThe `withSoftDelete` combinator automatically converts hard deletes into soft deletes by adding a `deletedAt` timestamp instead of removing records from the database.\n\n**What does `withSoftDelete` do?**\n\n- **Converts deletes to updates**: `deleteOne` and `deleteMany` operations set `deletedAt` timestamp\n- **Filters out deleted records**: `find`, `findOne`, and `countDocuments` automatically exclude soft-deleted records\n- **Preserves data integrity**: Records are marked as deleted but remain in the database\n- **Maintains API compatibility**: Works transparently with existing handlers\n\n```typescript\nimport { withSoftDelete } from '@nodeblocks/backend-sdk';\n\n// Wrap any handler to enable soft delete\nconst softDeleteHandler = withSoftDelete(myHandler);\n\n// Now all delete operations will be soft deletes\n// and find operations will exclude deleted records\n```\n\n#### `withPaginatedProperty` - Property Pagination\n\nThe `withPaginatedProperty` combinator adds pagination to array properties within documents, useful for paginating nested arrays like organization members or product reviews.\n\n**What does `withPaginatedProperty` do?**\n\n- **Paginates array properties**: Adds pagination to specific array fields in documents\n- **Preserves document structure**: Returns the full document with paginated array properties\n- **Maintains metadata**: Includes pagination metadata for the paginated property\n- **Flexible property paths**: Supports nested property paths like `['members', 'roles']`\n\n```typescript\nimport { withPaginatedProperty } from '@nodeblocks/backend-sdk';\n\n// Paginate the 'members' array in organization documents\nconst paginatedMembersHandler = withPaginatedProperty(getOrganizationHandler, [\n  'members',\n]);\n\n// Paginate nested array properties\nconst paginatedRolesHandler = withPaginatedProperty(getUserHandler, [\n  'profile',\n  'roles',\n]);\n```\n\n#### `applyPayloadArgs` - Function Application\n\nThe `applyPayloadArgs` combinator extracts arguments from a payload and applies them to a pure function, enabling clean separation of business logic from payload handling.\n\n**What does `applyPayloadArgs` do?**\n\n- **Extracts payload data**: Pulls specific paths from the payload object\n- **Applies to pure functions**: Calls your business logic with extracted arguments\n- **Handles async/sync functions**: Works with both synchronous and asynchronous functions\n- **Supports Result types**: Automatically handles `Result` return types\n- **Merges results back**: Stores function results back into the payload\n\n```typescript\nimport { applyPayloadArgs } from '@nodeblocks/backend-sdk';\n\n// Extract arguments and apply to pure function\nconst updateUserHandler = applyPayloadArgs(\n  updateUserInDatabase, // Pure function\n  [\n    ['params', 'requestParams', 'userId'], // Extract userId\n    ['params', 'requestBody'], // Extract request body\n    ['context', 'db', 'users'], // Extract database collection\n  ],\n  'updatedUser' // Store result in payload.updatedUser\n);\n```\n\n#### `orThrow` - Result Termination\n\nThe `orThrow` combinator handles `Result` types by either returning success data or throwing appropriate errors based on error type mapping.\n\n**What does `orThrow` do?**\n\n- **Maps errors to HTTP status codes**: Converts specific error types to appropriate HTTP responses\n- **Extracts success data**: Optionally extracts specific data from successful results\n- **Throws structured errors**: Throws `NodeblocksError` with proper status codes\n- **Type-safe error handling**: Ensures all error cases are handled explicitly\n\n```typescript\nimport { orThrow } from '@nodeblocks/backend-sdk';\n\n// Map errors to HTTP status codes\nconst errorHandler = orThrow([\n  [ValidationError, 400],\n  [NotFoundError, 404],\n  [DuplicateError, 409],\n  [DatabaseError, 500],\n]);\n\n// With success data extraction\nconst successHandler = orThrow(\n  [[ValidationError, 400]], // Error mappings\n  [['user'], 200] // Extract user data with 200 status\n);\n```\n\n#### `hasValue` - Value Validation\n\nThe `hasValue` combinator validates that a value is not null, undefined, or empty, useful for input validation and data integrity checks.\n\n**What does `hasValue` do?**\n\n- **Validates meaningful content**: Ensures values are not null, undefined, or empty\n- **Type-safe validation**: Returns a type guard for TypeScript\n- **Handles various empty types**: Checks for empty strings, arrays, and objects\n- **Composable validation**: Can be used in validation pipelines\n\n```typescript\nimport { hasValue } from '@nodeblocks/backend-sdk';\n\n// Validate input has meaningful content\nif (hasValue(userInput)) {\n  // userInput is guaranteed to have content\n  processUserInput(userInput);\n}\n\n// Use in validation pipelines\nconst validateInput = (input: unknown) => {\n  if (!hasValue(input)) {\n    throw new Error('Input is required');\n  }\n  return input; // TypeScript knows input has value\n};\n```\n\n#### `lift` - Promise Lifting\n\nThe `lift` combinator lifts a synchronous function to work with promises, enabling composition of sync and async functions.\n\n**What does `lift` do?**\n\n- **Lifts sync functions**: Converts synchronous functions to work with promises\n- **Enables composition**: Allows mixing sync and async functions in composition chains\n- **Maintains type safety**: Preserves TypeScript types through the transformation\n- **Handles promise unwrapping**: Automatically awaits promises before applying the function\n\n```typescript\nimport { lift } from '@nodeblocks/backend-sdk';\n\n// Lift a sync function to work with promises\nconst asyncNormalizeUser = lift(normalizeUser);\n\n// Use in composition with async functions\nconst userHandler = compose(\n  getUserFromDatabase, // Returns Promise<User>\n  lift(normalizeUser), // Lifts sync function to work with Promise<User>\n  lift(formatUserResponse) // Lifts another sync function\n);\n```\n\n#### `flatMap` and `flatMapAsync` - Result Chaining\n\nThe `flatMap` and `flatMapAsync` combinators enable chaining of operations that return `Result` types, providing safe error handling in composition chains.\n\n**What do they do?**\n\n- **Chain Result operations**: Compose functions that return `Result` types\n- **Short-circuit on errors**: Stop execution if any step fails\n- **Preserve error context**: Maintain error information through the chain\n- **Type-safe composition**: Ensure type safety across the composition chain\n\n```typescript\nimport { flatMap, flatMapAsync } from '@nodeblocks/backend-sdk';\n\n// Chain synchronous Result operations\nconst syncChain = compose(\n  validateUser,\n  flatMap(saveUser), // Only runs if validateUser succeeds\n  flatMap(sendWelcomeEmail) // Only runs if saveUser succeeds\n);\n\n// Chain asynchronous Result operations\nconst asyncChain = compose(\n  validateUser,\n  flatMapAsync(saveUserToDatabase), // Async operation\n  flatMapAsync(sendWelcomeEmail), // Another async operation\n  lift(formatResponse) // Sync operation at the end\n);\n```\n\n## Business Blocks\n\nThe SDK includes a comprehensive set of business blocks that provide reusable, domain-specific functionality. These blocks encapsulate complex business logic and can be composed together to build sophisticated features.\n\n### Authentication Blocks\n\n**Core authentication utilities and token management:**\n\n```typescript\nimport {\n  checkToken,\n  compareStringAgainstHash,\n  generateUserAccessToken,\n  generateRefreshToken,\n  generateOnetimeToken,\n  softDeleteRefreshTokens,\n} from '@nodeblocks/backend-sdk';\n\n// Token validation with security checks\nconst tokenResult = await checkToken(\n  db.tokens,\n  authSecrets,\n  request,\n  'jwt-token-string',\n  'user-session'\n);\n\n// Password verification\nconst isValidPassword = await compareStringAgainstHash(\n  hashedPassword,\n  plainPassword\n);\n```\n\n### File Storage Blocks\n\n**File upload, management, and CDN integration:**\n\n```typescript\nimport {\n  generateSignedUploadUrl,\n  generateSignedDownloadUrl,\n  deleteFile,\n  normalizeFile,\n} from '@nodeblocks/backend-sdk';\n\n// Generate signed upload URL\nconst uploadUrl = await generateSignedUploadUrl(\n  fileStorageDriver,\n  'images/avatars',\n  'image/jpeg',\n  1024 * 1024 // 1MB limit\n);\n\n// Normalize file metadata\nconst normalizedFile = normalizeFile(uploadedFile, fileStorageDriver);\n```\n\n### Product Blocks\n\n**Product management with variants, images, and inventory:**\n\n```typescript\nimport {\n  createProduct,\n  updateProduct,\n  deleteProduct,\n  createProductVariant,\n  createProductImage,\n  deleteProductImage,\n} from '@nodeblocks/backend-sdk';\n\n// Create product with variants\nconst product = await createProduct(db.products, productData, organizationId);\n\n// Add product variant\nconst variant = await createProductVariant(\n  db.productVariants,\n  productId,\n  variantData\n);\n```\n\n### Chat Blocks\n\n**Real-time messaging and channel management:**\n\n```typescript\nimport {\n  createChannel,\n  createChatMessage,\n  createChatSubscription,\n  upsertChatChannelReadState,\n} from '@nodeblocks/backend-sdk';\n\n// Create chat channel\nconst channel = await createChannel(db.channels, channelData, organizationId);\n\n// Send message\nconst message = await createChatMessage(\n  db.messages,\n  channelId,\n  messageData,\n  senderId\n);\n```\n\n### Organization Blocks\n\n**Multi-tenant organization management:**\n\n```typescript\nimport {\n  createOrganization,\n  addOrganizationMember,\n  removeOrganizationMember,\n  updateOrganizationMemberRole,\n} from '@nodeblocks/backend-sdk';\n\n// Create organization\nconst org = await createOrganization(\n  db.organizations,\n  organizationData,\n  ownerId\n);\n\n// Add member with role\nawait addOrganizationMember(\n  db.organizationMembers,\n  organizationId,\n  userId,\n  'member'\n);\n```\n\n### User & Profile Blocks\n\n**User management and social features:**\n\n```typescript\nimport {\n  createUser,\n  updateUser,\n  createProfileFollow,\n  createProductLike,\n  getAvatarUploadUrl,\n} from '@nodeblocks/backend-sdk';\n\n// Create user profile\nconst user = await createUser(db.users, userData, identityId);\n\n// Social features\nawait createProfileFollow(db.profileFollows, followerId, followeeId);\nawait createProductLike(db.productLikes, userId, productId);\n```\n\n### Order Blocks\n\n**Order processing and management:**\n\n```typescript\nimport {\n  createOrder,\n  updateOrderStatus,\n  addOrderItem,\n  removeOrderItem,\n} from '@nodeblocks/backend-sdk';\n\n// Create order\nconst order = await createOrder(db.orders, orderData, customerId);\n\n// Update order status\nawait updateOrderStatus(db.orders, orderId, 'shipped');\n```\n\n### Location Blocks\n\n**Address and location management:**\n\n```typescript\nimport {\n  createAddress,\n  updateAddress,\n  validateAddress,\n  geocodeAddress,\n} from '@nodeblocks/backend-sdk';\n\n// Create address\nconst address = await createAddress(db.addresses, addressData, userId);\n\n// Validate and geocode\nconst validatedAddress = await validateAddress(address);\nconst geocoded = await geocodeAddress(validatedAddress);\n```\n\n### MongoDB Utility Blocks\n\n**Database operation helpers:**\n\n```typescript\nimport {\n  findResources,\n  createBaseEntity,\n  updateBaseEntity,\n} from '@nodeblocks/backend-sdk';\n\n// Find resources with error handling\nconst resources = await findResources(\n  db.collection,\n  { filter: { status: 'active' }, options: { limit: 10 } },\n  CustomError,\n  'Failed to find resources'\n);\n\n// Entity management\nconst newEntity = createBaseEntity(data);\nconst updatedEntity = updateBaseEntity(existingEntity, changes);\n```\n\n### Error Handling\n\nAll blocks use structured error handling with specific error types:\n\n```typescript\nimport {\n  AuthenticationBlockError,\n  ProductBlockError,\n  ChatChannelBlockError,\n  OrganizationBlockError,\n  UserBlockError,\n  OrderBlockError,\n  LocationBlockError,\n} from '@nodeblocks/backend-sdk';\n\n// Each block has its own error hierarchy\ntry {\n  await createProduct(db, data);\n} catch (error) {\n  if (error instanceof ProductBlockError) {\n    // Handle product-specific error\n  }\n}\n```\n\n### Block Composition\n\nBlocks can be composed together to create complex business operations:\n\n```typescript\nimport { compose, flatMapAsync, lift } from '@nodeblocks/backend-sdk';\n\n// Compose multiple blocks for a complete workflow\nconst createUserWithProfile = compose(\n  (data) => createUser(db.users, data, data.identityId),\n  flatMapAsync((user) => createAddress(db.addresses, data.address, user.id)),\n  flatMapAsync((user) =>\n    createProfileFollow(db.follows, user.id, data.followingId)\n  ),\n  lift((user) => ({ user, success: true }))\n);\n```\n\n## Drivers\n\nThe SDK includes a comprehensive set of drivers that provide integrations with external services. These drivers abstract away the complexity of third-party APIs and provide a consistent interface for your applications.\n\n### MongoDB Driver\n\n**Database connection and collection management with curried functions:**\n\n```typescript\nimport { withMongo, getMongoClient } from '@nodeblocks/backend-sdk';\n\n// Simple connection (non-curried)\nconst db = getMongoClient('mongodb://localhost:27017', 'myapp');\n\n// Curried connection with authentication - returns a function\nconst connectToDatabase = withMongo(\n  'mongodb+srv://nodeblocks-dev-cluster.8pxjylf.mongodb.net/' +\n    '?retryWrites=true&w=majority&appName=nodeblocks-dev-cluster',\n  'myapp',\n  'adam_local_user',\n  '4irpPYzyox7iV3Hyh3et'\n);\n\n// Use the curried function to get collections\nconst products = await connectToDatabase('products');\nconst users = await connectToDatabase('users');\nconst orders = await connectToDatabase('orders');\n\n// Each call returns an object with the collection\n// products = { products: Collection<Document> }\n// users = { users: Collection<Document> }\n// orders = { orders: Collection<Document> }\n\n// Use with handlers directly\nconst payload = {\n  context: {\n    db: await connectToDatabase('products'),\n  },\n  params: {\n    requestBody: {\n      name: 'Product 1',\n      price: 100,\n    },\n  },\n};\n\n// Use with services\napp.use(\n  '/api/products',\n  productService(await connectToDatabase('products'), config)\n);\napp.use('/api/users', userService(await connectToDatabase('users'), config));\n```\n\n**Advanced curried usage patterns:**\n\n```typescript\n// Create a reusable connection factory\nconst connectToMyApp = withMongo(\n  'mongodb://localhost:27017',\n  'myapp',\n  'admin',\n  'password'\n);\n\n// Use with different collections\nconst users = await connectToMyApp('users');\nconst orders = await connectToMyApp('orders');\nconst products = await connectToMyApp('products');\n\n// Fully curried application (all parameters at once)\nconst productsCollection = await withMongo(\n  'mongodb://localhost:27017',\n  'myapp',\n  'admin',\n  'password',\n  'products'\n);\n\n// Step-by-step currying\nconst step1 = withMongo('mongodb://localhost:27017');\nconst step2 = step1('myapp');\nconst step3 = step2('admin');\nconst step4 = step3('password');\nconst final = await step4('products');\n```\n\n**Practical usage with handlers and soft delete:**\n\n```typescript\nimport { withMongo } from '@nodeblocks/backend-sdk';\nimport { withSoftDelete } from '@nodeblocks/backend-sdk';\nimport {\n  createProduct,\n  updateProduct,\n  deleteProduct,\n  findProducts,\n} from '@nodeblocks/backend-sdk';\n\n// Set up database connection\nconst connectToDatabase = withMongo(\n  'mongodb+srv://nodeblocks-dev-cluster.8pxjylf.mongodb.net/' +\n    '?retryWrites=true&w=majority&appName=nodeblocks-dev-cluster',\n  'adam_tst_1007',\n  'adam_local_user',\n  '4irpPYzyox7iV3Hyh3et'\n);\n\n// Create a handler with soft delete enabled\nconst createProductWithSoftDelete = withSoftDelete(createProduct);\n\n// Use with handlers\nconst payload = {\n  context: {\n    db: await connectToDatabase('products'),\n  },\n  params: {\n    requestBody: {\n      name: 'Product 1',\n      price: 100,\n    },\n  },\n};\n\n// Execute handler with soft delete\nconst result = await createProductWithSoftDelete(payload);\n\n// The handler will automatically:\n// - Connect to the products collection\n// - Apply soft delete logic (deletedAt field)\n// - Return the created product\n```\n\n### File Storage Driver\n\n**Google Cloud Storage integration with signed URLs:**\n\n```typescript\nimport { createFileStorageDriver } from '@nodeblocks/backend-sdk';\n\n// Initialize file storage driver\nconst fileStorage = await createFileStorageDriver(\n  'my-project-id',\n  'my-storage-bucket',\n  {\n    signedUrlExpiresInSeconds: 900, // 15 minutes\n  }\n);\n\n// Generate signed upload URL\nconst uploadUrl = await fileStorage.generateSignedUploadUrl(\n  'image/jpeg',\n  5 * 1024 * 1024, // 5MB limit\n  'uploads/profile-avatar.jpg'\n);\n\n// Generate signed download URL\nconst downloadUrl = await fileStorage.generateSignedDownloadUrl(\n  'uploads/document.pdf'\n);\n\n// Delete file\nawait fileStorage.deleteFile('uploads/temp-file.jpg');\n\n// Use with services\napp.use(\n  '/api/products',\n  productService(db, config, { fileStorageDriver: fileStorage })\n);\n```\n\n### SendGrid Mail Driver\n\n**Email service integration:**\n\n```typescript\nimport { getSendGridClient } from '@nodeblocks/backend-sdk';\n\n// Basic configuration\nconst mailService = getSendGridClient(process.env.SENDGRID_API_KEY);\n\n// With custom base URL for testing\nconst testMailService = getSendGridClient(\n  process.env.SENDGRID_API_KEY,\n  'https://api-staging.sendgrid.com/v3'\n);\n\n// Send email\nconst success = await mailService.sendMail({\n  to: 'user@examp","readmeFilename":"README.md"}