@winata/flipper-entities 0.0.0-stage → 2.7.11

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 (123) hide show
  1. package/dist/assets/logos.d.ts +14 -0
  2. package/dist/assets/logos.d.ts.map +1 -0
  3. package/dist/assets/logos.js +32 -0
  4. package/dist/assets/logos.js.map +1 -0
  5. package/dist/enums/marketplace.d.ts +16 -0
  6. package/dist/enums/marketplace.d.ts.map +1 -0
  7. package/dist/enums/marketplace.js +23 -0
  8. package/dist/enums/marketplace.js.map +1 -0
  9. package/dist/enums/notification-channel.enum.d.ts +8 -0
  10. package/dist/enums/notification-channel.enum.d.ts.map +1 -0
  11. package/dist/enums/notification-channel.enum.js +12 -0
  12. package/dist/enums/notification-channel.enum.js.map +1 -0
  13. package/dist/enums/search-type.enum.d.ts +27 -0
  14. package/dist/enums/search-type.enum.d.ts.map +1 -0
  15. package/dist/enums/search-type.enum.js +54 -0
  16. package/dist/enums/search-type.enum.js.map +1 -0
  17. package/dist/index.d.ts +35 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +44 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/search-filter.policy.d.ts +19 -0
  22. package/dist/search-filter.policy.d.ts.map +1 -0
  23. package/dist/search-filter.policy.js +84 -0
  24. package/dist/search-filter.policy.js.map +1 -0
  25. package/dist/types/banned-seller.types.d.ts +26 -0
  26. package/dist/types/banned-seller.types.d.ts.map +1 -0
  27. package/dist/types/banned-seller.types.js +3 -0
  28. package/dist/types/banned-seller.types.js.map +1 -0
  29. package/dist/types/billing-options.types.d.ts +6 -0
  30. package/dist/types/billing-options.types.d.ts.map +1 -0
  31. package/dist/types/billing-options.types.js +3 -0
  32. package/dist/types/billing-options.types.js.map +1 -0
  33. package/dist/types/core-options.types.d.ts +110 -0
  34. package/dist/types/core-options.types.d.ts.map +1 -0
  35. package/dist/types/core-options.types.js +3 -0
  36. package/dist/types/core-options.types.js.map +1 -0
  37. package/dist/types/engine.types.d.ts +68 -0
  38. package/dist/types/engine.types.d.ts.map +1 -0
  39. package/dist/types/engine.types.js +3 -0
  40. package/dist/types/engine.types.js.map +1 -0
  41. package/dist/types/item-check.types.d.ts +15 -0
  42. package/dist/types/item-check.types.d.ts.map +1 -0
  43. package/dist/types/item-check.types.js +3 -0
  44. package/dist/types/item-check.types.js.map +1 -0
  45. package/dist/types/item-filter.types.d.ts +30 -0
  46. package/dist/types/item-filter.types.d.ts.map +1 -0
  47. package/dist/types/item-filter.types.js +3 -0
  48. package/dist/types/item-filter.types.js.map +1 -0
  49. package/dist/types/item.types.d.ts +41 -0
  50. package/dist/types/item.types.d.ts.map +1 -0
  51. package/dist/types/item.types.js +3 -0
  52. package/dist/types/item.types.js.map +1 -0
  53. package/dist/types/notification.types.d.ts +35 -0
  54. package/dist/types/notification.types.d.ts.map +1 -0
  55. package/dist/types/notification.types.js +3 -0
  56. package/dist/types/notification.types.js.map +1 -0
  57. package/dist/types/option.types.d.ts +13 -0
  58. package/dist/types/option.types.d.ts.map +1 -0
  59. package/dist/types/option.types.js +3 -0
  60. package/dist/types/option.types.js.map +1 -0
  61. package/dist/types/product.types.d.ts +99 -0
  62. package/dist/types/product.types.d.ts.map +1 -0
  63. package/dist/types/product.types.js +3 -0
  64. package/dist/types/product.types.js.map +1 -0
  65. package/dist/types/scrape.types.d.ts +43 -0
  66. package/dist/types/scrape.types.d.ts.map +1 -0
  67. package/dist/types/scrape.types.js +3 -0
  68. package/dist/types/scrape.types.js.map +1 -0
  69. package/dist/types/search-jsonb.types.d.ts +95 -0
  70. package/dist/types/search-jsonb.types.d.ts.map +1 -0
  71. package/dist/types/search-jsonb.types.js +3 -0
  72. package/dist/types/search-jsonb.types.js.map +1 -0
  73. package/dist/types/search.types.d.ts +47 -0
  74. package/dist/types/search.types.d.ts.map +1 -0
  75. package/dist/types/search.types.js +3 -0
  76. package/dist/types/search.types.js.map +1 -0
  77. package/dist/types/seller-snapshot.types.d.ts +53 -0
  78. package/dist/types/seller-snapshot.types.d.ts.map +1 -0
  79. package/dist/types/seller-snapshot.types.js +3 -0
  80. package/dist/types/seller-snapshot.types.js.map +1 -0
  81. package/dist/types/seller-summary.types.d.ts +35 -0
  82. package/dist/types/seller-summary.types.d.ts.map +1 -0
  83. package/dist/types/seller-summary.types.js +3 -0
  84. package/dist/types/seller-summary.types.js.map +1 -0
  85. package/dist/types/subscription.types.d.ts +120 -0
  86. package/dist/types/subscription.types.d.ts.map +1 -0
  87. package/dist/types/subscription.types.js +3 -0
  88. package/dist/types/subscription.types.js.map +1 -0
  89. package/dist/types/usage.types.d.ts +50 -0
  90. package/dist/types/usage.types.d.ts.map +1 -0
  91. package/dist/types/usage.types.js +3 -0
  92. package/dist/types/usage.types.js.map +1 -0
  93. package/dist/types/user-channel.types.d.ts +28 -0
  94. package/dist/types/user-channel.types.d.ts.map +1 -0
  95. package/dist/types/user-channel.types.js +3 -0
  96. package/dist/types/user-channel.types.js.map +1 -0
  97. package/dist/types/user-item.types.d.ts +15 -0
  98. package/dist/types/user-item.types.d.ts.map +1 -0
  99. package/dist/types/user-item.types.js +3 -0
  100. package/dist/types/user-item.types.js.map +1 -0
  101. package/dist/types/user.types.d.ts +30 -0
  102. package/dist/types/user.types.d.ts.map +1 -0
  103. package/dist/types/user.types.js +3 -0
  104. package/dist/types/user.types.js.map +1 -0
  105. package/dist/utilities/index.d.ts +9 -0
  106. package/dist/utilities/index.d.ts.map +1 -0
  107. package/dist/utilities/index.js +21 -0
  108. package/dist/utilities/index.js.map +1 -0
  109. package/dist/utilities/scalar.d.ts +12 -0
  110. package/dist/utilities/scalar.d.ts.map +1 -0
  111. package/dist/utilities/scalar.js +45 -0
  112. package/dist/utilities/scalar.js.map +1 -0
  113. package/dist/utilities/seller-snapshot.d.ts +41 -0
  114. package/dist/utilities/seller-snapshot.d.ts.map +1 -0
  115. package/dist/utilities/seller-snapshot.js +126 -0
  116. package/dist/utilities/seller-snapshot.js.map +1 -0
  117. package/dist/utilities/seller-summary.d.ts +22 -0
  118. package/dist/utilities/seller-summary.d.ts.map +1 -0
  119. package/dist/utilities/seller-summary.js +85 -0
  120. package/dist/utilities/seller-summary.js.map +1 -0
  121. package/package.json +37 -4
  122. package/utilities/package.json +5 -0
  123. package/README.md +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-options.types.d.ts","sourceRoot":"","sources":["../../src/types/core-options.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=core-options.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-options.types.js","sourceRoot":"","sources":["../../src/types/core-options.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import type { CoreEntity, ProxyOptions } from './core-options.types';
2
+ import type { SearchWithItems } from './scrape.types';
3
+ import type { SearchWithUser } from './search.types';
4
+ import type { SellerSnapshotJSONB } from './seller-snapshot.types';
5
+ /** Payload RMQ `engine.search`: orchestrator core -> engine. Search saja, tanpa item. */
6
+ export type EngineSearchRequest = {
7
+ option: CoreEntity;
8
+ searches: SearchWithUser[];
9
+ };
10
+ /** Env yang di-inject ke child process engine (via JSON argv). */
11
+ export type EngineEnv = {
12
+ NODE_ENV: string;
13
+ HOSTNAME: string;
14
+ IS_USE_PROXY: boolean;
15
+ PAGE_TAB_PARTITION_SIZE: number;
16
+ SEARCH_ITEM_PER_BROWSER_CHUNK_SIZE: number;
17
+ SCREENSHOT_ERROR_DIR: string;
18
+ SCREENSHOT_PAGE_DIR: string;
19
+ REDIS_HOST: string;
20
+ REDIS_PORT: number;
21
+ REDIS_PASSWORD: string;
22
+ };
23
+ /** Input child process engine (`main.ts` -> scraper). */
24
+ export type EngineChildInput = {
25
+ option: CoreEntity;
26
+ searches: SearchWithUser[];
27
+ env: EngineEnv;
28
+ };
29
+ /** Input use case scraping di child process. */
30
+ export type EngineScrapeInput = {
31
+ searches: SearchWithUser[];
32
+ env: EngineEnv;
33
+ proxy: ProxyOptions;
34
+ };
35
+ export type ScrapeTotals = {
36
+ new: number;
37
+ exist: number;
38
+ duplicate: number;
39
+ invalid: number;
40
+ };
41
+ /** Ringkasan run dari child process (pesan `scrape-status`). */
42
+ export type ScrapeStatus = {
43
+ ok?: boolean;
44
+ listCount?: number;
45
+ totals?: ScrapeTotals;
46
+ durationMs?: number;
47
+ };
48
+ /** Envelope IPC parent <-> child process engine. */
49
+ export type ScrapeIpcData = boolean | ScrapeStatus | SearchWithItems | SearchWithItems[];
50
+ export type ScrapeIpcMessage = {
51
+ type: string;
52
+ id: number;
53
+ data: ScrapeIpcData;
54
+ };
55
+ /** Hasil detail scraping (obscura) untuk satu listing. */
56
+ export type ScrapeDetailData = {
57
+ description: string | null;
58
+ image: string | null;
59
+ creationTime: number | null;
60
+ reverseGeocode: Record<string, unknown> | null;
61
+ buyLocation: Record<string, unknown> | null;
62
+ productDetailsType: string | null;
63
+ sellerSnapshot: SellerSnapshotJSONB | null;
64
+ scrapeMs?: number;
65
+ extractorSource?: string | null;
66
+ attempt?: number;
67
+ };
68
+ //# sourceMappingURL=engine.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.types.d.ts","sourceRoot":"","sources":["../../src/types/engine.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,yFAAyF;AACzF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;IAChC,kCAAkC,EAAE,MAAM,CAAC;IAC3C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,GAAG,EAAE,SAAS,CAAC;CAChB,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,YAAY,GACZ,eAAe,GACf,eAAe,EAAE,CAAC;AAEtB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=engine.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.types.js","sourceRoot":"","sources":["../../src/types/engine.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { SearchWithItems } from './scrape.types';
2
+ export type ItemFilterKey = 'name' | 'price' | 'year' | 'description' | 'rating' | 'seller' | 'geofencing';
3
+ export type InvalidFilterReason = {
4
+ key: ItemFilterKey;
5
+ condition?: string;
6
+ value?: unknown;
7
+ reason: string;
8
+ };
9
+ export type ItemCheckStatus = 'new' | 'new-but-duplicate-with-other-search' | 'already-exist';
10
+ /** Payload RMQ `core.item.checkItems`: filter mana yang dijalankan untuk satu search. */
11
+ export type CheckItemsRequest = {
12
+ filterKeys: ItemFilterKey[];
13
+ search: SearchWithItems;
14
+ };
15
+ //# sourceMappingURL=item-check.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-check.types.d.ts","sourceRoot":"","sources":["../../src/types/item-check.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,MAAM,GACN,aAAa,GACb,QAAQ,GACR,QAAQ,GACR,YAAY,CAAC;AAEjB,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,aAAa,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB,KAAK,GACL,qCAAqC,GACrC,eAAe,CAAC;AAEpB,yFAAyF;AACzF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=item-check.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-check.types.js","sourceRoot":"","sources":["../../src/types/item-check.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import type { ItemFilterKey } from './item-check.types';
2
+ import type { SellerIdentityProperty } from './seller-snapshot.types';
3
+ import type { UserWithRelations } from './user.types';
4
+ export type ItemFilterResult = {
5
+ valid: boolean;
6
+ key?: ItemFilterKey;
7
+ condition?: string;
8
+ value?: unknown;
9
+ reason?: string;
10
+ info?: string;
11
+ };
12
+ /**
13
+ * Satu ban yang siap dicocokkan. Map-nya ber-key
14
+ * `${prefix mekanisme}:${marketplace huruf kecil}:${nilai}` (lihat
15
+ * `toSellerMatchKey`) — `S` untuk ban bersnapshot, `L` untuk ban lama tanpa
16
+ * snapshot, supaya kedua mekanisme tidak pernah saling cocok. Di dalam
17
+ * mekanisme `snapshot` sengaja tidak dipisah per property, karena matching
18
+ * lintas property diinginkan (id listing vs `marketplace_user_profile.id` ban
19
+ * tetap kena).
20
+ */
21
+ export type BannedSellerMatch = {
22
+ banId: number;
23
+ property: SellerIdentityProperty;
24
+ sellerName: string | null;
25
+ };
26
+ export type ItemFilterContext = {
27
+ user?: UserWithRelations;
28
+ bannedSellers: ReadonlyMap<string, BannedSellerMatch>;
29
+ };
30
+ //# sourceMappingURL=item-filter.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-filter.types.d.ts","sourceRoot":"","sources":["../../src/types/item-filter.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CACvD,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=item-filter.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-filter.types.js","sourceRoot":"","sources":["../../src/types/item-filter.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import type { SearchWithUser } from './search.types';
2
+ import type { SellerSnapshotJSONB } from './seller-snapshot.types';
3
+ import type { SellerSummaryJSONB } from './seller-summary.types';
4
+ import type { SearchType } from '../enums/search-type.enum';
5
+ /** Representasi tabel `Item`. */
6
+ export type ItemEntity = {
7
+ id: number;
8
+ searchId: number;
9
+ userId: number;
10
+ marketPlaceId: string | null;
11
+ marketPlaceName: string | null;
12
+ sellerId: string | null;
13
+ sellerName: string | null;
14
+ sellerSnapshot?: SellerSnapshotJSONB | null;
15
+ /**
16
+ * Ringkasan seller (avatar, rating, verified) — TURUNAN `sellerSnapshot`
17
+ * saat baca, bukan kolom DB.
18
+ */
19
+ sellerOther?: SellerSummaryJSONB | null;
20
+ type: SearchType | null;
21
+ name: string | null;
22
+ image: string | null;
23
+ link: string | null;
24
+ price: number | null;
25
+ formattedAmount: string | null;
26
+ location: string | null;
27
+ year: number | null;
28
+ other: Record<string, unknown> | null;
29
+ description: string | null;
30
+ isValid: boolean;
31
+ deleted: boolean;
32
+ createdAt: string;
33
+ createdBy: string | null;
34
+ updatedAt: string;
35
+ updatedBy: string | null;
36
+ };
37
+ /** Item + search pemiliknya (dipakai filter core). */
38
+ export type ItemWithSearch = ItemEntity & {
39
+ search: SearchWithUser | null;
40
+ };
41
+ //# sourceMappingURL=item.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item.types.d.ts","sourceRoot":"","sources":["../../src/types/item.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,iCAAiC;AACjC,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5C;;;OAGG;IACH,WAAW,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,sDAAsD;AACtD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG;IACxC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;CAC/B,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=item.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item.types.js","sourceRoot":"","sources":["../../src/types/item.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import type { NotificationChannelEnum } from '../enums/notification-channel.enum';
2
+ import type { UserWithRelations } from './user.types';
3
+ export interface NotificationAction {
4
+ label: string;
5
+ url: string;
6
+ }
7
+ export interface NotificationOverrides {
8
+ email?: {
9
+ html?: string;
10
+ subject?: string;
11
+ };
12
+ telegram?: {
13
+ parseMode?: 'HTML' | 'MarkdownV2';
14
+ replyMarkup?: unknown;
15
+ };
16
+ webApp?: {
17
+ icon?: string;
18
+ priority?: 'info' | 'warning' | 'urgent';
19
+ };
20
+ }
21
+ export interface MultiChannelNotificationPayload {
22
+ user: UserWithRelations;
23
+ channels: NotificationChannelEnum[];
24
+ title?: string;
25
+ message: string;
26
+ action?: NotificationAction;
27
+ overrides?: NotificationOverrides;
28
+ }
29
+ export interface MultiChannelDeliveryResult {
30
+ channel: NotificationChannelEnum;
31
+ success: boolean;
32
+ messageId?: string;
33
+ error?: string;
34
+ }
35
+ //# sourceMappingURL=notification.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.types.d.ts","sourceRoot":"","sources":["../../src/types/notification.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACxE,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAA;KAAE,CAAC;CACtE;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACnC;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,uBAAuB,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=notification.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.types.js","sourceRoot":"","sources":["../../src/types/notification.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { CoreValueJSONB } from './search-jsonb.types';
2
+ /** Representasi tabel `Option`. */
3
+ export type OptionEntity = {
4
+ id: number;
5
+ name: string;
6
+ value: CoreValueJSONB | null;
7
+ deleted: boolean;
8
+ createdAt: string;
9
+ createdBy: string | null;
10
+ updatedAt: string;
11
+ updatedBy: string | null;
12
+ };
13
+ //# sourceMappingURL=option.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.types.d.ts","sourceRoot":"","sources":["../../src/types/option.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,mCAAmC;AACnC,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=option.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.types.js","sourceRoot":"","sources":["../../src/types/option.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Katalog produk. `kind` sengaja string bebas (tanpa CHECK) supaya jenis produk
3
+ * baru tidak butuh migrasi. Nilai yang dipakai saat ini: `plan` (langganan) dan
4
+ * `retail` (sekali beli). Produk yang tidak berlangganan cukup tidak punya
5
+ * `ProductSearchProfile`/`ProductChannelProfile`.
6
+ */
7
+ export type ProductKind = 'plan' | 'retail';
8
+ /** Benefit marketing untuk kartu pricing. */
9
+ export interface ProductFeature {
10
+ key: string;
11
+ label: string;
12
+ included: boolean;
13
+ }
14
+ /** Profil slot per marketplace yang dijual sebuah scanner (tabel `ProductSearchMarketPlaceProfile`). */
15
+ export interface ProductSearchMarketPlaceProfileEntity {
16
+ id: number;
17
+ productSearchProfileId: number;
18
+ marketplace: string;
19
+ slot: number;
20
+ deleted?: boolean;
21
+ createdAt?: string;
22
+ updatedAt?: string;
23
+ }
24
+ /** Profil search yang dijual sebuah produk (tabel `ProductSearchProfile`). */
25
+ export interface ProductSearchProfileEntity {
26
+ id: number;
27
+ productId: number;
28
+ /** Slug stabil, dipakai baris langganan untuk menunjuk profil ini. */
29
+ key: string;
30
+ name: string;
31
+ /** Deskripsi/keterangan durasi pencarian (mis. '10 Menit durasi pencarian', 'Blazing fast'). */
32
+ description?: string | null;
33
+ /** Slot total dasar / fallback. */
34
+ slot?: number;
35
+ /** Delay antar-scrape (ms) yang dipakai search di profil ini. */
36
+ delayMilis: number;
37
+ /** Efek visual kartu di UI: basic, special-gradient, mythical. */
38
+ specialEffect?: 'basic' | 'special-gradient' | 'mythical';
39
+ /** Marketplace yang boleh dipakai search di profil ini (legacy). */
40
+ allowedMarketPlaces?: string[];
41
+ /** Rincian slot per marketplace. */
42
+ marketplaceProfiles?: ProductSearchMarketPlaceProfileEntity[];
43
+ deleted: boolean;
44
+ createdAt: string;
45
+ updatedAt: string;
46
+ }
47
+ /**
48
+ * Profil channel yang dijual sebuah produk (tabel `ProductChannelProfile`).
49
+ * Agnostik terhadap jenis channel: jenis (mis. `telegram`) dipilih user saat
50
+ * membuat channel dan divalidasi terhadap `SUPPORTED_CHANNEL_TYPES`.
51
+ */
52
+ export interface ProductChannelProfileEntity {
53
+ id: number;
54
+ productId: number;
55
+ key: string;
56
+ name: string;
57
+ slot: number;
58
+ deleted: boolean;
59
+ createdAt: string;
60
+ updatedAt: string;
61
+ }
62
+ /**
63
+ * Profil banned seller yang dijual sebuah produk (tabel `ProductBannedSellerProfile`).
64
+ */
65
+ export interface ProductBannedSellerProfileEntity {
66
+ id: number;
67
+ productId: number;
68
+ key: string;
69
+ name: string;
70
+ slot: number;
71
+ deleted: boolean;
72
+ createdAt: string;
73
+ updatedAt: string;
74
+ }
75
+ /** Representasi tabel `Product` — satu katalog untuk semua yang dijual. */
76
+ export type ProductEntity = {
77
+ id: number;
78
+ key: string;
79
+ name: string;
80
+ description: string | null;
81
+ kind: string;
82
+ priceCents: number;
83
+ /** Harga coret dekoratif jika ada diskon/promo. */
84
+ stripePriceCents?: number | null;
85
+ currency: string;
86
+ sortOrder: number;
87
+ isActive: boolean;
88
+ isPublic?: boolean;
89
+ features: ProductFeature[] | null;
90
+ searchProfiles: ProductSearchProfileEntity[];
91
+ channelProfiles: ProductChannelProfileEntity[];
92
+ bannedSellerProfiles?: ProductBannedSellerProfileEntity[];
93
+ deleted: boolean;
94
+ createdAt: string;
95
+ createdBy: string | null;
96
+ updatedAt: string;
97
+ updatedBy: string | null;
98
+ };
99
+ //# sourceMappingURL=product.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.types.d.ts","sourceRoot":"","sources":["../../src/types/product.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=product.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.types.js","sourceRoot":"","sources":["../../src/types/product.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ import type { InvalidFilterReason, ItemCheckStatus } from './item-check.types';
2
+ import type { SearchWithUser } from './search.types';
3
+ import type { SellerSnapshotJSONB } from './seller-snapshot.types';
4
+ import type { SearchType } from '../enums/search-type.enum';
5
+ /**
6
+ * Item hasil scrape yang belum tentu ada di DB (`id` null sampai core simpan).
7
+ * Satu-satunya bentuk item yang lalu-lalang di RMQ/IPC.
8
+ *
9
+ * `status`/`isValid`/`filters` diisi core: `status` oleh checkExist,
10
+ * `isValid` + `filters` oleh checkItems.
11
+ */
12
+ export type ScrapedItem = {
13
+ id?: number | null;
14
+ searchId: number;
15
+ userId: number;
16
+ marketPlaceId: string;
17
+ marketPlaceName?: string | null;
18
+ sellerId?: string | null;
19
+ sellerName?: string | null;
20
+ sellerSnapshot?: SellerSnapshotJSONB | null;
21
+ type?: SearchType | null;
22
+ name?: string | null;
23
+ image?: string | null;
24
+ link?: string | null;
25
+ price?: number | null;
26
+ formattedAmount?: string | null;
27
+ location?: string | null;
28
+ year?: number | null;
29
+ description?: string | null;
30
+ other?: Record<string, unknown> | null;
31
+ status?: ItemCheckStatus;
32
+ isValid?: boolean;
33
+ filters?: InvalidFilterReason[];
34
+ };
35
+ /**
36
+ * Envelope tunggal semua koneksi RMQ: search pemilik + item-itemnya.
37
+ * `engine.search` mengisi `searches` tanpa `items`; balikannya membawa `items`.
38
+ * Untuk AI, `items` selalu berisi tepat 1 item.
39
+ */
40
+ export type SearchWithItems = SearchWithUser & {
41
+ items: ScrapedItem[];
42
+ };
43
+ //# sourceMappingURL=scrape.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrape.types.d.ts","sourceRoot":"","sources":["../../src/types/scrape.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG;IAC7C,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=scrape.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrape.types.js","sourceRoot":"","sources":["../../src/types/scrape.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ import type { SearchType } from '../enums/search-type.enum';
2
+ import type { MatcherExpression } from './core-options.types';
3
+ export type LocationJSONB = {
4
+ name: string;
5
+ latitude: number;
6
+ longitude: number;
7
+ radiusKm: number;
8
+ };
9
+ export type MarketPlacePropJSONB = Record<string, {
10
+ type: string;
11
+ category: string;
12
+ subCategory?: string;
13
+ }>;
14
+ export type ItemFilterImage = {
15
+ noEmptyValue?: boolean;
16
+ };
17
+ export type ItemFilterLink = {
18
+ noEmptyValue?: boolean;
19
+ };
20
+ export type ItemFilterLocation = {
21
+ name?: {
22
+ noEmptyValue?: boolean;
23
+ contain?: MatcherExpression;
24
+ notContain?: MatcherExpression;
25
+ };
26
+ geoFencing?: {
27
+ active?: boolean;
28
+ noEmptyValue?: boolean;
29
+ };
30
+ };
31
+ export type ItemFilterName = {
32
+ noEmptyValue?: boolean;
33
+ contain?: MatcherExpression;
34
+ notContain?: MatcherExpression;
35
+ };
36
+ export type ItemFilterPrice = {
37
+ noEmptyValue?: boolean;
38
+ minPrice?: number;
39
+ maxPrice?: number;
40
+ };
41
+ export type ItemFilterYear = {
42
+ minYear?: number;
43
+ maxYear?: number;
44
+ };
45
+ export type ItemFilterDescription = {
46
+ noEmptyValue?: boolean;
47
+ contain?: MatcherExpression;
48
+ notContain?: MatcherExpression;
49
+ };
50
+ export type ItemFilterRating = {
51
+ noEmptyValue?: boolean;
52
+ minRating?: number;
53
+ };
54
+ export type ItemFilterScam = {
55
+ noEmptyValue?: boolean;
56
+ rejectScam?: boolean;
57
+ maxScam?: number;
58
+ };
59
+ export type ItemFilterJSONB = {
60
+ type?: SearchType;
61
+ image?: ItemFilterImage;
62
+ link?: ItemFilterLink;
63
+ location?: ItemFilterLocation;
64
+ name?: ItemFilterName;
65
+ price?: ItemFilterPrice;
66
+ year?: ItemFilterYear;
67
+ description?: ItemFilterDescription;
68
+ rating?: ItemFilterRating;
69
+ scam?: ItemFilterScam;
70
+ radiusKm?: number;
71
+ };
72
+ export type CoreValueJSONB = {
73
+ proxy?: {
74
+ host: string;
75
+ port: number;
76
+ username: string;
77
+ password: string;
78
+ };
79
+ orchestrator?: {
80
+ active: boolean;
81
+ orchestratorInterval: number;
82
+ orchestratorChunkSize: number;
83
+ };
84
+ engine?: {
85
+ pageTabPartitionSize: number;
86
+ redisTtlSeconds: number;
87
+ searchItemChunk: number;
88
+ pageTimeoutMiliseconds: number;
89
+ };
90
+ defaultValue?: {
91
+ itemFilter: ItemFilterJSONB;
92
+ marketPlaceProp: MarketPlacePropJSONB;
93
+ };
94
+ };
95
+ //# sourceMappingURL=search-jsonb.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-jsonb.types.d.ts","sourceRoot":"","sources":["../../src/types/search-jsonb.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=search-jsonb.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-jsonb.types.js","sourceRoot":"","sources":["../../src/types/search-jsonb.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import type { LocationJSONB, MarketPlacePropJSONB, ItemFilterJSONB } from './search-jsonb.types';
2
+ import type { UserWithRelations } from './user.types';
3
+ import type { FrozenSearchProfileEntity } from './subscription.types';
4
+ import type { SearchType } from '../enums/search-type.enum';
5
+ /** Representasi tabel `Search`. */
6
+ export type SearchEntity = {
7
+ id: number;
8
+ userId: number;
9
+ title: string;
10
+ type: SearchType;
11
+ typeLabelTranslation?: string;
12
+ marketPlaceProp: MarketPlacePropJSONB | null;
13
+ location: LocationJSONB | null;
14
+ targetName: string;
15
+ marketPlaces: string[];
16
+ lastScrappedEpoch: string | null;
17
+ filter: ItemFilterJSONB | null;
18
+ /**
19
+ * Profil scanner langganan yang membayar search ini
20
+ * (tabel `SubscriptionSearchProfile`); null = search lama, tidak dieksekusi.
21
+ */
22
+ subscriptionProfileId?: number | null;
23
+ subscriptionId?: number | null;
24
+ subscriptionName?: string | null;
25
+ isSubscriptionActive?: boolean;
26
+ /** Menandakan search berjalan (1 = berjalan, 0 = berhenti). */
27
+ isStart?: number;
28
+ deleted: boolean;
29
+ createdAt: string;
30
+ createdBy: string | null;
31
+ updatedAt: string;
32
+ updatedBy: string | null;
33
+ };
34
+ /** Search + user pemiliknya. */
35
+ export type SearchWithUser = SearchEntity & {
36
+ user?: UserWithRelations;
37
+ };
38
+ /** Data scanner yang ditempel ke search — subset profil scanner beku. */
39
+ export type SearchScannerInfo = Pick<FrozenSearchProfileEntity, 'key' | 'name' | 'specialEffect' | 'delayMilis'>;
40
+ /**
41
+ * Search + scanner pemilik slot-nya. Dipakai `GET /searches` supaya FE tidak
42
+ * perlu call `GET /plans/usage` hanya untuk menampilkan tipe scanner.
43
+ */
44
+ export type SearchWithScanner = SearchEntity & {
45
+ scanner?: SearchScannerInfo | null;
46
+ };
47
+ //# sourceMappingURL=search.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.types.d.ts","sourceRoot":"","sources":["../../src/types/search.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,mCAAmC;AACnC,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC7C,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,gCAAgC;AAChC,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG;IAC1C,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,yEAAyE;AACzE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,yBAAyB,EACzB,KAAK,GAAG,MAAM,GAAG,eAAe,GAAG,YAAY,CAChD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG;IAC7C,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACpC,CAAC"}