@flowerforce/flowerbase 1.8.4-beta.6 → 1.8.4-beta.8

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/dist/index.d.ts CHANGED
@@ -6,6 +6,16 @@ export type CorsConfig = {
6
6
  origin: string;
7
7
  methods: ALLOWED_METHODS[];
8
8
  };
9
+ export type FastifyTimeoutConfig = {
10
+ /** Milliseconds to wait for a new connection (default: 0 = disabled) */
11
+ connectionTimeout?: number;
12
+ /** Milliseconds to keep idle keep-alive connections open (default: 72000) */
13
+ keepAliveTimeout?: number;
14
+ /** Milliseconds to wait for an incoming request body (default: 0 = disabled) */
15
+ requestTimeout?: number;
16
+ /** Milliseconds to wait for a plugin to load (default: 10000) */
17
+ pluginTimeout?: number;
18
+ };
9
19
  export type InitializeConfig = {
10
20
  projectId: string;
11
21
  mongodbUrl?: string;
@@ -15,6 +25,7 @@ export type InitializeConfig = {
15
25
  corsConfig?: CorsConfig;
16
26
  basePath?: string;
17
27
  mongodbEncryptionConfig?: MongoDbEncryptionConfig;
28
+ timeoutConfig?: FastifyTimeoutConfig;
18
29
  };
19
30
  /**
20
31
  * > Used to initialize fastify app
@@ -24,5 +35,5 @@ export type InitializeConfig = {
24
35
  * @param port -> the serve port number
25
36
  * @param mongodbUrl -> the database connection string
26
37
  */
27
- export declare function initialize({ projectId, host, jwtSecret, port, mongodbUrl, corsConfig, basePath, mongodbEncryptionConfig }: InitializeConfig): Promise<void>;
38
+ export declare function initialize({ projectId, host, jwtSecret, port, mongodbUrl, corsConfig, basePath, mongodbEncryptionConfig, timeoutConfig }: InitializeConfig): Promise<void>;
28
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAetB,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC/E,cAAc,SAAS,CAAA;AAGvB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;CAClD,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,IAA0B,EAC1B,SAAqC,EACrC,IAA0B,EAC1B,UAAuC,EACvC,UAAwC,EACxC,QAAQ,EACR,uBAAuB,EACxB,EAAE,gBAAgB,iBA6HlB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAetB,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC/E,cAAc,SAAS,CAAA;AAGvB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;IACjD,aAAa,CAAC,EAAE,oBAAoB,CAAA;CACrC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,IAA0B,EAC1B,SAAqC,EACrC,IAA0B,EAC1B,UAAuC,EACvC,UAAwC,EACxC,QAAQ,EACR,uBAAuB,EACvB,aAAa,EACd,EAAE,gBAAgB,iBAiIlB"}
package/dist/index.js CHANGED
@@ -74,15 +74,13 @@ __exportStar(require("./model"), exports);
74
74
  * @param mongodbUrl -> the database connection string
75
75
  */
76
76
  function initialize(_a) {
77
- return __awaiter(this, arguments, void 0, function* ({ projectId, host = constants_1.DEFAULT_CONFIG.HOST, jwtSecret = constants_1.DEFAULT_CONFIG.JWT_SECRET, port = constants_1.DEFAULT_CONFIG.PORT, mongodbUrl = constants_1.DEFAULT_CONFIG.MONGODB_URL, corsConfig = constants_1.DEFAULT_CONFIG.CORS_OPTIONS, basePath, mongodbEncryptionConfig }) {
77
+ return __awaiter(this, arguments, void 0, function* ({ projectId, host = constants_1.DEFAULT_CONFIG.HOST, jwtSecret = constants_1.DEFAULT_CONFIG.JWT_SECRET, port = constants_1.DEFAULT_CONFIG.PORT, mongodbUrl = constants_1.DEFAULT_CONFIG.MONGODB_URL, corsConfig = constants_1.DEFAULT_CONFIG.CORS_OPTIONS, basePath, mongodbEncryptionConfig, timeoutConfig }) {
78
78
  var _b, _c;
79
79
  if (!jwtSecret || jwtSecret.trim().length === 0) {
80
80
  throw new Error('JWT secret missing: set JWT_SECRET or pass jwtSecret to initialize()');
81
81
  }
82
82
  const resolvedBasePath = (_c = basePath !== null && basePath !== void 0 ? basePath : (_b = require.main) === null || _b === void 0 ? void 0 : _b.path) !== null && _c !== void 0 ? _c : process.cwd();
83
- const fastify = (0, fastify_1.default)({
84
- logger: !!constants_1.DEFAULT_CONFIG.ENABLE_LOGGER
85
- });
83
+ const fastify = (0, fastify_1.default)(Object.assign(Object.assign(Object.assign(Object.assign({ logger: !!constants_1.DEFAULT_CONFIG.ENABLE_LOGGER }, ((timeoutConfig === null || timeoutConfig === void 0 ? void 0 : timeoutConfig.connectionTimeout) !== undefined && { connectionTimeout: timeoutConfig.connectionTimeout })), ((timeoutConfig === null || timeoutConfig === void 0 ? void 0 : timeoutConfig.keepAliveTimeout) !== undefined && { keepAliveTimeout: timeoutConfig.keepAliveTimeout })), ((timeoutConfig === null || timeoutConfig === void 0 ? void 0 : timeoutConfig.requestTimeout) !== undefined && { requestTimeout: timeoutConfig.requestTimeout })), ((timeoutConfig === null || timeoutConfig === void 0 ? void 0 : timeoutConfig.pluginTimeout) !== undefined && { pluginTimeout: timeoutConfig.pluginTimeout })));
86
84
  const isTest = process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined;
87
85
  const logInfo = (...args) => {
88
86
  if (!isTest) {
@@ -24,6 +24,7 @@ export declare const generateContextData: ({ user, services, app, rules, current
24
24
  deserialize: (ejson: mongodb.BSON.Document, options?: mongodb.BSON.EJSONOptions) => any;
25
25
  };
26
26
  Buffer: BufferConstructor;
27
+ fetch: typeof fetch;
27
28
  utils: {
28
29
  jwt: JwtUtils;
29
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/utils/context/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,KAAK,QAAQ,GAAG;IACd,MAAM,EAAE,CACN,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACzC,MAAM,CAAA;IACX,MAAM,EAAE,CACN,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GAAG,MAAM,EACpB,YAAY,CAAC,EAAE,OAAO,EACtB,sBAAsB,CAAC,EAAE,MAAM,EAAE,KAC9B,OAAO,CAAA;CACb,CAAA;AAgFD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,4GAUjC,yBAAyB;;;;;;;;;;;;;uBA4DP,SAAS;yBAGP,SAAS;;;;;;;;;;;0BAoBmB,MAAM,GAAG,SAAS;2BACV,MAAM,GAAG,SAAS;;;;;;;;;uBAS1D,MAAM;;;;;;+BA5DU,MAAM,OAAO,QAAQ;;;;sCA1HrC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAsGT,CAAC;iCAAa,CAAC;;;;;;;;;;;;;;;;;;;kCAtGP,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAsGT,CAAC;6BAAa,CAAC;;;;;;;;;;;;;;;;;;kCAtGP,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAsGT,CAAC;6BAAa,CAAC;;;;;;;;;;;;;;;4BAyFF,MAAM,OAAO,aAAa,WAAW,SAAS;;;CAkBrE,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/utils/context/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,KAAK,QAAQ,GAAG;IACd,MAAM,EAAE,CACN,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACzC,MAAM,CAAA;IACX,MAAM,EAAE,CACN,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GAAG,MAAM,EACpB,YAAY,CAAC,EAAE,OAAO,EACtB,sBAAsB,CAAC,EAAE,MAAM,EAAE,KAC9B,OAAO,CAAA;CACb,CAAA;AAgFD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,4GAUjC,yBAAyB;;;;;;;;;;;;;;uBA6DP,SAAS;yBAGP,SAAS;;;;;;;;;;;0BAoBmB,MAAM,GAAG,SAAS;2BACV,MAAM,GAAG,SAAS;;;;;;;;;uBAS1D,MAAM;;;;;;+BA7DU,MAAM,OAAO,QAAQ;;;;sCA1HrC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAsGT,CAAC;iCAAa,CAAC;;;;;;;;;;;;;;;;;;;kCAtGP,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAsGT,CAAC;6BAAa,CAAC;;;;;;;;;;;;;;;;;;kCAtGP,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAsGT,CAAC;6BAAa,CAAC;;;;;;;;;;;;;;;4BA0FF,MAAM,OAAO,aAAa,WAAW,SAAS;;;CAkBrE,CAAA"}
@@ -150,6 +150,7 @@ const generateContextData = ({ user, services, app, rules, currentFunction, func
150
150
  BSON,
151
151
  EJSON: bson_1.EJSON,
152
152
  Buffer,
153
+ fetch,
153
154
  utils,
154
155
  console: {
155
156
  log: (...args) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowerforce/flowerbase",
3
- "version": "1.8.4-beta.6",
3
+ "version": "1.8.4-beta.8",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -24,6 +24,17 @@ export type CorsConfig = {
24
24
  methods: ALLOWED_METHODS[]
25
25
  }
26
26
 
27
+ export type FastifyTimeoutConfig = {
28
+ /** Milliseconds to wait for a new connection (default: 0 = disabled) */
29
+ connectionTimeout?: number
30
+ /** Milliseconds to keep idle keep-alive connections open (default: 72000) */
31
+ keepAliveTimeout?: number
32
+ /** Milliseconds to wait for an incoming request body (default: 0 = disabled) */
33
+ requestTimeout?: number
34
+ /** Milliseconds to wait for a plugin to load (default: 10000) */
35
+ pluginTimeout?: number
36
+ }
37
+
27
38
  export type InitializeConfig = {
28
39
  projectId: string
29
40
  mongodbUrl?: string
@@ -33,6 +44,7 @@ export type InitializeConfig = {
33
44
  corsConfig?: CorsConfig
34
45
  basePath?: string
35
46
  mongodbEncryptionConfig?: MongoDbEncryptionConfig
47
+ timeoutConfig?: FastifyTimeoutConfig
36
48
  }
37
49
 
38
50
  /**
@@ -51,7 +63,8 @@ export async function initialize({
51
63
  mongodbUrl = DEFAULT_CONFIG.MONGODB_URL,
52
64
  corsConfig = DEFAULT_CONFIG.CORS_OPTIONS,
53
65
  basePath,
54
- mongodbEncryptionConfig
66
+ mongodbEncryptionConfig,
67
+ timeoutConfig
55
68
  }: InitializeConfig) {
56
69
  if (!jwtSecret || jwtSecret.trim().length === 0) {
57
70
  throw new Error('JWT secret missing: set JWT_SECRET or pass jwtSecret to initialize()')
@@ -59,7 +72,11 @@ export async function initialize({
59
72
 
60
73
  const resolvedBasePath = basePath ?? require.main?.path ?? process.cwd()
61
74
  const fastify = Fastify({
62
- logger: !!DEFAULT_CONFIG.ENABLE_LOGGER
75
+ logger: !!DEFAULT_CONFIG.ENABLE_LOGGER,
76
+ ...(timeoutConfig?.connectionTimeout !== undefined && { connectionTimeout: timeoutConfig.connectionTimeout }),
77
+ ...(timeoutConfig?.keepAliveTimeout !== undefined && { keepAliveTimeout: timeoutConfig.keepAliveTimeout }),
78
+ ...(timeoutConfig?.requestTimeout !== undefined && { requestTimeout: timeoutConfig.requestTimeout }),
79
+ ...(timeoutConfig?.pluginTimeout !== undefined && { pluginTimeout: timeoutConfig.pluginTimeout })
63
80
  })
64
81
 
65
82
  const isTest = process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined
@@ -157,4 +157,25 @@ describe('context.functions.execute compatibility', () => {
157
157
  expect(result).toEqual({ address: 'rome', total: 10 })
158
158
  fs.rmSync(tempDir, { recursive: true, force: true })
159
159
  })
160
+
161
+ it('exposes native fetch in the sandbox global scope', () => {
162
+ const functionsList = {
163
+ caller: {
164
+ code: 'module.exports = function() { return fetch === globalThis.fetch && typeof fetch === "function" }'
165
+ }
166
+ } as Functions
167
+
168
+ const result = GenerateContextSync({
169
+ args: [],
170
+ app: {} as any,
171
+ rules: {} as any,
172
+ user: {} as any,
173
+ currentFunction: functionsList.caller,
174
+ functionsList,
175
+ services: mockServices,
176
+ functionName: 'caller'
177
+ })
178
+
179
+ expect(result).toBe(true)
180
+ })
160
181
  })
@@ -47,7 +47,7 @@ describe('generateContextData', () => {
47
47
 
48
48
  it('should return an object with context configuration', async () => {
49
49
  const mockApp = Fastify()
50
- const { context, console: contextConsole, BSON } = generateContextData({
50
+ const { context, console: contextConsole, BSON, fetch } = generateContextData({
51
51
  services,
52
52
  app: mockApp,
53
53
  functionsList: mockFunctions,
@@ -66,6 +66,8 @@ describe('generateContextData', () => {
66
66
 
67
67
  expect(context.user).toEqual(mockUser)
68
68
 
69
+ expect(fetch).toBe(global.fetch)
70
+
69
71
  const mockedLog = jest.spyOn(console, 'log').mockImplementation(() => { })
70
72
  contextConsole.log('Test', 'generateContextData')
71
73
  expect(mockedLog).toHaveBeenCalledWith('Test', 'generateContextData')
@@ -176,6 +176,7 @@ export const generateContextData = ({
176
176
  BSON,
177
177
  EJSON,
178
178
  Buffer,
179
+ fetch,
179
180
  utils,
180
181
  console: {
181
182
  log: (...args: Arguments) => {