@mybuildex/pkg 0.4.1 → 0.5.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 +1 -0
- package/dist/http/compress.d.ts +16 -0
- package/dist/http/compress.js +75 -0
- package/dist/http/compress.js.map +1 -0
- package/dist/http/error-handler.js +3 -1
- package/dist/http/error-handler.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -34,6 +34,7 @@ Quatro módulos novos, todos opt-in (nada muda numa API que não os usar):
|
|
|
34
34
|
- `createTenantMembershipAssert({getTenantClient})` — o `assertTenant` pronto: consulta `users.firebase_id = uid` no schema do `:id_school` da URL; sem vínculo → 403. Fail-closed em erro de banco; cache positivo por `escola:uid` (120 s).
|
|
35
35
|
- `createTenantMiddleware({..., strictTenant: true})` — `id_school` presente mas inválido responde 400 (`InvalidTenantError`) em vez de cair no client default, que é a escola do `DATABASE_URL`. Sem `id_school` nenhum, o default continua.
|
|
36
36
|
- `createAuthMiddleware({..., internalAuth: {routes: [publicRoute("emailsend", "", {methods: ["POST"]})]}})` (0.4.1) — autenticação de serviço entre APIs dentro do próprio auth: header `x-internal-secret` com `INTERNAL_API_SECRET`, aceito só nas rotas listadas; o request vira `internal` e não passa por `assertTenant`. Segredo errado/rota fora da lista caem no fluxo de token.
|
|
37
|
+
- `createCompressPlugin({threshold, encodings, brotliQuality, level})` (0.5.0) — `@fastify/compress` (global, br/gzip/deflate, threshold 1 KB, brotli qualidade 4) + guard `onRoute` que torna `reply.send()` sem `return` em handler `async` equivalente a `return reply`. Sem o guard, o compress (stream) fecha a resposta com `content-length: 0` nesse padrão (reproduzido em socket real e na ponte do Functions Framework). Registrar em `loadPlugins` logo após o CORS, antes dos controllers. `createAsyncSendGuard()` também é exportado.
|
|
37
38
|
- `createSharedSecretGuard({env: "INTERNAL_API_SECRET", header: "x-internal-secret"})` — `preHandler` para rotas chamadas entre APIs (ex: `emailsend`): compara o segredo do env em tempo constante; 401 se inválido, 503 (fail-closed) se a variável não existe em produção.
|
|
38
39
|
- `publicRoute(recurso, sufixo, {methods, prefix})`, `publicPath`, `isPublicRoute`, `safeEqual` — rotas públicas ancoradas (`^/v1/\d+/recurso/sufixo$`, com filtro de método) no lugar de regex de substring, e comparação de segredo/HMAC em tempo constante. `createAuthMiddleware.publicRoutes` aceita as regras e continua aceitando `RegExp`.
|
|
39
40
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type Encoding = "br" | "gzip" | "deflate";
|
|
2
|
+
export interface CompressOptions {
|
|
3
|
+
/** Tamanho mínimo do corpo (bytes) para comprimir. Default 1024 */
|
|
4
|
+
threshold?: number;
|
|
5
|
+
/** Encodings aceitos, em ordem de preferência do servidor. Default br, gzip, deflate */
|
|
6
|
+
encodings?: Encoding[];
|
|
7
|
+
/** Qualidade brotli 0-11 (default 4: bom ganho com CPU baixa — é cobrado por ms) */
|
|
8
|
+
brotliQuality?: number;
|
|
9
|
+
/** Nível gzip/deflate 1-9 (default do zlib: 6) */
|
|
10
|
+
level?: number;
|
|
11
|
+
}
|
|
12
|
+
/** Guard isolado (também exportado para teste): torna `reply.send` sem return
|
|
13
|
+
* em handler async equivalente a `return reply`. Rotas síncronas, hijack,
|
|
14
|
+
* 204 sem corpo e erros não são afetados. */
|
|
15
|
+
export declare function createAsyncSendGuard(): (fastify: any) => Promise<void>;
|
|
16
|
+
export declare function createCompressPlugin(options?: CompressOptions): (fastify: any) => Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createAsyncSendGuard = createAsyncSendGuard;
|
|
7
|
+
exports.createCompressPlugin = createCompressPlugin;
|
|
8
|
+
// Compressão de resposta (br/gzip/deflate) com @fastify/compress + guard para o
|
|
9
|
+
// padrão das APIs: `async (req, reply) => { reply.send(x) }` SEM return.
|
|
10
|
+
//
|
|
11
|
+
// POR QUE O GUARD (reproduzido em 03/09/2026 em socket real com Fastify 4.29 e
|
|
12
|
+
// @fastify/compress 7.0.3; o Gabriel viu o mesmo em outra API):
|
|
13
|
+
// 1. reply.send(x) -> o onSend do compress troca o corpo por um stream gzip e o
|
|
14
|
+
// Fastify começa a pipe-ar de forma assíncrona;
|
|
15
|
+
// 2. o handler async resolve com undefined; o wrapThenable do Fastify vê
|
|
16
|
+
// reply.sent === false (no v4 `sent` = hijacked || raw.writableEnded, e o
|
|
17
|
+
// stream ainda não escreveu nada) e chama reply.send(undefined) de novo;
|
|
18
|
+
// 3. esse segundo send fecha a resposta com content-length: 0 -> corpo vazio
|
|
19
|
+
// com Content-Encoding: gzip. Com `return reply.send(x)` não acontece.
|
|
20
|
+
// O guard intercepta reply.send da request e, se o handler async resolveu
|
|
21
|
+
// undefined DEPOIS de ter chamado send, devolve `reply` (exatamente o que a
|
|
22
|
+
// documentação do Fastify manda fazer) — sem tocar nas centenas de rotas.
|
|
23
|
+
//
|
|
24
|
+
// Registrar em loadPlugins logo após o CORS, antes dos controllers (o guard é
|
|
25
|
+
// um hook onRoute: só cobre rotas registradas depois dele).
|
|
26
|
+
const compress_1 = __importDefault(require("@fastify/compress"));
|
|
27
|
+
const node_zlib_1 = require("node:zlib");
|
|
28
|
+
const GUARD_INSTALLED = Symbol.for("@mybuildex/pkg/async-send-guard");
|
|
29
|
+
const COMPRESS_INSTALLED = Symbol.for("@mybuildex/pkg/compress-installed");
|
|
30
|
+
const SEND_CALLED = Symbol("@mybuildex/pkg/send-called");
|
|
31
|
+
/** Guard isolado (também exportado para teste): torna `reply.send` sem return
|
|
32
|
+
* em handler async equivalente a `return reply`. Rotas síncronas, hijack,
|
|
33
|
+
* 204 sem corpo e erros não são afetados. */
|
|
34
|
+
function createAsyncSendGuard() {
|
|
35
|
+
return async function asyncSendGuard(fastify) {
|
|
36
|
+
if (fastify[GUARD_INSTALLED])
|
|
37
|
+
return;
|
|
38
|
+
fastify[GUARD_INSTALLED] = true;
|
|
39
|
+
fastify.addHook("onRoute", (route) => {
|
|
40
|
+
const handler = route.handler;
|
|
41
|
+
if (typeof handler !== "function")
|
|
42
|
+
return;
|
|
43
|
+
route.handler = function guardedHandler(request, reply) {
|
|
44
|
+
const send = reply.send;
|
|
45
|
+
reply.send = function (payload) {
|
|
46
|
+
this[SEND_CALLED] = true;
|
|
47
|
+
return send.call(this, payload);
|
|
48
|
+
};
|
|
49
|
+
const result = handler.call(this, request, reply);
|
|
50
|
+
if (result && typeof result.then === "function") {
|
|
51
|
+
return result.then((value) => (value === undefined && reply[SEND_CALLED] === true) ? reply : value);
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function createCompressPlugin(options = {}) {
|
|
59
|
+
const { threshold = 1024, encodings = ["br", "gzip", "deflate"], brotliQuality = 4, level } = options;
|
|
60
|
+
const guard = createAsyncSendGuard();
|
|
61
|
+
return async function compressPlugin(fastify) {
|
|
62
|
+
await guard(fastify);
|
|
63
|
+
if (fastify[COMPRESS_INSTALLED])
|
|
64
|
+
return;
|
|
65
|
+
fastify[COMPRESS_INSTALLED] = true;
|
|
66
|
+
await fastify.register(compress_1.default, {
|
|
67
|
+
global: true,
|
|
68
|
+
threshold,
|
|
69
|
+
encodings,
|
|
70
|
+
brotliOptions: { params: { [node_zlib_1.constants.BROTLI_PARAM_QUALITY]: brotliQuality } },
|
|
71
|
+
...(level !== undefined ? { zlibOptions: { level } } : {}),
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=compress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compress.js","sourceRoot":"","sources":["../../src/http/compress.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,9 @@ function createErrorHandler(options = {}) {
|
|
|
40
40
|
else {
|
|
41
41
|
message = generic;
|
|
42
42
|
}
|
|
43
|
-
reply
|
|
43
|
+
// `return reply...` é obrigatório em handler async: sem o return, um
|
|
44
|
+
// onSend que troque o corpo por stream (compressão) deixa a resposta vazia
|
|
45
|
+
return reply.code(status).send({ statusCode: status, message });
|
|
44
46
|
});
|
|
45
47
|
};
|
|
46
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/http/error-handler.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,uEAAuE;AACvE,yEAAyE;AACzE,EAAE;AACF,4EAA4E;AAC5E,qDAAqD;AACrD,0EAA0E;AAC1E,6EAA6E;;AAc7E,0CAKC;AAED,
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/http/error-handler.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,uEAAuE;AACvE,yEAAyE;AACzE,EAAE;AACF,4EAA4E;AAC5E,qDAAqD;AACrD,0EAA0E;AAC1E,6EAA6E;;AAc7E,0CAKC;AAED,gDAwBC;AAlCD,yEAAyE;AACzE,MAAM,iBAAiB,GAAG,mHAAmH,CAAC;AAE9I,SAAgB,eAAe,CAAC,KAAU;IACtC,IAAI,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,IAAI,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,IAAI,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,kBAAkB,CAAC,UAA+B,EAAE;IAChE,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,+BAA+B,CAAC;IAC1E,OAAO,KAAK,UAAU,iBAAiB,CAAC,OAAY;QAChD,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,KAAU,EAAE,OAAY,EAAE,KAAU,EAAE,EAAE;YACnE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAErB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC;YAEhD,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjE,IAAI,OAAe,CAAC;YACpB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACpE,CAAC;iBAAM,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACJ,OAAO,GAAG,OAAO,CAAC;YACtB,CAAC;YAED,qEAAqE;YACrE,2EAA2E;YAC3E,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export { createRequestScopePlugin, requestScoped, getRequestScope, runInRequestS
|
|
|
10
10
|
export type { RequestScopeStore } from "./scope/request-scope";
|
|
11
11
|
export { publicRoute, publicPath, isPublicRoute, safeEqual } from "./http/public-route";
|
|
12
12
|
export { createSharedSecretGuard } from "./http/shared-secret";
|
|
13
|
+
export { createCompressPlugin, createAsyncSendGuard } from "./http/compress";
|
|
14
|
+
export type { CompressOptions } from "./http/compress";
|
|
13
15
|
export type { SharedSecretGuardOptions } from "./http/shared-secret";
|
|
14
16
|
export type { PublicRouteOptions, PublicRouteRule, PublicRouteLike } from "./http/public-route";
|
|
15
17
|
export { createMultitenantPrisma } from "./prisma/multitenant";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EMBED_MODEL = exports.GEMINI_MODEL = exports.EMBED_DIM = exports.GeminiHelp = exports.createGcfHandler = exports.isInternalError = exports.createErrorHandler = exports.getBucket = exports.getDefaultAuth = exports.getTenantAuth = exports.initFirebaseAdmin = exports.getFirebaseStorage = exports.getFirebaseClientApp = exports.createFirebaseClientPlugin = exports.createSwaggerPlugin = exports.DEFAULT_CORS = exports.createCorsPlugin = exports.withTenantSchema = exports.createMultitenantPrismaMariaDb = exports.createMultitenantPrisma = exports.createSharedSecretGuard = exports.safeEqual = exports.isPublicRoute = exports.publicPath = exports.publicRoute = exports.RequestScopeError = exports.runInRequestScope = exports.getRequestScope = exports.requestScoped = exports.createRequestScopePlugin = exports.createTenantMembershipAssert = exports.createAuthMiddleware = exports.InvalidTenantError = exports.createTenantMiddleware = exports.readRawTenantId = exports.resolveTenantId = void 0;
|
|
3
|
+
exports.EMBED_MODEL = exports.GEMINI_MODEL = exports.EMBED_DIM = exports.GeminiHelp = exports.createGcfHandler = exports.isInternalError = exports.createErrorHandler = exports.getBucket = exports.getDefaultAuth = exports.getTenantAuth = exports.initFirebaseAdmin = exports.getFirebaseStorage = exports.getFirebaseClientApp = exports.createFirebaseClientPlugin = exports.createSwaggerPlugin = exports.DEFAULT_CORS = exports.createCorsPlugin = exports.withTenantSchema = exports.createMultitenantPrismaMariaDb = exports.createMultitenantPrisma = exports.createAsyncSendGuard = exports.createCompressPlugin = exports.createSharedSecretGuard = exports.safeEqual = exports.isPublicRoute = exports.publicPath = exports.publicRoute = exports.RequestScopeError = exports.runInRequestScope = exports.getRequestScope = exports.requestScoped = exports.createRequestScopePlugin = exports.createTenantMembershipAssert = exports.createAuthMiddleware = exports.InvalidTenantError = exports.createTenantMiddleware = exports.readRawTenantId = exports.resolveTenantId = void 0;
|
|
4
4
|
var resolve_1 = require("./tenant/resolve");
|
|
5
5
|
Object.defineProperty(exports, "resolveTenantId", { enumerable: true, get: function () { return resolve_1.resolveTenantId; } });
|
|
6
6
|
Object.defineProperty(exports, "readRawTenantId", { enumerable: true, get: function () { return resolve_1.readRawTenantId; } });
|
|
@@ -24,6 +24,9 @@ Object.defineProperty(exports, "isPublicRoute", { enumerable: true, get: functio
|
|
|
24
24
|
Object.defineProperty(exports, "safeEqual", { enumerable: true, get: function () { return public_route_1.safeEqual; } });
|
|
25
25
|
var shared_secret_1 = require("./http/shared-secret");
|
|
26
26
|
Object.defineProperty(exports, "createSharedSecretGuard", { enumerable: true, get: function () { return shared_secret_1.createSharedSecretGuard; } });
|
|
27
|
+
var compress_1 = require("./http/compress");
|
|
28
|
+
Object.defineProperty(exports, "createCompressPlugin", { enumerable: true, get: function () { return compress_1.createCompressPlugin; } });
|
|
29
|
+
Object.defineProperty(exports, "createAsyncSendGuard", { enumerable: true, get: function () { return compress_1.createAsyncSendGuard; } });
|
|
27
30
|
var multitenant_1 = require("./prisma/multitenant");
|
|
28
31
|
Object.defineProperty(exports, "createMultitenantPrisma", { enumerable: true, get: function () { return multitenant_1.createMultitenantPrisma; } });
|
|
29
32
|
var mariadb_factory_1 = require("./prisma/mariadb-factory");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4CAAkE;AAA1D,0GAAA,eAAe,OAAA;AAAE,0GAAA,eAAe,OAAA;AAGxC,kDAA+E;AAAvE,oHAAA,sBAAsB,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAGlD,sCAAmD;AAA3C,4GAAA,oBAAoB,OAAA;AAG5B,kDAAiE;AAAzD,0HAAA,4BAA4B,OAAA;AAGpC,uDAAqI;AAA7H,yHAAA,wBAAwB,OAAA;AAAE,8GAAA,aAAa,OAAA;AAAE,gHAAA,eAAe,OAAA;AAAE,kHAAA,iBAAiB,OAAA;AAAE,kHAAA,iBAAiB,OAAA;AAGtG,oDAAsF;AAA9E,2GAAA,WAAW,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,yGAAA,SAAS,OAAA;AACzD,sDAA6D;AAArD,wHAAA,uBAAuB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4CAAkE;AAA1D,0GAAA,eAAe,OAAA;AAAE,0GAAA,eAAe,OAAA;AAGxC,kDAA+E;AAAvE,oHAAA,sBAAsB,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAGlD,sCAAmD;AAA3C,4GAAA,oBAAoB,OAAA;AAG5B,kDAAiE;AAAzD,0HAAA,4BAA4B,OAAA;AAGpC,uDAAqI;AAA7H,yHAAA,wBAAwB,OAAA;AAAE,8GAAA,aAAa,OAAA;AAAE,gHAAA,eAAe,OAAA;AAAE,kHAAA,iBAAiB,OAAA;AAAE,kHAAA,iBAAiB,OAAA;AAGtG,oDAAsF;AAA9E,2GAAA,WAAW,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,yGAAA,SAAS,OAAA;AACzD,sDAA6D;AAArD,wHAAA,uBAAuB,OAAA;AAE/B,4CAA2E;AAAnE,gHAAA,oBAAoB,OAAA;AAAE,gHAAA,oBAAoB,OAAA;AAKlD,oDAA6D;AAArD,sHAAA,uBAAuB,OAAA;AAC/B,4DAAwE;AAAhE,iIAAA,8BAA8B,OAAA;AAGtC,kDAAqD;AAA7C,8GAAA,gBAAgB,OAAA;AAUxB,wCAA6D;AAArD,0GAAA,gBAAgB,OAAA;AAAE,sGAAA,YAAY,OAAA;AAGtC,2CAAqD;AAA7C,6GAAA,mBAAmB,OAAA;AAG3B,0DAA8G;AAAtG,2HAAA,0BAA0B,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAG5E,0CAA6F;AAArF,0GAAA,iBAAiB,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,uGAAA,cAAc,OAAA;AAAE,kGAAA,SAAS,OAAA;AAGnE,sDAAyE;AAAjE,mHAAA,kBAAkB,OAAA;AAAE,gHAAA,eAAe,OAAA;AAG3C,kDAAoD;AAA5C,+GAAA,gBAAgB,OAAA;AAGxB,sCAA6E;AAArE,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,qGAAA,WAAW,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mybuildex/pkg",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.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": {
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"prepack": "npm run build"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
+
"@fastify/compress": "^7.0.3",
|
|
34
35
|
"@fastify/cors": "^8.4.1",
|
|
35
36
|
"@fastify/swagger": "^8.12.0",
|
|
36
37
|
"@fastify/swagger-ui": "^1.10.1",
|
|
@@ -51,7 +52,10 @@
|
|
|
51
52
|
}
|
|
52
53
|
},
|
|
53
54
|
"devDependencies": {
|
|
55
|
+
"@google-cloud/functions-framework": "^3.5.1",
|
|
56
|
+
"@types/express": "^4.17.25",
|
|
54
57
|
"@types/node": "^22.0.0",
|
|
58
|
+
"express": "^4.22.2",
|
|
55
59
|
"fastify": "^4.26.2",
|
|
56
60
|
"typescript": "^5.5.0",
|
|
57
61
|
"vitest": "^3.0.0"
|