@adaptic/backend-legacy 0.0.44 → 0.0.45

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 (181) hide show
  1. package/Allocation.cjs +19 -0
  2. package/esm/Allocation.d.ts.map +1 -1
  3. package/esm/Allocation.js.map +1 -1
  4. package/esm/Allocation.mjs +19 -0
  5. package/esm/config/jwtConfig.d.ts +16 -0
  6. package/esm/config/jwtConfig.d.ts.map +1 -0
  7. package/esm/config/jwtConfig.js.map +1 -0
  8. package/esm/config/jwtConfig.mjs +47 -0
  9. package/esm/generated/typegraphql-prisma/models/Trade.d.ts +1 -1
  10. package/esm/generated/typegraphql-prisma/models/Trade.d.ts.map +1 -1
  11. package/esm/generated/typegraphql-prisma/models/Trade.js.map +1 -1
  12. package/esm/generated/typegraphql-prisma/models/Trade.mjs +1 -1
  13. package/esm/generated/typegraphql-prisma/resolvers/crud/User/args/CreateOneUserArgs.d.ts +1 -1
  14. package/esm/generated/typegraphql-prisma/resolvers/crud/User/args/CreateOneUserArgs.d.ts.map +1 -1
  15. package/esm/generated/typegraphql-prisma/resolvers/crud/User/args/CreateOneUserArgs.js.map +1 -1
  16. package/esm/generated/typegraphql-prisma/resolvers/crud/User/args/CreateOneUserArgs.mjs +2 -2
  17. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts +1 -1
  18. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts.map +1 -1
  19. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.js.map +1 -1
  20. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.mjs +1 -1
  21. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts +1 -1
  22. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts.map +1 -1
  23. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.js.map +1 -1
  24. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.mjs +1 -1
  25. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts +1 -1
  26. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts.map +1 -1
  27. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.js.map +1 -1
  28. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.mjs +1 -1
  29. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts +1 -1
  30. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts.map +1 -1
  31. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.js.map +1 -1
  32. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.mjs +1 -1
  33. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts +1 -1
  34. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts.map +1 -1
  35. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.js.map +1 -1
  36. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.mjs +1 -1
  37. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts +1 -1
  38. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts.map +1 -1
  39. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.js.map +1 -1
  40. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.mjs +1 -1
  41. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts +1 -1
  42. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts.map +1 -1
  43. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.js.map +1 -1
  44. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.mjs +1 -1
  45. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts +1 -1
  46. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts.map +1 -1
  47. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.js.map +1 -1
  48. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.mjs +1 -1
  49. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts +1 -1
  50. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts.map +1 -1
  51. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.js.map +1 -1
  52. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.mjs +1 -1
  53. package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts +1 -1
  54. package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts.map +1 -1
  55. package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.js.map +1 -1
  56. package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.mjs +1 -1
  57. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts +1 -1
  58. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts.map +1 -1
  59. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.js.map +1 -1
  60. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.mjs +1 -1
  61. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts +1 -1
  62. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts.map +1 -1
  63. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.js.map +1 -1
  64. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.mjs +1 -1
  65. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts +1 -1
  66. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts.map +1 -1
  67. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.js.map +1 -1
  68. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.mjs +1 -1
  69. package/esm/getToken.d.ts.map +1 -1
  70. package/esm/getToken.js.map +1 -1
  71. package/esm/getToken.mjs +2 -1
  72. package/esm/middleware/auth.d.ts.map +1 -1
  73. package/esm/middleware/auth.js.map +1 -1
  74. package/esm/middleware/auth.mjs +8 -8
  75. package/esm/middleware/graphql-validation-plugin.d.ts +37 -0
  76. package/esm/middleware/graphql-validation-plugin.d.ts.map +1 -0
  77. package/esm/middleware/graphql-validation-plugin.js.map +1 -0
  78. package/esm/middleware/graphql-validation-plugin.mjs +163 -0
  79. package/esm/middleware/index.d.ts +12 -0
  80. package/esm/middleware/index.d.ts.map +1 -0
  81. package/esm/middleware/index.js.map +1 -0
  82. package/esm/middleware/index.mjs +16 -0
  83. package/esm/middleware/input-validator.d.ts +63 -0
  84. package/esm/middleware/input-validator.d.ts.map +1 -0
  85. package/esm/middleware/input-validator.js.map +1 -0
  86. package/esm/middleware/input-validator.mjs +210 -0
  87. package/esm/middleware/rate-limiter.d.ts +12 -0
  88. package/esm/middleware/rate-limiter.d.ts.map +1 -0
  89. package/esm/middleware/rate-limiter.js.map +1 -0
  90. package/esm/middleware/rate-limiter.mjs +68 -0
  91. package/esm/middleware/types.d.ts +87 -0
  92. package/esm/middleware/types.d.ts.map +1 -0
  93. package/esm/middleware/types.js.map +1 -0
  94. package/esm/middleware/types.mjs +13 -0
  95. package/esm/middleware/validation-examples.d.ts +76 -0
  96. package/esm/middleware/validation-examples.d.ts.map +1 -0
  97. package/esm/middleware/validation-examples.js.map +1 -0
  98. package/esm/middleware/validation-examples.mjs +373 -0
  99. package/esm/plugins/error-sanitizer.d.ts +37 -0
  100. package/esm/plugins/error-sanitizer.d.ts.map +1 -0
  101. package/esm/plugins/error-sanitizer.js.map +1 -0
  102. package/esm/plugins/error-sanitizer.mjs +184 -0
  103. package/esm/plugins/index.d.ts +8 -0
  104. package/esm/plugins/index.d.ts.map +1 -0
  105. package/esm/plugins/index.js.map +1 -0
  106. package/esm/plugins/index.mjs +8 -0
  107. package/esm/plugins/integration-example.d.ts +53 -0
  108. package/esm/plugins/integration-example.d.ts.map +1 -0
  109. package/esm/plugins/integration-example.js.map +1 -0
  110. package/esm/plugins/integration-example.mjs +88 -0
  111. package/esm/plugins/query-depth-limiter.d.ts +47 -0
  112. package/esm/plugins/query-depth-limiter.d.ts.map +1 -0
  113. package/esm/plugins/query-depth-limiter.js.map +1 -0
  114. package/esm/plugins/query-depth-limiter.mjs +146 -0
  115. package/esm/validators/allocation-validator.d.ts +32 -0
  116. package/esm/validators/allocation-validator.d.ts.map +1 -0
  117. package/esm/validators/allocation-validator.js.map +1 -0
  118. package/esm/validators/allocation-validator.mjs +80 -0
  119. package/generated/typegraphql-prisma/models/Trade.cjs +1 -1
  120. package/generated/typegraphql-prisma/models/Trade.d.ts +1 -1
  121. package/generated/typegraphql-prisma/models/Trade.d.ts.map +1 -1
  122. package/generated/typegraphql-prisma/models/Trade.js.map +1 -1
  123. package/generated/typegraphql-prisma/resolvers/crud/User/args/CreateOneUserArgs.cjs +2 -2
  124. package/generated/typegraphql-prisma/resolvers/crud/User/args/CreateOneUserArgs.d.ts +1 -1
  125. package/generated/typegraphql-prisma/resolvers/crud/User/args/CreateOneUserArgs.d.ts.map +1 -1
  126. package/generated/typegraphql-prisma/resolvers/crud/User/args/CreateOneUserArgs.js.map +1 -1
  127. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.cjs +1 -1
  128. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts +1 -1
  129. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts.map +1 -1
  130. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.js.map +1 -1
  131. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.cjs +1 -1
  132. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts +1 -1
  133. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts.map +1 -1
  134. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.js.map +1 -1
  135. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.cjs +1 -1
  136. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts +1 -1
  137. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts.map +1 -1
  138. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.js.map +1 -1
  139. package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.cjs +1 -1
  140. package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts +1 -1
  141. package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts.map +1 -1
  142. package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.js.map +1 -1
  143. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.cjs +1 -1
  144. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts +1 -1
  145. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts.map +1 -1
  146. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.js.map +1 -1
  147. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.cjs +1 -1
  148. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts +1 -1
  149. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts.map +1 -1
  150. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.js.map +1 -1
  151. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.cjs +1 -1
  152. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts +1 -1
  153. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts.map +1 -1
  154. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.js.map +1 -1
  155. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.cjs +1 -1
  156. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts +1 -1
  157. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts.map +1 -1
  158. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.js.map +1 -1
  159. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.cjs +1 -1
  160. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts +1 -1
  161. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts.map +1 -1
  162. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.js.map +1 -1
  163. package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.cjs +1 -1
  164. package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts +1 -1
  165. package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts.map +1 -1
  166. package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.js.map +1 -1
  167. package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.cjs +1 -1
  168. package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts +1 -1
  169. package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts.map +1 -1
  170. package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.js.map +1 -1
  171. package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.cjs +1 -1
  172. package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts +1 -1
  173. package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts.map +1 -1
  174. package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.js.map +1 -1
  175. package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.cjs +1 -1
  176. package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts +1 -1
  177. package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts.map +1 -1
  178. package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.js.map +1 -1
  179. package/getToken.cjs +2 -1
  180. package/package.json +1 -1
  181. package/server.cjs +35 -17
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Type definitions for validation middleware
3
+ */
4
+ import { GraphQLError } from 'graphql';
5
+ /**
6
+ * Type guard to check if an error is a ValidationError
7
+ */
8
+ export function isValidationError(error) {
9
+ return (error instanceof GraphQLError &&
10
+ error.extensions?.code === 'BAD_USER_INPUT' &&
11
+ 'validationErrors' in (error.extensions || {}));
12
+ }
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Example usage of validation functions in custom resolvers
3
+ *
4
+ * This file demonstrates how to use the validation utilities
5
+ * in custom resolver implementations.
6
+ */
7
+ /**
8
+ * Example: Portfolio allocation input with validation
9
+ */
10
+ declare class PortfolioAllocationInput {
11
+ equitiesPct: number;
12
+ optionsPct: number;
13
+ cryptoPct: number;
14
+ portfolioName: string;
15
+ }
16
+ /**
17
+ * Example: Trade configuration input with validation
18
+ */
19
+ declare class TradeConfigurationInput {
20
+ tradeAllocationPct: number;
21
+ minPercentageChange: number;
22
+ volumeThreshold: number;
23
+ quantity: number;
24
+ }
25
+ /**
26
+ * Example resolver demonstrating manual validation in custom resolvers
27
+ *
28
+ * Note: With the validation plugin enabled, these validations happen
29
+ * automatically. This example shows how to add ADDITIONAL custom validation
30
+ * logic beyond the automatic pattern-based validation.
31
+ */
32
+ export declare class ValidationExamplesResolver {
33
+ /**
34
+ * Example 1: Basic field validation in a mutation
35
+ */
36
+ updatePortfolioAllocation(input: PortfolioAllocationInput): Promise<boolean>;
37
+ /**
38
+ * Example 2: Batch validation using validateFields
39
+ */
40
+ updateTradeConfiguration(input: TradeConfigurationInput): Promise<boolean>;
41
+ /**
42
+ * Example 3: Conditional validation based on business logic
43
+ */
44
+ createTrade(quantity: number, isPremiumUser: boolean): Promise<boolean>;
45
+ /**
46
+ * Example 4: Validating related fields together
47
+ */
48
+ setTradingThresholds(minPrice: number, maxPrice: number, targetPrice: number): Promise<boolean>;
49
+ /**
50
+ * Example 5: Using manual validation for non-standard field names
51
+ */
52
+ updateCustomSettings(customAllocation: number, customQuantity: number): Promise<boolean>;
53
+ /**
54
+ * Example 6: Accumulating multiple validation errors
55
+ */
56
+ bulkUpdateAllocations(allocations: PortfolioAllocationInput[]): Promise<boolean>;
57
+ }
58
+ /**
59
+ * Example: Reusable validation functions for complex business rules
60
+ */
61
+ export declare class CustomValidators {
62
+ /**
63
+ * Validates that portfolio allocations sum to 100%
64
+ */
65
+ static validatePortfolioAllocationSum(equities: number, options: number, crypto: number): void;
66
+ /**
67
+ * Validates that a price is within acceptable market bounds
68
+ */
69
+ static validateMarketPrice(price: number, fieldName: string): void;
70
+ /**
71
+ * Validates Greeks values are within expected ranges
72
+ */
73
+ static validateGreeks(delta: number, gamma: number, theta: number, vega: number): void;
74
+ }
75
+ export {};
76
+ //# sourceMappingURL=validation-examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-examples.d.ts","sourceRoot":"","sources":["../../../src/middleware/validation-examples.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH;;GAEG;AACH,cACM,wBAAwB;IAE5B,WAAW,EAAG,MAAM,CAAC;IAGrB,UAAU,EAAG,MAAM,CAAC;IAGpB,SAAS,EAAG,MAAM,CAAC;IAGnB,aAAa,EAAG,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,cACM,uBAAuB;IAE3B,kBAAkB,EAAG,MAAM,CAAC;IAG5B,mBAAmB,EAAG,MAAM,CAAC;IAG7B,eAAe,EAAG,MAAM,CAAC;IAGzB,QAAQ,EAAG,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBACa,0BAA0B;IACrC;;OAEG;IAEG,yBAAyB,CACH,KAAK,EAAE,wBAAwB,GACxD,OAAO,CAAC,OAAO,CAAC;IAwBnB;;OAEG;IAEG,wBAAwB,CACF,KAAK,EAAE,uBAAuB,GACvD,OAAO,CAAC,OAAO,CAAC;IA6BnB;;OAEG;IAEG,WAAW,CACc,QAAQ,EAAE,MAAM,EACX,aAAa,EAAE,OAAO,GACvD,OAAO,CAAC,OAAO,CAAC;IAmBnB;;OAEG;IAEG,oBAAoB,CACK,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClD,OAAO,CAAC,OAAO,CAAC;IA8BnB;;OAEG;IAEG,oBAAoB,CACa,gBAAgB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,GACxD,OAAO,CAAC,OAAO,CAAC;IAUnB;;OAEG;IAEG,qBAAqB,CAEzB,WAAW,EAAE,wBAAwB,EAAE,GACtC,OAAO,CAAC,OAAO,CAAC;CA+BpB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,8BAA8B,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,IAAI;IAcP;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgBlE;;OAEG;IACH,MAAM,CAAC,cAAc,CACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,IAAI;CAoDR"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-examples.js","sourceRoot":"","sources":["../../../src/middleware/validation-examples.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;;;;AAEH,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EAEtB,cAAc,EACd,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AAEH,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAE5B,WAAW,CAAU;IAGrB,UAAU,CAAU;IAGpB,SAAS,CAAU;IAGnB,aAAa,CAAU;CACxB,CAAA;AAVC;IADC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;;6DACtB;AAGrB;IADC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;;4DACvB;AAGpB;IADC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;;2DACxB;AAGnB;IADC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;+DACT;AAXnB,wBAAwB;IAD7B,WAAW,CAAC,SAAS,EAAE;GAClB,wBAAwB,CAY7B;AAED;;GAEG;AAEH,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAE3B,kBAAkB,CAAU;IAG5B,mBAAmB,CAAU;IAG7B,eAAe,CAAU;IAGzB,QAAQ,CAAU;CACnB,CAAA;AAVC;IADC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;;mEACf;AAG5B;IADC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;;oEACd;AAG7B;IADC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;;gEAClB;AAGzB;IADC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;;yDACvB;AAXd,uBAAuB;IAD5B,WAAW,CAAC,SAAS,EAAE;GAClB,uBAAuB,CAY5B;AAED;;;;;;GAMG;AAEI,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IACrC;;OAEG;IAEG,AAAN,KAAK,CAAC,yBAAyB,CACH,KAA+B;QAEzD,qDAAqD;QACrD,wBAAwB;QACxB,uBAAuB;QACvB,sBAAsB;QACtB,8BAA8B;QAE9B,uCAAuC;QACvC,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;QAC/E,IAAI,eAAe,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,eAAe,CAAC,kCAAkC,EAAE;gBAC5D;oBACE,KAAK,EAAE,iBAAiB;oBACxB,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,8DAA8D;oBACvE,UAAU,EAAE,KAAK;iBAClB;aACF,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IAEG,AAAN,KAAK,CAAC,wBAAwB,CACF,KAA8B;QAExD,gEAAgE;QAChE,wDAAwD;QAExD,IAAI,CAAC;YACH,cAAc,CAAC;gBACb,gFAAgF;gBAChF,GAAG,EAAE;oBACH,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;wBAC1D,MAAM,IAAI,eAAe,CAAC,uBAAuB,EAAE;4BACjD;gCACE,KAAK,EAAE,qBAAqB;gCAC5B,KAAK,EAAE,KAAK,CAAC,mBAAmB;gCAChC,OAAO,EAAE,sCAAsC;gCAC/C,UAAU,EAAE,YAAY;6BACzB;yBACF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,8DAA8D;YAC9D,MAAM,KAAK,CAAC;QACd,CAAC;QAED,6BAA6B;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IAEG,AAAN,KAAK,CAAC,WAAW,CACc,QAAgB,EACX,aAAsB;QAExD,oDAAoD;QAEpD,gDAAgD;QAChD,IAAI,CAAC,aAAa,IAAI,QAAQ,GAAG,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,eAAe,CAAC,yBAAyB,EAAE;gBACnD;oBACE,KAAK,EAAE,UAAU;oBACjB,KAAK,EAAE,QAAQ;oBACf,OAAO,EAAE,uDAAuD;oBAChE,UAAU,EAAE,WAAW;iBACxB;aACF,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IAEG,AAAN,KAAK,CAAC,oBAAoB,CACK,QAAgB,EAChB,QAAgB,EACb,WAAmB;QAEnD,wDAAwD;QAExD,uCAAuC;QACvC,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,eAAe,CAAC,qBAAqB,EAAE;gBAC/C;oBACE,KAAK,EAAE,UAAU;oBACjB,KAAK,EAAE,QAAQ;oBACf,OAAO,EAAE,qCAAqC;oBAC9C,UAAU,EAAE,OAAO;iBACpB;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,GAAG,QAAQ,IAAI,WAAW,GAAG,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,eAAe,CAAC,sBAAsB,EAAE;gBAChD;oBACE,KAAK,EAAE,aAAa;oBACpB,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,mDAAmD;oBAC5D,UAAU,EAAE,OAAO;iBACpB;aACF,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IAEG,AAAN,KAAK,CAAC,oBAAoB,CACa,gBAAwB,EAC1B,cAAsB;QAEzD,mEAAmE;QACnE,0BAA0B;QAC1B,kBAAkB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QACzD,sBAAsB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAEzD,6BAA6B;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IAEG,AAAN,KAAK,CAAC,qBAAqB,CAEzB,WAAuC;QAEvC,2BAA2B;QAC3B,wDAAwD;QAExD,mCAAmC;QACnC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;QACtC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,eAAe,CAAC,yBAAyB,EAAE;gBACnD;oBACE,KAAK,EAAE,aAAa;oBACpB,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,sCAAsC;oBAC/C,UAAU,EAAE,UAAU;iBACvB;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,eAAe,CAAC,sBAAsB,EAAE;gBAChD;oBACE,KAAK,EAAE,aAAa;oBACpB,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,qCAAqC;oBAC9C,UAAU,EAAE,WAAW;iBACxB;aACF,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AApLO;IADL,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAEjC,WAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;;qCAAQ,wBAAwB;;2EAuB1D;AAMK;IADL,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAEjC,WAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;;qCAAQ,uBAAuB;;0EA4BzD;AAMK;IADL,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAEjC,WAAA,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC3B,WAAA,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;;;;6DAkBlC;AAMK;IADL,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAEjC,WAAA,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC3B,WAAA,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC3B,WAAA,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;;;;sEA6BhC;AAMK;IADL,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAEjC,WAAA,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACnC,WAAA,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;;;;sEASnC;AAMK;IADL,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAEjC,WAAA,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAA;;;;uEAgClE;AAxLU,0BAA0B;IADtC,WAAW,CAAC,QAAQ,EAAE;GACV,0BAA0B,CAyLtC;;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,8BAA8B,CACnC,QAAgB,EAChB,OAAe,EACf,MAAc;QAEd,MAAM,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;QAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,oCAAoC;YACtE,MAAM,IAAI,eAAe,CAAC,8BAA8B,EAAE;gBACxD;oBACE,KAAK,EAAE,iBAAiB;oBACxB,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,kCAAkC;oBAC3C,UAAU,EAAE,KAAK;iBAClB;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAa,EAAE,SAAiB;QACzD,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEzC,wCAAwC;QACxC,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,eAAe,CAAC,uBAAuB,EAAE;gBACjD;oBACE,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,gCAAgC;oBACzC,UAAU,EAAE,SAAS;iBACtB;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CACnB,KAAa,EACb,KAAa,EACb,KAAa,EACb,IAAY;QAEZ,cAAc,CAAC;YACb,GAAG,EAAE;gBACH,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE;wBACzC;4BACE,KAAK,EAAE,OAAO;4BACd,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,gCAAgC;4BACzC,UAAU,EAAE,OAAO;yBACpB;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,GAAG,EAAE;gBACH,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE;wBACzC;4BACE,KAAK,EAAE,OAAO;4BACd,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,4BAA4B;4BACrC,UAAU,EAAE,SAAS;yBACtB;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,GAAG,EAAE;gBACH,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE;wBACzC;4BACE,KAAK,EAAE,OAAO;4BACd,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,gCAAgC;4BACzC,UAAU,EAAE,SAAS;yBACtB;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,GAAG,EAAE;gBACH,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;oBACb,MAAM,IAAI,eAAe,CAAC,cAAc,EAAE;wBACxC;4BACE,KAAK,EAAE,MAAM;4BACb,KAAK,EAAE,IAAI;4BACX,OAAO,EAAE,2BAA2B;4BACpC,UAAU,EAAE,SAAS;yBACtB;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,373 @@
1
+ /**
2
+ * Example usage of validation functions in custom resolvers
3
+ *
4
+ * This file demonstrates how to use the validation utilities
5
+ * in custom resolver implementations.
6
+ */
7
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
11
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
12
+ };
13
+ var __metadata = (this && this.__metadata) || function (k, v) {
14
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15
+ };
16
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
17
+ return function (target, key) { decorator(target, key, paramIndex); }
18
+ };
19
+ import * as TypeGraphQL from 'type-graphql';
20
+ import { validatePercentage, validatePositiveNumber, validateFields, ValidationError, } from './input-validator.mjs';
21
+ /**
22
+ * Example: Portfolio allocation input with validation
23
+ */
24
+ let PortfolioAllocationInput = class PortfolioAllocationInput {
25
+ equitiesPct;
26
+ optionsPct;
27
+ cryptoPct;
28
+ portfolioName;
29
+ };
30
+ __decorate([
31
+ TypeGraphQL.Field(() => TypeGraphQL.Float),
32
+ __metadata("design:type", Number)
33
+ ], PortfolioAllocationInput.prototype, "equitiesPct", void 0);
34
+ __decorate([
35
+ TypeGraphQL.Field(() => TypeGraphQL.Float),
36
+ __metadata("design:type", Number)
37
+ ], PortfolioAllocationInput.prototype, "optionsPct", void 0);
38
+ __decorate([
39
+ TypeGraphQL.Field(() => TypeGraphQL.Float),
40
+ __metadata("design:type", Number)
41
+ ], PortfolioAllocationInput.prototype, "cryptoPct", void 0);
42
+ __decorate([
43
+ TypeGraphQL.Field(() => String),
44
+ __metadata("design:type", String)
45
+ ], PortfolioAllocationInput.prototype, "portfolioName", void 0);
46
+ PortfolioAllocationInput = __decorate([
47
+ TypeGraphQL.InputType()
48
+ ], PortfolioAllocationInput);
49
+ /**
50
+ * Example: Trade configuration input with validation
51
+ */
52
+ let TradeConfigurationInput = class TradeConfigurationInput {
53
+ tradeAllocationPct;
54
+ minPercentageChange;
55
+ volumeThreshold;
56
+ quantity;
57
+ };
58
+ __decorate([
59
+ TypeGraphQL.Field(() => TypeGraphQL.Float),
60
+ __metadata("design:type", Number)
61
+ ], TradeConfigurationInput.prototype, "tradeAllocationPct", void 0);
62
+ __decorate([
63
+ TypeGraphQL.Field(() => TypeGraphQL.Float),
64
+ __metadata("design:type", Number)
65
+ ], TradeConfigurationInput.prototype, "minPercentageChange", void 0);
66
+ __decorate([
67
+ TypeGraphQL.Field(() => TypeGraphQL.Float),
68
+ __metadata("design:type", Number)
69
+ ], TradeConfigurationInput.prototype, "volumeThreshold", void 0);
70
+ __decorate([
71
+ TypeGraphQL.Field(() => TypeGraphQL.Int),
72
+ __metadata("design:type", Number)
73
+ ], TradeConfigurationInput.prototype, "quantity", void 0);
74
+ TradeConfigurationInput = __decorate([
75
+ TypeGraphQL.InputType()
76
+ ], TradeConfigurationInput);
77
+ /**
78
+ * Example resolver demonstrating manual validation in custom resolvers
79
+ *
80
+ * Note: With the validation plugin enabled, these validations happen
81
+ * automatically. This example shows how to add ADDITIONAL custom validation
82
+ * logic beyond the automatic pattern-based validation.
83
+ */
84
+ let ValidationExamplesResolver = class ValidationExamplesResolver {
85
+ /**
86
+ * Example 1: Basic field validation in a mutation
87
+ */
88
+ async updatePortfolioAllocation(input) {
89
+ // The validation plugin will automatically validate:
90
+ // - equitiesPct (0-100)
91
+ // - optionsPct (0-100)
92
+ // - cryptoPct (0-100)
93
+ // - portfolioName (non-empty)
94
+ // Add custom business logic validation
95
+ const totalAllocation = input.equitiesPct + input.optionsPct + input.cryptoPct;
96
+ if (totalAllocation !== 100) {
97
+ throw new ValidationError('Total allocation must equal 100%', [
98
+ {
99
+ field: 'totalAllocation',
100
+ value: totalAllocation,
101
+ message: 'Sum of equitiesPct, optionsPct, and cryptoPct must equal 100',
102
+ constraint: 'sum',
103
+ },
104
+ ]);
105
+ }
106
+ // Resolver implementation...
107
+ return true;
108
+ }
109
+ /**
110
+ * Example 2: Batch validation using validateFields
111
+ */
112
+ async updateTradeConfiguration(input) {
113
+ // The validation plugin handles basic validation automatically.
114
+ // Use validateFields for additional custom validations.
115
+ try {
116
+ validateFields([
117
+ // Custom validation: minPercentageChange should be less than tradeAllocationPct
118
+ () => {
119
+ if (input.minPercentageChange >= input.tradeAllocationPct) {
120
+ throw new ValidationError('Invalid configuration', [
121
+ {
122
+ field: 'minPercentageChange',
123
+ value: input.minPercentageChange,
124
+ message: 'Must be less than tradeAllocationPct',
125
+ constraint: 'comparison',
126
+ },
127
+ ]);
128
+ }
129
+ },
130
+ ]);
131
+ }
132
+ catch (error) {
133
+ // ValidationError is automatically formatted by Apollo Server
134
+ throw error;
135
+ }
136
+ // Resolver implementation...
137
+ return true;
138
+ }
139
+ /**
140
+ * Example 3: Conditional validation based on business logic
141
+ */
142
+ async createTrade(quantity, isPremiumUser) {
143
+ // Basic validation happens automatically via plugin
144
+ // Add conditional validation based on user type
145
+ if (!isPremiumUser && quantity > 1000) {
146
+ throw new ValidationError('Quantity limit exceeded', [
147
+ {
148
+ field: 'quantity',
149
+ value: quantity,
150
+ message: 'Non-premium users are limited to 1000 units per trade',
151
+ constraint: 'userLimit',
152
+ },
153
+ ]);
154
+ }
155
+ // Resolver implementation...
156
+ return true;
157
+ }
158
+ /**
159
+ * Example 4: Validating related fields together
160
+ */
161
+ async setTradingThresholds(minPrice, maxPrice, targetPrice) {
162
+ // Automatic validation ensures all are positive numbers
163
+ // Custom validation for related fields
164
+ if (minPrice >= maxPrice) {
165
+ throw new ValidationError('Invalid price range', [
166
+ {
167
+ field: 'minPrice',
168
+ value: minPrice,
169
+ message: 'minPrice must be less than maxPrice',
170
+ constraint: 'range',
171
+ },
172
+ ]);
173
+ }
174
+ if (targetPrice < minPrice || targetPrice > maxPrice) {
175
+ throw new ValidationError('Invalid target price', [
176
+ {
177
+ field: 'targetPrice',
178
+ value: targetPrice,
179
+ message: 'targetPrice must be between minPrice and maxPrice',
180
+ constraint: 'range',
181
+ },
182
+ ]);
183
+ }
184
+ // Resolver implementation...
185
+ return true;
186
+ }
187
+ /**
188
+ * Example 5: Using manual validation for non-standard field names
189
+ */
190
+ async updateCustomSettings(customAllocation, customQuantity) {
191
+ // These field names don't match the automatic validation patterns,
192
+ // so we validate manually
193
+ validatePercentage(customAllocation, 'customAllocation');
194
+ validatePositiveNumber(customQuantity, 'customQuantity');
195
+ // Resolver implementation...
196
+ return true;
197
+ }
198
+ /**
199
+ * Example 6: Accumulating multiple validation errors
200
+ */
201
+ async bulkUpdateAllocations(allocations) {
202
+ // Validate each allocation
203
+ // The plugin validates each item's fields automatically
204
+ // Add custom cross-item validation
205
+ const totalItems = allocations.length;
206
+ if (totalItems === 0) {
207
+ throw new ValidationError('Empty allocations array', [
208
+ {
209
+ field: 'allocations',
210
+ value: totalItems,
211
+ message: 'Must provide at least one allocation',
212
+ constraint: 'notEmpty',
213
+ },
214
+ ]);
215
+ }
216
+ if (totalItems > 100) {
217
+ throw new ValidationError('Too many allocations', [
218
+ {
219
+ field: 'allocations',
220
+ value: totalItems,
221
+ message: 'Maximum 100 allocations per request',
222
+ constraint: 'maxLength',
223
+ },
224
+ ]);
225
+ }
226
+ // Resolver implementation...
227
+ return true;
228
+ }
229
+ };
230
+ __decorate([
231
+ TypeGraphQL.Mutation(() => Boolean),
232
+ __param(0, TypeGraphQL.Arg('input')),
233
+ __metadata("design:type", Function),
234
+ __metadata("design:paramtypes", [PortfolioAllocationInput]),
235
+ __metadata("design:returntype", Promise)
236
+ ], ValidationExamplesResolver.prototype, "updatePortfolioAllocation", null);
237
+ __decorate([
238
+ TypeGraphQL.Mutation(() => Boolean),
239
+ __param(0, TypeGraphQL.Arg('input')),
240
+ __metadata("design:type", Function),
241
+ __metadata("design:paramtypes", [TradeConfigurationInput]),
242
+ __metadata("design:returntype", Promise)
243
+ ], ValidationExamplesResolver.prototype, "updateTradeConfiguration", null);
244
+ __decorate([
245
+ TypeGraphQL.Mutation(() => Boolean),
246
+ __param(0, TypeGraphQL.Arg('quantity')),
247
+ __param(1, TypeGraphQL.Arg('isPremiumUser')),
248
+ __metadata("design:type", Function),
249
+ __metadata("design:paramtypes", [Number, Boolean]),
250
+ __metadata("design:returntype", Promise)
251
+ ], ValidationExamplesResolver.prototype, "createTrade", null);
252
+ __decorate([
253
+ TypeGraphQL.Mutation(() => Boolean),
254
+ __param(0, TypeGraphQL.Arg('minPrice')),
255
+ __param(1, TypeGraphQL.Arg('maxPrice')),
256
+ __param(2, TypeGraphQL.Arg('targetPrice')),
257
+ __metadata("design:type", Function),
258
+ __metadata("design:paramtypes", [Number, Number, Number]),
259
+ __metadata("design:returntype", Promise)
260
+ ], ValidationExamplesResolver.prototype, "setTradingThresholds", null);
261
+ __decorate([
262
+ TypeGraphQL.Mutation(() => Boolean),
263
+ __param(0, TypeGraphQL.Arg('customAllocation')),
264
+ __param(1, TypeGraphQL.Arg('customQuantity')),
265
+ __metadata("design:type", Function),
266
+ __metadata("design:paramtypes", [Number, Number]),
267
+ __metadata("design:returntype", Promise)
268
+ ], ValidationExamplesResolver.prototype, "updateCustomSettings", null);
269
+ __decorate([
270
+ TypeGraphQL.Mutation(() => Boolean),
271
+ __param(0, TypeGraphQL.Arg('allocations', () => [PortfolioAllocationInput])),
272
+ __metadata("design:type", Function),
273
+ __metadata("design:paramtypes", [Array]),
274
+ __metadata("design:returntype", Promise)
275
+ ], ValidationExamplesResolver.prototype, "bulkUpdateAllocations", null);
276
+ ValidationExamplesResolver = __decorate([
277
+ TypeGraphQL.Resolver()
278
+ ], ValidationExamplesResolver);
279
+ export { ValidationExamplesResolver };
280
+ /**
281
+ * Example: Reusable validation functions for complex business rules
282
+ */
283
+ export class CustomValidators {
284
+ /**
285
+ * Validates that portfolio allocations sum to 100%
286
+ */
287
+ static validatePortfolioAllocationSum(equities, options, crypto) {
288
+ const total = equities + options + crypto;
289
+ if (Math.abs(total - 100) > 0.01) { // Allow small floating point errors
290
+ throw new ValidationError('Invalid portfolio allocation', [
291
+ {
292
+ field: 'totalAllocation',
293
+ value: total,
294
+ message: 'Total allocation must equal 100%',
295
+ constraint: 'sum',
296
+ },
297
+ ]);
298
+ }
299
+ }
300
+ /**
301
+ * Validates that a price is within acceptable market bounds
302
+ */
303
+ static validateMarketPrice(price, fieldName) {
304
+ validatePositiveNumber(price, fieldName);
305
+ // Additional market-specific validation
306
+ if (price > 1000000) {
307
+ throw new ValidationError('Price exceeds maximum', [
308
+ {
309
+ field: fieldName,
310
+ value: price,
311
+ message: 'Price cannot exceed $1,000,000',
312
+ constraint: 'maximum',
313
+ },
314
+ ]);
315
+ }
316
+ }
317
+ /**
318
+ * Validates Greeks values are within expected ranges
319
+ */
320
+ static validateGreeks(delta, gamma, theta, vega) {
321
+ validateFields([
322
+ () => {
323
+ if (delta < -1 || delta > 1) {
324
+ throw new ValidationError('Invalid delta', [
325
+ {
326
+ field: 'delta',
327
+ value: delta,
328
+ message: 'Delta must be between -1 and 1',
329
+ constraint: 'range',
330
+ },
331
+ ]);
332
+ }
333
+ },
334
+ () => {
335
+ if (gamma < 0) {
336
+ throw new ValidationError('Invalid gamma', [
337
+ {
338
+ field: 'gamma',
339
+ value: gamma,
340
+ message: 'Gamma must be non-negative',
341
+ constraint: 'minimum',
342
+ },
343
+ ]);
344
+ }
345
+ },
346
+ () => {
347
+ if (theta > 0) {
348
+ throw new ValidationError('Invalid theta', [
349
+ {
350
+ field: 'theta',
351
+ value: theta,
352
+ message: 'Theta must be negative or zero',
353
+ constraint: 'maximum',
354
+ },
355
+ ]);
356
+ }
357
+ },
358
+ () => {
359
+ if (vega < 0) {
360
+ throw new ValidationError('Invalid vega', [
361
+ {
362
+ field: 'vega',
363
+ value: vega,
364
+ message: 'Vega must be non-negative',
365
+ constraint: 'minimum',
366
+ },
367
+ ]);
368
+ }
369
+ },
370
+ ]);
371
+ }
372
+ }
373
+ //# sourceMappingURL=validation-examples.js.map
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Error Sanitizer for Apollo Server
3
+ *
4
+ * This module provides error formatting that:
5
+ * - Sanitizes internal errors in production
6
+ * - Preserves validation errors (safe to show)
7
+ * - Logs full error details server-side
8
+ * - Includes request IDs for debugging
9
+ *
10
+ * Integration:
11
+ *
12
+ * ```typescript
13
+ * import { createErrorSanitizer } from './plugins/error-sanitizer';
14
+ *
15
+ * const server = new ApolloServer({
16
+ * schema,
17
+ * formatError: createErrorSanitizer(),
18
+ * // ... other options
19
+ * });
20
+ * ```
21
+ *
22
+ * Configuration:
23
+ * - Automatically detects NODE_ENV for production vs development mode
24
+ * - In production: sanitizes internal errors, keeps validation errors
25
+ * - In development: shows full error details
26
+ */
27
+ import { GraphQLFormattedError } from 'graphql';
28
+ /**
29
+ * Creates an error formatter function for Apollo Server
30
+ */
31
+ export declare function createErrorSanitizer(): (formattedError: GraphQLFormattedError, error: unknown) => GraphQLFormattedError;
32
+ /**
33
+ * Alternative: Export a pre-configured formatter
34
+ * Use this if you don't need to customize the behavior
35
+ */
36
+ export declare const formatError: (formattedError: GraphQLFormattedError, error: unknown) => GraphQLFormattedError;
37
+ //# sourceMappingURL=error-sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-sanitizer.d.ts","sourceRoot":"","sources":["../../../src/plugins/error-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAgB,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAqJ9D;;GAEG;AACH,wBAAgB,oBAAoB,KAIhC,gBAAgB,qBAAqB,EACrC,OAAO,OAAO,KACb,qBAAqB,CAiDzB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,mBAzDJ,qBAAqB,SAC9B,OAAO,KACb,qBAuD4C,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-sanitizer.js","sourceRoot":"","sources":["../../../src/plugins/error-sanitizer.ts"],"names":[],"mappings":"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"}