@mybuildex/pkg 0.7.0 → 0.9.0
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 +17 -0
- package/dist/acl/allows.d.ts +3 -0
- package/dist/acl/allows.js +53 -0
- package/dist/acl/allows.js.map +1 -0
- package/dist/acl/map.generated.js +70 -0
- package/dist/acl/map.generated.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/redis/client.d.ts +1 -1
- package/dist/redis/client.js +4 -20
- package/dist/redis/client.js.map +1 -1
- package/dist/tenant/auth.d.ts +4 -2
- package/dist/tenant/auth.js +29 -2
- package/dist/tenant/auth.js.map +1 -1
- package/dist/tenant/permissions.d.ts +11 -2
- package/dist/tenant/permissions.js +40 -2
- package/dist/tenant/permissions.js.map +1 -1
- package/package.json +1 -2
package/dist/redis/client.js
CHANGED
|
@@ -3,25 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DEFAULT_REDIS_CONNECT_TIMEOUT_MS = void 0;
|
|
4
4
|
exports.resolveRedisOptions = resolveRedisOptions;
|
|
5
5
|
exports.createRedisClient = createRedisClient;
|
|
6
|
-
// Cliente Redis padrão das APIs. Antes cada API criava o
|
|
7
|
-
// seu (v1_pedagogico: infra.ts; v3_peoples: config/redis.ts) — a conexão
|
|
8
|
-
// agora mora aqui, UMA vez.
|
|
9
|
-
//
|
|
10
|
-
// Contrato: a env `REDIS` traz o JSON das opções do `createClient` do
|
|
11
|
-
// node-redis (vem do Secret Manager pelo workflow deploy-firebase-api-with-redis).
|
|
12
|
-
//
|
|
13
|
-
// Best-effort — nunca derruba o boot:
|
|
14
|
-
// - sem `REDIS`, JSON inválido ou falha na conexão → `undefined` (a API
|
|
15
|
-
// segue sem cache; quem usa testa o cliente antes);
|
|
16
|
-
// - timeout na conexão (default 3 s): o reconnect padrão do node-redis tenta
|
|
17
|
-
// para sempre e deixaria o boot da function preso esperando;
|
|
18
|
-
// - `disableOfflineQueue: true` por padrão: com a conexão caída, o comando
|
|
19
|
-
// falha na hora em vez de ficar na fila segurando a request (quem usa já
|
|
20
|
-
// trata erro como "sem cache"). As opções da env podem sobrescrever.
|
|
21
|
-
//
|
|
22
|
-
// O cliente devolvido serve direto como `redis` do createTenantMembershipAssert
|
|
23
|
-
// e do createPermissionsResolver (get/setEx).
|
|
24
|
-
const redis_1 = require("redis");
|
|
25
6
|
exports.DEFAULT_REDIS_CONNECT_TIMEOUT_MS = 3000;
|
|
26
7
|
/** Opções finais do createClient (exportado para teste). */
|
|
27
8
|
function resolveRedisOptions(options) {
|
|
@@ -38,13 +19,16 @@ function resolveRedisOptions(options) {
|
|
|
38
19
|
}
|
|
39
20
|
async function createRedisClient(options = {}) {
|
|
40
21
|
const log = options.log ?? ((message, error) => console.error(message, error));
|
|
41
|
-
const factory = options.createClient ?? redis_1.createClient;
|
|
42
22
|
const timeoutMs = options.connectTimeoutMs ?? exports.DEFAULT_REDIS_CONNECT_TIMEOUT_MS;
|
|
43
23
|
let client;
|
|
44
24
|
try {
|
|
45
25
|
const clientOptions = resolveRedisOptions(options);
|
|
46
26
|
if (!clientOptions)
|
|
47
27
|
return undefined;
|
|
28
|
+
// `redis` só carrega quando há o que conectar: API sem a env REDIS não
|
|
29
|
+
// paga os ~480 módulos do node-redis no cold start.
|
|
30
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
31
|
+
const factory = options.createClient ?? require("redis").createClient;
|
|
48
32
|
client = factory(clientOptions);
|
|
49
33
|
client.on?.("error", (err) => log("Redis Client Error", err));
|
|
50
34
|
let timer;
|
package/dist/redis/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/redis/client.ts"],"names":[],"mappings":";;;AAsCA,kDASC;AAED,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/redis/client.ts"],"names":[],"mappings":";;;AAsCA,kDASC;AAED,8CAiCC;AA5DY,QAAA,gCAAgC,GAAG,IAAI,CAAC;AAerD,4DAA4D;AAC5D,SAAgB,mBAAmB,CAAC,OAA4B;IAC5D,IAAI,IAAI,GAAG,OAAO,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAChJ,OAAO,EAAC,mBAAmB,EAAE,IAAI,EAAE,GAAG,IAAI,EAAC,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,UAA8B,EAAE;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,OAAe,EAAE,KAAe,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACjG,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,IAAI,wCAAgC,CAAC;IAE/E,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACD,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa;YAAE,OAAO,SAAS,CAAC;QACrC,uEAAuE;QACvE,oDAAoD;QACpD,uDAAuD;QACvD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,IAAK,OAAO,CAAC,OAAO,CAA4B,CAAC,YAAY,CAAC;QAClG,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,IAAI,KAAgD,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,SAAS,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,CAAC;gBAAS,CAAC;YACP,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,MAAqB,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACL,wBAAwB;QAC5B,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC"}
|
package/dist/tenant/auth.d.ts
CHANGED
|
@@ -9,8 +9,10 @@ export interface AuthMiddlewareOptions {
|
|
|
9
9
|
publicRoutes: PublicRouteLike[];
|
|
10
10
|
/** Resolve o Auth do tenant Firebase (ex: getTenantAuth do pkg) */
|
|
11
11
|
getTenantAuth: (tenantId: string | undefined) => TenantAuthLike;
|
|
12
|
-
/** false = API single-tenant (ex: core):
|
|
13
|
-
*
|
|
12
|
+
/** false = API single-tenant (ex: core): só vale token do tenant DEFAULT
|
|
13
|
+
* do Firebase. Chama getTenantAuth(undefined) — passe () => getDefaultAuth()
|
|
14
|
+
* — e token que carrega o claim firebase.tenant (usuário de escola) é
|
|
15
|
+
* recusado com 403, sem chamar o verifyIdToken. Default: true */
|
|
14
16
|
tenantAware?: boolean;
|
|
15
17
|
/** Aceitar token via ?token= (default: false — vaza em logs) */
|
|
16
18
|
allowQueryToken?: boolean;
|
package/dist/tenant/auth.js
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
// vazam em logs/histórico; só habilitar para fluxos que precisam (mídia).
|
|
10
10
|
// 3. Gancho `assertTenant` para amarrar o tenant do token ao id_school da
|
|
11
11
|
// URL (falha => 403) — o isolamento de dados exige esse vínculo.
|
|
12
|
+
// 4. `tenantAware: false` (core) aceita SÓ token do tenant default: token com
|
|
13
|
+
// o claim `firebase.tenant` (usuário de escola) responde 403.
|
|
12
14
|
//
|
|
13
15
|
// O tenant Firebase vem do claim `firebase.tenant` do próprio token; a
|
|
14
16
|
// VALIDAÇÃO criptográfica é do verifyIdToken do tenant correspondente —
|
|
@@ -51,7 +53,14 @@ function encodeParam(value) {
|
|
|
51
53
|
return "";
|
|
52
54
|
return encodeURIComponent(String(value));
|
|
53
55
|
}
|
|
56
|
+
const SCHOOL_TOKEN_MESSAGE = "Token de escola não é aceito nesta API";
|
|
57
|
+
/** O token (payload ou decodificado) carrega o claim firebase.tenant? */
|
|
58
|
+
function hasTenantClaim(token) {
|
|
59
|
+
const tenant = token?.firebase?.tenant;
|
|
60
|
+
return tenant !== undefined && tenant !== null && tenant !== "";
|
|
61
|
+
}
|
|
54
62
|
function createAuthMiddleware(options) {
|
|
63
|
+
const singleTenant = options.tenantAware === false;
|
|
55
64
|
const TOKEN_CACHE = new Map();
|
|
56
65
|
const MAX_CACHE_SIZE = options.cacheMaxSize ?? 2000;
|
|
57
66
|
const MAX_TTL_MS = options.cacheTtlMs ?? 120 * 1000;
|
|
@@ -127,6 +136,9 @@ function createAuthMiddleware(options) {
|
|
|
127
136
|
}
|
|
128
137
|
const cached = getCached(authHeader);
|
|
129
138
|
if (cached) {
|
|
139
|
+
if (singleTenant && hasTenantClaim(cached)) {
|
|
140
|
+
return reply.status(403).send({ message: SCHOOL_TOKEN_MESSAGE });
|
|
141
|
+
}
|
|
130
142
|
if (options.assertTenant) {
|
|
131
143
|
try {
|
|
132
144
|
await options.assertTenant(cached, request);
|
|
@@ -141,13 +153,28 @@ function createAuthMiddleware(options) {
|
|
|
141
153
|
return;
|
|
142
154
|
}
|
|
143
155
|
// o claim de tenant orienta QUAL Auth valida; a prova é criptográfica
|
|
156
|
+
const payload = JSON.parse(Buffer.from(parts[1], "base64").toString("utf-8"));
|
|
144
157
|
let tenantId;
|
|
145
|
-
if (
|
|
146
|
-
|
|
158
|
+
if (singleTenant) {
|
|
159
|
+
// API single-tenant: token de escola não entra. O Auth default
|
|
160
|
+
// do firebase-admin valida a assinatura de token de QUALQUER
|
|
161
|
+
// tenant do projeto (só o TenantAwareAuth confere o claim);
|
|
162
|
+
// quem barrava era, por acaso, a busca do usuário na checagem
|
|
163
|
+
// de revogação. Recusar pelo payload é seguro: tirar o claim
|
|
164
|
+
// quebra a assinatura.
|
|
165
|
+
if (hasTenantClaim(payload)) {
|
|
166
|
+
return reply.status(403).send({ message: SCHOOL_TOKEN_MESSAGE });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
147
170
|
tenantId = payload?.firebase?.tenant;
|
|
148
171
|
}
|
|
149
172
|
const auth = options.getTenantAuth(tenantId);
|
|
150
173
|
const decodedToken = await auth.verifyIdToken(authHeader, true);
|
|
174
|
+
// a regra vale sobre o token VERIFICADO (o payload acima é só atalho)
|
|
175
|
+
if (singleTenant && hasTenantClaim(decodedToken)) {
|
|
176
|
+
return reply.status(403).send({ message: SCHOOL_TOKEN_MESSAGE });
|
|
177
|
+
}
|
|
151
178
|
setCached(authHeader, decodedToken, decodedToken.exp);
|
|
152
179
|
if (options.assertTenant) {
|
|
153
180
|
try {
|
package/dist/tenant/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tenant/auth.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,EAAE;AACF,qEAAqE;AACrE,4EAA4E;AAC5E,uEAAuE;AACvE,wEAAwE;AACxE,0EAA0E;AAC1E,6EAA6E;AAC7E,0EAA0E;AAC1E,oEAAoE;AACpE,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,mDAAmD;;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tenant/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,16 @@ export interface PermissionsRedisLike {
|
|
|
3
3
|
setEx(key: string, ttlSeconds: number, value: string): Promise<unknown>;
|
|
4
4
|
}
|
|
5
5
|
export interface PermissionsResolverOptions {
|
|
6
|
-
/** Client Redis opcional (get/setEx). Sem ele, consulta o banco a cada request
|
|
6
|
+
/** Client Redis opcional (get/setEx). Sem ele, consulta o banco a cada request
|
|
7
|
+
* (ou a cada `memoryCacheTtlMs`, quando ligado). */
|
|
7
8
|
redis?: PermissionsRedisLike;
|
|
8
9
|
/** TTL do cache, segundos (default 3600). */
|
|
9
10
|
cacheTtlSeconds?: number;
|
|
11
|
+
/** Cache em memória da instância, ms (default 0 = desligado). Só vale SEM
|
|
12
|
+
* `redis`. Erro de consulta nunca é guardado. */
|
|
13
|
+
memoryCacheTtlMs?: number;
|
|
14
|
+
/** Máximo de entradas do cache em memória (default 5000). */
|
|
15
|
+
memoryCacheMaxSize?: number;
|
|
10
16
|
/** Identificadores de cada papel (default en + pt: teacher/professor,
|
|
11
17
|
* student/aluno, responsible/responsavel). */
|
|
12
18
|
roles?: {
|
|
@@ -21,7 +27,10 @@ export interface PermissionsResolverOptions {
|
|
|
21
27
|
}
|
|
22
28
|
/** A mesma consulta que as APIs usavam, com o uid como parâmetro. */
|
|
23
29
|
export declare function defaultPermissionsQuery(prisma: any, uid: string): Promise<string[]>;
|
|
24
|
-
export declare function createPermissionsResolver(options?: PermissionsResolverOptions):
|
|
30
|
+
export declare function createPermissionsResolver(options?: PermissionsResolverOptions): {
|
|
31
|
+
(req: any, idSchool: string | null): Promise<void>;
|
|
32
|
+
clearCache(): void;
|
|
33
|
+
};
|
|
25
34
|
/** Chave da versão do cache de permissões de uma escola. */
|
|
26
35
|
export declare function permissionsVersionKey(idSchool: string | number): string;
|
|
27
36
|
/** Chave do cache de permissões de um usuário numa versão. */
|
|
@@ -22,6 +22,12 @@
|
|
|
22
22
|
// inteira com um INCR (invalidatePermissionsCache) — atômico e O(1), sem o
|
|
23
23
|
// `KEYS perms:<id>:*` que varria o Redis todo. Chaves de versões antigas
|
|
24
24
|
// morrem pelo TTL.
|
|
25
|
+
//
|
|
26
|
+
// Sem Redis (a maioria das APIs não recebe a env REDIS) a consulta rodava a
|
|
27
|
+
// cada request. `memoryCacheTtlMs` (opt-in, 0.9.0) liga um cache em memória
|
|
28
|
+
// da instância, por `idSchool:uid`. Não há invalidação entre instâncias:
|
|
29
|
+
// mudança de permissão leva até o TTL para valer — manter curto, na ordem
|
|
30
|
+
// do cache de token e de vínculo (120 s). Com `redis` ele é ignorado.
|
|
25
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
32
|
exports.defaultPermissionsQuery = defaultPermissionsQuery;
|
|
27
33
|
exports.createPermissionsResolver = createPermissionsResolver;
|
|
@@ -54,7 +60,33 @@ function createPermissionsResolver(options = {}) {
|
|
|
54
60
|
const responsible = asList(options.roles?.responsible, roles_1.RESPONSIBLE_ACLS);
|
|
55
61
|
const query = options.query ?? defaultPermissionsQuery;
|
|
56
62
|
const log = options.logger ?? ((m, e) => console.error(m, e));
|
|
57
|
-
|
|
63
|
+
const memoryTtlMs = options.redis ? 0 : Math.max(0, Number(options.memoryCacheTtlMs) || 0);
|
|
64
|
+
const memoryMaxSize = options.memoryCacheMaxSize ?? 5000;
|
|
65
|
+
const memory = new Map();
|
|
66
|
+
function fromMemory(key) {
|
|
67
|
+
const hit = memory.get(key);
|
|
68
|
+
if (!hit)
|
|
69
|
+
return null;
|
|
70
|
+
if (hit.expMs <= Date.now()) {
|
|
71
|
+
memory.delete(key);
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
// cópia: o handler pode mexer em req.permissions sem sujar o cache
|
|
75
|
+
return [...hit.permissions];
|
|
76
|
+
}
|
|
77
|
+
function toMemory(key, permissions) {
|
|
78
|
+
memory.set(key, { expMs: Date.now() + memoryTtlMs, permissions: [...permissions] });
|
|
79
|
+
if (memory.size > memoryMaxSize) {
|
|
80
|
+
const it = memory.keys();
|
|
81
|
+
for (let i = 0; i < 100 && memory.size > memoryMaxSize; i++) {
|
|
82
|
+
const k = it.next().value;
|
|
83
|
+
if (k === undefined)
|
|
84
|
+
break;
|
|
85
|
+
memory.delete(k);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const resolvePermissions = async function resolvePermissions(req, idSchool) {
|
|
58
90
|
if (!idSchool)
|
|
59
91
|
return;
|
|
60
92
|
req.is_full = false;
|
|
@@ -70,8 +102,9 @@ function createPermissionsResolver(options = {}) {
|
|
|
70
102
|
if (req.internal === true)
|
|
71
103
|
return;
|
|
72
104
|
let cacheKey = null;
|
|
105
|
+
const memoryKey = memoryTtlMs > 0 ? `${idSchool}:${uid}` : null;
|
|
73
106
|
try {
|
|
74
|
-
let permissions = null;
|
|
107
|
+
let permissions = memoryKey ? fromMemory(memoryKey) : null;
|
|
75
108
|
if (options.redis) {
|
|
76
109
|
try {
|
|
77
110
|
const version = await readPermissionsVersion(options.redis, idSchool);
|
|
@@ -97,6 +130,8 @@ function createPermissionsResolver(options = {}) {
|
|
|
97
130
|
}
|
|
98
131
|
if (!permissions) {
|
|
99
132
|
permissions = await query(req.prisma, uid);
|
|
133
|
+
if (memoryKey)
|
|
134
|
+
toMemory(memoryKey, permissions);
|
|
100
135
|
if (options.redis && cacheKey) {
|
|
101
136
|
try {
|
|
102
137
|
await options.redis.setEx(cacheKey, ttl, JSON.stringify(permissions));
|
|
@@ -124,6 +159,9 @@ function createPermissionsResolver(options = {}) {
|
|
|
124
159
|
req.permissions_error = true;
|
|
125
160
|
}
|
|
126
161
|
};
|
|
162
|
+
/** Esvazia o cache em memória (teste, ou mudança de permissão feita pela própria instância). */
|
|
163
|
+
resolvePermissions.clearCache = () => memory.clear();
|
|
164
|
+
return resolvePermissions;
|
|
127
165
|
}
|
|
128
166
|
// --------------------------------------------------- versão do cache ----
|
|
129
167
|
const SCHOOL_RE = /^\d+$/;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/tenant/permissions.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,4EAA4E;AAC5E,8DAA8D;AAC9D,4EAA4E;AAC5E,2EAA2E;AAC3E,kBAAkB;AAClB,EAAE;AACF,SAAS;AACT,4DAA4D;AAC5D,yEAAyE;AACzE,2EAA2E;AAC3E,yEAAyE;AACzE,kEAAkE;AAClE,kEAAkE;AAClE,+EAA+E;AAC/E,0DAA0D;AAC1D,oCAAoC;AACpC,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,2EAA2E;AAC3E,yEAAyE;AACzE,mBAAmB;;
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/tenant/permissions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mybuildex/pkg",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Infra comum das APIs MyBuilder: multitenancy Prisma (pool único), middleware de tenant e CORS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
"firebase": "^10.6.0",
|
|
43
43
|
"firebase-admin": "^11.11.0",
|
|
44
44
|
"mariadb": "3.4.5",
|
|
45
|
-
"prisma": "7.10.0",
|
|
46
45
|
"redis": "^5.12.1"
|
|
47
46
|
},
|
|
48
47
|
"peerDependencies": {
|