@explorins/pers-shared 2.1.153 → 2.1.155

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 (173) hide show
  1. package/dist/cjs/browser.d.ts +1 -0
  2. package/dist/cjs/browser.d.ts.map +1 -1
  3. package/dist/cjs/browser.js +2 -0
  4. package/dist/cjs/browser.js.map +1 -1
  5. package/dist/cjs/index.d.ts +1 -0
  6. package/dist/cjs/index.d.ts.map +1 -1
  7. package/dist/cjs/index.js +1 -0
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/shared-lib/dto/ai/ai-generation-log.dto.d.ts.map +1 -1
  10. package/dist/cjs/shared-lib/dto/ai/ai-generation-log.dto.js +2 -0
  11. package/dist/cjs/shared-lib/dto/ai/ai-generation-log.dto.js.map +1 -1
  12. package/dist/cjs/shared-lib/dto/analytics/redemption-redeem-analytics-request.dto.d.ts +1 -1
  13. package/dist/cjs/shared-lib/dto/api-key/api-key.dto.d.ts.map +1 -1
  14. package/dist/cjs/shared-lib/dto/api-key/api-key.dto.js +1 -0
  15. package/dist/cjs/shared-lib/dto/api-key/api-key.dto.js.map +1 -1
  16. package/dist/cjs/shared-lib/dto/business/business-membership.dto.d.ts.map +1 -1
  17. package/dist/cjs/shared-lib/dto/business/business-membership.dto.js +4 -2
  18. package/dist/cjs/shared-lib/dto/business/business-membership.dto.js.map +1 -1
  19. package/dist/cjs/shared-lib/dto/business/business-type.dto.d.ts.map +1 -1
  20. package/dist/cjs/shared-lib/dto/business/business-type.dto.js +8 -0
  21. package/dist/cjs/shared-lib/dto/business/business-type.dto.js.map +1 -1
  22. package/dist/cjs/shared-lib/dto/campaign/campaignUserClaim.dto.js +2 -2
  23. package/dist/cjs/shared-lib/dto/campaign/campaignUserClaim.dto.js.map +1 -1
  24. package/dist/cjs/shared-lib/dto/purchase/donationType.dto.d.ts +4 -2
  25. package/dist/cjs/shared-lib/dto/purchase/donationType.dto.d.ts.map +1 -1
  26. package/dist/cjs/shared-lib/dto/purchase/donationType.dto.js +14 -6
  27. package/dist/cjs/shared-lib/dto/purchase/donationType.dto.js.map +1 -1
  28. package/dist/cjs/shared-lib/dto/tenant/email-config.dto.d.ts +7 -0
  29. package/dist/cjs/shared-lib/dto/tenant/email-config.dto.d.ts.map +1 -1
  30. package/dist/cjs/shared-lib/dto/tenant/email-config.dto.js +26 -0
  31. package/dist/cjs/shared-lib/dto/tenant/email-config.dto.js.map +1 -1
  32. package/dist/cjs/shared-lib/dto/tenant/tenant.dto.d.ts +0 -2
  33. package/dist/cjs/shared-lib/dto/tenant/tenant.dto.d.ts.map +1 -1
  34. package/dist/cjs/shared-lib/dto/tenant/tenant.dto.js +8 -11
  35. package/dist/cjs/shared-lib/dto/tenant/tenant.dto.js.map +1 -1
  36. package/dist/cjs/shared-lib/dto/transaction/transaction.dto.js +2 -2
  37. package/dist/cjs/shared-lib/dto/transaction/transaction.dto.js.map +1 -1
  38. package/dist/cjs/shared-lib/dto/wallet.dto.d.ts.map +1 -1
  39. package/dist/cjs/shared-lib/dto/wallet.dto.js +4 -2
  40. package/dist/cjs/shared-lib/dto/wallet.dto.js.map +1 -1
  41. package/dist/cjs/shared-lib/dto/webhook/webhook.dto.js +2 -2
  42. package/dist/cjs/shared-lib/dto/webhook/webhook.dto.js.map +1 -1
  43. package/dist/cjs/shared-lib/enum/index.d.ts +1 -0
  44. package/dist/cjs/shared-lib/enum/index.d.ts.map +1 -1
  45. package/dist/cjs/shared-lib/enum/index.js +2 -0
  46. package/dist/cjs/shared-lib/enum/index.js.map +1 -1
  47. package/dist/cjs/shared-lib/interfaces/email-config.interface.d.ts +2 -0
  48. package/dist/cjs/shared-lib/interfaces/email-config.interface.d.ts.map +1 -1
  49. package/dist/cjs/shared-lib/types/filter-options.type.d.ts +4 -4
  50. package/dist/cjs/shared-lib/types/filter-options.type.d.ts.map +1 -1
  51. package/dist/cjs/shared-lib/types/index.d.ts +3 -0
  52. package/dist/cjs/shared-lib/types/index.d.ts.map +1 -1
  53. package/dist/cjs/shared-lib/types/index.js +3 -0
  54. package/dist/cjs/shared-lib/types/index.js.map +1 -1
  55. package/dist/cjs/shared-lib/types/unique-user-identifier-keys.d.ts +13 -0
  56. package/dist/cjs/shared-lib/types/unique-user-identifier-keys.d.ts.map +1 -1
  57. package/dist/cjs/shared-lib/types/unique-user-identifier-keys.js +22 -3
  58. package/dist/cjs/shared-lib/types/unique-user-identifier-keys.js.map +1 -1
  59. package/dist/cjs/shared-lib/types/user-fields.type.d.ts +105 -0
  60. package/dist/cjs/shared-lib/types/user-fields.type.d.ts.map +1 -0
  61. package/dist/cjs/shared-lib/types/user-fields.type.js +76 -0
  62. package/dist/cjs/shared-lib/types/user-fields.type.js.map +1 -0
  63. package/dist/cjs/shared-lib/types/uuid.type.d.ts +15 -0
  64. package/dist/cjs/shared-lib/types/uuid.type.d.ts.map +1 -0
  65. package/dist/cjs/shared-lib/types/uuid.type.js +11 -0
  66. package/dist/cjs/shared-lib/types/uuid.type.js.map +1 -0
  67. package/dist/cjs/shared-lib/validation/field-validation.d.ts +35 -0
  68. package/dist/cjs/shared-lib/validation/field-validation.d.ts.map +1 -0
  69. package/dist/cjs/shared-lib/validation/field-validation.js +238 -0
  70. package/dist/cjs/shared-lib/validation/field-validation.js.map +1 -0
  71. package/dist/cjs/shared-lib/validation/index.d.ts +4 -0
  72. package/dist/cjs/shared-lib/validation/index.d.ts.map +1 -0
  73. package/dist/cjs/shared-lib/validation/index.js +23 -0
  74. package/dist/cjs/shared-lib/validation/index.js.map +1 -0
  75. package/dist/cjs/shared-lib/validation/validation.types.d.ts +54 -0
  76. package/dist/cjs/shared-lib/validation/validation.types.d.ts.map +1 -0
  77. package/dist/cjs/shared-lib/validation/validation.types.js +19 -0
  78. package/dist/cjs/shared-lib/validation/validation.types.js.map +1 -0
  79. package/dist/cjs/shared-lib/validation/validators.d.ts +37 -0
  80. package/dist/cjs/shared-lib/validation/validators.d.ts.map +1 -0
  81. package/dist/cjs/shared-lib/validation/validators.js +69 -0
  82. package/dist/cjs/shared-lib/validation/validators.js.map +1 -0
  83. package/dist/esm/browser.d.ts +1 -0
  84. package/dist/esm/browser.d.ts.map +1 -1
  85. package/dist/esm/browser.js +2 -0
  86. package/dist/esm/browser.js.map +1 -1
  87. package/dist/esm/index.d.ts +1 -0
  88. package/dist/esm/index.d.ts.map +1 -1
  89. package/dist/esm/index.js +1 -0
  90. package/dist/esm/index.js.map +1 -1
  91. package/dist/esm/shared-lib/dto/ai/ai-generation-log.dto.d.ts.map +1 -1
  92. package/dist/esm/shared-lib/dto/ai/ai-generation-log.dto.js +2 -0
  93. package/dist/esm/shared-lib/dto/ai/ai-generation-log.dto.js.map +1 -1
  94. package/dist/esm/shared-lib/dto/analytics/redemption-redeem-analytics-request.dto.d.ts +1 -1
  95. package/dist/esm/shared-lib/dto/api-key/api-key.dto.d.ts.map +1 -1
  96. package/dist/esm/shared-lib/dto/api-key/api-key.dto.js +1 -0
  97. package/dist/esm/shared-lib/dto/api-key/api-key.dto.js.map +1 -1
  98. package/dist/esm/shared-lib/dto/business/business-membership.dto.d.ts.map +1 -1
  99. package/dist/esm/shared-lib/dto/business/business-membership.dto.js +4 -2
  100. package/dist/esm/shared-lib/dto/business/business-membership.dto.js.map +1 -1
  101. package/dist/esm/shared-lib/dto/business/business-type.dto.d.ts.map +1 -1
  102. package/dist/esm/shared-lib/dto/business/business-type.dto.js +13 -5
  103. package/dist/esm/shared-lib/dto/business/business-type.dto.js.map +1 -1
  104. package/dist/esm/shared-lib/dto/campaign/campaignUserClaim.dto.js +2 -2
  105. package/dist/esm/shared-lib/dto/campaign/campaignUserClaim.dto.js.map +1 -1
  106. package/dist/esm/shared-lib/dto/purchase/donationType.dto.d.ts +4 -2
  107. package/dist/esm/shared-lib/dto/purchase/donationType.dto.d.ts.map +1 -1
  108. package/dist/esm/shared-lib/dto/purchase/donationType.dto.js +14 -7
  109. package/dist/esm/shared-lib/dto/purchase/donationType.dto.js.map +1 -1
  110. package/dist/esm/shared-lib/dto/tenant/email-config.dto.d.ts +7 -0
  111. package/dist/esm/shared-lib/dto/tenant/email-config.dto.d.ts.map +1 -1
  112. package/dist/esm/shared-lib/dto/tenant/email-config.dto.js +24 -0
  113. package/dist/esm/shared-lib/dto/tenant/email-config.dto.js.map +1 -1
  114. package/dist/esm/shared-lib/dto/tenant/tenant.dto.d.ts +0 -2
  115. package/dist/esm/shared-lib/dto/tenant/tenant.dto.d.ts.map +1 -1
  116. package/dist/esm/shared-lib/dto/tenant/tenant.dto.js +8 -10
  117. package/dist/esm/shared-lib/dto/tenant/tenant.dto.js.map +1 -1
  118. package/dist/esm/shared-lib/dto/transaction/transaction.dto.js +2 -2
  119. package/dist/esm/shared-lib/dto/transaction/transaction.dto.js.map +1 -1
  120. package/dist/esm/shared-lib/dto/wallet.dto.d.ts.map +1 -1
  121. package/dist/esm/shared-lib/dto/wallet.dto.js +4 -2
  122. package/dist/esm/shared-lib/dto/wallet.dto.js.map +1 -1
  123. package/dist/esm/shared-lib/dto/webhook/webhook.dto.js +2 -2
  124. package/dist/esm/shared-lib/dto/webhook/webhook.dto.js.map +1 -1
  125. package/dist/esm/shared-lib/enum/index.d.ts +1 -0
  126. package/dist/esm/shared-lib/enum/index.d.ts.map +1 -1
  127. package/dist/esm/shared-lib/enum/index.js +2 -0
  128. package/dist/esm/shared-lib/enum/index.js.map +1 -1
  129. package/dist/esm/shared-lib/interfaces/email-config.interface.d.ts +2 -0
  130. package/dist/esm/shared-lib/interfaces/email-config.interface.d.ts.map +1 -1
  131. package/dist/esm/shared-lib/types/filter-options.type.d.ts +4 -4
  132. package/dist/esm/shared-lib/types/filter-options.type.d.ts.map +1 -1
  133. package/dist/esm/shared-lib/types/index.d.ts +3 -0
  134. package/dist/esm/shared-lib/types/index.d.ts.map +1 -1
  135. package/dist/esm/shared-lib/types/index.js +3 -0
  136. package/dist/esm/shared-lib/types/index.js.map +1 -1
  137. package/dist/esm/shared-lib/types/unique-user-identifier-keys.d.ts +13 -0
  138. package/dist/esm/shared-lib/types/unique-user-identifier-keys.d.ts.map +1 -1
  139. package/dist/esm/shared-lib/types/unique-user-identifier-keys.js +21 -2
  140. package/dist/esm/shared-lib/types/unique-user-identifier-keys.js.map +1 -1
  141. package/dist/esm/shared-lib/types/user-fields.type.d.ts +105 -0
  142. package/dist/esm/shared-lib/types/user-fields.type.d.ts.map +1 -0
  143. package/dist/esm/shared-lib/types/user-fields.type.js +67 -0
  144. package/dist/esm/shared-lib/types/user-fields.type.js.map +1 -0
  145. package/dist/esm/shared-lib/types/uuid.type.d.ts +15 -0
  146. package/dist/esm/shared-lib/types/uuid.type.d.ts.map +1 -0
  147. package/dist/esm/shared-lib/types/uuid.type.js +7 -0
  148. package/dist/esm/shared-lib/types/uuid.type.js.map +1 -0
  149. package/dist/esm/shared-lib/validation/field-validation.d.ts +35 -0
  150. package/dist/esm/shared-lib/validation/field-validation.d.ts.map +1 -0
  151. package/dist/esm/shared-lib/validation/field-validation.js +219 -0
  152. package/dist/esm/shared-lib/validation/field-validation.js.map +1 -0
  153. package/dist/esm/shared-lib/validation/index.d.ts +4 -0
  154. package/dist/esm/shared-lib/validation/index.d.ts.map +1 -0
  155. package/dist/esm/shared-lib/validation/index.js +7 -0
  156. package/dist/esm/shared-lib/validation/index.js.map +1 -0
  157. package/dist/esm/shared-lib/validation/validation.types.d.ts +54 -0
  158. package/dist/esm/shared-lib/validation/validation.types.d.ts.map +1 -0
  159. package/dist/esm/shared-lib/validation/validation.types.js +16 -0
  160. package/dist/esm/shared-lib/validation/validation.types.js.map +1 -0
  161. package/dist/esm/shared-lib/validation/validators.d.ts +37 -0
  162. package/dist/esm/shared-lib/validation/validators.d.ts.map +1 -0
  163. package/dist/esm/shared-lib/validation/validators.js +61 -0
  164. package/dist/esm/shared-lib/validation/validators.js.map +1 -0
  165. package/package.json +1 -1
  166. package/dist/cjs/shared-lib/enum/lambda.enum.d.ts +0 -25
  167. package/dist/cjs/shared-lib/enum/lambda.enum.d.ts.map +0 -1
  168. package/dist/cjs/shared-lib/enum/lambda.enum.js +0 -31
  169. package/dist/cjs/shared-lib/enum/lambda.enum.js.map +0 -1
  170. package/dist/esm/shared-lib/enum/lambda.enum.d.ts +0 -25
  171. package/dist/esm/shared-lib/enum/lambda.enum.d.ts.map +0 -1
  172. package/dist/esm/shared-lib/enum/lambda.enum.js +0 -28
  173. package/dist/esm/shared-lib/enum/lambda.enum.js.map +0 -1
@@ -1,4 +1,7 @@
1
1
  // Types Barrel - Auto-exports all type definitions
2
+ export * from './uuid.type.js';
3
+ export * from './user-fields.type.js';
4
+ export * from '../validation/index.js';
2
5
  export * from './testnet-prefix.js';
3
6
  export * from './unique-user-identifier-keys.js';
4
7
  export * from './native-token.type.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,WAAW,CAAC;AAC1B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,WAAW,CAAC;AAC1B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,uBAAuB,CAAC"}
@@ -3,6 +3,19 @@ interface IdentifierTypeConfig {
3
3
  detect: (value: string) => boolean;
4
4
  process: (value: string) => string;
5
5
  }
6
+ /**
7
+ * Base array of all string-valued user model property keys.
8
+ * Single source of truth for user field names across the codebase.
9
+ */
10
+ declare const userModelFieldsArray: readonly ["id", "email", "identifierEmail", "firstName", "lastName", "externalId", "instagramAccountId", "googleAccountName"];
11
+ /** All string-valued UserModel property keys */
12
+ export type UserModelField = typeof userModelFieldsArray[number];
13
+ /** Iterable array of all user model fields */
14
+ export declare const userModelFields: UserModelField[];
15
+ /**
16
+ * Fields that can be used to uniquely identify/lookup a user.
17
+ * Used for wildcard search, user lookup queries.
18
+ */
6
19
  declare const uniqueUserIdentifierKeysArray: readonly ["id", "email", "identifierEmail", "instagramAccountId", "externalId"];
7
20
  export type UniqueUserIdentifierKey = typeof uniqueUserIdentifierKeysArray[number];
8
21
  export type UserIdentifierObject = Record<UniqueUserIdentifierKey, string | null> & {
@@ -1 +1 @@
1
- {"version":3,"file":"unique-user-identifier-keys.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/unique-user-identifier-keys.ts"],"names":[],"mappings":"AACA,UAAU,oBAAoB;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAGD,QAAA,MAAM,6BAA6B,iFAMzB,CAAC;AAGX,MAAM,MAAM,uBAAuB,GAAG,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAAC;AACnF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAClF,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,OAAO,wBAAwB,GAAG,MAAM,CAAC;CACpD,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,GAAG;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAGH,eAAO,MAAM,wBAAwB,EAAE,uBAAuB,EAAuC,CAAC;AA0BtG;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,KAAK,MAAM,EACX,QAAQ,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,KACxC,IAQF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,eAAe,GAAG,KAAG;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAiBvG,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,KAAK,GAAG,KAAG,GAAG,IAAI,oBAIxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,QAAQ;IACjD,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAAC;CAE5D,KAAG,oBA6BH,CAAC"}
1
+ {"version":3,"file":"unique-user-identifier-keys.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/unique-user-identifier-keys.ts"],"names":[],"mappings":"AACA,UAAU,oBAAoB;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAED;;;GAGG;AACH,QAAA,MAAM,oBAAoB,+HAShB,CAAC;AAEX,gDAAgD;AAChD,MAAM,MAAM,cAAc,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAEjE,8CAA8C;AAC9C,eAAO,MAAM,eAAe,EAAE,cAAc,EAA8B,CAAC;AAE3E;;;GAGG;AACH,QAAA,MAAM,6BAA6B,iFAMW,CAAC;AAG/C,MAAM,MAAM,uBAAuB,GAAG,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAAC;AACnF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAClF,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,OAAO,wBAAwB,GAAG,MAAM,CAAC;CACpD,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,GAAG;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAGH,eAAO,MAAM,wBAAwB,EAAE,uBAAuB,EAAuC,CAAC;AA0BtG;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,KAAK,MAAM,EACX,QAAQ,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,KACxC,IAQF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,eAAe,GAAG,KAAG;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAiBvG,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,KAAK,GAAG,KAAG,GAAG,IAAI,oBAIxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,QAAQ;IACjD,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAAC;CAE5D,KAAG,oBA6BH,CAAC"}
@@ -1,10 +1,29 @@
1
- // Define the keys as a constant array
1
+ /**
2
+ * Base array of all string-valued user model property keys.
3
+ * Single source of truth for user field names across the codebase.
4
+ */
5
+ const userModelFieldsArray = [
6
+ 'id',
7
+ 'email',
8
+ 'identifierEmail',
9
+ 'firstName',
10
+ 'lastName',
11
+ 'externalId',
12
+ 'instagramAccountId',
13
+ 'googleAccountName',
14
+ ];
15
+ /** Iterable array of all user model fields */
16
+ export const userModelFields = [...userModelFieldsArray];
17
+ /**
18
+ * Fields that can be used to uniquely identify/lookup a user.
19
+ * Used for wildcard search, user lookup queries.
20
+ */
2
21
  const uniqueUserIdentifierKeysArray = [
3
22
  'id',
4
23
  'email',
5
24
  'identifierEmail',
6
25
  'instagramAccountId',
7
- 'externalId', // This is a special key that can be used to search all fields
26
+ 'externalId',
8
27
  ];
9
28
  // Export the array
10
29
  export const uniqueUserIdentifierKeys = [...uniqueUserIdentifierKeysArray];
@@ -1 +1 @@
1
- {"version":3,"file":"unique-user-identifier-keys.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/unique-user-identifier-keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unique-user-identifier-keys.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/unique-user-identifier-keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import { UserModelField, userModelFields } from './unique-user-identifier-keys';
2
+ import type { FieldValidationRules, FieldComparison, ComparisonOperator, FieldValidationError, FieldType, FieldDefinition } from '../validation';
3
+ /**
4
+ * Built-in user profile fields that can be required for redemptions.
5
+ * These are a subset of UserModelField - excludes 'id' and 'identifierEmail'
6
+ * since those are system-managed, not user-fillable profile fields.
7
+ *
8
+ * Used for:
9
+ * - Redemption required fields (Redemption.requiredUserFields)
10
+ * - User profile validation before redemption claims
11
+ * - Form generation for missing field prompts
12
+ */
13
+ declare const builtInUserFieldsArray: readonly ["email", "firstName", "lastName", "externalId", "instagramAccountId", "googleAccountName"];
14
+ export type BuiltInUserField = typeof builtInUserFieldsArray[number];
15
+ export declare const builtInUserFields: BuiltInUserField[];
16
+ /** Re-export base type for convenience */
17
+ export type { UserModelField };
18
+ export { userModelFields };
19
+ /**
20
+ * Field type hints for form generation and validation
21
+ */
22
+ export type BuiltInFieldType = 'text' | 'email';
23
+ /**
24
+ * Metadata for built-in fields - UI hints for display and form generation
25
+ */
26
+ export interface BuiltInFieldMetadata {
27
+ /** Human-readable label for UI display */
28
+ label: string;
29
+ /** Description for the field */
30
+ description: string;
31
+ /** Field type for form input rendering */
32
+ fieldType: BuiltInFieldType;
33
+ }
34
+ /**
35
+ * Static metadata mapping for all built-in user fields.
36
+ * Used by validation services and UI form generation.
37
+ */
38
+ export declare const builtInUserFieldMetadata: Record<BuiltInUserField, BuiltInFieldMetadata>;
39
+ /**
40
+ * Check if a string is a valid built-in user field
41
+ */
42
+ export declare const isBuiltInUserField: (value: string) => value is BuiltInUserField;
43
+ /**
44
+ * Validation result types for user field checks
45
+ */
46
+ export interface BuiltInFieldValidationInfo {
47
+ field: BuiltInUserField;
48
+ label: string;
49
+ fieldType: BuiltInFieldType;
50
+ }
51
+ export interface CustomFieldValidationInfo {
52
+ definitionId: string;
53
+ key: string;
54
+ label: string;
55
+ description: string | null;
56
+ fieldType: string;
57
+ selectOptions: {
58
+ value: string;
59
+ label: string;
60
+ }[] | null;
61
+ validation: FieldValidationRules | null;
62
+ }
63
+ export type CustomFieldValidationRules = FieldValidationRules;
64
+ export type CustomFieldType = FieldType;
65
+ export type { FieldComparison, ComparisonOperator, FieldValidationError, FieldDefinition };
66
+ export { validateFieldValue, validateFieldComparisons, validateAllFields, compareValues, getOperatorText, } from '../validation';
67
+ export interface UserFieldValidationResult {
68
+ valid: boolean;
69
+ missingBuiltInFields: BuiltInFieldValidationInfo[];
70
+ missingCustomFields: CustomFieldValidationInfo[];
71
+ totalMissing: number;
72
+ }
73
+ export interface CustomFieldSelectOption {
74
+ value: string;
75
+ label: string;
76
+ }
77
+ /**
78
+ * Supported entities for dynamic select options
79
+ */
80
+ export type SelectOptionsEntity = 'business' | 'campaign' | 'redemption' | 'user';
81
+ /**
82
+ * Filter conditions for dynamic select options
83
+ */
84
+ export interface SelectOptionsFilter {
85
+ /** Filter by tags (OR logic - has any of these) */
86
+ tags?: string[];
87
+ /** Filter by active status */
88
+ isActive?: boolean;
89
+ /** Generic key-value filters */
90
+ [key: string]: unknown;
91
+ }
92
+ /**
93
+ * Configuration for fetching select options dynamically from an entity
94
+ */
95
+ export interface SelectOptionsSource {
96
+ /** Entity to fetch options from */
97
+ entity: SelectOptionsEntity;
98
+ /** Field to use as option value (usually 'id') */
99
+ valueField: string;
100
+ /** Field to use as option label (e.g., 'name') */
101
+ labelField: string;
102
+ /** Optional filter conditions */
103
+ filter?: SelectOptionsFilter;
104
+ }
105
+ //# sourceMappingURL=user-fields.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-fields.type.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/user-fields.type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,EACT,eAAe,EAChB,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;GASG;AAGH,QAAA,MAAM,sBAAsB,sGAOkB,CAAC;AAG/C,MAAM,MAAM,gBAAgB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAGrE,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAAgC,CAAC;AAEjF,0CAA0C;AAC1C,YAAY,EAAE,cAAc,EAAE,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CA+BnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,KAAK,IAAI,gBAE3D,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IACzD,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACzC;AAID,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAC9D,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC;AAGxC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,eAAe,EAAE,CAAC;AAC3F,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,oBAAoB,EAAE,0BAA0B,EAAE,CAAC;IACnD,mBAAmB,EAAE,yBAAyB,EAAE,CAAC;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B"}
@@ -0,0 +1,67 @@
1
+ import { userModelFields } from './unique-user-identifier-keys.js';
2
+ /**
3
+ * Built-in user profile fields that can be required for redemptions.
4
+ * These are a subset of UserModelField - excludes 'id' and 'identifierEmail'
5
+ * since those are system-managed, not user-fillable profile fields.
6
+ *
7
+ * Used for:
8
+ * - Redemption required fields (Redemption.requiredUserFields)
9
+ * - User profile validation before redemption claims
10
+ * - Form generation for missing field prompts
11
+ */
12
+ // Fields that can be required for user profile validation (excludes system fields)
13
+ const builtInUserFieldsArray = [
14
+ 'email',
15
+ 'firstName',
16
+ 'lastName',
17
+ 'externalId',
18
+ 'instagramAccountId',
19
+ 'googleAccountName',
20
+ ];
21
+ // Export the array for iteration
22
+ export const builtInUserFields = [...builtInUserFieldsArray];
23
+ export { userModelFields };
24
+ /**
25
+ * Static metadata mapping for all built-in user fields.
26
+ * Used by validation services and UI form generation.
27
+ */
28
+ export const builtInUserFieldMetadata = {
29
+ email: {
30
+ label: 'Email Address',
31
+ description: 'User email address',
32
+ fieldType: 'email',
33
+ },
34
+ firstName: {
35
+ label: 'First Name',
36
+ description: 'User first name',
37
+ fieldType: 'text',
38
+ },
39
+ lastName: {
40
+ label: 'Last Name',
41
+ description: 'User last name',
42
+ fieldType: 'text',
43
+ },
44
+ externalId: {
45
+ label: 'External ID',
46
+ description: 'External identifier from third-party system',
47
+ fieldType: 'text',
48
+ },
49
+ instagramAccountId: {
50
+ label: 'Instagram Account',
51
+ description: 'Instagram account ID',
52
+ fieldType: 'text',
53
+ },
54
+ googleAccountName: {
55
+ label: 'Google Account',
56
+ description: 'Google account name',
57
+ fieldType: 'text',
58
+ },
59
+ };
60
+ /**
61
+ * Check if a string is a valid built-in user field
62
+ */
63
+ export const isBuiltInUserField = (value) => {
64
+ return builtInUserFields.includes(value);
65
+ };
66
+ export { validateFieldValue, validateFieldComparisons, validateAllFields, compareValues, getOperatorText, } from '../validation/index.js';
67
+ //# sourceMappingURL=user-fields.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-fields.type.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/user-fields.type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAUhF;;;;;;;;;GASG;AAEH,mFAAmF;AACnF,MAAM,sBAAsB,GAAG;IAC7B,OAAO;IACP,WAAW;IACX,UAAU;IACV,YAAY;IACZ,oBAAoB;IACpB,mBAAmB;CACyB,CAAC;AAK/C,iCAAiC;AACjC,MAAM,CAAC,MAAM,iBAAiB,GAAuB,CAAC,GAAG,sBAAsB,CAAC,CAAC;AAIjF,OAAO,EAAE,eAAe,EAAE,CAAC;AAmB3B;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAmD;IACtF,KAAK,EAAE;QACL,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,OAAO;KACnB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,iBAAiB;QAC9B,SAAS,EAAE,MAAM;KAClB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,gBAAgB;QAC7B,SAAS,EAAE,MAAM;KAClB;IACD,UAAU,EAAE;QACV,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,6CAA6C;QAC1D,SAAS,EAAE,MAAM;KAClB;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,sBAAsB;QACnC,SAAS,EAAE,MAAM;KAClB;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,qBAAqB;QAClC,SAAS,EAAE,MAAM;KAClB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAA6B,EAAE;IAC7E,OAAO,iBAAiB,CAAC,QAAQ,CAAC,KAAyB,CAAC,CAAC;AAC/D,CAAC,CAAC;AA4BF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * UUID type using template literal for compile-time differentiation.
3
+ * Matches standard UUID format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
4
+ */
5
+ export type UUID = `${string}-${string}-${string}-${string}-${string}`;
6
+ /**
7
+ * Branded UUID for custom field definition IDs.
8
+ * Provides semantic meaning while maintaining UUID structure.
9
+ */
10
+ export type CustomFieldId = UUID;
11
+ /**
12
+ * Check if a string matches UUID format
13
+ */
14
+ export declare const isUUID: (value: string) => value is UUID;
15
+ //# sourceMappingURL=uuid.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.type.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/uuid.type.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAEvE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,KAAG,KAAK,IAAI,IAE/C,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Check if a string matches UUID format
3
+ */
4
+ export const isUUID = (value) => {
5
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value);
6
+ };
7
+ //# sourceMappingURL=uuid.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.type.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/uuid.type.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAiB,EAAE;IACrD,OAAO,iEAAiE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvF,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Field Validation Functions
3
+ * Shared between backend and frontend for consistent validation.
4
+ */
5
+ import type { ComparisonOperator, FieldComparison, FieldDefinition, FieldType, FieldValidationError, FieldValidationRules } from './validation.types';
6
+ export type { ComparisonOperator, FieldComparison, FieldComparisonToField, FieldComparisonToValue, FieldDefinition, FieldType, FieldValidationError, FieldValidationRules, } from './validation.types';
7
+ export { operatorText } from './validation.types';
8
+ export { isValidEmail, isValidUrl, isValidWalletAddress, isValidNonEmptyString, isValidUuid, EMAIL_REGEX, EMAIL_MAX_LENGTH, URL_REGEX, WALLET_ADDRESS_REGEX, UUID_REGEX, } from './validators';
9
+ /**
10
+ * Compare two values using the specified operator.
11
+ * Works with numbers, dates, and strings.
12
+ */
13
+ export declare const compareValues: <T extends number | Date | string>(a: T, b: T, op: ComparisonOperator) => boolean;
14
+ /** Get human-readable operator text for error messages. */
15
+ export declare const getOperatorText: (op: ComparisonOperator) => string;
16
+ /**
17
+ * Validate a single field value against validation rules.
18
+ * Does not check cross-field comparisons (use validateFieldComparisons for that).
19
+ */
20
+ export declare const validateFieldValue: (value: unknown, rules: FieldValidationRules | null | undefined, fieldType: FieldType) => FieldValidationError | null;
21
+ /**
22
+ * Validate comparison rules for a single field.
23
+ * Supports comparing to another field OR a literal value.
24
+ */
25
+ export declare const validateFieldComparisons: (fieldKey: string, value: unknown, comparisons: FieldComparison[] | undefined, allData: Record<string, unknown>, fieldType: FieldType) => FieldValidationError[];
26
+ /**
27
+ * Validate all fields in a data object against their definitions.
28
+ * Runs both single-field and comparison validations.
29
+ *
30
+ * @param data - The data object to validate
31
+ * @param definitions - Field definitions with validation rules
32
+ * @returns Array of all validation errors
33
+ */
34
+ export declare const validateAllFields: (data: Record<string, unknown>, definitions: FieldDefinition[]) => FieldValidationError[];
35
+ //# sourceMappingURL=field-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-validation.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/validation/field-validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EAEf,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAK5B,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,oBAAoB,EACpB,UAAU,GACX,MAAM,cAAc,CAAC;AAMtB;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,MAAM,EAC5D,GAAG,CAAC,EACJ,GAAG,CAAC,EACJ,IAAI,kBAAkB,KACrB,OASF,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,eAAe,GAAI,IAAI,kBAAkB,KAAG,MAA0B,CAAC;AAMpF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,OAAO,EACd,OAAO,oBAAoB,GAAG,IAAI,GAAG,SAAS,EAC9C,WAAW,SAAS,KACnB,oBAAoB,GAAG,IAqGzB,CAAC;AAUF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,MAAM,EAChB,OAAO,OAAO,EACd,aAAa,eAAe,EAAE,GAAG,SAAS,EAC1C,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,WAAW,SAAS,KACnB,oBAAoB,EA6DtB,CAAC;AAMF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,eAAe,EAAE,KAC7B,oBAAoB,EA4BtB,CAAC"}
@@ -0,0 +1,219 @@
1
+ import { operatorText } from './validation.types.js';
2
+ import { EMAIL_MAX_LENGTH, EMAIL_REGEX, URL_REGEX } from './validators.js';
3
+ export { operatorText } from './validation.types.js';
4
+ // Re-export standalone validators
5
+ export { isValidEmail, isValidUrl, isValidWalletAddress, isValidNonEmptyString, isValidUuid, EMAIL_REGEX, EMAIL_MAX_LENGTH, URL_REGEX, WALLET_ADDRESS_REGEX, UUID_REGEX, } from './validators.js';
6
+ // ============================================================================
7
+ // Comparison Functions
8
+ // ============================================================================
9
+ /**
10
+ * Compare two values using the specified operator.
11
+ * Works with numbers, dates, and strings.
12
+ */
13
+ export const compareValues = (a, b, op) => {
14
+ switch (op) {
15
+ case '<': return a < b;
16
+ case '<=': return a <= b;
17
+ case '>': return a > b;
18
+ case '>=': return a >= b;
19
+ case '==': return a === b;
20
+ case '!=': return a !== b;
21
+ }
22
+ };
23
+ /** Get human-readable operator text for error messages. */
24
+ export const getOperatorText = (op) => operatorText[op];
25
+ // ============================================================================
26
+ // Single Field Validation
27
+ // ============================================================================
28
+ /**
29
+ * Validate a single field value against validation rules.
30
+ * Does not check cross-field comparisons (use validateFieldComparisons for that).
31
+ */
32
+ export const validateFieldValue = (value, rules, fieldType) => {
33
+ // No rules = valid
34
+ if (!rules) {
35
+ return null;
36
+ }
37
+ const stringValue = value !== null && value !== undefined ? String(value) : '';
38
+ const isEmpty = value === null || value === undefined || value === '';
39
+ // Required check
40
+ if (rules.required && isEmpty) {
41
+ return { field: '', message: 'This field is required', rule: 'required' };
42
+ }
43
+ // If empty and not required, skip other validations
44
+ if (isEmpty) {
45
+ return null;
46
+ }
47
+ // Type-specific validation
48
+ switch (fieldType) {
49
+ case 'text':
50
+ if (rules.minLength && stringValue.length < rules.minLength) {
51
+ return { field: '', message: `Minimum ${rules.minLength} characters required`, rule: 'minLength' };
52
+ }
53
+ if (rules.maxLength && stringValue.length > rules.maxLength) {
54
+ return { field: '', message: `Maximum ${rules.maxLength} characters allowed`, rule: 'maxLength' };
55
+ }
56
+ if (rules.pattern && !new RegExp(rules.pattern).test(stringValue)) {
57
+ return { field: '', message: rules.patternMessage || 'Invalid format', rule: 'pattern' };
58
+ }
59
+ break;
60
+ case 'email':
61
+ if (stringValue.length > EMAIL_MAX_LENGTH || !EMAIL_REGEX.test(stringValue)) {
62
+ return { field: '', message: 'Invalid email format', rule: 'email' };
63
+ }
64
+ if (rules.maxLength && stringValue.length > rules.maxLength) {
65
+ return { field: '', message: `Maximum ${rules.maxLength} characters allowed`, rule: 'maxLength' };
66
+ }
67
+ break;
68
+ case 'url':
69
+ if (!URL_REGEX.test(stringValue)) {
70
+ return { field: '', message: 'Invalid URL format', rule: 'url' };
71
+ }
72
+ if (rules.maxLength && stringValue.length > rules.maxLength) {
73
+ return { field: '', message: `Maximum ${rules.maxLength} characters allowed`, rule: 'maxLength' };
74
+ }
75
+ break;
76
+ case 'number':
77
+ const numValue = typeof value === 'number' ? value : parseFloat(stringValue);
78
+ if (isNaN(numValue)) {
79
+ return { field: '', message: 'Must be a valid number', rule: 'type' };
80
+ }
81
+ if (rules.min !== undefined && numValue < rules.min) {
82
+ return { field: '', message: `Minimum value is ${rules.min}`, rule: 'min' };
83
+ }
84
+ if (rules.max !== undefined && numValue > rules.max) {
85
+ return { field: '', message: `Maximum value is ${rules.max}`, rule: 'max' };
86
+ }
87
+ break;
88
+ case 'boolean':
89
+ if (typeof value !== 'boolean' && stringValue !== 'true' && stringValue !== 'false') {
90
+ return { field: '', message: 'Must be true or false', rule: 'type' };
91
+ }
92
+ break;
93
+ case 'date':
94
+ const dateValue = new Date(stringValue);
95
+ if (isNaN(dateValue.getTime())) {
96
+ return { field: '', message: 'Must be a valid date', rule: 'type' };
97
+ }
98
+ const now = new Date();
99
+ if (rules.minDate) {
100
+ const minDate = rules.minDate === 'now' ? now : new Date(rules.minDate);
101
+ if (dateValue < minDate) {
102
+ return {
103
+ field: '',
104
+ message: rules.minDate === 'now' ? 'Date must be in the future' : `Date must be after ${rules.minDate}`,
105
+ rule: 'minDate'
106
+ };
107
+ }
108
+ }
109
+ if (rules.maxDate) {
110
+ const maxDate = rules.maxDate === 'now' ? now : new Date(rules.maxDate);
111
+ if (dateValue > maxDate) {
112
+ return {
113
+ field: '',
114
+ message: rules.maxDate === 'now' ? 'Date must be in the past' : `Date must be before ${rules.maxDate}`,
115
+ rule: 'maxDate'
116
+ };
117
+ }
118
+ }
119
+ break;
120
+ }
121
+ return null;
122
+ };
123
+ // ============================================================================
124
+ // Cross-Field / Literal Comparison Validation
125
+ // ============================================================================
126
+ /** Type guard for field comparison */
127
+ const isFieldComparison = (c) => 'field' in c && c.field !== undefined;
128
+ /**
129
+ * Validate comparison rules for a single field.
130
+ * Supports comparing to another field OR a literal value.
131
+ */
132
+ export const validateFieldComparisons = (fieldKey, value, comparisons, allData, fieldType) => {
133
+ if (!comparisons || comparisons.length === 0)
134
+ return [];
135
+ const errors = [];
136
+ for (const comparison of comparisons) {
137
+ // Skip if this field's value is empty
138
+ if (value === null || value === undefined || value === '')
139
+ continue;
140
+ // Get the comparison target (field value or literal)
141
+ const isField = isFieldComparison(comparison);
142
+ const targetValue = isField ? allData[comparison.field] : comparison.value;
143
+ const targetLabel = isField ? comparison.field : String(comparison.value);
144
+ // Skip if comparing to field and that field is empty
145
+ if (isField && (targetValue === null || targetValue === undefined || targetValue === ''))
146
+ continue;
147
+ let isValid = true;
148
+ const { operator, message } = comparison;
149
+ switch (fieldType) {
150
+ case 'date': {
151
+ const thisDate = new Date(String(value));
152
+ const otherDate = new Date(String(targetValue));
153
+ if (isNaN(thisDate.getTime()) || isNaN(otherDate.getTime()))
154
+ continue;
155
+ isValid = compareValues(thisDate.getTime(), otherDate.getTime(), operator);
156
+ break;
157
+ }
158
+ case 'number': {
159
+ const thisNum = typeof value === 'number' ? value : parseFloat(String(value));
160
+ const otherNum = typeof targetValue === 'number' ? targetValue : parseFloat(String(targetValue));
161
+ if (isNaN(thisNum) || isNaN(otherNum))
162
+ continue;
163
+ isValid = compareValues(thisNum, otherNum, operator);
164
+ break;
165
+ }
166
+ case 'boolean': {
167
+ const thisBool = typeof value === 'boolean' ? value : value === 'true';
168
+ const otherBool = typeof targetValue === 'boolean' ? targetValue : targetValue === 'true';
169
+ isValid = operator === '==' ? thisBool === otherBool :
170
+ operator === '!=' ? thisBool !== otherBool : true;
171
+ break;
172
+ }
173
+ default: {
174
+ isValid = compareValues(String(value), String(targetValue), operator);
175
+ break;
176
+ }
177
+ }
178
+ if (!isValid) {
179
+ errors.push({
180
+ field: fieldKey,
181
+ message: message || `Must be ${getOperatorText(operator)} ${targetLabel}`,
182
+ rule: `comparison:${operator}:${targetLabel}`,
183
+ });
184
+ }
185
+ }
186
+ return errors;
187
+ };
188
+ // ============================================================================
189
+ // Full Data Validation
190
+ // ============================================================================
191
+ /**
192
+ * Validate all fields in a data object against their definitions.
193
+ * Runs both single-field and comparison validations.
194
+ *
195
+ * @param data - The data object to validate
196
+ * @param definitions - Field definitions with validation rules
197
+ * @returns Array of all validation errors
198
+ */
199
+ export const validateAllFields = (data, definitions) => {
200
+ const errors = [];
201
+ const definitionMap = new Map(definitions.map(d => [d.key, d]));
202
+ for (const [key, value] of Object.entries(data)) {
203
+ const def = definitionMap.get(key);
204
+ if (!def)
205
+ continue;
206
+ // Single-field validation
207
+ const error = validateFieldValue(value, def.validation, def.fieldType);
208
+ if (error) {
209
+ errors.push({ ...error, field: key });
210
+ }
211
+ // Comparison validation
212
+ if (def.validation?.comparisons) {
213
+ const comparisonErrors = validateFieldComparisons(key, value, def.validation.comparisons, data, def.fieldType);
214
+ errors.push(...comparisonErrors);
215
+ }
216
+ }
217
+ return errors;
218
+ };
219
+ //# sourceMappingURL=field-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-validation.js","sourceRoot":"","sources":["../../../../src/shared-lib/validation/field-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './validation.types';
2
+ export * from './validators';
3
+ export * from './field-validation';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/validation/index.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAC;AAGnC,cAAc,cAAc,CAAC;AAG7B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // Types
2
+ export * from './validation.types.js';
3
+ // Standalone validators
4
+ export * from './validators.js';
5
+ // Field validation functions (also re-exports types and validators)
6
+ export * from './field-validation.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/validation/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,oBAAoB,CAAC;AAEnC,wBAAwB;AACxB,cAAc,cAAc,CAAC;AAE7B,oEAAoE;AACpE,cAAc,oBAAoB,CAAC"}