@smess/networking 1.2.0 → 2.0.0

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 (313) hide show
  1. package/CHANGELOG.md +211 -0
  2. package/README.md +165 -114
  3. package/dist/core/body.d.ts +10 -0
  4. package/dist/core/body.d.ts.map +1 -0
  5. package/dist/core/body.js +22 -0
  6. package/dist/core/body.js.map +1 -0
  7. package/dist/core/client.d.ts +74 -0
  8. package/dist/core/client.d.ts.map +1 -0
  9. package/dist/core/client.js +124 -0
  10. package/dist/core/client.js.map +1 -0
  11. package/dist/core/decoders.d.ts +8 -0
  12. package/dist/core/decoders.d.ts.map +1 -0
  13. package/dist/core/decoders.js +26 -0
  14. package/dist/core/decoders.js.map +1 -0
  15. package/dist/core/endpoint.d.ts +69 -0
  16. package/dist/core/endpoint.d.ts.map +1 -0
  17. package/dist/core/endpoint.js +6 -0
  18. package/dist/core/endpoint.js.map +1 -0
  19. package/dist/core/hosts.d.ts +25 -0
  20. package/dist/core/hosts.d.ts.map +1 -0
  21. package/dist/core/hosts.js +22 -0
  22. package/dist/core/hosts.js.map +1 -0
  23. package/dist/core/pagination.d.ts +33 -0
  24. package/dist/core/pagination.d.ts.map +1 -0
  25. package/dist/core/pagination.js +23 -0
  26. package/dist/core/pagination.js.map +1 -0
  27. package/dist/core/pipeline.d.ts +25 -0
  28. package/dist/core/pipeline.d.ts.map +1 -0
  29. package/dist/core/pipeline.js +12 -0
  30. package/dist/core/pipeline.js.map +1 -0
  31. package/dist/core/retry.d.ts +18 -0
  32. package/dist/core/retry.d.ts.map +1 -0
  33. package/dist/core/retry.js +47 -0
  34. package/dist/core/retry.js.map +1 -0
  35. package/dist/core/transport.d.ts +30 -0
  36. package/dist/core/transport.d.ts.map +1 -0
  37. package/dist/core/transport.js +73 -0
  38. package/dist/core/transport.js.map +1 -0
  39. package/dist/core/types.d.ts +24 -0
  40. package/dist/core/types.d.ts.map +1 -0
  41. package/dist/core/types.js +3 -0
  42. package/dist/core/types.js.map +1 -0
  43. package/dist/core/url.d.ts +15 -0
  44. package/dist/core/url.d.ts.map +1 -0
  45. package/dist/core/url.js +46 -0
  46. package/dist/core/url.js.map +1 -0
  47. package/dist/errors/parse-error-body.d.ts +20 -0
  48. package/dist/errors/parse-error-body.d.ts.map +1 -0
  49. package/dist/errors/parse-error-body.js +73 -0
  50. package/dist/errors/parse-error-body.js.map +1 -0
  51. package/dist/errors/smess-api-error.d.ts +70 -0
  52. package/dist/errors/smess-api-error.d.ts.map +1 -0
  53. package/dist/errors/smess-api-error.js +84 -0
  54. package/dist/errors/smess-api-error.js.map +1 -0
  55. package/dist/index.d.ts +27 -25
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +15 -29
  58. package/dist/index.js.map +1 -0
  59. package/dist/modules/authentication/index.d.ts +89 -0
  60. package/dist/modules/authentication/index.d.ts.map +1 -0
  61. package/dist/modules/authentication/index.js +128 -0
  62. package/dist/modules/authentication/index.js.map +1 -0
  63. package/dist/modules/campaign/index.d.ts +212 -0
  64. package/dist/modules/campaign/index.d.ts.map +1 -0
  65. package/dist/modules/campaign/index.js +193 -0
  66. package/dist/modules/campaign/index.js.map +1 -0
  67. package/dist/modules/campaign/types.d.ts +562 -0
  68. package/dist/modules/campaign/types.d.ts.map +1 -0
  69. package/dist/modules/campaign/types.js +2 -0
  70. package/dist/modules/campaign/types.js.map +1 -0
  71. package/dist/modules/danara/index.d.ts +153 -0
  72. package/dist/modules/danara/index.d.ts.map +1 -0
  73. package/dist/modules/danara/index.js +144 -0
  74. package/dist/modules/danara/index.js.map +1 -0
  75. package/dist/modules/danara/types.d.ts +479 -0
  76. package/dist/modules/danara/types.d.ts.map +1 -0
  77. package/dist/modules/danara/types.js +2 -0
  78. package/dist/modules/danara/types.js.map +1 -0
  79. package/dist/modules/smeup-file/index.d.ts +27 -0
  80. package/dist/modules/smeup-file/index.d.ts.map +1 -0
  81. package/dist/modules/smeup-file/index.js +17 -0
  82. package/dist/modules/smeup-file/index.js.map +1 -0
  83. package/dist/modules/sso/index.d.ts +40 -0
  84. package/dist/modules/sso/index.d.ts.map +1 -0
  85. package/dist/modules/sso/index.js +41 -0
  86. package/dist/modules/sso/index.js.map +1 -0
  87. package/dist/rx/index.d.ts +11 -0
  88. package/dist/rx/index.d.ts.map +1 -0
  89. package/dist/rx/index.js +20 -0
  90. package/dist/rx/index.js.map +1 -0
  91. package/dist/session/auth-middleware.d.ts +27 -0
  92. package/dist/session/auth-middleware.d.ts.map +1 -0
  93. package/dist/session/auth-middleware.js +122 -0
  94. package/dist/session/auth-middleware.js.map +1 -0
  95. package/dist/session/jwt.d.ts +20 -0
  96. package/dist/session/jwt.d.ts.map +1 -0
  97. package/dist/session/jwt.js +25 -0
  98. package/dist/session/jwt.js.map +1 -0
  99. package/dist/session/stores.d.ts +19 -0
  100. package/dist/session/stores.d.ts.map +1 -0
  101. package/dist/session/stores.js +103 -0
  102. package/dist/session/stores.js.map +1 -0
  103. package/dist/session/types.d.ts +28 -0
  104. package/dist/session/types.d.ts.map +1 -0
  105. package/dist/session/types.js +2 -0
  106. package/dist/session/types.js.map +1 -0
  107. package/package.json +80 -30
  108. package/dist/core/axios.d.ts +0 -51
  109. package/dist/core/axios.js +0 -65
  110. package/dist/core/axios.observable.d.ts +0 -11
  111. package/dist/core/axios.observable.js +0 -58
  112. package/dist/core/base.provider.advanced.test.d.ts +0 -1
  113. package/dist/core/base.provider.advanced.test.js +0 -29
  114. package/dist/core/base.provider.d.ts +0 -15
  115. package/dist/core/base.provider.js +0 -13
  116. package/dist/core/base.provider.test.d.ts +0 -1
  117. package/dist/core/base.provider.test.js +0 -36
  118. package/dist/core/base.service.wrapper.advanced.test.d.ts +0 -1
  119. package/dist/core/base.service.wrapper.advanced.test.js +0 -39
  120. package/dist/core/base.service.wrapper.d.ts +0 -7
  121. package/dist/core/base.service.wrapper.js +0 -11
  122. package/dist/core/base.service.wrapper.test.d.ts +0 -1
  123. package/dist/core/base.service.wrapper.test.js +0 -25
  124. package/dist/core/rx.http.service.d.ts +0 -51
  125. package/dist/core/rx.http.service.js +0 -65
  126. package/dist/services/auth.service.d.ts +0 -65
  127. package/dist/services/auth.service.js +0 -197
  128. package/dist/services/auth.service.test.d.ts +0 -1
  129. package/dist/services/auth.service.test.js +0 -334
  130. package/dist/services/cache.service.d.ts +0 -31
  131. package/dist/services/cache.service.js +0 -77
  132. package/dist/services/cache.service.test.d.ts +0 -1
  133. package/dist/services/cache.service.test.js +0 -88
  134. package/dist/services/customer.service.d.ts +0 -211
  135. package/dist/services/customer.service.js +0 -128
  136. package/dist/services/customer.service.test.d.ts +0 -1
  137. package/dist/services/customer.service.test.js +0 -430
  138. package/dist/services/employee.service.d.ts +0 -73
  139. package/dist/services/employee.service.js +0 -74
  140. package/dist/services/employee.service.test.d.ts +0 -1
  141. package/dist/services/employee.service.test.js +0 -127
  142. package/dist/services/logger.service.d.ts +0 -31
  143. package/dist/services/logger.service.js +0 -93
  144. package/dist/services/logger.service.test.d.ts +0 -1
  145. package/dist/services/logger.service.test.js +0 -31
  146. package/dist/services/order.service.d.ts +0 -73
  147. package/dist/services/order.service.js +0 -97
  148. package/dist/services/order.service.test.d.ts +0 -1
  149. package/dist/services/order.service.test.js +0 -163
  150. package/dist/services/product.service.d.ts +0 -21
  151. package/dist/services/product.service.js +0 -42
  152. package/dist/services/product.service.test.d.ts +0 -1
  153. package/dist/services/product.service.test.js +0 -61
  154. package/dist/services/smess.service.d.ts +0 -36
  155. package/dist/services/smess.service.js +0 -128
  156. package/dist/services/smess.service.test.d.ts +0 -1
  157. package/dist/services/smess.service.test.js +0 -103
  158. package/dist/services/store.cart.service.d.ts +0 -158
  159. package/dist/services/store.cart.service.js +0 -177
  160. package/dist/services/store.cart.service.test.d.ts +0 -1
  161. package/dist/services/store.cart.service.test.js +0 -394
  162. package/dist/services/store.product.service.d.ts +0 -124
  163. package/dist/services/store.product.service.js +0 -102
  164. package/dist/services/store.product.service.test.d.ts +0 -1
  165. package/dist/services/store.product.service.test.js +0 -319
  166. package/dist/services/store.service.d.ts +0 -79
  167. package/dist/services/store.service.js +0 -235
  168. package/dist/services/store.service.test.d.ts +0 -1
  169. package/dist/services/store.service.test.js +0 -274
  170. package/dist/services/storefront.cart.service.d.ts +0 -73
  171. package/dist/services/storefront.cart.service.js +0 -167
  172. package/dist/services/storefront.cart.service.test.d.ts +0 -1
  173. package/dist/services/storefront.cart.service.test.js +0 -211
  174. package/dist/services/storefront.checkout.service.d.ts +0 -62
  175. package/dist/services/storefront.checkout.service.js +0 -75
  176. package/dist/services/storefront.checkout.service.test.d.ts +0 -1
  177. package/dist/services/storefront.checkout.service.test.js +0 -158
  178. package/dist/services/storefront.customer.metadata.service.d.ts +0 -91
  179. package/dist/services/storefront.customer.metadata.service.js +0 -225
  180. package/dist/services/storefront.customer.metadata.service.test.d.ts +0 -1
  181. package/dist/services/storefront.customer.metadata.service.test.js +0 -271
  182. package/dist/services/storefront.order.service.d.ts +0 -45
  183. package/dist/services/storefront.order.service.js +0 -99
  184. package/dist/services/storefront.order.service.test.d.ts +0 -1
  185. package/dist/services/storefront.order.service.test.js +0 -158
  186. package/dist/services/storefront.product.service.d.ts +0 -52
  187. package/dist/services/storefront.product.service.js +0 -75
  188. package/dist/services/storefront.product.service.test.d.ts +0 -1
  189. package/dist/services/storefront.product.service.test.js +0 -120
  190. package/dist/services/storefront.store.service.d.ts +0 -54
  191. package/dist/services/storefront.store.service.js +0 -142
  192. package/dist/services/storefront.store.service.test.d.ts +0 -1
  193. package/dist/services/storefront.store.service.test.js +0 -90
  194. package/dist/services/user.service.d.ts +0 -16
  195. package/dist/services/user.service.js +0 -37
  196. package/dist/services/user.service.test.d.ts +0 -1
  197. package/dist/services/user.service.test.js +0 -52
  198. package/dist/services/utils/withAuthReset.d.ts +0 -3
  199. package/dist/services/utils/withAuthReset.js +0 -8
  200. package/dist/src/core/axios.d.ts +0 -51
  201. package/dist/src/core/axios.js +0 -65
  202. package/dist/src/core/axios.observable.d.ts +0 -11
  203. package/dist/src/core/axios.observable.js +0 -58
  204. package/dist/src/core/base.provider.advanced.test.d.ts +0 -1
  205. package/dist/src/core/base.provider.advanced.test.js +0 -29
  206. package/dist/src/core/base.provider.d.ts +0 -15
  207. package/dist/src/core/base.provider.js +0 -13
  208. package/dist/src/core/base.provider.test.d.ts +0 -1
  209. package/dist/src/core/base.provider.test.js +0 -36
  210. package/dist/src/core/base.service.wrapper.advanced.test.d.ts +0 -1
  211. package/dist/src/core/base.service.wrapper.advanced.test.js +0 -39
  212. package/dist/src/core/base.service.wrapper.d.ts +0 -7
  213. package/dist/src/core/base.service.wrapper.js +0 -11
  214. package/dist/src/core/base.service.wrapper.test.d.ts +0 -1
  215. package/dist/src/core/base.service.wrapper.test.js +0 -25
  216. package/dist/src/core/rx.http.service.d.ts +0 -51
  217. package/dist/src/core/rx.http.service.js +0 -65
  218. package/dist/src/index.d.ts +0 -25
  219. package/dist/src/index.js +0 -29
  220. package/dist/src/services/auth.service.d.ts +0 -65
  221. package/dist/src/services/auth.service.js +0 -197
  222. package/dist/src/services/auth.service.test.d.ts +0 -1
  223. package/dist/src/services/auth.service.test.js +0 -334
  224. package/dist/src/services/cache.service.d.ts +0 -31
  225. package/dist/src/services/cache.service.js +0 -77
  226. package/dist/src/services/cache.service.test.d.ts +0 -1
  227. package/dist/src/services/cache.service.test.js +0 -88
  228. package/dist/src/services/customer.service.d.ts +0 -199
  229. package/dist/src/services/customer.service.js +0 -114
  230. package/dist/src/services/customer.service.test.d.ts +0 -1
  231. package/dist/src/services/customer.service.test.js +0 -430
  232. package/dist/src/services/employee.service.d.ts +0 -73
  233. package/dist/src/services/employee.service.js +0 -74
  234. package/dist/src/services/employee.service.test.d.ts +0 -1
  235. package/dist/src/services/employee.service.test.js +0 -127
  236. package/dist/src/services/logger.service.d.ts +0 -31
  237. package/dist/src/services/logger.service.js +0 -93
  238. package/dist/src/services/logger.service.test.d.ts +0 -1
  239. package/dist/src/services/logger.service.test.js +0 -31
  240. package/dist/src/services/order.service.d.ts +0 -73
  241. package/dist/src/services/order.service.js +0 -97
  242. package/dist/src/services/order.service.test.d.ts +0 -1
  243. package/dist/src/services/order.service.test.js +0 -163
  244. package/dist/src/services/product.service.d.ts +0 -21
  245. package/dist/src/services/product.service.js +0 -42
  246. package/dist/src/services/product.service.test.d.ts +0 -1
  247. package/dist/src/services/product.service.test.js +0 -61
  248. package/dist/src/services/smess.service.d.ts +0 -36
  249. package/dist/src/services/smess.service.js +0 -128
  250. package/dist/src/services/smess.service.test.d.ts +0 -1
  251. package/dist/src/services/smess.service.test.js +0 -103
  252. package/dist/src/services/store.cart.service.d.ts +0 -158
  253. package/dist/src/services/store.cart.service.js +0 -177
  254. package/dist/src/services/store.cart.service.test.d.ts +0 -1
  255. package/dist/src/services/store.cart.service.test.js +0 -394
  256. package/dist/src/services/store.product.service.d.ts +0 -124
  257. package/dist/src/services/store.product.service.js +0 -102
  258. package/dist/src/services/store.product.service.test.d.ts +0 -1
  259. package/dist/src/services/store.product.service.test.js +0 -319
  260. package/dist/src/services/store.service.d.ts +0 -79
  261. package/dist/src/services/store.service.js +0 -235
  262. package/dist/src/services/store.service.test.d.ts +0 -1
  263. package/dist/src/services/store.service.test.js +0 -274
  264. package/dist/src/services/storefront.cart.service.d.ts +0 -73
  265. package/dist/src/services/storefront.cart.service.js +0 -167
  266. package/dist/src/services/storefront.cart.service.test.d.ts +0 -1
  267. package/dist/src/services/storefront.cart.service.test.js +0 -211
  268. package/dist/src/services/storefront.checkout.service.d.ts +0 -62
  269. package/dist/src/services/storefront.checkout.service.js +0 -75
  270. package/dist/src/services/storefront.checkout.service.test.d.ts +0 -1
  271. package/dist/src/services/storefront.checkout.service.test.js +0 -158
  272. package/dist/src/services/storefront.customer.metadata.service.d.ts +0 -91
  273. package/dist/src/services/storefront.customer.metadata.service.js +0 -225
  274. package/dist/src/services/storefront.customer.metadata.service.test.d.ts +0 -1
  275. package/dist/src/services/storefront.customer.metadata.service.test.js +0 -271
  276. package/dist/src/services/storefront.order.service.d.ts +0 -45
  277. package/dist/src/services/storefront.order.service.js +0 -99
  278. package/dist/src/services/storefront.order.service.test.d.ts +0 -1
  279. package/dist/src/services/storefront.order.service.test.js +0 -158
  280. package/dist/src/services/storefront.product.service.d.ts +0 -52
  281. package/dist/src/services/storefront.product.service.js +0 -75
  282. package/dist/src/services/storefront.product.service.test.d.ts +0 -1
  283. package/dist/src/services/storefront.product.service.test.js +0 -120
  284. package/dist/src/services/storefront.store.service.d.ts +0 -52
  285. package/dist/src/services/storefront.store.service.js +0 -140
  286. package/dist/src/services/storefront.store.service.test.d.ts +0 -1
  287. package/dist/src/services/storefront.store.service.test.js +0 -90
  288. package/dist/src/services/user.service.d.ts +0 -16
  289. package/dist/src/services/user.service.js +0 -37
  290. package/dist/src/services/user.service.test.d.ts +0 -1
  291. package/dist/src/services/user.service.test.js +0 -52
  292. package/dist/src/services/utils/withAuthReset.d.ts +0 -3
  293. package/dist/src/services/utils/withAuthReset.js +0 -8
  294. package/dist/src/types/types.d.ts +0 -93
  295. package/dist/src/types/types.js +0 -82
  296. package/dist/src/types/types.test.d.ts +0 -1
  297. package/dist/src/types/types.test.js +0 -25
  298. package/dist/src/utils/cache-import.d.ts +0 -3
  299. package/dist/src/utils/cache-import.js +0 -2
  300. package/dist/src/utils/networking-import.d.ts +0 -4
  301. package/dist/src/utils/networking-import.js +0 -3
  302. package/dist/src/utils/rxjs-import.d.ts +0 -5
  303. package/dist/src/utils/rxjs-import.js +0 -5
  304. package/dist/types/types.d.ts +0 -96
  305. package/dist/types/types.js +0 -82
  306. package/dist/types/types.test.d.ts +0 -1
  307. package/dist/types/types.test.js +0 -25
  308. package/dist/utils/cache-import.d.ts +0 -3
  309. package/dist/utils/cache-import.js +0 -2
  310. package/dist/utils/networking-import.d.ts +0 -4
  311. package/dist/utils/networking-import.js +0 -3
  312. package/dist/utils/rxjs-import.d.ts +0 -5
  313. package/dist/utils/rxjs-import.js +0 -5
@@ -0,0 +1,479 @@
1
+ /**
2
+ * Wire types of the Danara API (`src/Microservice/Danara`), from its transformers and request DTOs.
3
+ * Responses are hand-built arrays: keys are camelCase, nulls are kept, dates are ATOM
4
+ * (`2026-09-02T12:00:00+07:00`), money is a decimal string with trailing zeros trimmed (`"15000000"`).
5
+ * Request bodies accept camelCase and snake_case keys.
6
+ */
7
+ import type { PagedList } from '../../core/pagination.js';
8
+ export type { PagedList };
9
+ export type DanaraLocale = 'vi' | 'en';
10
+ export type DanaraRole = 'owner' | 'tenant' | 'staff' | 'admin';
11
+ export type DanaraAccountStatus = 'active' | 'pending' | 'suspended';
12
+ export type TourStatus = 'requested' | 'confirmed' | 'completed' | 'cancelled';
13
+ export type ApplicationStatus = 'pending' | 'reviewing' | 'approved' | 'rejected';
14
+ export type MaintenanceTicketStatus = 'open' | 'in_progress' | 'resolved';
15
+ export type OwnerInvoiceStatus = 'pending' | 'paid';
16
+ export type Occupancy = 'occupied' | 'vacant';
17
+ export interface DanaraUser {
18
+ /** The Customer id when one exists, else the User id. */
19
+ uuid: string;
20
+ email: string;
21
+ name: string;
22
+ role: DanaraRole;
23
+ /** Always one element today. */
24
+ roles: DanaraRole[];
25
+ /** The customer's status; `active` when there is no customer row. */
26
+ accountStatus: DanaraAccountStatus;
27
+ preferredLocale: DanaraLocale;
28
+ }
29
+ /** Login, OTP verify, register and reset answer with a token and the user. There is no refresh token. */
30
+ export interface DanaraAuthResponse {
31
+ token: string;
32
+ user: DanaraUser;
33
+ }
34
+ export interface DanaraLoginInput {
35
+ email: string;
36
+ password: string;
37
+ }
38
+ export interface DanaraRegisterInput {
39
+ email: string;
40
+ /** ≥ 6 characters. */
41
+ password: string;
42
+ name: string;
43
+ role: DanaraRole;
44
+ preferredLocale?: DanaraLocale | null;
45
+ }
46
+ export interface DanaraOtpRequestInput {
47
+ email: string;
48
+ preferredLocale?: DanaraLocale | null;
49
+ }
50
+ export interface DanaraOtpVerifyInput {
51
+ email: string;
52
+ /** Exactly 6 characters. */
53
+ code: string;
54
+ /** Used to create the account when the email has none yet. */
55
+ name?: string | null;
56
+ preferredLocale?: DanaraLocale | null;
57
+ }
58
+ export interface DanaraResetPasswordInput {
59
+ token: string;
60
+ /** ≥ 8 characters. */
61
+ newPassword: string;
62
+ }
63
+ export interface DanaraStatusOk {
64
+ status: 'ok';
65
+ }
66
+ export type ListingStatus = 'draft' | 'pending_verification' | 'verified' | 'published' | 'rented' | 'archived';
67
+ export interface Listing {
68
+ uuid: string;
69
+ /** Public identifier for detail URLs. */
70
+ slug: string;
71
+ titleVi: string;
72
+ titleEn: string;
73
+ rentPrice: string;
74
+ currency: string;
75
+ /** Public endpoints only return `published`. */
76
+ status: ListingStatus;
77
+ publishedAt: string | null;
78
+ propertyUuid: string;
79
+ bedrooms: number | null;
80
+ areaM2: number | null;
81
+ ward: string | null;
82
+ coverUrl: string | null;
83
+ imageUrls: string[];
84
+ descriptionVi: string | null;
85
+ descriptionEn: string | null;
86
+ /** As stored, not reformatted. */
87
+ availableFrom: string | null;
88
+ minLeaseMonths: number | null;
89
+ }
90
+ export interface ListingsQuery {
91
+ /** Default 1. */
92
+ page?: number;
93
+ /** Default 20. */
94
+ limit?: number;
95
+ /** Exact ward match. */
96
+ ward?: string;
97
+ /** `rentPrice <= maxPrice`; ignored when `maxPriceUnbounded`. */
98
+ maxPrice?: number;
99
+ maxPriceUnbounded?: boolean;
100
+ /** Exact match. */
101
+ bedrooms?: number;
102
+ }
103
+ export interface InquiryInput {
104
+ name: string;
105
+ email: string;
106
+ message?: string | null;
107
+ }
108
+ export interface Received {
109
+ uuid: string;
110
+ status: 'received';
111
+ }
112
+ export type SaleListingStatus = 'draft' | 'published' | 'under_offer' | 'sold';
113
+ export interface SaleListing {
114
+ uuid: string;
115
+ propertyUuid: string;
116
+ relatedRentalListingUuid: string | null;
117
+ titleVi: string;
118
+ titleEn: string;
119
+ descriptionVi: string | null;
120
+ descriptionEn: string | null;
121
+ salePrice: string;
122
+ currency: string;
123
+ status: SaleListingStatus;
124
+ publishedAt: string | null;
125
+ bedrooms: number | null;
126
+ areaM2: number | null;
127
+ ward: string | null;
128
+ coverUrl: string | null;
129
+ imageUrls: string[];
130
+ rentalHistoryMonths: number;
131
+ avgMonthlyRent: string;
132
+ occupancyRatePercent: number;
133
+ /** As stored, not reformatted. */
134
+ lastVerifiedAt: string | null;
135
+ }
136
+ export interface SalesQuery {
137
+ page?: number;
138
+ limit?: number;
139
+ }
140
+ export interface SaleInquiryInput {
141
+ name: string;
142
+ email: string;
143
+ phone: string;
144
+ message?: string | null;
145
+ /** Free text, ≤ 64. */
146
+ preferredViewingAt?: string | null;
147
+ }
148
+ export interface FitoutPackage {
149
+ uuid: string;
150
+ slug: string;
151
+ nameVi: string;
152
+ nameEn: string;
153
+ priceFrom: string;
154
+ currency: string;
155
+ durationWeeks: number;
156
+ /** `''` when empty (never null). */
157
+ descriptionVi: string;
158
+ descriptionEn: string;
159
+ scopeVi: string[];
160
+ scopeEn: string[];
161
+ coverUrl: string;
162
+ priceNoteVi: string;
163
+ priceNoteEn: string;
164
+ isCustom: boolean;
165
+ }
166
+ export type FitoutProjectStatus = 'quoted' | 'confirmed' | 'in_progress' | 'completed';
167
+ export interface FitoutProject {
168
+ uuid: string;
169
+ propertyUuid: string;
170
+ propertyTitleVi: string;
171
+ propertyTitleEn: string;
172
+ packageUuid: string;
173
+ packageNameVi: string;
174
+ packageNameEn: string;
175
+ status: FitoutProjectStatus;
176
+ updatedAt: string;
177
+ progressStep: number;
178
+ }
179
+ export interface QuotationInput {
180
+ packageUuid: string;
181
+ name: string;
182
+ email: string;
183
+ phone: string;
184
+ propertyAddress: string;
185
+ areaM2?: number | null;
186
+ bedrooms?: number | null;
187
+ /** Free text, ≤ 64. */
188
+ preferredStartDate?: string | null;
189
+ notes?: string | null;
190
+ }
191
+ export interface TourRequest {
192
+ uuid: string;
193
+ listingUuid: string;
194
+ scheduledAt: string;
195
+ /** `requested` when created. */
196
+ status: TourStatus;
197
+ }
198
+ export interface TourInput {
199
+ /** A published listing's uuid (not the slug). */
200
+ listingUuid: string;
201
+ /** Any date-time the server can parse; ISO 8601 recommended. */
202
+ scheduledAt: string;
203
+ note?: string | null;
204
+ }
205
+ export interface RentalApplication {
206
+ uuid: string;
207
+ listingUuid: string;
208
+ listingTitleVi: string;
209
+ listingTitleEn: string;
210
+ /** `pending` when created. */
211
+ status: ApplicationStatus;
212
+ submittedAt: string;
213
+ }
214
+ export interface ApplicationInput {
215
+ listingUuid: string;
216
+ message?: string | null;
217
+ }
218
+ export type RentalContractStatus = 'draft' | 'pending_sign' | 'signed' | 'expired';
219
+ export interface RentalContract {
220
+ uuid: string;
221
+ listingUuid: string;
222
+ status: RentalContractStatus;
223
+ signedAt: string | null;
224
+ }
225
+ export interface OwnerProperty {
226
+ uuid: string;
227
+ titleVi: string;
228
+ titleEn: string;
229
+ /** `vacant` by default. */
230
+ occupancy: Occupancy;
231
+ activeLeaseUuid: string | null;
232
+ }
233
+ export interface OwnerFinance {
234
+ propertyUuid: string;
235
+ revenue: string;
236
+ expenses: string;
237
+ currency: string;
238
+ }
239
+ export interface OwnerListingInput {
240
+ /** Stored as both titles. */
241
+ title: string;
242
+ locale?: DanaraLocale;
243
+ address: string;
244
+ areaNeighborhood?: string | null;
245
+ ward: string;
246
+ propertyType?: 'studio' | '1br' | '2br' | '3br' | 'penthouse' | null;
247
+ bedrooms?: number | null;
248
+ bathrooms?: number | null;
249
+ areaM2?: number | null;
250
+ rentPrice: number;
251
+ description?: string | null;
252
+ amenities?: string[];
253
+ coverUrl?: string | null;
254
+ photoUrls?: string[];
255
+ contactName?: string | null;
256
+ contactEmail?: string | null;
257
+ contactPhone?: string | null;
258
+ listerRole?: 'owner' | 'agent' | 'manager' | null;
259
+ }
260
+ export interface OwnerListingCreated {
261
+ uuid: string;
262
+ status: 'pending_verification';
263
+ }
264
+ export interface MaintenanceTicket {
265
+ uuid: string;
266
+ propertyUuid: string;
267
+ title: string;
268
+ /** `open` when created. */
269
+ status: MaintenanceTicketStatus;
270
+ createdAt: string;
271
+ }
272
+ export interface MaintenanceTicketInput {
273
+ propertyUuid: string;
274
+ title: string;
275
+ }
276
+ export interface BillingSummary {
277
+ managementFee: string;
278
+ rentalIncome: string;
279
+ currency: string;
280
+ }
281
+ export interface OwnerInvoice {
282
+ uuid: string;
283
+ amount: string;
284
+ currency: string;
285
+ /** `pending` by default. */
286
+ status: OwnerInvoiceStatus;
287
+ paidAt: string | null;
288
+ }
289
+ export type TransitLanguage = 'vi' | 'en' | 'fr' | 'es';
290
+ /** Added to every transit response. */
291
+ export interface TransitAttribution {
292
+ attribution: string;
293
+ licenseUrl: string;
294
+ importedAt: string | null;
295
+ }
296
+ export type TransitNoticeType = 'not_official' | 'not_listed' | 'renumbered' | 'suspended' | 'not_running_yet' | 'renamed' | 'endpoints_changed' | 'schedule_changed' | 'fare_changed' | 'stops_changed' | 'itinerary_updated' | 'missing_route';
297
+ export interface TransitNotice {
298
+ id: string;
299
+ type: TransitNoticeType;
300
+ severity: 'info' | 'warning';
301
+ message: string;
302
+ sourceUrl: string;
303
+ detectedAt: string;
304
+ }
305
+ export interface TransitRouteSummary {
306
+ id: string;
307
+ ref: string;
308
+ from: string | null;
309
+ to: string | null;
310
+ /** `HH:MM`. */
311
+ firstDeparture: string | null;
312
+ lastDeparture: string | null;
313
+ /** Null without a daily window (Asia/Ho_Chi_Minh time). */
314
+ runningNow: boolean | null;
315
+ intervalMinMinutes: number | null;
316
+ intervalMaxMinutes: number | null;
317
+ fareVnd: number | null;
318
+ lengthM: number;
319
+ stopCount: number;
320
+ estimatedMinutes: number;
321
+ }
322
+ export interface TransitLine {
323
+ ref: string;
324
+ operator: string | null;
325
+ network: string | null;
326
+ colour: string | null;
327
+ fareVnd: number | null;
328
+ notices: TransitNotice[];
329
+ directions: TransitRouteSummary[];
330
+ }
331
+ export interface TransitRouteStop {
332
+ id: string;
333
+ name: string;
334
+ lat: number;
335
+ lng: number;
336
+ /** 0-based. */
337
+ sequence: number;
338
+ distanceM: number;
339
+ minutesFromStart: number;
340
+ boarding: boolean;
341
+ alighting: boolean;
342
+ }
343
+ export interface TransitRouteDetail extends TransitRouteSummary {
344
+ name: string;
345
+ operator: string | null;
346
+ network: string | null;
347
+ colour: string | null;
348
+ openingHours: string | null;
349
+ /** Encoded polyline, precision 5. */
350
+ geometry: string;
351
+ geometryFormat: 'polyline5';
352
+ stops: TransitRouteStop[];
353
+ notices: TransitNotice[];
354
+ }
355
+ export interface TransitStopLine {
356
+ routeId: string;
357
+ ref: string;
358
+ to: string | null;
359
+ colour: string | null;
360
+ boarding: boolean;
361
+ }
362
+ export interface TransitStop {
363
+ id: string;
364
+ name: string;
365
+ lat: number;
366
+ lng: number;
367
+ lines: TransitStopLine[];
368
+ }
369
+ export interface TransitNearbyStop extends TransitStop {
370
+ /** Straight line, rounded. */
371
+ distanceM: number;
372
+ walkM: number;
373
+ walkMinutes: number;
374
+ }
375
+ export interface TransitAssumptions {
376
+ busKmh: number;
377
+ walkKmh: number;
378
+ walkDetourFactor: number;
379
+ maxWalkM: number;
380
+ maxTransferM: number;
381
+ }
382
+ export interface TransitPlanStop {
383
+ id: string;
384
+ name: string;
385
+ lat: number;
386
+ lng: number;
387
+ }
388
+ export interface TransitWalkLeg {
389
+ type: 'walk';
390
+ kind: 'to_stop' | 'change' | 'to_destination';
391
+ fromStop: TransitPlanStop | null;
392
+ toStop: TransitPlanStop | null;
393
+ distanceM: number;
394
+ minutes: number;
395
+ }
396
+ export interface TransitBusLeg {
397
+ type: 'bus';
398
+ routeId: string;
399
+ ref: string;
400
+ name: string;
401
+ headsign: string | null;
402
+ colour: string | null;
403
+ boardStop: TransitPlanStop & {
404
+ sequence: number;
405
+ };
406
+ alightStop: TransitPlanStop & {
407
+ sequence: number;
408
+ };
409
+ stopCount: number;
410
+ distanceM: number;
411
+ minutes: number;
412
+ waitMinutes: number | null;
413
+ fareVnd: number | null;
414
+ intervalMinMinutes: number | null;
415
+ intervalMaxMinutes: number | null;
416
+ firstDeparture: string | null;
417
+ lastDeparture: string | null;
418
+ runningNow: boolean | null;
419
+ notices: TransitNotice[];
420
+ }
421
+ export interface TransitPlanOption {
422
+ totalMinutes: number;
423
+ changes: number;
424
+ /** Null when any leg's fare is unknown. */
425
+ fareVnd: number | null;
426
+ legs: (TransitWalkLeg | TransitBusLeg)[];
427
+ }
428
+ export type TransitRoutesResponse = {
429
+ data: TransitLine[];
430
+ } & TransitAttribution;
431
+ export type TransitRouteResponse = {
432
+ data: TransitRouteDetail;
433
+ } & TransitAttribution;
434
+ export type TransitNearbyResponse = {
435
+ data: TransitNearbyStop[];
436
+ estimate: true;
437
+ assumptions: TransitAssumptions;
438
+ } & TransitAttribution;
439
+ export type TransitSearchResponse = {
440
+ data: TransitStop[];
441
+ } & TransitAttribution;
442
+ export type TransitAnnouncementsResponse = {
443
+ data: (TransitNotice & {
444
+ ref: string;
445
+ })[];
446
+ lang: TransitLanguage;
447
+ source: string;
448
+ } & TransitAttribution;
449
+ export type TransitPlanResponse = {
450
+ /** At most 3; may be empty. */
451
+ data: TransitPlanOption[];
452
+ walkOnly: {
453
+ distanceM: number;
454
+ minutes: number;
455
+ };
456
+ estimate: true;
457
+ assumptions: TransitAssumptions;
458
+ } & TransitAttribution;
459
+ export interface TransitLanguageQuery {
460
+ /** Otherwise `Accept-Language`, then `vi`. */
461
+ lang?: TransitLanguage;
462
+ }
463
+ export interface TransitNearbyQuery extends TransitLanguageQuery {
464
+ lat: number;
465
+ lng: number;
466
+ /** Metres, 50–2000, default 500. */
467
+ radius?: number;
468
+ }
469
+ export interface TransitPlanQuery extends TransitLanguageQuery {
470
+ fromLat: number;
471
+ fromLng: number;
472
+ toLat: number;
473
+ toLng: number;
474
+ }
475
+ export interface DanaraHealth {
476
+ module: 'danara';
477
+ status: 'ok';
478
+ }
479
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/danara/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/danara/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * SMEUp files (`src/Microservice/SMEUpFile`, host `app.smeup_file_host` → api.smess.vn).
3
+ * The file name is the storage key: give each upload a unique one or it replaces the earlier file.
4
+ */
5
+ import type { SmessClient } from '../../core/client.js';
6
+ /** `SMEUpFileGetDto`, plain `json_encode` (camelCase, nulls kept). */
7
+ export interface SmeupFile {
8
+ id: string | null;
9
+ name: string | null;
10
+ path: string | null;
11
+ /** Public URL of the stored file. */
12
+ realPath: string | null;
13
+ }
14
+ export interface SmeupFileUploadInput {
15
+ /** Storage key, ≤ 255 characters. */
16
+ name: string;
17
+ /** A data URL (`data:image/png;base64,…`), ≤ 7 MB of text. */
18
+ base64_image: string;
19
+ }
20
+ export declare const smeupFileEndpoints: {
21
+ readonly upload: import("../../core/endpoint.js").Endpoint<"/v1/smeup-files/upload", SmeupFileUploadInput, never, SmeupFile>;
22
+ };
23
+ export declare function smeupFile(client: SmessClient): {
24
+ upload: (input: SmeupFileUploadInput) => Promise<SmeupFile>;
25
+ };
26
+ export type SmeupFileModule = ReturnType<typeof smeupFile>;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/smeup-file/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD,sEAAsE;AACtE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,kBAAkB;;CAQrB,CAAC;AAEX,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW;oBAEzB,oBAAoB;EAEvC;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { unwrapData } from '../../core/decoders.js';
2
+ import { defineEndpoint } from '../../core/endpoint.js';
3
+ export const smeupFileEndpoints = {
4
+ upload: defineEndpoint()({
5
+ service: 'smeupFile',
6
+ method: 'POST',
7
+ path: '/v1/smeup-files/upload',
8
+ auth: 'required',
9
+ decode: unwrapData,
10
+ }),
11
+ };
12
+ export function smeupFile(client) {
13
+ return {
14
+ upload: (input) => client.call(smeupFileEndpoints.upload, { body: input }),
15
+ };
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/smeup-file/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAkBxD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,cAAc,EAAmC,CAAC;QACxD,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,UAAU;KACnB,CAAC;CACM,CAAC;AAEX,MAAM,UAAU,SAAS,CAAC,MAAmB;IAC3C,OAAO;QACL,MAAM,EAAE,CAAC,KAA2B,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KACjG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Company single sign-on (`src/Microservice/Sso`, host `app.sso_host` → sso.smess.vn).
3
+ *
4
+ * 1. `start(provider, { app })` returns the provider's authorization URL; navigate the browser there.
5
+ * 2. The provider returns to `https://sso.smess.vn/sso/{provider}/callback`, which redirects to
6
+ * `{appUrl}/sso#token=…&refresh_token=…&email=…` (tokens in the fragment, never sent to a server),
7
+ * or to `{appUrl}/login?sso_error=<message>`.
8
+ * 3. On the `/sso` page call `completeLogin(location.hash)`.
9
+ */
10
+ import type { SmessClient } from '../../core/client.js';
11
+ import type { Session } from '../../session/types.js';
12
+ /** Provider keys configured in core (`entra-id` today). */
13
+ export type SsoProvider = 'entra-id' | (string & Record<never, never>);
14
+ export interface SsoAuthorization {
15
+ object: 'sso_authorization';
16
+ authorization_url: string;
17
+ }
18
+ export interface SsoStartInput {
19
+ /** The app key registered in core's Sso module (e.g. `smeup-email`). */
20
+ app: string;
21
+ }
22
+ export declare const ssoEndpoints: {
23
+ readonly start: import("../../core/endpoint.js").Endpoint<"/v1/sso/{provider}/start", SsoStartInput, never, SsoAuthorization>;
24
+ };
25
+ export interface SsoCallbackResult {
26
+ session: Session;
27
+ email: string | null;
28
+ }
29
+ /** Reads the tokens from the `/sso` page fragment (`#token=…&refresh_token=…&email=…`); null when absent. */
30
+ export declare function parseSsoCallback(hash: string): SsoCallbackResult | null;
31
+ /** The message core put in `?sso_error=` on the app's `/login` page, or null. */
32
+ export declare function readSsoError(search: string): string | null;
33
+ export declare function sso(client: SmessClient): {
34
+ /** The provider's sign-in URL for this app. */
35
+ start: (provider: SsoProvider, input: SsoStartInput) => Promise<string>;
36
+ /** Saves the session carried by the callback fragment. Fails with `unauthenticated` / `sso_no_token`. */
37
+ completeLogin: (hash: string) => Promise<SsoCallbackResult>;
38
+ };
39
+ export type SsoModule = ReturnType<typeof sso>;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/sso/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,2DAA2D;AAC3D,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,YAAY;;CAOf,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,6GAA6G;AAC7G,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAQvE;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE1D;AAED,wBAAgB,GAAG,CAAC,MAAM,EAAE,WAAW;IAEnC,+CAA+C;sBACvB,WAAW,SAAS,aAAa;IAGzD,yGAAyG;0BAC7E,MAAM,KAAG,OAAO,CAAC,iBAAiB,CAAC;EASlE;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { defineEndpoint } from '../../core/endpoint.js';
2
+ import { SmessApiError } from '../../errors/smess-api-error.js';
3
+ export const ssoEndpoints = {
4
+ start: defineEndpoint()({
5
+ service: 'sso',
6
+ method: 'POST',
7
+ path: '/v1/sso/{provider}/start',
8
+ auth: 'none',
9
+ }),
10
+ };
11
+ /** Reads the tokens from the `/sso` page fragment (`#token=…&refresh_token=…&email=…`); null when absent. */
12
+ export function parseSsoCallback(hash) {
13
+ const params = new URLSearchParams(hash.startsWith('#') ? hash.slice(1) : hash);
14
+ const token = params.get('token');
15
+ if (!token)
16
+ return null;
17
+ return {
18
+ session: { accessToken: token, refreshToken: params.get('refresh_token') || null },
19
+ email: params.get('email') || null,
20
+ };
21
+ }
22
+ /** The message core put in `?sso_error=` on the app's `/login` page, or null. */
23
+ export function readSsoError(search) {
24
+ return new URLSearchParams(search.startsWith('?') ? search.slice(1) : search).get('sso_error') || null;
25
+ }
26
+ export function sso(client) {
27
+ return {
28
+ /** The provider's sign-in URL for this app. */
29
+ start: async (provider, input) => (await client.call(ssoEndpoints.start, { path: { provider }, body: input })).authorization_url,
30
+ /** Saves the session carried by the callback fragment. Fails with `unauthenticated` / `sso_no_token`. */
31
+ completeLogin: async (hash) => {
32
+ const result = parseSsoCallback(hash);
33
+ if (!result) {
34
+ throw new SmessApiError({ kind: 'unauthenticated', code: 'sso_no_token', message: 'The sign-in response has no token.' });
35
+ }
36
+ await client.session.set(result.session);
37
+ return result;
38
+ },
39
+ };
40
+ }
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/sso/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAgBhE,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,cAAc,EAAmC,CAAC;QACvD,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,0BAA0B;QAChC,IAAI,EAAE,MAAM;KACb,CAAC;CACM,CAAC;AAOX,6GAA6G;AAC7G,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO;QACL,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE;QAClF,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;KACnC,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,MAAmB;IACrC,OAAO;QACL,+CAA+C;QAC/C,KAAK,EAAE,KAAK,EAAE,QAAqB,EAAE,KAAoB,EAAE,EAAE,CAC3D,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,iBAAiB;QAEhG,yGAAyG;QACzG,aAAa,EAAE,KAAK,EAAE,IAAY,EAA8B,EAAE;YAChE,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;YAC5H,CAAC;YACD,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Optional RxJS adapter (peer dependency `rxjs`). Wraps a promise-returning call in a cold Observable
3
+ * that aborts the HTTP request when the subscriber unsubscribes.
4
+ *
5
+ * ```ts
6
+ * fromSmess((signal) => email.templates.list({ signal })).subscribe(...)
7
+ * ```
8
+ */
9
+ import { Observable } from 'rxjs';
10
+ export declare function fromSmess<T>(call: (signal: AbortSignal) => Promise<T>): Observable<T>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rx/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAYrF"}