@zintrust/cache-mongodb 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # @zintrust/cache-mongodb
2
+
3
+ MongoDB (Atlas Data API) cache driver for Zintrust.
4
+
5
+ - Docs: https://zintrust.com/cache
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm i @zintrust/cache-mongodb
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ Side-effect register (recommended):
16
+
17
+ ```ts
18
+ import '@zintrust/cache-mongodb/register';
19
+ ```
20
+
21
+ Then set `CACHE_DRIVER=mongodb` and configure:
22
+
23
+ - `MONGO_URI` (Atlas Data API base URL)
24
+ - `MONGO_DB`
@@ -0,0 +1,17 @@
1
+ export interface CacheDriver {
2
+ get<T>(key: string): Promise<T | null>;
3
+ set<T>(key: string, value: T, ttl?: number): Promise<void>;
4
+ delete(key: string): Promise<void>;
5
+ clear(): Promise<void>;
6
+ has(key: string): Promise<boolean>;
7
+ }
8
+ export type MongoCacheConfig = {
9
+ driver: 'mongodb';
10
+ uri: string;
11
+ db: string;
12
+ ttl: number;
13
+ };
14
+ export declare const MongoCacheDriver: Readonly<{
15
+ create(config: MongoCacheConfig): CacheDriver;
16
+ }>;
17
+ export default MongoCacheDriver;
package/dist/index.js ADDED
@@ -0,0 +1,68 @@
1
+ import { Logger } from '@zintrust/core';
2
+ export const MongoCacheDriver = Object.freeze({
3
+ create(config) {
4
+ const uri = String(config.uri ?? '').trim();
5
+ const db = String(config.db ?? '').trim();
6
+ const collection = 'cache';
7
+ const request = async (action, body) => {
8
+ if (uri === '') {
9
+ Logger.warn('MongoDB cache driver missing uri. Request ignored.');
10
+ return null;
11
+ }
12
+ try {
13
+ const response = await fetch(`${uri}/action/${action}`, {
14
+ method: 'POST',
15
+ headers: {
16
+ 'Content-Type': 'application/json',
17
+ 'Access-Control-Request-Headers': '*',
18
+ },
19
+ body: JSON.stringify({
20
+ dataSource: 'Cluster0',
21
+ database: db,
22
+ collection: collection,
23
+ ...body,
24
+ }),
25
+ });
26
+ return await response.json();
27
+ }
28
+ catch (error) {
29
+ const message = error instanceof Error ? error.message : String(error);
30
+ Logger.warn('MongoDB cache request failed', { message, action });
31
+ return null;
32
+ }
33
+ };
34
+ return {
35
+ async get(key) {
36
+ const result = (await request('findOne', { filter: { _id: key } }));
37
+ if (result?.document === undefined || result.document === null)
38
+ return null;
39
+ const doc = result.document;
40
+ if (doc.expires !== null && doc.expires < Date.now()) {
41
+ await this.delete(key);
42
+ return null;
43
+ }
44
+ return doc.value;
45
+ },
46
+ async set(key, value, ttl) {
47
+ const effectiveTtl = ttl ?? config.ttl;
48
+ const expires = effectiveTtl === undefined ? null : Date.now() + effectiveTtl * 1000;
49
+ await request('updateOne', {
50
+ filter: { _id: key },
51
+ update: { $set: { value, expires } },
52
+ upsert: true,
53
+ });
54
+ },
55
+ async delete(key) {
56
+ await request('deleteOne', { filter: { _id: key } });
57
+ },
58
+ async clear() {
59
+ await request('deleteMany', { filter: {} });
60
+ },
61
+ async has(key) {
62
+ const result = (await request('findOne', { filter: { _id: key } }));
63
+ return result?.document !== undefined && result.document !== null;
64
+ },
65
+ };
66
+ },
67
+ });
68
+ export default MongoCacheDriver;
@@ -0,0 +1,5 @@
1
+ type Registry = {
2
+ register: (driver: string, factory: (cfg: unknown) => unknown) => void;
3
+ };
4
+ export declare function registerMongoCacheDriver(registry: Registry): void;
5
+ export {};
@@ -0,0 +1,16 @@
1
+ import { MongoCacheDriver } from './index.js';
2
+ export function registerMongoCacheDriver(registry) {
3
+ registry.register('mongodb', (config) => MongoCacheDriver.create(config));
4
+ }
5
+ const importCore = async () => {
6
+ try {
7
+ return await import('@zintrust/core');
8
+ }
9
+ catch {
10
+ return {};
11
+ }
12
+ };
13
+ const core = (await importCore());
14
+ if (core.CacheDriverRegistry !== undefined) {
15
+ registerMongoCacheDriver(core.CacheDriverRegistry);
16
+ }
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@zintrust/cache-mongodb",
3
+ "version": "0.1.12",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.js"
15
+ },
16
+ "./register": {
17
+ "types": "./dist/register.d.ts",
18
+ "default": "./dist/register.js"
19
+ }
20
+ },
21
+ "engines": {
22
+ "node": ">=20.0.0"
23
+ },
24
+ "peerDependencies": {
25
+ "@zintrust/core": "^0.1.12"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "scripts": {
31
+ "build": "tsc -p tsconfig.json",
32
+ "prepublishOnly": "npm run build"
33
+ }
34
+ }