@explorins/pers-shared 2.1.190 → 2.1.192

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 (79) hide show
  1. package/dist/cjs/shared-lib/dto/business/businessTypeCreate.request.dto.d.ts +1 -1
  2. package/dist/cjs/shared-lib/dto/business/businessTypeCreate.request.dto.d.ts.map +1 -1
  3. package/dist/cjs/shared-lib/dto/business/businessTypeCreate.request.dto.js +2 -2
  4. package/dist/cjs/shared-lib/dto/business/businessTypeCreate.request.dto.js.map +1 -1
  5. package/dist/cjs/shared-lib/dto/redemption/redemptionRedeem.request.dto.d.ts.map +1 -1
  6. package/dist/cjs/shared-lib/dto/redemption/redemptionRedeem.request.dto.js +11 -1
  7. package/dist/cjs/shared-lib/dto/redemption/redemptionRedeem.request.dto.js.map +1 -1
  8. package/dist/cjs/shared-lib/enum/signing-account-provider.enum.d.ts +1 -0
  9. package/dist/cjs/shared-lib/enum/signing-account-provider.enum.d.ts.map +1 -1
  10. package/dist/cjs/shared-lib/enum/signing-account-provider.enum.js +1 -0
  11. package/dist/cjs/shared-lib/enum/signing-account-provider.enum.js.map +1 -1
  12. package/dist/cjs/shared-lib/interfaces/eligibility.interface.d.ts +38 -0
  13. package/dist/cjs/shared-lib/interfaces/eligibility.interface.d.ts.map +1 -0
  14. package/dist/cjs/shared-lib/interfaces/eligibility.interface.js +10 -0
  15. package/dist/cjs/shared-lib/interfaces/eligibility.interface.js.map +1 -0
  16. package/dist/cjs/shared-lib/interfaces/eligible-business-summary.interface.d.ts +3 -0
  17. package/dist/cjs/shared-lib/interfaces/eligible-business-summary.interface.d.ts.map +1 -1
  18. package/dist/cjs/shared-lib/interfaces/index.d.ts +1 -0
  19. package/dist/cjs/shared-lib/interfaces/index.d.ts.map +1 -1
  20. package/dist/cjs/shared-lib/interfaces/index.js +1 -0
  21. package/dist/cjs/shared-lib/interfaces/index.js.map +1 -1
  22. package/dist/cjs/shared-lib/types/data-source.type.d.ts +56 -10
  23. package/dist/cjs/shared-lib/types/data-source.type.d.ts.map +1 -1
  24. package/dist/cjs/shared-lib/types/data-source.type.js +123 -18
  25. package/dist/cjs/shared-lib/types/data-source.type.js.map +1 -1
  26. package/dist/cjs/shared-lib/validation/index.d.ts +2 -0
  27. package/dist/cjs/shared-lib/validation/index.d.ts.map +1 -1
  28. package/dist/cjs/shared-lib/validation/index.js +4 -0
  29. package/dist/cjs/shared-lib/validation/index.js.map +1 -1
  30. package/dist/cjs/shared-lib/validation/redemption-eligibility.d.ts +107 -0
  31. package/dist/cjs/shared-lib/validation/redemption-eligibility.d.ts.map +1 -0
  32. package/dist/cjs/shared-lib/validation/redemption-eligibility.js +74 -0
  33. package/dist/cjs/shared-lib/validation/redemption-eligibility.js.map +1 -0
  34. package/dist/cjs/shared-lib/validation/status-hierarchy.d.ts +33 -0
  35. package/dist/cjs/shared-lib/validation/status-hierarchy.d.ts.map +1 -0
  36. package/dist/cjs/shared-lib/validation/status-hierarchy.js +73 -0
  37. package/dist/cjs/shared-lib/validation/status-hierarchy.js.map +1 -0
  38. package/dist/cjs/shared-patterns/functions/token-metadata.functions.js +2 -2
  39. package/dist/cjs/shared-patterns/functions/token-metadata.functions.js.map +1 -1
  40. package/dist/esm/shared-lib/dto/business/businessTypeCreate.request.dto.d.ts +1 -1
  41. package/dist/esm/shared-lib/dto/business/businessTypeCreate.request.dto.d.ts.map +1 -1
  42. package/dist/esm/shared-lib/dto/business/businessTypeCreate.request.dto.js +2 -2
  43. package/dist/esm/shared-lib/dto/business/businessTypeCreate.request.dto.js.map +1 -1
  44. package/dist/esm/shared-lib/dto/redemption/redemptionRedeem.request.dto.d.ts.map +1 -1
  45. package/dist/esm/shared-lib/dto/redemption/redemptionRedeem.request.dto.js +11 -1
  46. package/dist/esm/shared-lib/dto/redemption/redemptionRedeem.request.dto.js.map +1 -1
  47. package/dist/esm/shared-lib/enum/signing-account-provider.enum.d.ts +1 -0
  48. package/dist/esm/shared-lib/enum/signing-account-provider.enum.d.ts.map +1 -1
  49. package/dist/esm/shared-lib/enum/signing-account-provider.enum.js +1 -0
  50. package/dist/esm/shared-lib/enum/signing-account-provider.enum.js.map +1 -1
  51. package/dist/esm/shared-lib/interfaces/eligibility.interface.d.ts +38 -0
  52. package/dist/esm/shared-lib/interfaces/eligibility.interface.d.ts.map +1 -0
  53. package/dist/esm/shared-lib/interfaces/eligibility.interface.js +9 -0
  54. package/dist/esm/shared-lib/interfaces/eligibility.interface.js.map +1 -0
  55. package/dist/esm/shared-lib/interfaces/eligible-business-summary.interface.d.ts +3 -0
  56. package/dist/esm/shared-lib/interfaces/eligible-business-summary.interface.d.ts.map +1 -1
  57. package/dist/esm/shared-lib/interfaces/index.d.ts +1 -0
  58. package/dist/esm/shared-lib/interfaces/index.d.ts.map +1 -1
  59. package/dist/esm/shared-lib/interfaces/index.js +1 -0
  60. package/dist/esm/shared-lib/interfaces/index.js.map +1 -1
  61. package/dist/esm/shared-lib/types/data-source.type.d.ts +56 -10
  62. package/dist/esm/shared-lib/types/data-source.type.d.ts.map +1 -1
  63. package/dist/esm/shared-lib/types/data-source.type.js +122 -18
  64. package/dist/esm/shared-lib/types/data-source.type.js.map +1 -1
  65. package/dist/esm/shared-lib/validation/index.d.ts +2 -0
  66. package/dist/esm/shared-lib/validation/index.d.ts.map +1 -1
  67. package/dist/esm/shared-lib/validation/index.js +4 -0
  68. package/dist/esm/shared-lib/validation/index.js.map +1 -1
  69. package/dist/esm/shared-lib/validation/redemption-eligibility.d.ts +107 -0
  70. package/dist/esm/shared-lib/validation/redemption-eligibility.d.ts.map +1 -0
  71. package/dist/esm/shared-lib/validation/redemption-eligibility.js +70 -0
  72. package/dist/esm/shared-lib/validation/redemption-eligibility.js.map +1 -0
  73. package/dist/esm/shared-lib/validation/status-hierarchy.d.ts +33 -0
  74. package/dist/esm/shared-lib/validation/status-hierarchy.d.ts.map +1 -0
  75. package/dist/esm/shared-lib/validation/status-hierarchy.js +70 -0
  76. package/dist/esm/shared-lib/validation/status-hierarchy.js.map +1 -0
  77. package/dist/esm/shared-patterns/functions/token-metadata.functions.js +2 -2
  78. package/dist/esm/shared-patterns/functions/token-metadata.functions.js.map +1 -1
  79. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  export declare class BusinessTypeCreateRequestDTO {
2
2
  name: string;
3
- description: string;
3
+ description?: string;
4
4
  code?: string;
5
5
  iconUrl?: string;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"businessTypeCreate.request.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/business/businessTypeCreate.request.dto.ts"],"names":[],"mappings":"AAIA,qBAAa,4BAA4B;IAKrC,IAAI,EAAG,MAAM,CAAA;IAKb,WAAW,EAAG,MAAM,CAAC;IAKrB,IAAI,CAAC,EAAE,MAAM,CAAC;IAKd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"businessTypeCreate.request.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/business/businessTypeCreate.request.dto.ts"],"names":[],"mappings":"AAIA,qBAAa,4BAA4B;IAKrC,IAAI,EAAG,MAAM,CAAA;IAKb,WAAW,CAAC,EAAE,MAAM,CAAC;IAKrB,IAAI,CAAC,EAAE,MAAM,CAAC;IAKd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -27,8 +27,8 @@ __decorate([
27
27
  __metadata("design:type", String)
28
28
  ], BusinessTypeCreateRequestDTO.prototype, "name", void 0);
29
29
  __decorate([
30
- (0, swagger_1.ApiProperty)({ description: 'Business type description' }),
31
- (0, class_validator_1.IsNotEmpty)(),
30
+ (0, swagger_1.ApiPropertyOptional)({ description: 'Business type description' }),
31
+ (0, decorators_1.OptionalStrip)(),
32
32
  (0, class_validator_1.IsString)(),
33
33
  __metadata("design:type", String)
34
34
  ], BusinessTypeCreateRequestDTO.prototype, "description", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"businessTypeCreate.request.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/business/businessTypeCreate.request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,qDAA8D;AAC9D,iDAAiD;AAEjD,MAAa,4BAA4B;IAKrC,IAAI,CAAS;IAKb,WAAW,CAAU;IAKrB,IAAI,CAAU;IAKd,OAAO,CAAU;CACpB;AArBD,oEAqBC;AAhBG;IAHC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAC,WAAW,EAAE,oBAAoB,EAAC,CAAC;IAChE,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;0DACE;AAKb;IAHC,IAAA,qBAAW,EAAC,EAAC,WAAW,EAAE,2BAA2B,EAAC,CAAC;IACvD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;iEACU;AAKrB;IAHC,IAAA,6BAAmB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAC,WAAW,EAAE,oBAAoB,EAAC,CAAC;IACxE,IAAA,0BAAa,GAAE;IACf,IAAA,0BAAQ,GAAE;;0DACG;AAKd;IAHC,IAAA,6BAAmB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAC,WAAW,EAAE,wBAAwB,EAAC,CAAC;IAC5E,IAAA,0BAAa,GAAE;IACf,IAAA,uBAAK,GAAE;;6DACS"}
1
+ {"version":3,"file":"businessTypeCreate.request.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/business/businessTypeCreate.request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,qDAA8D;AAC9D,iDAAiD;AAEjD,MAAa,4BAA4B;IAKrC,IAAI,CAAS;IAKb,WAAW,CAAU;IAKrB,IAAI,CAAU;IAKd,OAAO,CAAU;CACpB;AArBD,oEAqBC;AAhBG;IAHC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAC,WAAW,EAAE,oBAAoB,EAAC,CAAC;IAChE,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;0DACE;AAKb;IAHC,IAAA,6BAAmB,EAAC,EAAC,WAAW,EAAE,2BAA2B,EAAC,CAAC;IAC/D,IAAA,0BAAa,GAAE;IACf,IAAA,0BAAQ,GAAE;;iEACU;AAKrB;IAHC,IAAA,6BAAmB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAC,WAAW,EAAE,oBAAoB,EAAC,CAAC;IACxE,IAAA,0BAAa,GAAE;IACf,IAAA,0BAAQ,GAAE;;0DACG;AAKd;IAHC,IAAA,6BAAmB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAC,WAAW,EAAE,wBAAwB,EAAC,CAAC;IAC5E,IAAA,0BAAa,GAAE;IACf,IAAA,uBAAK,GAAE;;6DACS"}
@@ -1 +1 @@
1
- {"version":3,"file":"redemptionRedeem.request.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,qBAAa,0BAA0B;IACnC;;;;;;OAMG;IAUH,YAAY,EAAG,MAAM,CAAC;IAStB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAsB3B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC5B"}
1
+ {"version":3,"file":"redemptionRedeem.request.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,qBAAa,0BAA0B;IACnC;;;;;;OAMG;IAUH,YAAY,EAAG,MAAM,CAAC;IAmBtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAsB3B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC5B"}
@@ -40,7 +40,17 @@ __decorate([
40
40
  ], RedemptionRedeemRequestDTO.prototype, "redemptionId", void 0);
41
41
  __decorate([
42
42
  (0, swagger_1.ApiProperty)({
43
- description: 'The business id associated with the redemption, if applicable',
43
+ description: `Business ID associated with this redemption transaction (optional override).
44
+
45
+ **Token Recipient Priority:**
46
+ 1. \`redemption.ownerBusinessId\` - Business that created/owns the redemption (default)
47
+ 2. \`dto.businessId\` - This field (override for marketplace/facilitator scenarios)
48
+ 3. \`TENANT\` - Platform fallback for platform-wide redemptions
49
+
50
+ **Use Cases:**
51
+ - Omit for standard redemptions (tokens go to redemption owner)
52
+ - Provide for marketplace scenarios where a facilitator business processes redemptions for another business
53
+ - Leave null for platform-managed redemptions without a specific business owner`,
44
54
  type: String,
45
55
  nullable: true
46
56
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"redemptionRedeem.request.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,qDAA+D;AAC/D,iDAAkE;AAGlE,MAAa,0BAA0B;IACnC;;;;;;OAMG;IACH;;SAEK;IAOL,YAAY,CAAU;IAStB,UAAU,CAAiB;IAsB3B,OAAO,CAAkB;CAC5B;AAjDD,gEAiDC;AAhCG;IANC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,MAAM;KACf,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,GAAE;;gEACa;AAStB;IAPC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,+DAA+D;QAC5E,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACjB,CAAC;IACD,IAAA,4BAAe,GAAE;IACjB,IAAA,wBAAM,GAAE;;8DACkB;AAsB3B;IApBC,IAAA,6BAAmB,EAAC;QACjB,WAAW,EAAE;;;;;;;;;;;;;mGAa8E;QAC3F,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE;KACpH,CAAC;IACD,IAAA,0BAAa,GAAE;IACf,IAAA,0BAAQ,GAAE;;2DACc"}
1
+ {"version":3,"file":"redemptionRedeem.request.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,qDAA+D;AAC/D,iDAAkE;AAGlE,MAAa,0BAA0B;IACnC;;;;;;OAMG;IACH;;SAEK;IAOL,YAAY,CAAU;IAmBtB,UAAU,CAAiB;IAsB3B,OAAO,CAAkB;CAC5B;AA3DD,gEA2DC;AA1CG;IANC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,MAAM;KACf,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,GAAE;;gEACa;AAmBtB;IAjBC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE;;;;;;;;;;gFAU2D;QACxE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACjB,CAAC;IACD,IAAA,4BAAe,GAAE;IACjB,IAAA,wBAAM,GAAE;;8DACkB;AAsB3B;IApBC,IAAA,6BAAmB,EAAC;QACjB,WAAW,EAAE;;;;;;;;;;;;;mGAa8E;QAC3F,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE;KACpH,CAAC;IACD,IAAA,0BAAa,GAAE;IACf,IAAA,0BAAQ,GAAE;;2DACc"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  export declare enum SigningAccountProvider {
8
8
  DFNS = "DFNS",
9
+ TURNKEY = "TURNKEY",
9
10
  PERS_INTERNAL = "PERS_INTERNAL"
10
11
  }
11
12
  //# sourceMappingURL=signing-account-provider.enum.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signing-account-provider.enum.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/enum/signing-account-provider.enum.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,oBAAY,sBAAsB;IAIhC,IAAI,SAAsB;IAE1B,aAAa,kBAAuB;CACrC"}
1
+ {"version":3,"file":"signing-account-provider.enum.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/enum/signing-account-provider.enum.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,oBAAY,sBAAsB;IAIhC,IAAI,SAAsB;IAC1B,OAAO,YAAsB;IAE7B,aAAa,kBAAuB;CACrC"}
@@ -13,6 +13,7 @@ var SigningAccountProvider;
13
13
  WALLETCONNECT = 'walletconnect',
14
14
  COINBASE_WALLET = 'coinbase_wallet', */
15
15
  SigningAccountProvider["DFNS"] = "DFNS";
16
+ SigningAccountProvider["TURNKEY"] = "TURNKEY";
16
17
  // CUSTODIAL = 'custodial'
17
18
  SigningAccountProvider["PERS_INTERNAL"] = "PERS_INTERNAL"; // Internal PERS managed signing accounts
18
19
  })(SigningAccountProvider || (exports.SigningAccountProvider = SigningAccountProvider = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"signing-account-provider.enum.js","sourceRoot":"","sources":["../../../../src/shared-lib/enum/signing-account-provider.enum.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC;;6CAEyC;IACzC,uCAA0B,CAAA;IAC1B,kCAAkC;IAClC,yDAAoC,CAAA,CAAC,yCAAyC;AAChF,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC"}
1
+ {"version":3,"file":"signing-account-provider.enum.js","sourceRoot":"","sources":["../../../../src/shared-lib/enum/signing-account-provider.enum.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC;;6CAEyC;IACzC,uCAA0B,CAAA;IAC1B,6CAA6B,CAAA;IAC7B,kCAAkC;IAClC,yDAAoC,CAAA,CAAC,yCAAyC;AAChF,CAAC,EARW,sBAAsB,sCAAtB,sBAAsB,QAQjC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Generic, reusable eligibility primitives.
3
+ *
4
+ * A domain-agnostic way to express "can this actor perform this action?" as an
5
+ * aggregate verdict (`isEligible`) plus a set of self-describing, per-gate checks.
6
+ * Specialize `Eligibility<TChecks>` per domain by supplying a typed `checks` shape.
7
+ */
8
+ /**
9
+ * Result of a single eligibility gate.
10
+ *
11
+ * When `passed` is true, `reason` and `detail` are omitted/null.
12
+ *
13
+ * @typeParam TCode - Stable machine-readable failure code (defaults to `string`).
14
+ * @typeParam TDetail - Structured, check-specific detail on failure (defaults to `unknown`).
15
+ */
16
+ export interface EligibilityCheck<TCode extends string = string, TDetail = unknown> {
17
+ /** True if this gate is satisfied. */
18
+ passed: boolean;
19
+ /** Why the gate failed. Null/omitted when passed. */
20
+ reason?: {
21
+ code: TCode;
22
+ message: string;
23
+ } | null;
24
+ /** Structured, check-specific detail. Only present when failed (and applicable). */
25
+ detail?: TDetail;
26
+ }
27
+ /**
28
+ * Aggregate eligibility verdict: an overall flag plus a map of named gate results.
29
+ *
30
+ * @typeParam TChecks - Record of named gates to their {@link EligibilityCheck} results.
31
+ */
32
+ export interface Eligibility<TChecks extends Record<string, EligibilityCheck> = Record<string, EligibilityCheck>> {
33
+ /** AND of every check in `checks`. True only when every gate passes. */
34
+ isEligible: boolean;
35
+ /** Per-gate results. Each gate is self-describing on failure. */
36
+ checks: TChecks;
37
+ }
38
+ //# sourceMappingURL=eligibility.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eligibility.interface.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/eligibility.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,OAAO;IAC9E,sCAAsC;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,qDAAqD;IACrD,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjD,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW,CACxB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAEnF,wEAAwE;IACxE,UAAU,EAAE,OAAO,CAAC;IACpB,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAC;CACnB"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * Generic, reusable eligibility primitives.
4
+ *
5
+ * A domain-agnostic way to express "can this actor perform this action?" as an
6
+ * aggregate verdict (`isEligible`) plus a set of self-describing, per-gate checks.
7
+ * Specialize `Eligibility<TChecks>` per domain by supplying a typed `checks` shape.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=eligibility.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eligibility.interface.js","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/eligibility.interface.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
@@ -1,3 +1,4 @@
1
+ import { BusinessTypeDTO } from '../dto/business/business-type.dto';
1
2
  /**
2
3
  * Minimal business info for eligible business selectors.
3
4
  *
@@ -13,5 +14,7 @@ export interface EligibleBusinessSummary {
13
14
  displayName: string;
14
15
  /** Optional logo/image URL */
15
16
  imageUrl?: string | null;
17
+ /** Business type (for filtering/grouping/display) */
18
+ businessType?: BusinessTypeDTO | null;
16
19
  }
17
20
  //# sourceMappingURL=eligible-business-summary.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eligible-business-summary.interface.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/eligible-business-summary.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACpC,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B"}
1
+ {"version":3,"file":"eligible-business-summary.interface.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/eligible-business-summary.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACpC,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACzC"}
@@ -25,4 +25,5 @@ export * from './ws-relay.types';
25
25
  export * from './external-token-issuer.interface';
26
26
  export * from './email-config.interface';
27
27
  export * from './eligible-business-summary.interface';
28
+ export * from './eligibility.interface';
28
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/index.ts"],"names":[],"mappings":"AACA,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yBAAyB,CAAC;AAExC,cAAc,4CAA4C,CAAC;AAE3D,cAAc,YAAY,CAAC;AAE3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,kBAAkB,CAAC;AAEjC,cAAc,mCAAmC,CAAC;AAElD,cAAc,0BAA0B,CAAC;AAEzC,cAAc,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/index.ts"],"names":[],"mappings":"AACA,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yBAAyB,CAAC;AAExC,cAAc,4CAA4C,CAAC;AAE3D,cAAc,YAAY,CAAC;AAE3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,kBAAkB,CAAC;AAEjC,cAAc,mCAAmC,CAAC;AAElD,cAAc,0BAA0B,CAAC;AAEzC,cAAc,uCAAuC,CAAC;AAEtD,cAAc,yBAAyB,CAAC"}
@@ -42,4 +42,5 @@ __exportStar(require("./ws-relay.types"), exports);
42
42
  __exportStar(require("./external-token-issuer.interface"), exports);
43
43
  __exportStar(require("./email-config.interface"), exports);
44
44
  __exportStar(require("./eligible-business-summary.interface"), exports);
45
+ __exportStar(require("./eligibility.interface"), exports);
45
46
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAkD;AAClD,mEAAiD;AACjD,uEAAqD;AACrD,iEAA+C;AAC/C,iEAA+C;AAC/C,0DAAwC;AACxC,+DAA6C;AAC7C,2EAAyD;AACzD,iEAA+C;AAC/C,qDAAmC;AACnC,gEAA8C;AAC9C,kEAAgD;AAChD,sEAAoD;AACpD,8DAA4C;AAC5C,kEAAgD;AAChD,4EAA0D;AAC1D,mEAAiD;AAEjD,0DAAwC;AAExC,6EAA2D;AAE3D,6CAA2B;AAE3B,+DAA6C;AAC7C,qEAAmD;AACnD,8DAA4C;AAC5C,sEAAoD;AAEpD,mDAAiC;AAEjC,oEAAkD;AAElD,2DAAyC;AAEzC,wEAAsD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAkD;AAClD,mEAAiD;AACjD,uEAAqD;AACrD,iEAA+C;AAC/C,iEAA+C;AAC/C,0DAAwC;AACxC,+DAA6C;AAC7C,2EAAyD;AACzD,iEAA+C;AAC/C,qDAAmC;AACnC,gEAA8C;AAC9C,kEAAgD;AAChD,sEAAoD;AACpD,8DAA4C;AAC5C,kEAAgD;AAChD,4EAA0D;AAC1D,mEAAiD;AAEjD,0DAAwC;AAExC,6EAA2D;AAE3D,6CAA2B;AAE3B,+DAA6C;AAC7C,qEAAmD;AACnD,8DAA4C;AAC5C,sEAAoD;AAEpD,mDAAiC;AAEjC,oEAAkD;AAElD,2DAAyC;AAEzC,wEAAsD;AAEtD,0DAAwC"}
@@ -19,14 +19,15 @@
19
19
  *
20
20
  * ## Example Scenarios
21
21
  *
22
- * | Scenario | channel | medium | campaign | source |
23
- * |-----------------------------|-----------|------------|--------------|--------------|
24
- * | User clicks email link | `web` | `email` | `summer_promo`| `mailchimp` |
25
- * | Mobile app registration | `mobile` | `app` | - | - |
26
- * | Partner API integration | `api` | `affiliate`| - | `partner_xyz`|
27
- * | QR code scan in hotel | `mobile` | `referral` | `lobby_qr` | `qr_code` |
28
- * | Admin creates user | `admin` | - | - | - |
29
- * | Webhook from Stripe | `webhook` | - | - | `stripe` |
22
+ * | Scenario | channel | platform.deviceType | platform.app/browser | Notes |
23
+ * |-----------------------------|-----------|---------------------|----------------------|-------|
24
+ * | Desktop browser | `web` | `desktop` | `browser: Chrome` | - |
25
+ * | Mobile browser (Safari) | `web` | `phone` | `browser: Safari` | NOT 'mobile' channel |
26
+ * | Native iOS app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
27
+ * | Native Android app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
28
+ * | Partner API integration | `api` | - | - | - |
29
+ * | Admin creates user | `admin` | - | - | - |
30
+ * | Webhook from Stripe | `webhook` | - | - | - |
30
31
  *
31
32
  * @example
32
33
  * // Simple usage - just channel
@@ -43,6 +44,10 @@
43
44
  */
44
45
  /**
45
46
  * Primary ingestion channels for data source tracking.
47
+ *
48
+ * IMPORTANT:
49
+ * - 'web' = ANY browser (desktop OR mobile) - use platform.deviceType to distinguish
50
+ * - 'mobile' = Native apps ONLY (iOS/Android) - must include platform.app
46
51
  */
47
52
  export declare const DATA_SOURCE_CHANNELS: readonly ["web", "mobile", "api", "admin", "system", "import", "webhook", "sync", "migration", "unknown"];
48
53
  export type DataSourceChannel = typeof DATA_SOURCE_CHANNELS[number];
@@ -51,11 +56,19 @@ export type DataSourceChannel = typeof DATA_SOURCE_CHANNELS[number];
51
56
  *
52
57
  * Provides both simple channel categorization and optional
53
58
  * detailed attribution fields for analytics.
59
+ *
60
+ * CHANNEL USAGE:
61
+ * - 'web': ANY browser (desktop/mobile) - check platform.deviceType and platform.browser
62
+ * - 'mobile': Native apps ONLY - check platform.app and platform.appVersion
63
+ * - Use platform field to get detailed device/environment information
54
64
  */
55
65
  export interface DataSource {
56
66
  /**
57
67
  * Primary ingestion channel.
58
68
  * Required field for basic source categorization.
69
+ *
70
+ * - 'web' = Browser (desktop or mobile) - use platform.deviceType to distinguish
71
+ * - 'mobile' = Native mobile app - requires platform.app to be set
59
72
  */
60
73
  channel: DataSourceChannel;
61
74
  /**
@@ -83,6 +96,19 @@ export interface DataSource {
83
96
  * SDK provides this - backend stores as-is.
84
97
  */
85
98
  platform?: Platform;
99
+ /**
100
+ * Source of platform data.
101
+ * Indicates whether platform info came from SDK headers or auto-detection.
102
+ *
103
+ * - 'sdk': Explicitly sent via x-platform header (authoritative, trusted)
104
+ * - 'auto': Parsed from User-Agent header (best-effort, may be inaccurate)
105
+ *
106
+ * Use this to:
107
+ * - Identify incomplete SDK integrations (platformSource='auto' or missing)
108
+ * - Filter for high-quality data (platformSource='sdk')
109
+ * - Track SDK adoption progress
110
+ */
111
+ platformSource?: 'sdk' | 'auto';
86
112
  }
87
113
  /**
88
114
  * Platform/device information for analytics.
@@ -135,17 +161,37 @@ export declare const KNOWN_SOURCE_DOMAINS: Record<string, string>;
135
161
  * detectSourceFromReferrer('https://partner.example.com') // 'example'
136
162
  */
137
163
  export declare function detectSourceFromReferrer(referrer?: string): string | undefined;
164
+ /**
165
+ * Parse User-Agent string for platform information (fallback when SDK doesn't provide).
166
+ *
167
+ * Extracts OS, browser, device type from standard User-Agent patterns.
168
+ * This is best-effort - SDK headers are authoritative.
169
+ *
170
+ * @param userAgent - User-Agent header value
171
+ * @returns Platform object with detected fields, or undefined if unparseable
172
+ *
173
+ * @example
174
+ * parseUserAgentForPlatform('Mozilla/5.0 (iPhone; CPU iPhone OS 17_4...')
175
+ * // { os: 'iOS', osVersion: '17.4', browser: 'Safari', deviceType: 'phone' }
176
+ */
177
+ export declare function parseUserAgentForPlatform(userAgent?: string): Platform | undefined;
138
178
  /**
139
179
  * Auto-detect channel from User-Agent string.
140
180
  *
181
+ * IMPORTANT DESIGN:
182
+ * - Mobile browsers (Safari on iPhone, Chrome on Android) → 'web' (NOT 'mobile')
183
+ * - Native apps MUST send explicit x-source-channel: mobile header
184
+ * - Use platform.deviceType to distinguish mobile web from desktop web
185
+ *
141
186
  * @param userAgent - User-Agent header value
142
187
  * @param path - Optional request path for webhook detection
143
188
  * @returns Detected channel
144
189
  *
145
190
  * @example
146
- * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...)') // 'mobile'
147
- * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web'
191
+ * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...) Safari') // 'web' (mobile browser)
192
+ * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web' (desktop browser)
148
193
  * detectChannelFromUserAgent('', '/webhook/stripe') // 'webhook'
194
+ * detectChannelFromUserAgent('MyApp/1.0') // 'unknown' (native app without header)
149
195
  */
150
196
  export declare function detectChannelFromUserAgent(userAgent?: string, path?: string): DataSourceChannel;
151
197
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"data-source.type.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,2GAWvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,OAAO,EAAE,iBAAiB,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,sEAAsE;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;CACjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAEjC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyDvD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8B9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAoB/F;AAMD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAuBrD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAEpC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG,sBAAsB,CAAC"}
1
+ {"version":3,"file":"data-source.type.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
@@ -20,14 +20,15 @@
20
20
  *
21
21
  * ## Example Scenarios
22
22
  *
23
- * | Scenario | channel | medium | campaign | source |
24
- * |-----------------------------|-----------|------------|--------------|--------------|
25
- * | User clicks email link | `web` | `email` | `summer_promo`| `mailchimp` |
26
- * | Mobile app registration | `mobile` | `app` | - | - |
27
- * | Partner API integration | `api` | `affiliate`| - | `partner_xyz`|
28
- * | QR code scan in hotel | `mobile` | `referral` | `lobby_qr` | `qr_code` |
29
- * | Admin creates user | `admin` | - | - | - |
30
- * | Webhook from Stripe | `webhook` | - | - | `stripe` |
23
+ * | Scenario | channel | platform.deviceType | platform.app/browser | Notes |
24
+ * |-----------------------------|-----------|---------------------|----------------------|-------|
25
+ * | Desktop browser | `web` | `desktop` | `browser: Chrome` | - |
26
+ * | Mobile browser (Safari) | `web` | `phone` | `browser: Safari` | NOT 'mobile' channel |
27
+ * | Native iOS app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
28
+ * | Native Android app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
29
+ * | Partner API integration | `api` | - | - | - |
30
+ * | Admin creates user | `admin` | - | - | - |
31
+ * | Webhook from Stripe | `webhook` | - | - | - |
31
32
  *
32
33
  * @example
33
34
  * // Simple usage - just channel
@@ -46,14 +47,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
46
47
  exports.KNOWN_SOURCE_DOMAINS = exports.DEFAULT_DATA_SOURCE = exports.DATA_SOURCE_CHANNELS = void 0;
47
48
  exports.isDataSourceChannel = isDataSourceChannel;
48
49
  exports.detectSourceFromReferrer = detectSourceFromReferrer;
50
+ exports.parseUserAgentForPlatform = parseUserAgentForPlatform;
49
51
  exports.detectChannelFromUserAgent = detectChannelFromUserAgent;
50
52
  exports.parseUtmParams = parseUtmParams;
51
53
  /**
52
54
  * Primary ingestion channels for data source tracking.
55
+ *
56
+ * IMPORTANT:
57
+ * - 'web' = ANY browser (desktop OR mobile) - use platform.deviceType to distinguish
58
+ * - 'mobile' = Native apps ONLY (iOS/Android) - must include platform.app
53
59
  */
54
60
  exports.DATA_SOURCE_CHANNELS = [
55
- 'web', // Web application/browser
56
- 'mobile', // Mobile app (iOS/Android)
61
+ 'web', // Web browser (desktop or mobile) - check platform.deviceType
62
+ 'mobile', // Native mobile app ONLY (iOS/Android) - requires platform.app
57
63
  'api', // Direct API integration
58
64
  'admin', // Admin panel/back-office
59
65
  'system', // System-generated (automated)
@@ -181,17 +187,114 @@ function detectSourceFromReferrer(referrer) {
181
187
  return undefined;
182
188
  }
183
189
  }
190
+ /**
191
+ * Parse User-Agent string for platform information (fallback when SDK doesn't provide).
192
+ *
193
+ * Extracts OS, browser, device type from standard User-Agent patterns.
194
+ * This is best-effort - SDK headers are authoritative.
195
+ *
196
+ * @param userAgent - User-Agent header value
197
+ * @returns Platform object with detected fields, or undefined if unparseable
198
+ *
199
+ * @example
200
+ * parseUserAgentForPlatform('Mozilla/5.0 (iPhone; CPU iPhone OS 17_4...')
201
+ * // { os: 'iOS', osVersion: '17.4', browser: 'Safari', deviceType: 'phone' }
202
+ */
203
+ function parseUserAgentForPlatform(userAgent) {
204
+ if (!userAgent)
205
+ return undefined;
206
+ const ua = userAgent;
207
+ const platform = {};
208
+ // Detect OS and device type
209
+ if (/iPhone|iPod/i.test(ua)) {
210
+ platform.os = 'iOS';
211
+ const match = ua.match(/OS (\d+)[_\.](\d+)/);
212
+ if (match)
213
+ platform.osVersion = `${match[1]}.${match[2]}`;
214
+ platform.deviceType = 'phone';
215
+ }
216
+ else if (/iPad/i.test(ua)) {
217
+ platform.os = 'iOS';
218
+ const match = ua.match(/OS (\d+)[_\.](\d+)/);
219
+ if (match)
220
+ platform.osVersion = `${match[1]}.${match[2]}`;
221
+ platform.deviceType = 'tablet';
222
+ }
223
+ else if (/Android/i.test(ua)) {
224
+ platform.os = 'Android';
225
+ const match = ua.match(/Android ([\d\.]+)/);
226
+ if (match)
227
+ platform.osVersion = match[1];
228
+ platform.deviceType = /Mobile/i.test(ua) ? 'phone' : 'tablet';
229
+ }
230
+ else if (/Windows NT/i.test(ua)) {
231
+ platform.os = 'Windows';
232
+ const match = ua.match(/Windows NT ([\d\.]+)/);
233
+ if (match)
234
+ platform.osVersion = match[1];
235
+ platform.deviceType = 'desktop';
236
+ }
237
+ else if (/Macintosh|Mac OS X/i.test(ua)) {
238
+ platform.os = 'macOS';
239
+ const match = ua.match(/Mac OS X ([\d_]+)/);
240
+ if (match)
241
+ platform.osVersion = match[1].replace(/_/g, '.');
242
+ platform.deviceType = 'desktop';
243
+ }
244
+ else if (/Linux/i.test(ua) && !/Android/i.test(ua)) {
245
+ platform.os = 'Linux';
246
+ platform.deviceType = 'desktop';
247
+ }
248
+ // Detect browser (web channel)
249
+ if (/Edg\//i.test(ua)) {
250
+ platform.browser = 'Edge';
251
+ const match = ua.match(/Edg\/([\d\.]+)/);
252
+ if (match)
253
+ platform.browserVersion = match[1];
254
+ }
255
+ else if (/Chrome\//i.test(ua) && !/Edg/i.test(ua)) {
256
+ platform.browser = 'Chrome';
257
+ const match = ua.match(/Chrome\/([\d\.]+)/);
258
+ if (match)
259
+ platform.browserVersion = match[1];
260
+ }
261
+ else if (/Safari\//i.test(ua) && !/Chrome/i.test(ua)) {
262
+ platform.browser = 'Safari';
263
+ const match = ua.match(/Version\/([\d\.]+)/);
264
+ if (match)
265
+ platform.browserVersion = match[1];
266
+ }
267
+ else if (/Firefox\//i.test(ua)) {
268
+ platform.browser = 'Firefox';
269
+ const match = ua.match(/Firefox\/([\d\.]+)/);
270
+ if (match)
271
+ platform.browserVersion = match[1];
272
+ }
273
+ else if (/Opera|OPR\//i.test(ua)) {
274
+ platform.browser = 'Opera';
275
+ const match = ua.match(/(?:Opera|OPR)\/([\d\.]+)/);
276
+ if (match)
277
+ platform.browserVersion = match[1];
278
+ }
279
+ return Object.keys(platform).length > 0 ? platform : undefined;
280
+ }
184
281
  /**
185
282
  * Auto-detect channel from User-Agent string.
186
283
  *
284
+ * IMPORTANT DESIGN:
285
+ * - Mobile browsers (Safari on iPhone, Chrome on Android) → 'web' (NOT 'mobile')
286
+ * - Native apps MUST send explicit x-source-channel: mobile header
287
+ * - Use platform.deviceType to distinguish mobile web from desktop web
288
+ *
187
289
  * @param userAgent - User-Agent header value
188
290
  * @param path - Optional request path for webhook detection
189
291
  * @returns Detected channel
190
292
  *
191
293
  * @example
192
- * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...)') // 'mobile'
193
- * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web'
294
+ * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...) Safari') // 'web' (mobile browser)
295
+ * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web' (desktop browser)
194
296
  * detectChannelFromUserAgent('', '/webhook/stripe') // 'webhook'
297
+ * detectChannelFromUserAgent('MyApp/1.0') // 'unknown' (native app without header)
195
298
  */
196
299
  function detectChannelFromUserAgent(userAgent, path) {
197
300
  // Check for webhook paths
@@ -199,16 +302,18 @@ function detectChannelFromUserAgent(userAgent, path) {
199
302
  return 'webhook';
200
303
  }
201
304
  const ua = (userAgent || '').toLowerCase();
202
- // Check for mobile user-agents
203
- if (/mobile|android|iphone|ipad|ipod|blackberry|windows phone/i.test(ua)) {
204
- return 'mobile';
205
- }
206
305
  // Check for bot/crawler patterns (system)
207
306
  if (/bot|crawler|spider|scraper|curl|wget|python|node-fetch|axios/i.test(ua)) {
208
307
  return 'api';
209
308
  }
210
- // Default to web for browser-like user agents
211
- return 'web';
309
+ // Check for ANY browser pattern (desktop OR mobile)
310
+ // Mobile browsers are 'web' channel - use platform.deviceType to distinguish
311
+ if (ua && /mozilla|chrome|safari|firefox|edge|opera|msie|trident/i.test(ua)) {
312
+ return 'web';
313
+ }
314
+ // Unknown: Native apps MUST send x-source-channel: mobile header
315
+ // If we see 'unknown', it means SDK integration is incomplete
316
+ return 'unknown';
212
317
  }
213
318
  /**
214
319
  * Parse UTM parameters from a URL (deep link, referrer, etc.).
@@ -1 +1 @@
1
- {"version":3,"file":"data-source.type.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-source.type.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export * from './validation.types';
2
2
  export * from './validators';
3
3
  export * from './field-validation';
4
+ export * from './status-hierarchy';
5
+ export * from './redemption-eligibility';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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;AAGnC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,0BAA0B,CAAC"}
@@ -20,4 +20,8 @@ __exportStar(require("./validation.types"), exports);
20
20
  __exportStar(require("./validators"), exports);
21
21
  // Field validation functions (also re-exports types and validators)
22
22
  __exportStar(require("./field-validation"), exports);
23
+ // Status hierarchy resolution (pure)
24
+ __exportStar(require("./status-hierarchy"), exports);
25
+ // Redemption eligibility types + pure aggregator
26
+ __exportStar(require("./redemption-eligibility"), exports);
23
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/validation/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,QAAQ;AACR,qDAAmC;AAEnC,wBAAwB;AACxB,+CAA6B;AAE7B,oEAAoE;AACpE,qDAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/validation/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,QAAQ;AACR,qDAAmC;AAEnC,wBAAwB;AACxB,+CAA6B;AAE7B,oEAAoE;AACpE,qDAAmC;AAEnC,qCAAqC;AACrC,qDAAmC;AAEnC,iDAAiD;AACjD,2DAAyC"}