@blux.ai/web-sdk 2.2.29 → 2.2.31

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 (92) hide show
  1. package/dist/BluxClient.d.ts +9 -18
  2. package/dist/BluxClient.js +13 -5
  3. package/dist/BluxClient.js.map +1 -1
  4. package/dist/apis/APIs.d.ts +291 -455
  5. package/dist/apis/APIs.js +10 -17
  6. package/dist/apis/APIs.js.map +1 -1
  7. package/dist/apis/createCrmEvent.js.map +1 -1
  8. package/dist/apis/createEvent.js.map +1 -1
  9. package/dist/apis/getItemRecommendations.js.map +1 -1
  10. package/dist/apis/getNotifications.js.map +1 -1
  11. package/dist/apis/initialize.js.map +1 -1
  12. package/dist/apis/notificationsUpdate.js.map +1 -1
  13. package/dist/apis/signIn.js.map +1 -1
  14. package/dist/apis/signOut.js.map +1 -1
  15. package/dist/apis/updateProperties.js.map +1 -1
  16. package/dist/bridges/AndroidBridge.js.map +1 -1
  17. package/dist/bridges/Bridge.d.ts +0 -1
  18. package/dist/bridges/Bridge.js.map +1 -1
  19. package/dist/bridges/FlutterBridge.js.map +1 -1
  20. package/dist/bridges/IosBridge.js.map +1 -1
  21. package/dist/bridges/RNBridge.js.map +1 -1
  22. package/dist/constants/BLUX_ATTRIBUTES.js.map +1 -1
  23. package/dist/constants/COUNTRIES.js +1 -1
  24. package/dist/constants/COUNTRIES.js.map +1 -1
  25. package/dist/constants/PAGE_VISIT_ENABLED_APPLICATION_IDS.js +1 -3
  26. package/dist/constants/PAGE_VISIT_ENABLED_APPLICATION_IDS.js.map +1 -1
  27. package/dist/events/AddCartaddEvent.d.ts +1 -6
  28. package/dist/events/AddCartaddEvent.js +2 -2
  29. package/dist/events/AddCartaddEvent.js.map +1 -1
  30. package/dist/events/AddClickEvent.d.ts +1 -6
  31. package/dist/events/AddClickEvent.js +2 -2
  32. package/dist/events/AddClickEvent.js.map +1 -1
  33. package/dist/events/AddCustomEvent.d.ts +1 -6
  34. package/dist/events/AddCustomEvent.js.map +1 -1
  35. package/dist/events/AddInstantImpressionEvent.d.ts +1 -9
  36. package/dist/events/AddInstantImpressionEvent.js +2 -2
  37. package/dist/events/AddInstantImpressionEvent.js.map +1 -1
  38. package/dist/events/AddLikeEvent.d.ts +1 -6
  39. package/dist/events/AddLikeEvent.js +2 -2
  40. package/dist/events/AddLikeEvent.js.map +1 -1
  41. package/dist/events/AddOrderEvent.d.ts +1 -8
  42. package/dist/events/AddOrderEvent.js +2 -2
  43. package/dist/events/AddOrderEvent.js.map +1 -1
  44. package/dist/events/AddPageViewEvent.d.ts +1 -6
  45. package/dist/events/AddPageViewEvent.js +2 -2
  46. package/dist/events/AddPageViewEvent.js.map +1 -1
  47. package/dist/events/AddPageVisitEvent.d.ts +1 -5
  48. package/dist/events/AddPageVisitEvent.js +2 -2
  49. package/dist/events/AddPageVisitEvent.js.map +1 -1
  50. package/dist/events/AddPersistentImpressionEvent.d.ts +1 -9
  51. package/dist/events/AddPersistentImpressionEvent.js +2 -2
  52. package/dist/events/AddPersistentImpressionEvent.js.map +1 -1
  53. package/dist/events/AddProductDetailViewEvent.d.ts +1 -6
  54. package/dist/events/AddProductDetailViewEvent.js +2 -2
  55. package/dist/events/AddProductDetailViewEvent.js.map +1 -1
  56. package/dist/events/AddRateEvent.d.ts +1 -7
  57. package/dist/events/AddRateEvent.js +2 -2
  58. package/dist/events/AddRateEvent.js.map +1 -1
  59. package/dist/events/AddSearchEvent.d.ts +1 -6
  60. package/dist/events/AddSearchEvent.js +2 -2
  61. package/dist/events/AddSearchEvent.js.map +1 -1
  62. package/dist/events/AddSectionViewEvent.d.ts +1 -6
  63. package/dist/events/AddSectionViewEvent.js +2 -2
  64. package/dist/events/AddSectionViewEvent.js.map +1 -1
  65. package/dist/events/Event.d.ts +0 -1
  66. package/dist/events/Event.js +1 -24
  67. package/dist/events/Event.js.map +1 -1
  68. package/dist/events/VisitEvent.d.ts +1 -5
  69. package/dist/events/VisitEvent.js +2 -2
  70. package/dist/events/VisitEvent.js.map +1 -1
  71. package/dist/events/index.d.ts +2 -1
  72. package/dist/events/index.js +2 -0
  73. package/dist/events/types.d.ts +0 -1
  74. package/dist/package.js +1 -1
  75. package/dist/recs/ItemRec.d.ts +4 -24
  76. package/dist/recs/ItemRec.js.map +1 -1
  77. package/dist/recs/Rec.d.ts +0 -1
  78. package/dist/recs/Rec.js.map +1 -1
  79. package/dist/recs/types.d.ts +1 -1
  80. package/dist/utils/Base.d.ts +1 -2
  81. package/dist/utils/LocalStorage.js.map +1 -1
  82. package/dist/utils/Logger.d.ts +1 -0
  83. package/dist/utils/Logger.js.map +1 -1
  84. package/dist/utils/SessionStorage.js.map +1 -1
  85. package/dist/utils/getPath.js +4 -4
  86. package/dist/utils/getPath.js.map +1 -1
  87. package/dist/utils/observables.js.map +1 -1
  88. package/dist/utils/operators.js.map +1 -1
  89. package/dist/utils/zodSchemas.d.ts +10 -83
  90. package/dist/utils/zodSchemas.js +6 -10
  91. package/dist/utils/zodSchemas.js.map +1 -1
  92. package/package.json +6 -5
@@ -22,5 +22,5 @@ interface ICategoryRec extends BaseItemRec {
22
22
  category_id: string;
23
23
  }
24
24
  //#endregion
25
- export { ICategoryRec, IItemRec, IItemsRec, IUserRec, RecRequest };
25
+ export { BaseItemRec, ICategoryRec, IItemRec, IItemsRec, IUserRec, RecRequest };
26
26
  //# sourceMappingURL=types.d.ts.map
@@ -1,7 +1,6 @@
1
1
  import ObjectId from "bson-objectid";
2
-
3
2
  //#region src/utils/Base.d.ts
4
- type AllObjectIdsToString<T> = { [K in keyof T]: T[K] extends ObjectId ? string : T[K] extends ObjectId | undefined ? string | undefined : T[K] extends ObjectId | null ? string | null : T[K] extends ObjectId | null | undefined ? string | null | undefined : T[K] extends Date ? string : T[K] extends Date | null ? string | null : T[K] extends Date | undefined ? string | undefined : T[K] extends Record<string, any> | undefined ? AllObjectIdsToString<T[K]> : T[K] };
3
+ type AllObjectIdsToString<T> = { [K in keyof T]: T[K] extends ObjectId ? string : T[K] extends ObjectId | undefined ? string | undefined : T[K] extends ObjectId | null ? string | null : T[K] extends ObjectId | null | undefined ? string | null | undefined : T[K] extends Date ? string : T[K] extends Date | null ? string | null : T[K] extends Date | undefined ? string | undefined : T[K] extends Record<string, any> | undefined ? AllObjectIdsToString<T[K]> : T[K]; };
5
4
  type Serialize<T> = AllObjectIdsToString<Omit<T, "id">>;
6
5
  //#endregion
7
6
  export { Serialize };
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorage.js","names":[],"sources":["../../src/utils/LocalStorage.ts"],"sourcesContent":["const BLUX_DEVICE_ID = \"blux_deviceId\";\nconst BLUX_URL = \"blux_url\";\nconst BLUX_REF = \"blux_ref\";\nconst BLUX_INAPP_HIDE_TIMESTAMP = \"blux_inapp\";\n\nexport class LocalStorage {\n static getDeviceId(): string | null {\n const deviceId = localStorage.getItem(BLUX_DEVICE_ID);\n return deviceId === \"undefined\" || deviceId?.trim() === \"\"\n ? null\n : deviceId;\n }\n\n static setDeviceId(deviceId: string) {\n localStorage.setItem(BLUX_DEVICE_ID, deviceId);\n }\n\n static getUrl(): string | null {\n const url = localStorage.getItem(BLUX_URL);\n return url === \"undefined\" || url?.trim() === \"\" ? null : url;\n }\n\n static setUrl(url: string) {\n localStorage.setItem(BLUX_URL, url);\n }\n\n static getRef(): string | null {\n const ref = localStorage.getItem(BLUX_REF);\n return ref === \"undefined\" || ref?.trim() === \"\" ? null : ref;\n }\n\n static setRef(ref: string) {\n localStorage.setItem(BLUX_REF, ref);\n }\n\n static setInappHideTimestamp(key: string, timestamp: number) {\n localStorage.setItem(\n `${BLUX_INAPP_HIDE_TIMESTAMP}/${key}`,\n timestamp.toString(),\n );\n }\n\n static getInappHideTimestamp(key: string): number | null {\n const timestamp = localStorage.getItem(\n `${BLUX_INAPP_HIDE_TIMESTAMP}/${key}`,\n );\n return timestamp ? parseInt(timestamp) : null;\n }\n}\n"],"mappings":";AAAA,MAAM,iBAAiB;AACvB,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,4BAA4B;AAElC,IAAa,eAAb,MAA0B;CACxB,OAAO,cAA6B;EAClC,MAAM,WAAW,aAAa,QAAQ,eAAe;AACrD,SAAO,aAAa,eAAe,UAAU,MAAM,KAAK,KACpD,OACA;;CAGN,OAAO,YAAY,UAAkB;AACnC,eAAa,QAAQ,gBAAgB,SAAS;;CAGhD,OAAO,SAAwB;EAC7B,MAAM,MAAM,aAAa,QAAQ,SAAS;AAC1C,SAAO,QAAQ,eAAe,KAAK,MAAM,KAAK,KAAK,OAAO;;CAG5D,OAAO,OAAO,KAAa;AACzB,eAAa,QAAQ,UAAU,IAAI;;CAGrC,OAAO,SAAwB;EAC7B,MAAM,MAAM,aAAa,QAAQ,SAAS;AAC1C,SAAO,QAAQ,eAAe,KAAK,MAAM,KAAK,KAAK,OAAO;;CAG5D,OAAO,OAAO,KAAa;AACzB,eAAa,QAAQ,UAAU,IAAI;;CAGrC,OAAO,sBAAsB,KAAa,WAAmB;AAC3D,eAAa,QACX,GAAG,0BAA0B,GAAG,OAChC,UAAU,UAAU,CACrB;;CAGH,OAAO,sBAAsB,KAA4B;EACvD,MAAM,YAAY,aAAa,QAC7B,GAAG,0BAA0B,GAAG,MACjC;AACD,SAAO,YAAY,SAAS,UAAU,GAAG"}
1
+ {"version":3,"file":"LocalStorage.js","names":[],"sources":["../../src/utils/LocalStorage.ts"],"sourcesContent":["const BLUX_DEVICE_ID = \"blux_deviceId\";\nconst BLUX_URL = \"blux_url\";\nconst BLUX_REF = \"blux_ref\";\nconst BLUX_INAPP_HIDE_TIMESTAMP = \"blux_inapp\";\n\nexport class LocalStorage {\n static getDeviceId(): string | null {\n const deviceId = localStorage.getItem(BLUX_DEVICE_ID);\n return deviceId === \"undefined\" || deviceId?.trim() === \"\"\n ? null\n : deviceId;\n }\n\n static setDeviceId(deviceId: string) {\n localStorage.setItem(BLUX_DEVICE_ID, deviceId);\n }\n\n static getUrl(): string | null {\n const url = localStorage.getItem(BLUX_URL);\n return url === \"undefined\" || url?.trim() === \"\" ? null : url;\n }\n\n static setUrl(url: string) {\n localStorage.setItem(BLUX_URL, url);\n }\n\n static getRef(): string | null {\n const ref = localStorage.getItem(BLUX_REF);\n return ref === \"undefined\" || ref?.trim() === \"\" ? null : ref;\n }\n\n static setRef(ref: string) {\n localStorage.setItem(BLUX_REF, ref);\n }\n\n static setInappHideTimestamp(key: string, timestamp: number) {\n localStorage.setItem(\n `${BLUX_INAPP_HIDE_TIMESTAMP}/${key}`,\n timestamp.toString(),\n );\n }\n\n static getInappHideTimestamp(key: string): number | null {\n const timestamp = localStorage.getItem(\n `${BLUX_INAPP_HIDE_TIMESTAMP}/${key}`,\n );\n return timestamp ? parseInt(timestamp) : null;\n }\n}\n"],"mappings":";AAAA,MAAM,iBAAiB;AACvB,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,4BAA4B;AAElC,IAAa,eAAb,MAA0B;CACxB,OAAO,cAA6B;EAClC,MAAM,WAAW,aAAa,QAAQ,cAAc;EACpD,OAAO,aAAa,eAAe,UAAU,KAAK,MAAM,KACpD,OACA;CACN;CAEA,OAAO,YAAY,UAAkB;EACnC,aAAa,QAAQ,gBAAgB,QAAQ;CAC/C;CAEA,OAAO,SAAwB;EAC7B,MAAM,MAAM,aAAa,QAAQ,QAAQ;EACzC,OAAO,QAAQ,eAAe,KAAK,KAAK,MAAM,KAAK,OAAO;CAC5D;CAEA,OAAO,OAAO,KAAa;EACzB,aAAa,QAAQ,UAAU,GAAG;CACpC;CAEA,OAAO,SAAwB;EAC7B,MAAM,MAAM,aAAa,QAAQ,QAAQ;EACzC,OAAO,QAAQ,eAAe,KAAK,KAAK,MAAM,KAAK,OAAO;CAC5D;CAEA,OAAO,OAAO,KAAa;EACzB,aAAa,QAAQ,UAAU,GAAG;CACpC;CAEA,OAAO,sBAAsB,KAAa,WAAmB;EAC3D,aAAa,QACX,GAAG,0BAA0B,GAAG,OAChC,UAAU,SAAS,CACrB;CACF;CAEA,OAAO,sBAAsB,KAA4B;EACvD,MAAM,YAAY,aAAa,QAC7B,GAAG,0BAA0B,GAAG,KAClC;EACA,OAAO,YAAY,SAAS,SAAS,IAAI;CAC3C;AACF"}
@@ -1,3 +1,4 @@
1
+ import "@sentry/types";
1
2
  //#region src/utils/Logger.d.ts
2
3
  type LogLevel = "debug" | "log" | "warning" | "error" | "fatal";
3
4
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.js","names":[],"sources":["../../src/utils/Logger.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport type { ScopeContext } from \"@sentry/types\";\n\nconst consoleMethodByLevel = {\n debug: console.debug.bind(console),\n log: console.log.bind(console),\n warning: console.warn.bind(console),\n error: console.error.bind(console),\n fatal: console.error.bind(console),\n} as const;\n\nexport type LogLevel = \"debug\" | \"log\" | \"warning\" | \"error\" | \"fatal\";\n\nconst LOG_LEVEL_ORDERS = {\n debug: 0,\n log: 1,\n warning: 2,\n error: 3,\n fatal: 4,\n};\n\nexport type Context = Partial<Pick<ScopeContext, \"tags\" | \"extra\">>;\n\n \nexport class Logger {\n public static logLevel: LogLevel = \"error\";\n\n private static base(\n message: string | Error,\n level: LogLevel,\n context?: Context,\n ) {\n if (LOG_LEVEL_ORDERS[level] >= LOG_LEVEL_ORDERS[this.logLevel]) {\n const logForConsole: unknown[] = [\"[BluxClient]\", message];\n\n if (context?.extra) {\n logForConsole.push(context.extra);\n }\n if (context?.tags) {\n logForConsole.push(context.tags);\n }\n\n consoleMethodByLevel[level]?.(...logForConsole);\n }\n }\n public static debug(message: string | Error, context?: Context) {\n this.base(message, \"debug\", context);\n }\n public static log(message: string | Error, context?: Context) {\n this.base(message, \"log\", context);\n }\n public static warning(message: string | Error, context?: Context) {\n this.base(message, \"warning\", context);\n }\n public static error(message: string | Error, context?: Context) {\n this.base(message, \"error\", context);\n }\n public static fatal(message: string | Error, context?: Context) {\n this.base(message, \"fatal\", context);\n }\n\n public static setLevel(level: LogLevel) {\n this.logLevel = level;\n }\n}\n"],"mappings":";AAGA,MAAM,uBAAuB;CAC3B,OAAO,QAAQ,MAAM,KAAK,QAAQ;CAClC,KAAK,QAAQ,IAAI,KAAK,QAAQ;CAC9B,SAAS,QAAQ,KAAK,KAAK,QAAQ;CACnC,OAAO,QAAQ,MAAM,KAAK,QAAQ;CAClC,OAAO,QAAQ,MAAM,KAAK,QAAQ;CACnC;AAID,MAAM,mBAAmB;CACvB,OAAO;CACP,KAAK;CACL,SAAS;CACT,OAAO;CACP,OAAO;CACR;AAKD,IAAa,SAAb,MAAoB;CAClB,OAAc,WAAqB;CAEnC,OAAe,KACb,SACA,OACA,SACA;AACA,MAAI,iBAAiB,UAAU,iBAAiB,KAAK,WAAW;GAC9D,MAAM,gBAA2B,CAAC,gBAAgB,QAAQ;AAE1D,OAAI,SAAS,MACX,eAAc,KAAK,QAAQ,MAAM;AAEnC,OAAI,SAAS,KACX,eAAc,KAAK,QAAQ,KAAK;AAGlC,wBAAqB,SAAS,GAAG,cAAc;;;CAGnD,OAAc,MAAM,SAAyB,SAAmB;AAC9D,OAAK,KAAK,SAAS,SAAS,QAAQ;;CAEtC,OAAc,IAAI,SAAyB,SAAmB;AAC5D,OAAK,KAAK,SAAS,OAAO,QAAQ;;CAEpC,OAAc,QAAQ,SAAyB,SAAmB;AAChE,OAAK,KAAK,SAAS,WAAW,QAAQ;;CAExC,OAAc,MAAM,SAAyB,SAAmB;AAC9D,OAAK,KAAK,SAAS,SAAS,QAAQ;;CAEtC,OAAc,MAAM,SAAyB,SAAmB;AAC9D,OAAK,KAAK,SAAS,SAAS,QAAQ;;CAGtC,OAAc,SAAS,OAAiB;AACtC,OAAK,WAAW"}
1
+ {"version":3,"file":"Logger.js","names":[],"sources":["../../src/utils/Logger.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport type { ScopeContext } from \"@sentry/types\";\n\nconst consoleMethodByLevel = {\n debug: console.debug.bind(console),\n log: console.log.bind(console),\n warning: console.warn.bind(console),\n error: console.error.bind(console),\n fatal: console.error.bind(console),\n} as const;\n\nexport type LogLevel = \"debug\" | \"log\" | \"warning\" | \"error\" | \"fatal\";\n\nconst LOG_LEVEL_ORDERS = {\n debug: 0,\n log: 1,\n warning: 2,\n error: 3,\n fatal: 4,\n};\n\nexport type Context = Partial<Pick<ScopeContext, \"tags\" | \"extra\">>;\n\n \nexport class Logger {\n public static logLevel: LogLevel = \"error\";\n\n private static base(\n message: string | Error,\n level: LogLevel,\n context?: Context,\n ) {\n if (LOG_LEVEL_ORDERS[level] >= LOG_LEVEL_ORDERS[this.logLevel]) {\n const logForConsole: unknown[] = [\"[BluxClient]\", message];\n\n if (context?.extra) {\n logForConsole.push(context.extra);\n }\n if (context?.tags) {\n logForConsole.push(context.tags);\n }\n\n consoleMethodByLevel[level]?.(...logForConsole);\n }\n }\n public static debug(message: string | Error, context?: Context) {\n this.base(message, \"debug\", context);\n }\n public static log(message: string | Error, context?: Context) {\n this.base(message, \"log\", context);\n }\n public static warning(message: string | Error, context?: Context) {\n this.base(message, \"warning\", context);\n }\n public static error(message: string | Error, context?: Context) {\n this.base(message, \"error\", context);\n }\n public static fatal(message: string | Error, context?: Context) {\n this.base(message, \"fatal\", context);\n }\n\n public static setLevel(level: LogLevel) {\n this.logLevel = level;\n }\n}\n"],"mappings":";AAGA,MAAM,uBAAuB;CAC3B,OAAO,QAAQ,MAAM,KAAK,OAAO;CACjC,KAAK,QAAQ,IAAI,KAAK,OAAO;CAC7B,SAAS,QAAQ,KAAK,KAAK,OAAO;CAClC,OAAO,QAAQ,MAAM,KAAK,OAAO;CACjC,OAAO,QAAQ,MAAM,KAAK,OAAO;AACnC;AAIA,MAAM,mBAAmB;CACvB,OAAO;CACP,KAAK;CACL,SAAS;CACT,OAAO;CACP,OAAO;AACT;AAKA,IAAa,SAAb,MAAoB;CAClB,OAAc,WAAqB;CAEnC,OAAe,KACb,SACA,OACA,SACA;EACA,IAAI,iBAAiB,UAAU,iBAAiB,KAAK,WAAW;GAC9D,MAAM,gBAA2B,CAAC,gBAAgB,OAAO;GAEzD,IAAI,SAAS,OACX,cAAc,KAAK,QAAQ,KAAK;GAElC,IAAI,SAAS,MACX,cAAc,KAAK,QAAQ,IAAI;GAGjC,qBAAqB,MAAM,GAAG,GAAG,aAAa;EAChD;CACF;CACA,OAAc,MAAM,SAAyB,SAAmB;EAC9D,KAAK,KAAK,SAAS,SAAS,OAAO;CACrC;CACA,OAAc,IAAI,SAAyB,SAAmB;EAC5D,KAAK,KAAK,SAAS,OAAO,OAAO;CACnC;CACA,OAAc,QAAQ,SAAyB,SAAmB;EAChE,KAAK,KAAK,SAAS,WAAW,OAAO;CACvC;CACA,OAAc,MAAM,SAAyB,SAAmB;EAC9D,KAAK,KAAK,SAAS,SAAS,OAAO;CACrC;CACA,OAAc,MAAM,SAAyB,SAAmB;EAC9D,KAAK,KAAK,SAAS,SAAS,OAAO;CACrC;CAEA,OAAc,SAAS,OAAiB;EACtC,KAAK,WAAW;CAClB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionStorage.js","names":[],"sources":["../../src/utils/SessionStorage.ts"],"sourcesContent":["const BLUX_USER_ID = \"blux_userId\";\nconst BLUX_SESSION_ID = \"blux_sessionId\";\n\nexport class SessionStorage {\n static getBluxUserId(): string | null {\n const userId = sessionStorage.getItem(BLUX_USER_ID);\n return userId === \"undefined\" || userId?.trim() === \"\" ? null : userId;\n }\n\n static setBluxUserId(userId: string) {\n sessionStorage.setItem(BLUX_USER_ID, userId);\n }\n\n static getSessionId(): string | null {\n return sessionStorage.getItem(BLUX_SESSION_ID);\n }\n\n static setSessionId(sessionId: string) {\n sessionStorage.setItem(BLUX_SESSION_ID, sessionId);\n }\n}\n"],"mappings":";AAAA,MAAM,eAAe;AACrB,MAAM,kBAAkB;AAExB,IAAa,iBAAb,MAA4B;CAC1B,OAAO,gBAA+B;EACpC,MAAM,SAAS,eAAe,QAAQ,aAAa;AACnD,SAAO,WAAW,eAAe,QAAQ,MAAM,KAAK,KAAK,OAAO;;CAGlE,OAAO,cAAc,QAAgB;AACnC,iBAAe,QAAQ,cAAc,OAAO;;CAG9C,OAAO,eAA8B;AACnC,SAAO,eAAe,QAAQ,gBAAgB;;CAGhD,OAAO,aAAa,WAAmB;AACrC,iBAAe,QAAQ,iBAAiB,UAAU"}
1
+ {"version":3,"file":"SessionStorage.js","names":[],"sources":["../../src/utils/SessionStorage.ts"],"sourcesContent":["const BLUX_USER_ID = \"blux_userId\";\nconst BLUX_SESSION_ID = \"blux_sessionId\";\n\nexport class SessionStorage {\n static getBluxUserId(): string | null {\n const userId = sessionStorage.getItem(BLUX_USER_ID);\n return userId === \"undefined\" || userId?.trim() === \"\" ? null : userId;\n }\n\n static setBluxUserId(userId: string) {\n sessionStorage.setItem(BLUX_USER_ID, userId);\n }\n\n static getSessionId(): string | null {\n return sessionStorage.getItem(BLUX_SESSION_ID);\n }\n\n static setSessionId(sessionId: string) {\n sessionStorage.setItem(BLUX_SESSION_ID, sessionId);\n }\n}\n"],"mappings":";AAAA,MAAM,eAAe;AACrB,MAAM,kBAAkB;AAExB,IAAa,iBAAb,MAA4B;CAC1B,OAAO,gBAA+B;EACpC,MAAM,SAAS,eAAe,QAAQ,YAAY;EAClD,OAAO,WAAW,eAAe,QAAQ,KAAK,MAAM,KAAK,OAAO;CAClE;CAEA,OAAO,cAAc,QAAgB;EACnC,eAAe,QAAQ,cAAc,MAAM;CAC7C;CAEA,OAAO,eAA8B;EACnC,OAAO,eAAe,QAAQ,eAAe;CAC/C;CAEA,OAAO,aAAa,WAAmB;EACrC,eAAe,QAAQ,iBAAiB,SAAS;CACnD;AACF"}
@@ -1,10 +1,10 @@
1
1
  //#region src/utils/getPath.ts
2
2
  function getPath(path, pathParams) {
3
- return Object.keys(pathParams).reduce((acc, key) => {
3
+ return path.replace(/\{(\w+)\}/g, (_match, key) => {
4
4
  const value = pathParams[key];
5
- if (value === void 0) return acc;
6
- return acc.replace(new RegExp(`\\{${key}\\}`, "g"), value);
7
- }, path);
5
+ if (value == null || value === "") throw new Error(`Missing required path parameter: ${key}`);
6
+ return encodeURIComponent(value);
7
+ });
8
8
  }
9
9
 
10
10
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"getPath.js","names":[],"sources":["../../src/utils/getPath.ts"],"sourcesContent":["export function getPath(path: string, pathParams: Record<string, string>) {\n return Object.keys(pathParams).reduce((acc, key) => {\n const value = pathParams[key];\n if (value === undefined) return acc;\n\n return acc.replace(new RegExp(`\\\\{${key}\\\\}`, \"g\"), value);\n }, path);\n}\n"],"mappings":";AAAA,SAAgB,QAAQ,MAAc,YAAoC;AACxE,QAAO,OAAO,KAAK,WAAW,CAAC,QAAQ,KAAK,QAAQ;EAClD,MAAM,QAAQ,WAAW;AACzB,MAAI,UAAU,OAAW,QAAO;AAEhC,SAAO,IAAI,QAAQ,IAAI,OAAO,MAAM,IAAI,MAAM,IAAI,EAAE,MAAM;IACzD,KAAK"}
1
+ {"version":3,"file":"getPath.js","names":[],"sources":["../../src/utils/getPath.ts"],"sourcesContent":["export function getPath(path: string, pathParams: Record<string, string>) {\n return path.replace(/\\{(\\w+)\\}/g, (_match, key: string) => {\n const value = pathParams[key];\n if (value == null || value === \"\") {\n throw new Error(`Missing required path parameter: ${key}`);\n }\n\n return encodeURIComponent(value);\n });\n}\n"],"mappings":";AAAA,SAAgB,QAAQ,MAAc,YAAoC;CACxE,OAAO,KAAK,QAAQ,eAAe,QAAQ,QAAgB;EACzD,MAAM,QAAQ,WAAW;EACzB,IAAI,SAAS,QAAQ,UAAU,IAC7B,MAAM,IAAI,MAAM,oCAAoC,KAAK;EAG3D,OAAO,mBAAmB,KAAK;CACjC,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"observables.js","names":[],"sources":["../../src/utils/observables.ts"],"sourcesContent":["import {\n fromEvent,\n startWith,\n map,\n distinctUntilChanged,\n shareReplay,\n merge,\n of,\n combineLatest,\n} from \"rxjs\";\n\nconst visible$ = fromEvent(document, \"visibilitychange\").pipe(\n startWith(0),\n map(() => document.visibilityState === \"visible\"),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst online$ = merge(\n fromEvent(window, \"online\").pipe(map(() => true)),\n fromEvent(window, \"offline\").pipe(map(() => false)),\n of(navigator.onLine),\n).pipe(distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));\n\nexport const onlineAndVisible$ = combineLatest([visible$, online$]).pipe(\n map(([v, o]) => v && o),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n"],"mappings":";;;AAWA,MAAM,WAAW,UAAU,UAAU,mBAAmB,CAAC,KACvD,UAAU,EAAE,EACZ,UAAU,SAAS,oBAAoB,UAAU,EACjD,sBAAsB,EACtB,YAAY;CAAE,YAAY;CAAG,UAAU;CAAM,CAAC,CAC/C;AAED,MAAM,UAAU,MACd,UAAU,QAAQ,SAAS,CAAC,KAAK,UAAU,KAAK,CAAC,EACjD,UAAU,QAAQ,UAAU,CAAC,KAAK,UAAU,MAAM,CAAC,EACnD,GAAG,UAAU,OAAO,CACrB,CAAC,KAAK,sBAAsB,EAAE,YAAY;CAAE,YAAY;CAAG,UAAU;CAAM,CAAC,CAAC;AAE9E,MAAa,oBAAoB,cAAc,CAAC,UAAU,QAAQ,CAAC,CAAC,KAClE,KAAK,CAAC,GAAG,OAAO,KAAK,EAAE,EACvB,sBAAsB,EACtB,YAAY;CAAE,YAAY;CAAG,UAAU;CAAM,CAAC,CAC/C"}
1
+ {"version":3,"file":"observables.js","names":[],"sources":["../../src/utils/observables.ts"],"sourcesContent":["import {\n fromEvent,\n startWith,\n map,\n distinctUntilChanged,\n shareReplay,\n merge,\n of,\n combineLatest,\n} from \"rxjs\";\n\nconst visible$ = fromEvent(document, \"visibilitychange\").pipe(\n startWith(0),\n map(() => document.visibilityState === \"visible\"),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst online$ = merge(\n fromEvent(window, \"online\").pipe(map(() => true)),\n fromEvent(window, \"offline\").pipe(map(() => false)),\n of(navigator.onLine),\n).pipe(distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));\n\nexport const onlineAndVisible$ = combineLatest([visible$, online$]).pipe(\n map(([v, o]) => v && o),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n"],"mappings":";;;AAWA,MAAM,WAAW,UAAU,UAAU,kBAAkB,CAAC,CAAC,KACvD,UAAU,CAAC,GACX,UAAU,SAAS,oBAAoB,SAAS,GAChD,qBAAqB,GACrB,YAAY;CAAE,YAAY;CAAG,UAAU;AAAK,CAAC,CAC/C;AAEA,MAAM,UAAU,MACd,UAAU,QAAQ,QAAQ,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,GAChD,UAAU,QAAQ,SAAS,CAAC,CAAC,KAAK,UAAU,KAAK,CAAC,GAClD,GAAG,UAAU,MAAM,CACrB,CAAC,CAAC,KAAK,qBAAqB,GAAG,YAAY;CAAE,YAAY;CAAG,UAAU;AAAK,CAAC,CAAC;AAE7E,MAAa,oBAAoB,cAAc,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC,KAClE,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,GACtB,qBAAqB,GACrB,YAAY;CAAE,YAAY;CAAG,UAAU;AAAK,CAAC,CAC/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"operators.js","names":[],"sources":["../../src/utils/operators.ts"],"sourcesContent":["import { filter } from \"rxjs\";\n\nimport type { OperatorFunction } from \"rxjs\";\n\nexport function filterNullable<T>(): OperatorFunction<T | null | undefined, T> {\n return filter((v): v is T => v != null);\n}\n"],"mappings":";;;AAIA,SAAgB,iBAA+D;AAC7E,QAAO,QAAQ,MAAc,KAAK,KAAK"}
1
+ {"version":3,"file":"operators.js","names":[],"sources":["../../src/utils/operators.ts"],"sourcesContent":["import { filter } from \"rxjs\";\n\nimport type { OperatorFunction } from \"rxjs\";\n\nexport function filterNullable<T>(): OperatorFunction<T | null | undefined, T> {\n return filter((v): v is T => v != null);\n}\n"],"mappings":";;;AAIA,SAAgB,iBAA+D;CAC7E,OAAO,QAAQ,MAAc,KAAK,IAAI;AACxC"}
@@ -1,9 +1,10 @@
1
1
  import ObjectId from "bson-objectid";
2
2
  import { z } from "zod";
3
-
4
3
  //#region src/utils/zodSchemas.d.ts
5
- declare const customPropertiesSchema: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString, "many">, z.ZodArray<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, "many">, z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, z.ZodUndefined]>>;
6
- type CustomProperties = z.infer<typeof customPropertiesSchema>;
4
+ type CustomPropertiesRequest = { [K in keyof CustomProperties]: CustomProperties[K] | null; };
5
+ type CustomProperties = {
6
+ [x: string]: string | number | boolean | {} | Date | string[] | {}[] | undefined;
7
+ };
7
8
  declare const eventPropertiesSchema: z.ZodObject<{
8
9
  section: z.ZodOptional<z.ZodString>;
9
10
  prev_section: z.ZodOptional<z.ZodString>;
@@ -19,97 +20,23 @@ declare const eventPropertiesSchema: z.ZodObject<{
19
20
  id: z.ZodString;
20
21
  price: z.ZodNumber;
21
22
  quantity: z.ZodOptional<z.ZodNumber>;
22
- custom_event_properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString, "many">, z.ZodArray<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, "many">, z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, z.ZodUndefined]>>>;
23
- }, "strip", z.ZodTypeAny, {
24
- id: string;
25
- price: number;
26
- quantity?: number | undefined;
27
- custom_event_properties?: Record<string, string | number | boolean | Date | string[] | {}[] | {} | undefined> | undefined;
28
- }, {
29
- id: string;
30
- price: number;
31
- quantity?: number | undefined;
32
- custom_event_properties?: Record<string, string | number | boolean | string[] | {}[] | {} | undefined> | undefined;
33
- }>, "many">>;
23
+ custom_event_properties: z.ZodOptional<z.ZodType<CustomProperties, CustomPropertiesRequest, z.core.$ZodTypeInternals<CustomProperties, CustomPropertiesRequest>>>;
24
+ }, z.core.$strip>>>;
34
25
  search_query: z.ZodOptional<z.ZodString>;
35
26
  order_amount: z.ZodOptional<z.ZodNumber>;
36
27
  paid_amount: z.ZodOptional<z.ZodNumber>;
37
28
  tracking: z.ZodOptional<z.ZodObject<{
38
29
  id: z.ZodString;
39
30
  type: z.ZodString;
40
- }, "strip", z.ZodTypeAny, {
41
- id: string;
42
- type: string;
43
- }, {
44
- id: string;
45
- type: string;
46
- }>>;
31
+ }, z.core.$strip>>;
47
32
  click_target: z.ZodOptional<z.ZodString>;
48
- }, "strip", z.ZodTypeAny, {
49
- section?: string | undefined;
50
- prev_section?: string | undefined;
51
- recommendation_id?: string | undefined;
52
- price?: number | undefined;
53
- order_id?: string | undefined;
54
- rating?: number | undefined;
55
- prev_page?: string | undefined;
56
- page?: string | undefined;
57
- position?: number | undefined;
58
- item_id?: string | undefined;
59
- items?: {
60
- id: string;
61
- price: number;
62
- quantity?: number | undefined;
63
- custom_event_properties?: Record<string, string | number | boolean | Date | string[] | {}[] | {} | undefined> | undefined;
64
- }[] | undefined;
65
- search_query?: string | undefined;
66
- order_amount?: number | undefined;
67
- paid_amount?: number | undefined;
68
- tracking?: {
69
- id: string;
70
- type: string;
71
- } | undefined;
72
- click_target?: string | undefined;
73
- }, {
74
- section?: string | undefined;
75
- prev_section?: string | undefined;
76
- recommendation_id?: string | undefined;
77
- price?: number | undefined;
78
- order_id?: string | undefined;
79
- rating?: number | undefined;
80
- prev_page?: string | undefined;
81
- page?: string | undefined;
82
- position?: number | undefined;
83
- item_id?: string | undefined;
84
- items?: {
85
- id: string;
86
- price: number;
87
- quantity?: number | undefined;
88
- custom_event_properties?: Record<string, string | number | boolean | string[] | {}[] | {} | undefined> | undefined;
89
- }[] | undefined;
90
- search_query?: string | undefined;
91
- order_amount?: number | undefined;
92
- paid_amount?: number | undefined;
93
- tracking?: {
94
- id: string;
95
- type: string;
96
- } | undefined;
97
- click_target?: string | undefined;
98
- }>;
33
+ }, z.core.$strip>;
99
34
  type EventProperties = z.infer<typeof eventPropertiesSchema>;
100
35
  declare const internalEventPropertiesSchema: z.ZodObject<{
101
36
  url: z.ZodOptional<z.ZodString>;
102
37
  ref: z.ZodOptional<z.ZodString>;
103
38
  click_target: z.ZodOptional<z.ZodString>;
104
- }, "strip", z.ZodTypeAny, {
105
- click_target?: string | undefined;
106
- url?: string | undefined;
107
- ref?: string | undefined;
108
- }, {
109
- click_target?: string | undefined;
110
- url?: string | undefined;
111
- ref?: string | undefined;
112
- }>;
39
+ }, z.core.$strip>;
113
40
  type InternalEventProperties = z.infer<typeof internalEventPropertiesSchema>;
114
41
  type RecResponse = {
115
42
  item_ids: string[];
@@ -117,5 +44,5 @@ type RecResponse = {
117
44
  recommendation_id: string | null;
118
45
  };
119
46
  //#endregion
120
- export { CustomProperties, EventProperties, InternalEventProperties, RecResponse };
47
+ export { CustomProperties, EventProperties, InternalEventProperties, RecResponse, eventPropertiesSchema, internalEventPropertiesSchema };
121
48
  //# sourceMappingURL=zodSchemas.d.ts.map
@@ -2,17 +2,13 @@ import "./assertEqualTypes.js";
2
2
  import { COUNTRY_CODES } from "../constants/COUNTRIES.js";
3
3
  import { ISO8601_REGEX } from "../constants/ISO8601_REGEX.js";
4
4
  import ObjectId from "bson-objectid";
5
- import { ZodError, z } from "zod";
5
+ import { z } from "zod";
6
6
 
7
7
  //#region src/utils/zodSchemas.ts
8
8
  function isObjectIdString(value) {
9
9
  return typeof value === "string" && value.length === 24 && ObjectId.isValid(value);
10
10
  }
11
- const objectIdSchema = z.string().refine((v) => isObjectIdString(v), (v) => new ZodError([{
12
- code: "custom",
13
- message: `Invalid ObjectId: ${v}`,
14
- path: ["some_path"]
15
- }])).transform((v) => new ObjectId(v));
11
+ const objectIdSchema = z.string().refine((v) => isObjectIdString(v), { error: (issue) => `Invalid ObjectId: ${issue.input}` }).transform((v) => new ObjectId(v));
16
12
  const stringToNumberSchema = z.union([z.string(), z.number()]).refine((v) => {
17
13
  if (typeof v === "number") return true;
18
14
  const parsed = Number(v);
@@ -22,7 +18,7 @@ const dateSchema = z.string().refine((dateString) => {
22
18
  return ISO8601_REGEX.test(dateString);
23
19
  }, { message: "Invalid date string" }).transform((dateString) => new Date(dateString));
24
20
  const countryCodeWithLowerCaseSchema = z.string().transform((v) => v.toUpperCase()).pipe(z.union([z.literal("419"), z.enum(COUNTRY_CODES)])).transform((v) => v === "419" ? void 0 : v);
25
- const customPropertiesRequestSchema = z.record(z.union([
21
+ const customPropertiesRequestSchema = z.record(z.string(), z.union([
26
22
  dateSchema,
27
23
  z.string(),
28
24
  z.number(),
@@ -33,7 +29,7 @@ const customPropertiesRequestSchema = z.record(z.union([
33
29
  z.null(),
34
30
  z.undefined()
35
31
  ]));
36
- const customPropertiesSchema = z.record(z.union([
32
+ const customPropertiesSchema = z.record(z.string(), z.union([
37
33
  dateSchema,
38
34
  z.string(),
39
35
  z.number(),
@@ -80,7 +76,7 @@ const inferenceRequestSchema = z.object({
80
76
  blux_user_id: objectIdSchema.nullish(),
81
77
  pipeline: z.array(z.object({
82
78
  name: z.string(),
83
- kwargs: z.record(z.any())
79
+ kwargs: z.record(z.string(), z.any())
84
80
  })),
85
81
  item_id: z.string().nullish(),
86
82
  item_ids: z.array(z.string()).nullish(),
@@ -99,5 +95,5 @@ const recommendationRequestSchema = inferenceRequestSchema.pick({
99
95
  });
100
96
 
101
97
  //#endregion
102
- export { countryCodeWithLowerCaseSchema, customPropertiesRequestSchema, customPropertiesSchema, dateSchema, eventPropertiesSchema, internalEventPropertiesSchema, objectIdSchema, recommendationRequestSchema };
98
+ export { countryCodeWithLowerCaseSchema, customPropertiesRequestSchema, customPropertiesSchema, dateSchema, eventPropertiesSchema, internalEventPropertiesSchema, isObjectIdString, objectIdSchema, recommendationRequestSchema };
103
99
  //# sourceMappingURL=zodSchemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zodSchemas.js","names":[],"sources":["../../src/utils/zodSchemas.ts"],"sourcesContent":["import ObjectId from \"bson-objectid\";\nimport { z, ZodError } from \"zod\";\n\nimport { assertEqualTypes } from \"./assertEqualTypes\";\nimport { COUNTRY_CODES } from \"../constants/COUNTRIES\";\nimport { ISO8601_REGEX } from \"../constants/ISO8601_REGEX\";\n\nimport type { CountryCode } from \"../constants/COUNTRIES\";\n\nfunction isObjectIdString(value: unknown): value is string {\n return (\n typeof value === \"string\" && value.length === 24 && ObjectId.isValid(value)\n );\n}\n\nexport const objectIdSchema = z\n .string()\n .refine(\n (v) => isObjectIdString(v),\n (v) =>\n new ZodError([\n {\n code: \"custom\",\n message: `Invalid ObjectId: ${v}`,\n path: [\"some_path\"],\n },\n ]),\n )\n .transform((v) => new ObjectId(v));\n\nexport const stringToNumberSchema = z\n .union([z.string(), z.number()])\n .refine(\n (v) => {\n if (typeof v === \"number\") return true;\n const parsed = Number(v);\n return !isNaN(parsed);\n },\n {\n message: \"Invalid number or string in stringToNumberSchema\",\n },\n )\n .transform((v): number => (typeof v === \"number\" ? v : Number(v)));\n\nexport const dateSchema = z\n .string()\n .refine(\n (dateString) => {\n return ISO8601_REGEX.test(dateString);\n },\n {\n message: \"Invalid date string\",\n },\n )\n .transform((dateString) => new Date(dateString));\n\nfunction convertAllObjectId(input: unknown): unknown {\n if (Array.isArray(input)) {\n return input.map((item) => convertAllObjectId(item));\n } else if (isObjectIdString(input)) {\n return new ObjectId(input);\n } else if (\n typeof input === \"string\" &&\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$/.test(input)\n ) {\n return new Date(input);\n } else if (input !== null && typeof input === \"object\") {\n return Object.entries(input).reduce<Record<string, unknown>>(\n (acc, [key, value]) => {\n acc[key] = convertAllObjectId(value);\n return acc;\n },\n {},\n );\n }\n return input;\n}\n\nexport const anonymousObjectSchema = <T extends object = object>() =>\n z\n .object({})\n .passthrough()\n .transform((v) => convertAllObjectId(v) as T);\n\nexport const countryCodeWithLowerCaseSchema = z\n .string()\n .transform((v) => v.toUpperCase())\n .pipe(\n z.union([\n z.literal(\"419\"), // https://en.wikipedia.org/wiki/Language_code\n z.enum(COUNTRY_CODES as [CountryCode, ...CountryCode[]]),\n ]),\n )\n .transform((v) => (v === \"419\" ? undefined : v));\n\nexport const customPropertiesRequestSchema = z.record(\n z.union([\n dateSchema,\n z.string(),\n z.number(),\n z.boolean(),\n z.array(z.string()),\n z.array(z.object({})),\n z.object({}),\n z.null(),\n z.undefined(),\n ]),\n);\n\ntype CustomPropertiesRequest = z.infer<typeof customPropertiesRequestSchema>;\n\nexport const customPropertiesSchema = z.record(\n z.union([\n dateSchema,\n z.string(),\n z.number(),\n z.boolean(),\n z.array(z.string()),\n z.array(z.object({})),\n z.object({}),\n z.undefined(),\n ]),\n);\n\nexport type CustomProperties = z.infer<typeof customPropertiesSchema>;\n\nassertEqualTypes<\n {\n [K in keyof CustomPropertiesRequest]: Exclude<\n CustomPropertiesRequest[K],\n null\n >;\n },\n CustomProperties\n>(true);\n\nexport const stringToArraySchema = z\n .string()\n .transform((v) => v.split(\",\").map((item) => item.trim()))\n .refine((arr) => arr.every((item) => item.length > 0), {\n message: \"Each item should not be empty\",\n });\n\nexport const eventPropertiesSchema = z.object({\n section: z.string().optional(),\n prev_section: z.string().optional(),\n recommendation_id: z.string().optional(),\n price: z.number().optional(),\n order_id: z.string().optional(),\n rating: z.number().optional(),\n prev_page: z.string().optional(),\n page: z.string().optional(),\n position: z.number().optional(),\n item_id: z.string().optional(),\n items: z\n .array(\n z.object({\n id: z.string(),\n price: z.number(),\n quantity: z.number().optional(),\n custom_event_properties: customPropertiesSchema.optional(),\n }),\n )\n .optional(),\n search_query: z.string().optional(),\n order_amount: z.number().optional(),\n paid_amount: z.number().optional(),\n tracking: z\n .object({\n id: z.string(),\n type: z.string(),\n })\n .optional(),\n click_target: z.string().optional(),\n});\n\nexport type EventProperties = z.infer<typeof eventPropertiesSchema>;\n\nexport const internalEventPropertiesSchema = z.object({\n url: z.string().optional(),\n ref: z.string().optional(),\n click_target: z.string().optional(),\n});\n\nexport type InternalEventProperties = z.infer<\n typeof internalEventPropertiesSchema\n>;\n\n// Schema for Inference API\nconst inferenceRequestSchema = z.object({\n application_id: objectIdSchema,\n blux_user_id: objectIdSchema.nullish(),\n\n pipeline: z.array(\n z.object({\n name: z.string(),\n kwargs: z.record(z.any()),\n }),\n ),\n item_id: z.string().nullish(),\n item_ids: z.array(z.string()).nullish(),\n\n limit: z.number(),\n offset: z.number().nullish().default(0),\n options: z.record(z.string(), z.any()).nullish(), // TODO: @all legacy 클라이언트 migration만을 위한 필드라는 점을 고려하여 필드명 수정 필요 ex. legacy_options\n});\n\nexport const recommendationRequestSchema = inferenceRequestSchema\n .pick({\n item_id: true,\n item_ids: true,\n limit: true,\n offset: true,\n })\n .extend({\n call_type: z.string(),\n category_id: z.string().nullish(),\n });\n\nexport type RecResponse = {\n item_ids: string[];\n metadata: Record<string, unknown>;\n recommendation_id: string | null;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"zodSchemas.js","names":[],"sources":["../../src/utils/zodSchemas.ts"],"sourcesContent":["import ObjectId from \"bson-objectid\";\nimport { z } from \"zod\";\n\nimport { assertEqualTypes } from \"./assertEqualTypes\";\nimport { COUNTRY_CODES } from \"../constants/COUNTRIES\";\nimport { ISO8601_REGEX } from \"../constants/ISO8601_REGEX\";\n\nimport type { CountryCode } from \"../constants/COUNTRIES\";\n\nexport function isObjectIdString(value: unknown): value is string {\n return (\n typeof value === \"string\" && value.length === 24 && ObjectId.isValid(value)\n );\n}\n\nexport const objectIdSchema = z\n .string()\n .refine((v) => isObjectIdString(v), {\n error: (issue) => `Invalid ObjectId: ${issue.input}`,\n })\n .transform((v) => new ObjectId(v));\n\nexport const stringToNumberSchema = z\n .union([z.string(), z.number()])\n .refine(\n (v) => {\n if (typeof v === \"number\") return true;\n const parsed = Number(v);\n return !isNaN(parsed);\n },\n {\n message: \"Invalid number or string in stringToNumberSchema\",\n },\n )\n .transform((v): number => (typeof v === \"number\" ? v : Number(v)));\n\nexport const dateSchema = z\n .string()\n .refine(\n (dateString) => {\n return ISO8601_REGEX.test(dateString);\n },\n {\n message: \"Invalid date string\",\n },\n )\n .transform((dateString) => new Date(dateString));\n\nfunction convertAllObjectId(input: unknown): unknown {\n if (Array.isArray(input)) {\n return input.map((item) => convertAllObjectId(item));\n } else if (isObjectIdString(input)) {\n return new ObjectId(input);\n } else if (\n typeof input === \"string\" &&\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$/.test(input)\n ) {\n return new Date(input);\n } else if (input !== null && typeof input === \"object\") {\n return Object.entries(input).reduce<Record<string, unknown>>(\n (acc, [key, value]) => {\n acc[key] = convertAllObjectId(value);\n return acc;\n },\n {},\n );\n }\n return input;\n}\n\nexport const anonymousObjectSchema = <T extends object = object>() =>\n z\n .object({})\n .passthrough()\n .transform((v) => convertAllObjectId(v) as T);\n\nexport const countryCodeWithLowerCaseSchema = z\n .string()\n .transform((v) => v.toUpperCase())\n .pipe(\n z.union([\n z.literal(\"419\"), // https://en.wikipedia.org/wiki/Language_code\n z.enum(COUNTRY_CODES as [CountryCode, ...CountryCode[]]),\n ]),\n )\n .transform((v) => (v === \"419\" ? undefined : v));\n\nexport const customPropertiesRequestSchema = z.record(\n z.string(),\n z.union([\n dateSchema,\n z.string(),\n z.number(),\n z.boolean(),\n z.array(z.string()),\n z.array(z.object({})),\n z.object({}),\n z.null(),\n z.undefined(),\n ]),\n);\n\n// z.object({})의 추론 출력은 Record<string, never>라 중첩 객체를 담지 못한다.\n// 커스텀 속성 값으로 임의 객체를 허용하는 계약은 타입을 직접 적어 유지한다.\ntype CustomPropertiesRequest = {\n [K in keyof CustomProperties]: CustomProperties[K] | null;\n};\n\nexport const customPropertiesSchema: z.ZodType<\n CustomProperties,\n CustomPropertiesRequest\n> = z.record(\n z.string(),\n z.union([\n dateSchema,\n z.string(),\n z.number(),\n z.boolean(),\n z.array(z.string()),\n z.array(z.object({})),\n z.object({}),\n z.undefined(),\n ]),\n);\n\nexport type CustomProperties = {\n [x: string]:\n | string\n | number\n | boolean\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n | {}\n | Date\n | string[]\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n | {}[]\n | undefined;\n};\n\nassertEqualTypes<\n {\n [K in keyof CustomPropertiesRequest]: Exclude<\n CustomPropertiesRequest[K],\n null\n >;\n },\n CustomProperties\n>(true);\n\nexport const stringToArraySchema = z\n .string()\n .transform((v) => v.split(\",\").map((item) => item.trim()))\n .refine((arr) => arr.every((item) => item.length > 0), {\n message: \"Each item should not be empty\",\n });\n\nexport const eventPropertiesSchema = z.object({\n section: z.string().optional(),\n prev_section: z.string().optional(),\n recommendation_id: z.string().optional(),\n price: z.number().optional(),\n order_id: z.string().optional(),\n rating: z.number().optional(),\n prev_page: z.string().optional(),\n page: z.string().optional(),\n position: z.number().optional(),\n item_id: z.string().optional(),\n items: z\n .array(\n z.object({\n id: z.string(),\n price: z.number(),\n quantity: z.number().optional(),\n custom_event_properties: customPropertiesSchema.optional(),\n }),\n )\n .optional(),\n search_query: z.string().optional(),\n order_amount: z.number().optional(),\n paid_amount: z.number().optional(),\n tracking: z\n .object({\n id: z.string(),\n type: z.string(),\n })\n .optional(),\n click_target: z.string().optional(),\n});\n\nexport type EventProperties = z.infer<typeof eventPropertiesSchema>;\n\nexport const internalEventPropertiesSchema = z.object({\n url: z.string().optional(),\n ref: z.string().optional(),\n click_target: z.string().optional(),\n});\n\nexport type InternalEventProperties = z.infer<\n typeof internalEventPropertiesSchema\n>;\n\n// Schema for Inference API\nconst inferenceRequestSchema = z.object({\n application_id: objectIdSchema,\n blux_user_id: objectIdSchema.nullish(),\n\n pipeline: z.array(\n z.object({\n name: z.string(),\n kwargs: z.record(z.string(), z.any()),\n }),\n ),\n item_id: z.string().nullish(),\n item_ids: z.array(z.string()).nullish(),\n\n limit: z.number(),\n offset: z.number().nullish().default(0),\n options: z.record(z.string(), z.any()).nullish(), // TODO: @all legacy 클라이언트 migration만을 위한 필드라는 점을 고려하여 필드명 수정 필요 ex. legacy_options\n});\n\nexport const recommendationRequestSchema = inferenceRequestSchema\n .pick({\n item_id: true,\n item_ids: true,\n limit: true,\n offset: true,\n })\n .extend({\n call_type: z.string(),\n category_id: z.string().nullish(),\n });\n\nexport type RecResponse = {\n item_ids: string[];\n metadata: Record<string, unknown>;\n recommendation_id: string | null;\n};\n"],"mappings":";;;;;;;AASA,SAAgB,iBAAiB,OAAiC;CAChE,OACE,OAAO,UAAU,YAAY,MAAM,WAAW,MAAM,SAAS,QAAQ,KAAK;AAE9E;AAEA,MAAa,iBAAiB,EAC3B,OAAO,CAAC,CACR,QAAQ,MAAM,iBAAiB,CAAC,GAAG,EAClC,QAAQ,UAAU,qBAAqB,MAAM,QAC/C,CAAC,CAAC,CACD,WAAW,MAAM,IAAI,SAAS,CAAC,CAAC;AAEnC,MAAa,uBAAuB,EACjC,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAC/B,QACE,MAAM;CACL,IAAI,OAAO,MAAM,UAAU,OAAO;CAClC,MAAM,SAAS,OAAO,CAAC;CACvB,OAAO,CAAC,MAAM,MAAM;AACtB,GACA,EACE,SAAS,mDACX,CACF,CAAC,CACA,WAAW,MAAe,OAAO,MAAM,WAAW,IAAI,OAAO,CAAC,CAAE;AAEnE,MAAa,aAAa,EACvB,OAAO,CAAC,CACR,QACE,eAAe;CACd,OAAO,cAAc,KAAK,UAAU;AACtC,GACA,EACE,SAAS,sBACX,CACF,CAAC,CACA,WAAW,eAAe,IAAI,KAAK,UAAU,CAAC;AA8BjD,MAAa,iCAAiC,EAC3C,OAAO,CAAC,CACR,WAAW,MAAM,EAAE,YAAY,CAAC,CAAC,CACjC,KACC,EAAE,MAAM,CACN,EAAE,QAAQ,KAAK,GACf,EAAE,KAAK,aAAgD,CACzD,CAAC,CACH,CAAC,CACA,WAAW,MAAO,MAAM,QAAQ,SAAY,CAAE;AAEjD,MAAa,gCAAgC,EAAE,OAC7C,EAAE,OAAO,GACT,EAAE,MAAM;CACN;CACA,EAAE,OAAO;CACT,EAAE,OAAO;CACT,EAAE,QAAQ;CACV,EAAE,MAAM,EAAE,OAAO,CAAC;CAClB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpB,EAAE,OAAO,CAAC,CAAC;CACX,EAAE,KAAK;CACP,EAAE,UAAU;AACd,CAAC,CACH;AAQA,MAAa,yBAGT,EAAE,OACJ,EAAE,OAAO,GACT,EAAE,MAAM;CACN;CACA,EAAE,OAAO;CACT,EAAE,OAAO;CACT,EAAE,QAAQ;CACV,EAAE,MAAM,EAAE,OAAO,CAAC;CAClB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpB,EAAE,OAAO,CAAC,CAAC;CACX,EAAE,UAAU;AACd,CAAC,CACH;AA0BA,MAAa,sBAAsB,EAChC,OAAO,CAAC,CACR,WAAW,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CACzD,QAAQ,QAAQ,IAAI,OAAO,SAAS,KAAK,SAAS,CAAC,GAAG,EACrD,SAAS,gCACX,CAAC;AAEH,MAAa,wBAAwB,EAAE,OAAO;CAC5C,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;CAClC,mBAAmB,EAAE,OAAO,CAAC,CAAC,SAAS;CACvC,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;CAC5B,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,OAAO,EACJ,MACC,EAAE,OAAO;EACP,IAAI,EAAE,OAAO;EACb,OAAO,EAAE,OAAO;EAChB,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;EAC9B,yBAAyB,uBAAuB,SAAS;CAC3D,CAAC,CACH,CAAC,CACA,SAAS;CACZ,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;CAClC,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;CAClC,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;CACjC,UAAU,EACP,OAAO;EACN,IAAI,EAAE,OAAO;EACb,MAAM,EAAE,OAAO;CACjB,CAAC,CAAC,CACD,SAAS;CACZ,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;AACpC,CAAC;AAID,MAAa,gCAAgC,EAAE,OAAO;CACpD,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS;CACzB,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS;CACzB,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;AACpC,CAAC;AAOD,MAAM,yBAAyB,EAAE,OAAO;CACtC,gBAAgB;CAChB,cAAc,eAAe,QAAQ;CAErC,UAAU,EAAE,MACV,EAAE,OAAO;EACP,MAAM,EAAE,OAAO;EACf,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC;CACtC,CAAC,CACH;CACA,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ;CAC5B,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ;CAEtC,OAAO,EAAE,OAAO;CAChB,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;CACtC,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ;AACjD,CAAC;AAED,MAAa,8BAA8B,uBACxC,KAAK;CACJ,SAAS;CACT,UAAU;CACV,OAAO;CACP,QAAQ;AACV,CAAC,CAAC,CACD,OAAO;CACN,WAAW,EAAE,OAAO;CACpB,aAAa,EAAE,OAAO,CAAC,CAAC,QAAQ;AAClC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blux.ai/web-sdk",
3
- "version": "2.2.29",
3
+ "version": "2.2.31",
4
4
  "description": "The official Blux JavaScript browser client library",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -33,16 +33,17 @@
33
33
  "@sentry/types": "^8.35.0",
34
34
  "@types/uuid": "10.0.0",
35
35
  "ts-loader": "^9.5.1",
36
- "tsdown": "0.20.1",
37
- "typescript": "5.9.3",
36
+ "tsdown": "0.22.4",
37
+ "typescript": "npm:@typescript/typescript6@6.0.2",
38
+ "typescript-7": "npm:typescript@7.0.2",
38
39
  "webpack": "^5.93.0",
39
40
  "webpack-cli": "^5.1.4"
40
41
  },
41
42
  "dependencies": {
42
- "axios": "1.7.7",
43
+ "axios": "1.17.0",
43
44
  "bson-objectid": "^2.0.4",
44
45
  "rxjs": "7.8.1",
45
46
  "uuid": "10.0.0",
46
- "zod": "3.23.8"
47
+ "zod": "4.4.3"
47
48
  }
48
49
  }