@adaptic/backend-legacy 0.0.52 → 0.0.54

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.
Files changed (89) hide show
  1. package/README.md +47 -35
  2. package/apollo-client.client.d.ts +7 -7
  3. package/apollo-client.server.d.ts +7 -7
  4. package/client.cjs +27 -16
  5. package/client.d.ts +10 -10
  6. package/esm/apollo-client.client.d.ts +7 -7
  7. package/esm/apollo-client.client.mjs +6 -6
  8. package/esm/apollo-client.server.d.ts +7 -7
  9. package/esm/apollo-client.server.mjs +6 -6
  10. package/esm/client.d.ts +10 -10
  11. package/esm/client.d.ts.map +1 -1
  12. package/esm/client.js.map +1 -1
  13. package/esm/client.mjs +27 -16
  14. package/esm/config/jwtConfig.d.ts.map +1 -1
  15. package/esm/config/jwtConfig.js.map +1 -1
  16. package/esm/config/metrics.d.ts.map +1 -1
  17. package/esm/config/metrics.js.map +1 -1
  18. package/esm/config/metrics.mjs +6 -2
  19. package/esm/config/persisted-queries.d.ts.map +1 -1
  20. package/esm/config/persisted-queries.js.map +1 -1
  21. package/esm/config/persisted-queries.mjs +3 -1
  22. package/esm/config/tracing.d.ts.map +1 -1
  23. package/esm/config/tracing.js.map +1 -1
  24. package/esm/config/tracing.mjs +5 -3
  25. package/esm/getToken.d.ts +1 -1
  26. package/esm/getToken.d.ts.map +1 -1
  27. package/esm/getToken.js.map +1 -1
  28. package/esm/getToken.mjs +25 -12
  29. package/esm/middleware/audit-logger.d.ts +1 -1
  30. package/esm/middleware/audit-logger.d.ts.map +1 -1
  31. package/esm/middleware/audit-logger.js.map +1 -1
  32. package/esm/middleware/audit-logger.mjs +8 -4
  33. package/esm/middleware/auth.d.ts +1 -1
  34. package/esm/middleware/auth.d.ts.map +1 -1
  35. package/esm/middleware/auth.js.map +1 -1
  36. package/esm/middleware/auth.mjs +7 -5
  37. package/esm/middleware/graphql-validation-plugin.d.ts.map +1 -1
  38. package/esm/middleware/graphql-validation-plugin.js.map +1 -1
  39. package/esm/middleware/index.d.ts +1 -1
  40. package/esm/middleware/index.d.ts.map +1 -1
  41. package/esm/middleware/index.js.map +1 -1
  42. package/esm/middleware/index.mjs +1 -1
  43. package/esm/middleware/query-complexity.d.ts.map +1 -1
  44. package/esm/middleware/query-complexity.js.map +1 -1
  45. package/esm/middleware/query-complexity.mjs +3 -1
  46. package/esm/middleware/rate-limiter.d.ts.map +1 -1
  47. package/esm/middleware/rate-limiter.js.map +1 -1
  48. package/esm/middleware/rate-limiter.mjs +6 -2
  49. package/esm/middleware/soft-delete.d.ts.map +1 -1
  50. package/esm/middleware/soft-delete.js.map +1 -1
  51. package/esm/middleware/soft-delete.mjs +8 -2
  52. package/esm/middleware/validation-examples.d.ts.map +1 -1
  53. package/esm/middleware/validation-examples.js.map +1 -1
  54. package/esm/middleware/validation-examples.mjs +2 -1
  55. package/esm/plugins/error-sanitizer.d.ts.map +1 -1
  56. package/esm/plugins/error-sanitizer.js.map +1 -1
  57. package/esm/plugins/error-sanitizer.mjs +1 -3
  58. package/esm/plugins/integration-example.d.ts.map +1 -1
  59. package/esm/plugins/integration-example.js.map +1 -1
  60. package/esm/plugins/query-depth-limiter.d.ts.map +1 -1
  61. package/esm/plugins/query-depth-limiter.js.map +1 -1
  62. package/esm/plugins/query-depth-limiter.mjs +3 -1
  63. package/esm/prismaClient.d.ts +1 -1
  64. package/esm/prismaClient.d.ts.map +1 -1
  65. package/esm/prismaClient.js.map +1 -1
  66. package/esm/prismaClient.mjs +2 -2
  67. package/esm/resolvers/custom/OptionsGreeksHistoryCustomResolver.js.map +1 -1
  68. package/esm/resolvers/custom/OptionsGreeksHistoryCustomResolver.mjs +2 -2
  69. package/esm/resolvers/custom/OptionsGreeksHistorySystemSummary.js.map +1 -1
  70. package/esm/resolvers/custom/OptionsGreeksHistorySystemSummary.mjs +4 -4
  71. package/esm/scripts/migrate-openai-model-enum.js.map +1 -1
  72. package/esm/utils/logger.d.ts.map +1 -1
  73. package/esm/utils/logger.js.map +1 -1
  74. package/esm/utils.d.ts.map +1 -1
  75. package/esm/utils.js.map +1 -1
  76. package/esm/utils.mjs +22 -9
  77. package/esm/validators/allocation-validator.d.ts.map +1 -1
  78. package/esm/validators/allocation-validator.js.map +1 -1
  79. package/esm/validators/allocation-validator.mjs +6 -6
  80. package/getToken.cjs +24 -12
  81. package/getToken.d.ts +1 -1
  82. package/package.json +1 -1
  83. package/prismaClient.d.ts +1 -1
  84. package/resolvers/custom/OptionsGreeksHistoryCustomResolver.cjs +2 -2
  85. package/resolvers/custom/OptionsGreeksHistoryCustomResolver.js.map +1 -1
  86. package/resolvers/custom/OptionsGreeksHistorySystemSummary.cjs +4 -4
  87. package/resolvers/custom/OptionsGreeksHistorySystemSummary.js.map +1 -1
  88. package/server.cjs +60 -19
  89. package/utils.cjs +22 -9
package/getToken.cjs CHANGED
@@ -56,14 +56,17 @@ function generateUUID() {
56
56
  return crypto.randomUUID();
57
57
  }
58
58
  // Fallback for older Node.js versions
59
- return (1e7 + -1e3 + -4e3 + -8e3 + -1e11).toString().replace(/[018]/g, (c) => (parseInt(c, 16) ^
59
+ return (1e7 + -1e3 + -4e3 + -8e3 + -1e11)
60
+ .toString()
61
+ .replace(/[018]/g, (c) => (parseInt(c, 16) ^
60
62
  (crypto.randomBytes(1)[0] & (15 >> (parseInt(c, 16) / 4)))).toString(16));
61
63
  }
62
64
  /**
63
65
  * Base64 URL Encode
64
66
  */
65
67
  function base64UrlEncode(buffer) {
66
- return buffer.toString('base64')
68
+ return buffer
69
+ .toString('base64')
67
70
  .replace(/=/g, '')
68
71
  .replace(/\+/g, '-')
69
72
  .replace(/\//g, '_');
@@ -85,7 +88,7 @@ function base64UrlDecode(str) {
85
88
  async function encryptJWT(payload, encryptionKey) {
86
89
  const header = {
87
90
  alg: 'dir',
88
- enc: 'A256GCM'
91
+ enc: 'A256GCM',
89
92
  };
90
93
  const iv = crypto.randomBytes(12); // 96-bit nonce for GCM
91
94
  const cipher = crypto.createCipheriv('aes-256-gcm', encryptionKey, iv);
@@ -97,7 +100,7 @@ async function encryptJWT(payload, encryptionKey) {
97
100
  '', // Encrypted Key (empty for 'dir')
98
101
  base64UrlEncode(iv), // IV
99
102
  base64UrlEncode(ciphertext), // Ciphertext
100
- base64UrlEncode(authTag) // Authentication Tag
103
+ base64UrlEncode(authTag), // Authentication Tag
101
104
  ].join('.');
102
105
  return jwe;
103
106
  }
@@ -109,7 +112,7 @@ async function decryptJWT(jwe, encryptionKey) {
109
112
  if (parts.length !== 5) {
110
113
  throw new Error('Invalid JWE format');
111
114
  }
112
- const [encodedHeader, encryptedKey, encodedIV, encodedCiphertext, encodedAuthTag] = parts;
115
+ const [encodedHeader, encryptedKey, encodedIV, encodedCiphertext, encodedAuthTag,] = parts;
113
116
  if (encryptedKey !== '') {
114
117
  throw new Error('Encrypted Key must be empty for "dir" algorithm');
115
118
  }
@@ -137,7 +140,9 @@ async function decryptJWT(jwe, encryptionKey) {
137
140
  */
138
141
  async function getDerivedEncryptionKey(keyMaterial, salt) {
139
142
  return new Promise((resolve, reject) => {
140
- const ikm = typeof keyMaterial === 'string' ? buffer_1.Buffer.from(keyMaterial, 'utf8') : keyMaterial;
143
+ const ikm = typeof keyMaterial === 'string'
144
+ ? buffer_1.Buffer.from(keyMaterial, 'utf8')
145
+ : keyMaterial;
141
146
  const saltBuffer = buffer_1.Buffer.from(salt, 'utf8');
142
147
  const info = buffer_1.Buffer.from(`NextAuth.js Generated Encryption Key${salt ? ` (${salt})` : ''}`, 'utf8');
143
148
  crypto.hkdf('sha256', ikm, saltBuffer, info, 32, (err, derivedKey) => {
@@ -160,7 +165,7 @@ async function encode(params) {
160
165
  ...token,
161
166
  iat: now(),
162
167
  exp: now() + maxAge,
163
- jti: generateUUID()
168
+ jti: generateUUID(),
164
169
  };
165
170
  return await encryptJWT(payload, encryptionSecret);
166
171
  }
@@ -199,14 +204,16 @@ class SessionStore {
199
204
  }
200
205
  parseCookie(cookies, headers = {}) {
201
206
  // If cookies are provided as an object
202
- if (typeof cookies === 'object' && cookies !== null && !Array.isArray(cookies)) {
207
+ if (typeof cookies === 'object' &&
208
+ cookies !== null &&
209
+ !Array.isArray(cookies)) {
203
210
  const cookieObj = cookies;
204
211
  return cookieObj[this.name] || null;
205
212
  }
206
213
  // If cookies are provided as a string
207
214
  if (typeof cookies === 'string') {
208
215
  const parsedCookies = {};
209
- cookies.split(';').forEach(cookie => {
216
+ cookies.split(';').forEach((cookie) => {
210
217
  const [key, ...val] = cookie.trim().split('=');
211
218
  parsedCookies[key] = val.join('=');
212
219
  });
@@ -215,7 +222,7 @@ class SessionStore {
215
222
  // Fallback: Try to parse from headers
216
223
  if (headers && headers.cookie && typeof headers.cookie === 'string') {
217
224
  const parsedCookies = {};
218
- headers.cookie.split(';').forEach(cookie => {
225
+ headers.cookie.split(';').forEach((cookie) => {
219
226
  const [key, ...val] = cookie.trim().split('=');
220
227
  parsedCookies[key] = decodeURIComponent(val.join('='));
221
228
  });
@@ -229,14 +236,19 @@ class SessionStore {
229
236
  */
230
237
  async function getToken(params) {
231
238
  var _a, _b;
232
- const { req, secureCookie = ((_b = (_a = process.env.NEXTAUTH_URL) === null || _a === void 0 ? void 0 : _a.startsWith('https://')) !== null && _b !== void 0 ? _b : false) || !!process.env.VERCEL, cookieName = secureCookie ? '__Secure-next-auth.session-token' : 'next-auth.session-token', raw = false, decode: _decode = decode, logger = defaultLogger, secret = jwtConfig_1.jwtSecret, salt = process.env.JWT_SALT || '' } = params;
239
+ const { req, secureCookie = ((_b = (_a = process.env.NEXTAUTH_URL) === null || _a === void 0 ? void 0 : _a.startsWith('https://')) !== null && _b !== void 0 ? _b : false) ||
240
+ !!process.env.VERCEL, cookieName = secureCookie
241
+ ? '__Secure-next-auth.session-token'
242
+ : 'next-auth.session-token', raw = false, decode: _decode = decode, logger = defaultLogger, secret = jwtConfig_1.jwtSecret, salt = process.env.JWT_SALT || '', } = params;
233
243
  if (!req)
234
244
  throw new Error('Must pass `req` to JWT getToken()');
235
245
  const sessionStore = new SessionStore({ name: cookieName, options: { secure: secureCookie } }, req, logger);
236
246
  let token = sessionStore.value;
237
247
  // Check Authorization header for Bearer token
238
248
  const authorizationHeader = req.headers && req.headers['authorization'];
239
- if (!token && typeof authorizationHeader === 'string' && authorizationHeader.startsWith('Bearer ')) {
249
+ if (!token &&
250
+ typeof authorizationHeader === 'string' &&
251
+ authorizationHeader.startsWith('Bearer ')) {
240
252
  const urlEncodedToken = authorizationHeader.split(' ')[1];
241
253
  token = decodeURIComponent(urlEncodedToken);
242
254
  logger.info('Token found in Authorization header');
package/getToken.d.ts CHANGED
@@ -76,7 +76,7 @@ interface GetTokenParams<R extends boolean = false> {
76
76
  * Defaults to the `JWT_SALT` environment variable.
77
77
  */
78
78
  salt?: string;
79
- decode?: JWTOptions["decode"];
79
+ decode?: JWTOptions['decode'];
80
80
  logger?: LoggerInstance;
81
81
  }
82
82
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptic/backend-legacy",
3
- "version": "0.0.52",
3
+ "version": "0.0.54",
4
4
  "description": "Backend executable CRUD functions with dynamic variables construction, and type definitions for the Adaptic AI platform.",
5
5
  "type": "module",
6
6
  "types": "index.d.ts",
package/prismaClient.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { PrismaClient } from "@prisma/client";
1
+ import { PrismaClient } from '@prisma/client';
2
2
  /**
3
3
  * Define the global type for PrismaClient to use across environments
4
4
  */
@@ -98,7 +98,7 @@ let OptionsGreeksHistoryCustomResolver = class OptionsGreeksHistoryCustomResolve
98
98
  };
99
99
  exports.OptionsGreeksHistoryCustomResolver = OptionsGreeksHistoryCustomResolver;
100
100
  __decorate([
101
- TypeGraphQL.Query(_returns => OptionsGreeksHistorySystemSummary_1.OptionsGreeksHistorySystemSummary, {
101
+ TypeGraphQL.Query((_returns) => OptionsGreeksHistorySystemSummary_1.OptionsGreeksHistorySystemSummary, {
102
102
  nullable: false,
103
103
  description: 'Get system-wide summary statistics for Greeks history data',
104
104
  }),
@@ -108,6 +108,6 @@ __decorate([
108
108
  __metadata("design:returntype", Promise)
109
109
  ], OptionsGreeksHistoryCustomResolver.prototype, "optionsGreeksHistorySystemSummary", null);
110
110
  exports.OptionsGreeksHistoryCustomResolver = OptionsGreeksHistoryCustomResolver = __decorate([
111
- TypeGraphQL.Resolver(_of => PortfolioGreeksHistory_1.PortfolioGreeksHistory)
111
+ TypeGraphQL.Resolver((_of) => PortfolioGreeksHistory_1.PortfolioGreeksHistory)
112
112
  ], OptionsGreeksHistoryCustomResolver);
113
113
  //# sourceMappingURL=OptionsGreeksHistoryCustomResolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OptionsGreeksHistoryCustomResolver.js","sourceRoot":"","sources":["../../../src/resolvers/custom/OptionsGreeksHistoryCustomResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AAE5C,6GAA0G;AAC1G,2FAAwF;AACxF,wEAAkF;AAOlF;;;;GAIG;AAEI,IAAM,kCAAkC,GAAxC,MAAM,kCAAkC;IAC7C;;;OAGG;IAKG,AAAN,KAAK,CAAC,iCAAiC,CAClB,GAAmB;QAEtC,MAAM,MAAM,GAAG,IAAA,8BAAoB,EAAC,GAAG,CAAC,CAAC;QAEzC,4BAA4B;QAC5B,yBAAyB;QACzB,SAAS;QACT,kDAAkD;QAClD,iCAAiC;QACjC,uCAAuC;QACvC,sCAAsC;QACtC,gCAAgC;QAChC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtD,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC;gBACtC,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI;iBAChB;gBACD,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI;iBAChB;aACF,CAAC;YACF,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE;SACtC,CAAC,CAAC;QAEH,iDAAiD;QACjD,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC;YACnE,EAAE,EAAE,CAAC,WAAW,CAAC;YACjB,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QAEH,OAAO;YACL,aAAa,EAAE,gBAAgB,CAAC,MAAM;YACtC,cAAc,EAAE,UAAU;YAC1B,cAAc,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS;YAC9C,cAAc,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS;SAC/C,CAAC;IACJ,CAAC;CACF,CAAA;AAjDY,gFAAkC;AASvC;IAJL,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,qEAAiC,EAAE;QAChE,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,4DAA4D;KAC1E,CAAC;IAEC,WAAA,WAAW,CAAC,GAAG,EAAE,CAAA;;;;2FAsCnB;6CAhDU,kCAAkC;IAD9C,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,+CAAsB,CAAC;GACvC,kCAAkC,CAiD9C"}
1
+ {"version":3,"file":"OptionsGreeksHistoryCustomResolver.js","sourceRoot":"","sources":["../../../src/resolvers/custom/OptionsGreeksHistoryCustomResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AAE5C,6GAA0G;AAC1G,2FAAwF;AACxF,wEAAkF;AAOlF;;;;GAIG;AAEI,IAAM,kCAAkC,GAAxC,MAAM,kCAAkC;IAC7C;;;OAGG;IAKG,AAAN,KAAK,CAAC,iCAAiC,CAClB,GAAmB;QAEtC,MAAM,MAAM,GAAG,IAAA,8BAAoB,EAAC,GAAG,CAAC,CAAC;QAEzC,4BAA4B;QAC5B,yBAAyB;QACzB,SAAS;QACT,kDAAkD;QAClD,iCAAiC;QACjC,uCAAuC;QACvC,sCAAsC;QACtC,gCAAgC;QAChC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtD,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC;gBACtC,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI;iBAChB;gBACD,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI;iBAChB;aACF,CAAC;YACF,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE;SACtC,CAAC,CAAC;QAEH,iDAAiD;QACjD,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC;YACnE,EAAE,EAAE,CAAC,WAAW,CAAC;YACjB,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QAEH,OAAO;YACL,aAAa,EAAE,gBAAgB,CAAC,MAAM;YACtC,cAAc,EAAE,UAAU;YAC1B,cAAc,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS;YAC9C,cAAc,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS;SAC/C,CAAC;IACJ,CAAC;CACF,CAAA;AAjDY,gFAAkC;AASvC;IAJL,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,qEAAiC,EAAE;QAClE,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,4DAA4D;KAC1E,CAAC;IAEC,WAAA,WAAW,CAAC,GAAG,EAAE,CAAA;;;;2FAsCnB;6CAhDU,kCAAkC;IAD9C,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,+CAAsB,CAAC;GACzC,kCAAkC,CAiD9C"}
@@ -51,28 +51,28 @@ let OptionsGreeksHistorySystemSummary = class OptionsGreeksHistorySystemSummary
51
51
  };
52
52
  exports.OptionsGreeksHistorySystemSummary = OptionsGreeksHistorySystemSummary;
53
53
  __decorate([
54
- TypeGraphQL.Field(_type => TypeGraphQL.Int, {
54
+ TypeGraphQL.Field((_type) => TypeGraphQL.Int, {
55
55
  nullable: false,
56
56
  description: 'Total number of unique accounts with Greeks history',
57
57
  }),
58
58
  __metadata("design:type", Number)
59
59
  ], OptionsGreeksHistorySystemSummary.prototype, "totalAccounts", void 0);
60
60
  __decorate([
61
- TypeGraphQL.Field(_type => TypeGraphQL.Int, {
61
+ TypeGraphQL.Field((_type) => TypeGraphQL.Int, {
62
62
  nullable: false,
63
63
  description: 'Total number of Greeks snapshots across all accounts',
64
64
  }),
65
65
  __metadata("design:type", Number)
66
66
  ], OptionsGreeksHistorySystemSummary.prototype, "totalSnapshots", void 0);
67
67
  __decorate([
68
- TypeGraphQL.Field(_type => Date, {
68
+ TypeGraphQL.Field((_type) => Date, {
69
69
  nullable: true,
70
70
  description: 'Timestamp of the oldest Greeks snapshot in the system',
71
71
  }),
72
72
  __metadata("design:type", Object)
73
73
  ], OptionsGreeksHistorySystemSummary.prototype, "oldestSnapshot", void 0);
74
74
  __decorate([
75
- TypeGraphQL.Field(_type => Date, {
75
+ TypeGraphQL.Field((_type) => Date, {
76
76
  nullable: true,
77
77
  description: 'Timestamp of the newest Greeks snapshot in the system',
78
78
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"OptionsGreeksHistorySystemSummary.js","sourceRoot":"","sources":["../../../src/resolvers/custom/OptionsGreeksHistorySystemSummary.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AAE5C;;GAEG;AAEI,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;CAwB7C,CAAA;AAxBY,8EAAiC;AAK5C;IAJC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC3C,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,qDAAqD;KACnE,CAAC;;wEACqB;AAMvB;IAJC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC3C,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,sDAAsD;KACpE,CAAC;;yEACsB;AAMxB;IAJC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QAChC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,uDAAuD;KACrE,CAAC;;yEAC2B;AAM7B;IAJC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QAChC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,uDAAuD;KACrE,CAAC;;yEAC2B;4CAvBlB,iCAAiC;IAD7C,WAAW,CAAC,UAAU,CAAC,mCAAmC,EAAE,EAAE,CAAC;GACnD,iCAAiC,CAwB7C"}
1
+ {"version":3,"file":"OptionsGreeksHistorySystemSummary.js","sourceRoot":"","sources":["../../../src/resolvers/custom/OptionsGreeksHistorySystemSummary.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AAE5C;;GAEG;AAEI,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;CAwB7C,CAAA;AAxBY,8EAAiC;AAK5C;IAJC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7C,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,qDAAqD;KACnE,CAAC;;wEACqB;AAMvB;IAJC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7C,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,sDAAsD;KACpE,CAAC;;yEACsB;AAMxB;IAJC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE;QAClC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,uDAAuD;KACrE,CAAC;;yEAC2B;AAM7B;IAJC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE;QAClC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,uDAAuD;KACrE,CAAC;;yEAC2B;4CAvBlB,iCAAiC;IAD7C,WAAW,CAAC,UAAU,CAAC,mCAAmC,EAAE,EAAE,CAAC;GACnD,iCAAiC,CAwB7C"}
package/server.cjs CHANGED
@@ -41,10 +41,14 @@ async function restartDatabase() {
41
41
  const deployCommand = `RAILWAY_TOKEN=${projectToken || ''} RAILWAY_API_TOKEN=${apiToken || ''} railway redeploy --service Postgres -y`;
42
42
  (0, child_process_1.exec)(deployCommand, {
43
43
  env: process.env,
44
- shell: '/bin/sh'
44
+ shell: '/bin/sh',
45
45
  }, (error, stdout, stderr) => {
46
46
  if (error) {
47
- logger_1.logger.error('Failed to redeploy DB via Railway CLI', { error: String(error), stdout, stderr });
47
+ logger_1.logger.error('Failed to redeploy DB via Railway CLI', {
48
+ error: String(error),
49
+ stdout,
50
+ stderr,
51
+ });
48
52
  return reject(error);
49
53
  }
50
54
  logger_1.logger.info('Railway deployment output', { stdout });
@@ -87,17 +91,23 @@ const startServer = async () => {
87
91
  dbUnreachableCount = 0;
88
92
  }
89
93
  catch (restartError) {
90
- logger_1.logger.error('Error trying to restart DB', { restartError: String(restartError) });
94
+ logger_1.logger.error('Error trying to restart DB', {
95
+ restartError: String(restartError),
96
+ });
91
97
  // If the restart fails, we can try again after a delay
92
98
  const backoffTime = Math.min(30000, 1000 * Math.pow(2, dbUnreachableCount - 3)); // Exponential backoff with a max of 30 seconds
93
- logger_1.logger.info('Waiting before next restart attempt', { backoffSeconds: backoffTime / 1000 });
99
+ logger_1.logger.info('Waiting before next restart attempt', {
100
+ backoffSeconds: backoffTime / 1000,
101
+ });
94
102
  setTimeout(() => {
95
103
  restartDatabase()
96
104
  .then(() => {
97
105
  dbUnreachableCount = 0; // Reset the counter after a successful restart
98
106
  })
99
107
  .catch((restartError) => {
100
- logger_1.logger.error('Error trying to restart DB', { restartError: String(restartError) });
108
+ logger_1.logger.error('Error trying to restart DB', {
109
+ restartError: String(restartError),
110
+ });
101
111
  // We do not reset the counter here if the restart fails,
102
112
  // so it can try again next time.
103
113
  });
@@ -126,7 +136,9 @@ const startServer = async () => {
126
136
  // Health check endpoint - mounted before Apollo middleware so it's not behind GraphQL or auth
127
137
  app.use((0, health_1.createHealthRouter)());
128
138
  // Configure CORS with allowed origins
129
- const allowedOrigins = (process.env.ALLOWED_ORIGINS || 'http://localhost:3000,http://localhost:3001').split(',').map(o => o.trim());
139
+ const defaultOrigins = ['http://localhost:3000', 'http://localhost:3001', 'http://localhost:4000', 'https://adaptic.ai', 'https://api.adaptic.ai'];
140
+ const envOrigins = process.env.ALLOWED_ORIGINS ? process.env.ALLOWED_ORIGINS.split(',').map(o => o.trim()) : [];
141
+ const allowedOrigins = [...new Set([...defaultOrigins, ...envOrigins])];
130
142
  const corsOptions = {
131
143
  origin: (origin, callback) => {
132
144
  // Allow requests with no origin (mobile apps, server-to-server, curl)
@@ -154,7 +166,9 @@ const startServer = async () => {
154
166
  // Extract token from Authorization header
155
167
  const authHeader = req.headers.authorization || '';
156
168
  // Only try to verify token if it's in proper Bearer format
157
- const token = authHeader.startsWith('Bearer ') ? authHeader.split(' ')[1] : '';
169
+ const token = authHeader.startsWith('Bearer ')
170
+ ? authHeader.split(' ')[1]
171
+ : '';
158
172
  let user = null;
159
173
  if (token) {
160
174
  // Check if token is a Google OAuth token (starts with ya29.)
@@ -169,9 +183,15 @@ const startServer = async () => {
169
183
  if (tokenParts.length !== 3) {
170
184
  // Log only once per unique malformed token to avoid log spam
171
185
  const tokenPreview = token.length > 20 ? `${token.substring(0, 20)}...` : token;
172
- logger_1.logger.warn('Received malformed token (not a valid JWT format)', { tokenPreview });
186
+ logger_1.logger.warn('Received malformed token (not a valid JWT format)', {
187
+ tokenPreview,
188
+ });
173
189
  // Continue without authentication - don't fail the request
174
- return { prisma: global.prisma, req, authError: 'Malformed token: expected JWT format (header.payload.signature)' };
190
+ return {
191
+ prisma: global.prisma,
192
+ req,
193
+ authError: 'Malformed token: expected JWT format (header.payload.signature)',
194
+ };
175
195
  }
176
196
  // For regular JWT tokens, verify using the centralized secret
177
197
  try {
@@ -217,8 +237,11 @@ const startServer = async () => {
217
237
  logger_1.logger.warn('Prisma client not found in global scope for WebSocket context, reinitializing');
218
238
  global.prisma = prismaClient_1.default;
219
239
  }
220
- const authHeader = ((_a = ctx.connectionParams) === null || _a === void 0 ? void 0 : _a.authorization) || '';
221
- const token = authHeader.startsWith('Bearer ') ? authHeader.split(' ')[1] : '';
240
+ const authHeader = ((_a = ctx.connectionParams) === null || _a === void 0 ? void 0 : _a.authorization) ||
241
+ '';
242
+ const token = authHeader.startsWith('Bearer ')
243
+ ? authHeader.split(' ')[1]
244
+ : '';
222
245
  let user = null;
223
246
  if (token) {
224
247
  // Check if token is a Google OAuth token (starts with ya29.)
@@ -241,7 +264,9 @@ const startServer = async () => {
241
264
  }
242
265
  catch (e) {
243
266
  const errorMessage = e instanceof Error ? e.message : 'Unknown error';
244
- logger_1.logger.warn('WebSocket JWT verification failed', { errorMessage });
267
+ logger_1.logger.warn('WebSocket JWT verification failed', {
268
+ errorMessage,
269
+ });
245
270
  return { prisma: global.prisma, authError: 'Invalid token' };
246
271
  }
247
272
  }
@@ -251,19 +276,31 @@ const startServer = async () => {
251
276
  }, wsServer);
252
277
  const PORT = process.env.PORT || 4000;
253
278
  httpServer.listen(PORT, () => {
254
- logger_1.logger.info('Server ready', { graphql: `http://localhost:${PORT}/graphql`, health: `http://localhost:${PORT}/health` });
255
- logger_1.logger.info('Subscriptions ready', { endpoint: `ws://localhost:${PORT}/subscriptions` });
279
+ logger_1.logger.info('Server ready', {
280
+ graphql: `http://localhost:${PORT}/graphql`,
281
+ health: `http://localhost:${PORT}/health`,
282
+ });
283
+ logger_1.logger.info('Subscriptions ready', {
284
+ endpoint: `ws://localhost:${PORT}/subscriptions`,
285
+ });
256
286
  });
257
287
  };
258
288
  startServer().catch((error) => {
259
- logger_1.logger.error('Error starting the server', { error: error instanceof Error ? error.message : String(error) });
289
+ logger_1.logger.error('Error starting the server', {
290
+ error: error instanceof Error ? error.message : String(error),
291
+ });
260
292
  process.exit(1);
261
293
  });
262
294
  process.on('unhandledRejection', (reason, _promise) => {
263
- logger_1.logger.error('Unhandled Rejection', { reason: reason instanceof Error ? reason.message : String(reason) });
295
+ logger_1.logger.error('Unhandled Rejection', {
296
+ reason: reason instanceof Error ? reason.message : String(reason),
297
+ });
264
298
  });
265
299
  process.on('uncaughtException', (error) => {
266
- logger_1.logger.error('Uncaught Exception', { error: error.message, stack: error.stack });
300
+ logger_1.logger.error('Uncaught Exception', {
301
+ error: error.message,
302
+ stack: error.stack,
303
+ });
267
304
  });
268
305
  // Only disconnect Prisma when the process is truly shutting down
269
306
  process.on('SIGINT', async () => {
@@ -274,7 +311,9 @@ process.on('SIGINT', async () => {
274
311
  logger_1.logger.info('Database connections closed successfully');
275
312
  }
276
313
  catch (e) {
277
- logger_1.logger.error('Error disconnecting from database', { error: e instanceof Error ? e.message : String(e) });
314
+ logger_1.logger.error('Error disconnecting from database', {
315
+ error: e instanceof Error ? e.message : String(e),
316
+ });
278
317
  }
279
318
  process.exit(0);
280
319
  });
@@ -287,7 +326,9 @@ process.on('SIGTERM', async () => {
287
326
  logger_1.logger.info('Database connections closed successfully');
288
327
  }
289
328
  catch (e) {
290
- logger_1.logger.error('Error disconnecting from database', { error: e instanceof Error ? e.message : String(e) });
329
+ logger_1.logger.error('Error disconnecting from database', {
330
+ error: e instanceof Error ? e.message : String(e),
331
+ });
291
332
  }
292
333
  process.exit(0);
293
334
  });
package/utils.cjs CHANGED
@@ -15,22 +15,31 @@ exports.removeUndefinedProps = removeUndefinedProps;
15
15
  function removeUndefinedProps(obj) {
16
16
  if (Array.isArray(obj)) {
17
17
  return obj
18
- .map(item => removeUndefinedProps(item))
19
- .filter(item => item !== undefined &&
18
+ .map((item) => removeUndefinedProps(item))
19
+ .filter((item) => item !== undefined &&
20
20
  item !== null &&
21
- (typeof item !== 'object' || Object.keys(item).length > 0));
21
+ (typeof item !== 'object' ||
22
+ Object.keys(item).length > 0));
22
23
  }
23
- else if (typeof obj === 'object' && obj !== null && !(obj instanceof Date)) {
24
+ else if (typeof obj === 'object' &&
25
+ obj !== null &&
26
+ !(obj instanceof Date)) {
24
27
  const record = obj;
25
28
  return Object.keys(record).reduce((acc, key) => {
26
29
  const value = record[key];
27
30
  if (value !== undefined && value !== null) {
28
31
  let cleanedValue;
29
- if (key === 'where' && typeof value === 'object' && value !== null && !(value instanceof Date)) {
32
+ if (key === 'where' &&
33
+ typeof value === 'object' &&
34
+ value !== null &&
35
+ !(value instanceof Date)) {
30
36
  const whereObj = value;
31
- if (Object.prototype.hasOwnProperty.call(whereObj, 'id') && whereObj.id !== undefined) {
37
+ if (Object.prototype.hasOwnProperty.call(whereObj, 'id') &&
38
+ whereObj.id !== undefined) {
32
39
  // Retain only the 'id' field within 'where'
33
- cleanedValue = { id: removeUndefinedProps(whereObj.id) };
40
+ cleanedValue = {
41
+ id: removeUndefinedProps(whereObj.id),
42
+ };
34
43
  }
35
44
  else {
36
45
  // Process 'where' object normally if 'id' is undefined or doesn't exist
@@ -43,13 +52,17 @@ function removeUndefinedProps(obj) {
43
52
  }
44
53
  if (cleanedValue !== undefined &&
45
54
  cleanedValue !== null &&
46
- (typeof cleanedValue !== 'object' || cleanedValue instanceof Date || Object.keys(cleanedValue).length > 0)) {
55
+ (typeof cleanedValue !== 'object' ||
56
+ cleanedValue instanceof Date ||
57
+ Object.keys(cleanedValue).length > 0)) {
47
58
  acc[key] = cleanedValue;
48
59
  }
49
60
  }
50
61
  return acc;
51
62
  }, {});
52
63
  }
53
- return obj !== undefined && obj !== null ? obj : undefined;
64
+ return obj !== undefined && obj !== null
65
+ ? obj
66
+ : undefined;
54
67
  }
55
68
  //# sourceMappingURL=utils.js.map