target-supabase-sdk 0.1.9 → 0.2.1

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 (464) hide show
  1. package/README.md +184 -1
  2. package/dist/browser.d.ts +60 -0
  3. package/dist/browser.d.ts.map +1 -0
  4. package/dist/browser.js +6 -0
  5. package/dist/browser.js.map +1 -0
  6. package/dist/chunks/create-logger-DyH3mZ8p.js +1028 -0
  7. package/dist/chunks/create-logger-DyH3mZ8p.js.map +1 -0
  8. package/dist/chunks/enable-log-persist-C_bSw6Kx.js +1362 -0
  9. package/dist/chunks/enable-log-persist-C_bSw6Kx.js.map +1 -0
  10. package/dist/chunks/word.interface-DLgRobKV.js +1973 -0
  11. package/dist/chunks/word.interface-DLgRobKV.js.map +1 -0
  12. package/dist/command/command.api.d.ts +1 -1
  13. package/dist/command/command.api.d.ts.map +1 -1
  14. package/dist/command/command.interface.d.ts +1 -1
  15. package/dist/command/command.interface.d.ts.map +1 -1
  16. package/dist/core.api.d.ts +10 -6
  17. package/dist/core.api.d.ts.map +1 -1
  18. package/dist/core.interface.d.ts +3 -2
  19. package/dist/core.interface.d.ts.map +1 -1
  20. package/dist/core.utils.d.ts +1 -1
  21. package/dist/core.utils.d.ts.map +1 -1
  22. package/dist/idea/idea.interface.d.ts +1 -1
  23. package/dist/idea/idea.interface.d.ts.map +1 -1
  24. package/dist/index.d.ts +2 -48
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/link/link.api.d.ts +1 -1
  27. package/dist/link/link.api.d.ts.map +1 -1
  28. package/dist/link/link.interface.d.ts +3 -3
  29. package/dist/link/link.interface.d.ts.map +1 -1
  30. package/dist/list/list.api.d.ts +3 -1
  31. package/dist/list/list.api.d.ts.map +1 -1
  32. package/dist/list/list.interface.d.ts +2 -2
  33. package/dist/list/list.interface.d.ts.map +1 -1
  34. package/dist/node/env/env-parsers.d.ts +19 -0
  35. package/dist/node/env/env-parsers.d.ts.map +1 -0
  36. package/dist/node/env/index.d.ts +11 -0
  37. package/dist/node/env/index.d.ts.map +1 -0
  38. package/dist/node/env/init-supabase-from-env.d.ts +17 -0
  39. package/dist/node/env/init-supabase-from-env.d.ts.map +1 -0
  40. package/dist/node/env/load-env.d.ts +20 -0
  41. package/dist/node/env/load-env.d.ts.map +1 -0
  42. package/dist/node/env/project-root.d.ts +11 -0
  43. package/dist/node/env/project-root.d.ts.map +1 -0
  44. package/dist/node/env/public-base-url.d.ts +10 -0
  45. package/dist/node/env/public-base-url.d.ts.map +1 -0
  46. package/dist/node/env/require-env.d.ts +3 -0
  47. package/dist/node/env/require-env.d.ts.map +1 -0
  48. package/dist/node/fs/json-state-store.d.ts +19 -0
  49. package/dist/node/fs/json-state-store.d.ts.map +1 -0
  50. package/dist/node/fs/read-source-file.d.ts +19 -0
  51. package/dist/node/fs/read-source-file.d.ts.map +1 -0
  52. package/dist/node/node-liveness.d.ts +30 -0
  53. package/dist/node/node-liveness.d.ts.map +1 -0
  54. package/dist/node/node-runtime.base.d.ts +60 -0
  55. package/dist/node/node-runtime.base.d.ts.map +1 -0
  56. package/dist/node/node.api.d.ts +4 -4
  57. package/dist/node/node.api.d.ts.map +1 -1
  58. package/dist/node/node.interface.d.ts +1 -6
  59. package/dist/node/node.interface.d.ts.map +1 -1
  60. package/dist/node/preload/run-service-preload.d.ts +14 -0
  61. package/dist/node/preload/run-service-preload.d.ts.map +1 -0
  62. package/dist/node/preload/service-preload.interface.d.ts +15 -0
  63. package/dist/node/preload/service-preload.interface.d.ts.map +1 -0
  64. package/dist/node/process/index.d.ts +5 -0
  65. package/dist/node/process/index.d.ts.map +1 -0
  66. package/dist/node/process/managed-child-processes.d.ts +37 -0
  67. package/dist/node/process/managed-child-processes.d.ts.map +1 -0
  68. package/dist/node/process/process-spawn.d.ts +27 -0
  69. package/dist/node/process/process-spawn.d.ts.map +1 -0
  70. package/dist/node/readiness/index.d.ts +9 -0
  71. package/dist/node/readiness/index.d.ts.map +1 -0
  72. package/dist/node/readiness/poll-until.d.ts +11 -0
  73. package/dist/node/readiness/poll-until.d.ts.map +1 -0
  74. package/dist/node/readiness/readiness-checks.d.ts +22 -0
  75. package/dist/node/readiness/readiness-checks.d.ts.map +1 -0
  76. package/dist/node/readiness/readiness.types.d.ts +12 -0
  77. package/dist/node/readiness/readiness.types.d.ts.map +1 -0
  78. package/dist/node/readiness/run-readiness-checks.d.ts +4 -0
  79. package/dist/node/readiness/run-readiness-checks.d.ts.map +1 -0
  80. package/dist/node/readiness/service-ready-gate.d.ts +26 -0
  81. package/dist/node/readiness/service-ready-gate.d.ts.map +1 -0
  82. package/dist/node.d.ts +36 -0
  83. package/dist/node.d.ts.map +1 -0
  84. package/dist/node.js +2483 -0
  85. package/dist/node.js.map +1 -0
  86. package/dist/parcel/chunk-fetch-registry.d.ts +14 -0
  87. package/dist/parcel/chunk-fetch-registry.d.ts.map +1 -0
  88. package/dist/parcel/chunk-url.utils.d.ts +9 -0
  89. package/dist/parcel/chunk-url.utils.d.ts.map +1 -0
  90. package/dist/parcel/parcel-manager.d.ts +44 -20
  91. package/dist/parcel/parcel-manager.d.ts.map +1 -1
  92. package/dist/parcel/parcel.api.d.ts +306 -0
  93. package/dist/parcel/parcel.api.d.ts.map +1 -0
  94. package/dist/parcel/parcel.interface.d.ts +26 -5
  95. package/dist/parcel/parcel.interface.d.ts.map +1 -1
  96. package/dist/parcel/parcel.service.d.ts +38 -0
  97. package/dist/parcel/parcel.service.d.ts.map +1 -0
  98. package/dist/parcel/storage-provider-registry.d.ts +17 -0
  99. package/dist/parcel/storage-provider-registry.d.ts.map +1 -0
  100. package/dist/parcel/storage-provider.types.d.ts +31 -0
  101. package/dist/parcel/storage-provider.types.d.ts.map +1 -0
  102. package/dist/preload.d.ts +7 -0
  103. package/dist/preload.d.ts.map +1 -0
  104. package/dist/preload.js +47 -0
  105. package/dist/preload.js.map +1 -0
  106. package/dist/repo/repo-context.utils.d.ts.map +1 -1
  107. package/dist/repo/repo-manager.d.ts +14 -3
  108. package/dist/repo/repo-manager.d.ts.map +1 -1
  109. package/dist/repo/repo.api.d.ts +1 -1
  110. package/dist/repo/repo.api.d.ts.map +1 -1
  111. package/dist/repo/repo.interface.d.ts +1 -1
  112. package/dist/repo/repo.interface.d.ts.map +1 -1
  113. package/dist/repo/repo.script-loader.d.ts +5 -5
  114. package/dist/repo/repo.script-loader.d.ts.map +1 -1
  115. package/dist/service/base.interface.d.ts +54 -57
  116. package/dist/service/base.interface.d.ts.map +1 -1
  117. package/dist/service/index.d.ts +21 -0
  118. package/dist/service/index.d.ts.map +1 -0
  119. package/dist/service/service.api.d.ts +503 -0
  120. package/dist/service/service.api.d.ts.map +1 -0
  121. package/dist/service/service.interface.d.ts +36 -9
  122. package/dist/service/service.interface.d.ts.map +1 -1
  123. package/dist/shared/http/fetch-retry.d.ts +21 -0
  124. package/dist/shared/http/fetch-retry.d.ts.map +1 -0
  125. package/dist/shared/log/create-logger.d.ts +27 -0
  126. package/dist/shared/log/create-logger.d.ts.map +1 -0
  127. package/dist/shared/log/enable-log-persist.d.ts +28 -0
  128. package/dist/shared/log/enable-log-persist.d.ts.map +1 -0
  129. package/dist/shared/log/index.d.ts +10 -0
  130. package/dist/shared/log/index.d.ts.map +1 -0
  131. package/dist/shared/log/log-manager.d.ts +37 -60
  132. package/dist/shared/log/log-manager.d.ts.map +1 -1
  133. package/dist/shared/log/log-persist-batch-id.d.ts +13 -0
  134. package/dist/shared/log/log-persist-batch-id.d.ts.map +1 -0
  135. package/dist/shared/log/log-persist-flush.d.ts +8 -0
  136. package/dist/shared/log/log-persist-flush.d.ts.map +1 -0
  137. package/dist/shared/log/log-persist-hook.d.ts +6 -0
  138. package/dist/shared/log/log-persist-hook.d.ts.map +1 -0
  139. package/dist/shared/log/log-persist-logger.d.ts +15 -0
  140. package/dist/shared/log/log-persist-logger.d.ts.map +1 -0
  141. package/dist/shared/log/log-persist-registry.d.ts +17 -0
  142. package/dist/shared/log/log-persist-registry.d.ts.map +1 -0
  143. package/dist/shared/log/log-persist.config.d.ts +10 -0
  144. package/dist/shared/log/log-persist.config.d.ts.map +1 -0
  145. package/dist/shared/log/log-persist.d.ts +55 -0
  146. package/dist/shared/log/log-persist.d.ts.map +1 -0
  147. package/dist/shared/log/log-persist.interface.d.ts +116 -0
  148. package/dist/shared/log/log-persist.interface.d.ts.map +1 -0
  149. package/dist/shared/log/log-scope.d.ts +56 -0
  150. package/dist/shared/log/log-scope.d.ts.map +1 -0
  151. package/dist/shared/utils/fetch-url.d.ts +3 -0
  152. package/dist/shared/utils/fetch-url.d.ts.map +1 -0
  153. package/dist/shared/utils/network-error.d.ts +14 -0
  154. package/dist/shared/utils/network-error.d.ts.map +1 -0
  155. package/dist/shared/utils/safe-file-name.d.ts +14 -0
  156. package/dist/shared/utils/safe-file-name.d.ts.map +1 -0
  157. package/dist/shared/utils/sha256.d.ts +3 -0
  158. package/dist/shared/utils/sha256.d.ts.map +1 -0
  159. package/dist/supabase.d.ts +7 -2
  160. package/dist/supabase.d.ts.map +1 -1
  161. package/dist/task/index.d.ts +16 -0
  162. package/dist/task/index.d.ts.map +1 -0
  163. package/dist/task/local-task-registry.d.ts +11 -1
  164. package/dist/task/local-task-registry.d.ts.map +1 -1
  165. package/dist/task/task-manager.d.ts +21 -11
  166. package/dist/task/task-manager.d.ts.map +1 -1
  167. package/dist/task/task-node.d.ts +19 -0
  168. package/dist/task/task-node.d.ts.map +1 -0
  169. package/dist/task/task-post-validated.api.d.ts +19 -0
  170. package/dist/task/task-post-validated.api.d.ts.map +1 -0
  171. package/dist/task/task-post.api.d.ts +54 -0
  172. package/dist/task/task-post.api.d.ts.map +1 -0
  173. package/dist/task/task-queue.d.ts +7 -0
  174. package/dist/task/task-queue.d.ts.map +1 -0
  175. package/dist/task/task-repo-context.d.ts +2 -0
  176. package/dist/task/task-repo-context.d.ts.map +1 -1
  177. package/dist/task/task-repo-validation.d.ts +46 -0
  178. package/dist/task/task-repo-validation.d.ts.map +1 -0
  179. package/dist/task/task.api.d.ts +5 -47
  180. package/dist/task/task.api.d.ts.map +1 -1
  181. package/dist/task/task.constant.d.ts +4 -0
  182. package/dist/task/task.constant.d.ts.map +1 -0
  183. package/dist/task/task.interface.d.ts +3 -1
  184. package/dist/task/task.interface.d.ts.map +1 -1
  185. package/dist/trigger/trigger-manager.d.ts +25 -0
  186. package/dist/trigger/trigger-manager.d.ts.map +1 -0
  187. package/dist/trigger/trigger-node.d.ts +23 -0
  188. package/dist/trigger/trigger-node.d.ts.map +1 -0
  189. package/dist/trigger/trigger.api.d.ts +140 -0
  190. package/dist/trigger/trigger.api.d.ts.map +1 -0
  191. package/dist/trigger/trigger.constant.d.ts +8 -0
  192. package/dist/trigger/trigger.constant.d.ts.map +1 -0
  193. package/dist/trigger/trigger.interface.d.ts +87 -0
  194. package/dist/trigger/trigger.interface.d.ts.map +1 -0
  195. package/dist/trigger/trigger.utils.d.ts +6 -0
  196. package/dist/trigger/trigger.utils.d.ts.map +1 -0
  197. package/dist/word/word.api.d.ts +1 -1
  198. package/dist/word/word.api.d.ts.map +1 -1
  199. package/dist/word/word.interface.d.ts +2 -2
  200. package/dist/word/word.interface.d.ts.map +1 -1
  201. package/package.json +91 -61
  202. package/src/browser.ts +165 -0
  203. package/src/command/command.api.ts +20 -18
  204. package/src/command/command.interface.ts +2 -3
  205. package/src/core.api.ts +466 -477
  206. package/src/core.interface.ts +63 -62
  207. package/src/core.utils.ts +64 -64
  208. package/src/idea/idea.interface.ts +3 -3
  209. package/src/index.ts +2 -79
  210. package/src/link/link.api.ts +28 -30
  211. package/src/link/link.interface.ts +4 -5
  212. package/src/list/list.api.ts +50 -29
  213. package/src/list/list.interface.ts +3 -4
  214. package/src/node/env/env-parsers.ts +77 -0
  215. package/src/node/env/index.ts +10 -0
  216. package/src/node/env/init-supabase-from-env.ts +38 -0
  217. package/src/node/env/load-env.ts +67 -0
  218. package/src/node/env/project-root.ts +34 -0
  219. package/src/node/env/public-base-url.ts +18 -0
  220. package/src/node/env/require-env.ts +15 -0
  221. package/src/node/fs/json-state-store.ts +97 -0
  222. package/src/node/fs/read-source-file.ts +75 -0
  223. package/src/node/node-liveness.ts +80 -0
  224. package/src/node/node-runtime.base.ts +481 -0
  225. package/src/node/node.api.ts +12 -11
  226. package/src/node/node.interface.ts +1 -8
  227. package/src/node/node.utils.ts +1 -1
  228. package/src/node/preload/run-service-preload.ts +48 -0
  229. package/src/node/preload/service-preload.interface.ts +14 -0
  230. package/src/node/process/index.ts +8 -0
  231. package/src/node/process/managed-child-processes.ts +121 -0
  232. package/src/node/process/process-spawn.ts +61 -0
  233. package/src/node/readiness/index.ts +20 -0
  234. package/src/node/readiness/poll-until.ts +27 -0
  235. package/src/node/readiness/readiness-checks.ts +79 -0
  236. package/src/node/readiness/readiness.types.ts +13 -0
  237. package/src/node/readiness/run-readiness-checks.ts +20 -0
  238. package/src/node/readiness/service-ready-gate.ts +65 -0
  239. package/src/node.ts +153 -0
  240. package/src/parcel/chunk-fetch-registry.ts +96 -0
  241. package/src/parcel/chunk-url.utils.ts +30 -0
  242. package/src/parcel/parcel-manager.ts +431 -173
  243. package/src/parcel/parcel.api.ts +103 -0
  244. package/src/parcel/parcel.interface.ts +44 -23
  245. package/src/parcel/parcel.service.ts +79 -0
  246. package/src/parcel/storage-provider-registry.ts +49 -0
  247. package/src/parcel/storage-provider.types.ts +45 -0
  248. package/src/preload.ts +7 -0
  249. package/src/repo/repo-context.utils.ts +3 -4
  250. package/src/repo/repo-manager.ts +54 -39
  251. package/src/repo/repo.api.ts +5 -5
  252. package/src/repo/repo.interface.ts +1 -2
  253. package/src/repo/repo.script-loader.ts +16 -20
  254. package/src/service/base.interface.ts +81 -90
  255. package/src/service/index.ts +173 -0
  256. package/src/service/service.api.ts +294 -0
  257. package/src/service/service.interface.ts +49 -17
  258. package/src/shared/http/fetch-retry.ts +145 -0
  259. package/src/shared/log/create-logger.ts +51 -0
  260. package/src/shared/log/enable-log-persist.ts +225 -0
  261. package/src/shared/log/index.ts +31 -0
  262. package/src/shared/log/log-manager.ts +112 -121
  263. package/src/shared/log/log-persist-batch-id.ts +43 -0
  264. package/src/shared/log/log-persist-flush.ts +128 -0
  265. package/src/shared/log/log-persist-hook.ts +13 -0
  266. package/src/shared/log/log-persist-logger.ts +33 -0
  267. package/src/shared/log/log-persist-registry.ts +109 -0
  268. package/src/shared/log/log-persist.config.ts +97 -0
  269. package/src/shared/log/log-persist.interface.ts +132 -0
  270. package/src/shared/log/log-persist.ts +704 -0
  271. package/src/shared/log/log-scope.ts +123 -0
  272. package/src/shared/utils/config-path.utils.ts +1 -1
  273. package/src/shared/utils/fetch-url.ts +13 -0
  274. package/src/shared/utils/network-error.ts +152 -0
  275. package/src/shared/utils/safe-file-name.ts +37 -0
  276. package/src/shared/utils/sha256.ts +15 -0
  277. package/src/supabase.ts +125 -119
  278. package/src/task/index.ts +45 -0
  279. package/src/task/local-task-registry.ts +115 -36
  280. package/src/task/task-manager.ts +101 -113
  281. package/src/task/task-node.ts +302 -0
  282. package/src/task/task-post-validated.api.ts +47 -0
  283. package/src/task/task-post.api.ts +99 -0
  284. package/src/task/task-queue.ts +18 -0
  285. package/src/task/task-repo-context.ts +4 -1
  286. package/src/task/task-repo-validation.ts +169 -0
  287. package/src/task/task.api.ts +68 -92
  288. package/src/task/task.constant.ts +4 -0
  289. package/src/task/task.interface.ts +6 -7
  290. package/src/trigger/trigger-manager.ts +287 -0
  291. package/src/trigger/trigger-node.ts +80 -0
  292. package/src/trigger/trigger.api.ts +166 -0
  293. package/src/trigger/trigger.constant.ts +10 -0
  294. package/src/trigger/trigger.interface.ts +100 -0
  295. package/src/trigger/trigger.utils.ts +56 -0
  296. package/src/word/word.api.ts +28 -30
  297. package/src/word/word.interface.ts +3 -4
  298. package/dist/auth/auth.api.d.ts +0 -28
  299. package/dist/auth/auth.api.d.ts.map +0 -1
  300. package/dist/auth/auth.api.js +0 -51
  301. package/dist/auth/auth.api.js.map +0 -1
  302. package/dist/command/command.api.js +0 -58
  303. package/dist/command/command.api.js.map +0 -1
  304. package/dist/command/command.interface.js +0 -9
  305. package/dist/command/command.interface.js.map +0 -1
  306. package/dist/core.api.js +0 -412
  307. package/dist/core.api.js.map +0 -1
  308. package/dist/core.interface.js +0 -46
  309. package/dist/core.interface.js.map +0 -1
  310. package/dist/core.utils.js +0 -81
  311. package/dist/core.utils.js.map +0 -1
  312. package/dist/feed/feed.interface.d.ts +0 -27
  313. package/dist/feed/feed.interface.d.ts.map +0 -1
  314. package/dist/feed/feed.interface.js +0 -17
  315. package/dist/feed/feed.interface.js.map +0 -1
  316. package/dist/file/file-manager.d.ts +0 -24
  317. package/dist/file/file-manager.d.ts.map +0 -1
  318. package/dist/file/file-manager.js +0 -109
  319. package/dist/file/file-manager.js.map +0 -1
  320. package/dist/file/file.api.d.ts +0 -15
  321. package/dist/file/file.api.d.ts.map +0 -1
  322. package/dist/file/file.api.js +0 -30
  323. package/dist/file/file.api.js.map +0 -1
  324. package/dist/file/file.interface.d.ts +0 -25
  325. package/dist/file/file.interface.d.ts.map +0 -1
  326. package/dist/file/file.interface.js +0 -9
  327. package/dist/file/file.interface.js.map +0 -1
  328. package/dist/file-list/file-list.api.d.ts +0 -15
  329. package/dist/file-list/file-list.api.d.ts.map +0 -1
  330. package/dist/file-list/file-list.api.js +0 -54
  331. package/dist/file-list/file-list.api.js.map +0 -1
  332. package/dist/file-list/file-list.interface.d.ts +0 -22
  333. package/dist/file-list/file-list.interface.d.ts.map +0 -1
  334. package/dist/file-list/file-list.interface.js +0 -5
  335. package/dist/file-list/file-list.interface.js.map +0 -1
  336. package/dist/idea/idea.interface.js +0 -15
  337. package/dist/idea/idea.interface.js.map +0 -1
  338. package/dist/index.js +0 -42
  339. package/dist/index.js.map +0 -1
  340. package/dist/link/link.api.js +0 -30
  341. package/dist/link/link.api.js.map +0 -1
  342. package/dist/link/link.interface.js +0 -7
  343. package/dist/link/link.interface.js.map +0 -1
  344. package/dist/list/list.api.js +0 -30
  345. package/dist/list/list.api.js.map +0 -1
  346. package/dist/list/list.interface.js +0 -6
  347. package/dist/list/list.interface.js.map +0 -1
  348. package/dist/node/node-manager.d.ts +0 -48
  349. package/dist/node/node-manager.d.ts.map +0 -1
  350. package/dist/node/node-manager.js +0 -619
  351. package/dist/node/node-manager.js.map +0 -1
  352. package/dist/node/node-task.preset.d.ts +0 -1
  353. package/dist/node/node-task.preset.d.ts.map +0 -1
  354. package/dist/node/node-task.preset.js +0 -14
  355. package/dist/node/node-task.preset.js.map +0 -1
  356. package/dist/node/node.api.js +0 -100
  357. package/dist/node/node.api.js.map +0 -1
  358. package/dist/node/node.interface.js +0 -19
  359. package/dist/node/node.interface.js.map +0 -1
  360. package/dist/node/node.utils.js +0 -36
  361. package/dist/node/node.utils.js.map +0 -1
  362. package/dist/parcel/parcel-manager.js +0 -156
  363. package/dist/parcel/parcel-manager.js.map +0 -1
  364. package/dist/parcel/parcel.interface.js +0 -11
  365. package/dist/parcel/parcel.interface.js.map +0 -1
  366. package/dist/question-list/question-list.api.d.ts +0 -13
  367. package/dist/question-list/question-list.api.d.ts.map +0 -1
  368. package/dist/question-list/question-list.api.js +0 -35
  369. package/dist/question-list/question-list.api.js.map +0 -1
  370. package/dist/question-list/question-list.interface.d.ts +0 -18
  371. package/dist/question-list/question-list.interface.d.ts.map +0 -1
  372. package/dist/question-list/question-list.interface.js +0 -5
  373. package/dist/question-list/question-list.interface.js.map +0 -1
  374. package/dist/repo/repo-context.utils.js +0 -81
  375. package/dist/repo/repo-context.utils.js.map +0 -1
  376. package/dist/repo/repo-manager.js +0 -156
  377. package/dist/repo/repo-manager.js.map +0 -1
  378. package/dist/repo/repo.api.js +0 -40
  379. package/dist/repo/repo.api.js.map +0 -1
  380. package/dist/repo/repo.interface.js +0 -8
  381. package/dist/repo/repo.interface.js.map +0 -1
  382. package/dist/repo/repo.script-loader.js +0 -108
  383. package/dist/repo/repo.script-loader.js.map +0 -1
  384. package/dist/review/review.api.d.ts +0 -14
  385. package/dist/review/review.api.d.ts.map +0 -1
  386. package/dist/review/review.api.js +0 -133
  387. package/dist/review/review.api.js.map +0 -1
  388. package/dist/review/review.interface.d.ts +0 -24
  389. package/dist/review/review.interface.d.ts.map +0 -1
  390. package/dist/review/review.interface.js +0 -10
  391. package/dist/review/review.interface.js.map +0 -1
  392. package/dist/review-v2/apis/post-review-setting.api.d.ts +0 -12
  393. package/dist/review-v2/apis/post-review-setting.api.d.ts.map +0 -1
  394. package/dist/review-v2/apis/post-review-setting.api.js +0 -27
  395. package/dist/review-v2/apis/post-review-setting.api.js.map +0 -1
  396. package/dist/review-v2/apis/post-review.api.d.ts +0 -13
  397. package/dist/review-v2/apis/post-review.api.d.ts.map +0 -1
  398. package/dist/review-v2/apis/post-review.api.js +0 -46
  399. package/dist/review-v2/apis/post-review.api.js.map +0 -1
  400. package/dist/review-v2/review-setting.interface.d.ts +0 -23
  401. package/dist/review-v2/review-setting.interface.d.ts.map +0 -1
  402. package/dist/review-v2/review-setting.interface.js +0 -5
  403. package/dist/review-v2/review-setting.interface.js.map +0 -1
  404. package/dist/review-v2/review.interface.d.ts +0 -20
  405. package/dist/review-v2/review.interface.d.ts.map +0 -1
  406. package/dist/review-v2/review.interface.js +0 -5
  407. package/dist/review-v2/review.interface.js.map +0 -1
  408. package/dist/service/api.interface.d.ts +0 -35
  409. package/dist/service/api.interface.d.ts.map +0 -1
  410. package/dist/service/api.interface.js +0 -12
  411. package/dist/service/api.interface.js.map +0 -1
  412. package/dist/service/base.interface.js +0 -7
  413. package/dist/service/base.interface.js.map +0 -1
  414. package/dist/service/service.interface.js +0 -11
  415. package/dist/service/service.interface.js.map +0 -1
  416. package/dist/shared/log/create-api-logger.d.ts +0 -17
  417. package/dist/shared/log/create-api-logger.d.ts.map +0 -1
  418. package/dist/shared/log/create-api-logger.js +0 -15
  419. package/dist/shared/log/create-api-logger.js.map +0 -1
  420. package/dist/shared/log/log-manager.js +0 -218
  421. package/dist/shared/log/log-manager.js.map +0 -1
  422. package/dist/shared/utils/config-path.utils.js +0 -85
  423. package/dist/shared/utils/config-path.utils.js.map +0 -1
  424. package/dist/shared/utils/error.utils.js +0 -15
  425. package/dist/shared/utils/error.utils.js.map +0 -1
  426. package/dist/shared/utils/id.utils.js +0 -5
  427. package/dist/shared/utils/id.utils.js.map +0 -1
  428. package/dist/supabase.js +0 -100
  429. package/dist/supabase.js.map +0 -1
  430. package/dist/task/local-task-registry.js +0 -153
  431. package/dist/task/local-task-registry.js.map +0 -1
  432. package/dist/task/task-manager.js +0 -217
  433. package/dist/task/task-manager.js.map +0 -1
  434. package/dist/task/task-repo-context.js +0 -12
  435. package/dist/task/task-repo-context.js.map +0 -1
  436. package/dist/task/task.api.js +0 -351
  437. package/dist/task/task.api.js.map +0 -1
  438. package/dist/task/task.interface.js +0 -36
  439. package/dist/task/task.interface.js.map +0 -1
  440. package/dist/task/task.utils.js +0 -2
  441. package/dist/task/task.utils.js.map +0 -1
  442. package/dist/word/word.api.js +0 -30
  443. package/dist/word/word.api.js.map +0 -1
  444. package/dist/word/word.interface.js +0 -6
  445. package/dist/word/word.interface.js.map +0 -1
  446. package/src/auth/auth.api.ts +0 -87
  447. package/src/feed/feed.interface.ts +0 -33
  448. package/src/file/file-manager.ts +0 -145
  449. package/src/file/file.api.ts +0 -43
  450. package/src/file/file.interface.ts +0 -30
  451. package/src/file-list/file-list.api.ts +0 -64
  452. package/src/file-list/file-list.interface.ts +0 -24
  453. package/src/node/node-manager.ts +0 -673
  454. package/src/node/node-task.preset.ts +0 -13
  455. package/src/question-list/question-list.api.ts +0 -42
  456. package/src/question-list/question-list.interface.ts +0 -21
  457. package/src/review/review.api.ts +0 -145
  458. package/src/review/review.interface.ts +0 -26
  459. package/src/review-v2/apis/post-review-setting.api.ts +0 -35
  460. package/src/review-v2/apis/post-review.api.ts +0 -59
  461. package/src/review-v2/review-setting.interface.ts +0 -26
  462. package/src/review-v2/review.interface.ts +0 -23
  463. package/src/service/api.interface.ts +0 -47
  464. package/src/shared/log/create-api-logger.ts +0 -25
@@ -0,0 +1,1028 @@
1
+ import { createClient } from '@supabase/supabase-js';
2
+ import { pick, pickBy } from 'lodash-es';
3
+
4
+ var StatusCode;
5
+ (function (StatusCode) {
6
+ StatusCode[StatusCode["SUCCESS"] = 200] = "SUCCESS";
7
+ StatusCode[StatusCode["ERROR"] = 400] = "ERROR";
8
+ })(StatusCode || (StatusCode = {}));
9
+ const generateResponse = {
10
+ success(data, message) {
11
+ return {
12
+ status_code: StatusCode.SUCCESS,
13
+ success: true,
14
+ message,
15
+ data,
16
+ };
17
+ },
18
+ error(message, statusCode, code) {
19
+ if (typeof message === "string") {
20
+ return {
21
+ status_code: statusCode ?? StatusCode.ERROR,
22
+ success: false,
23
+ error: {
24
+ message,
25
+ code,
26
+ },
27
+ };
28
+ }
29
+ if (typeof message?.error === "string") {
30
+ return {
31
+ status_code: statusCode ?? StatusCode.ERROR,
32
+ success: false,
33
+ error: {
34
+ message: `Error from ${message.key}: ${message.error}`,
35
+ code,
36
+ },
37
+ };
38
+ }
39
+ return {
40
+ status_code: statusCode ?? StatusCode.ERROR,
41
+ success: false,
42
+ error: {
43
+ message: `Error from ${message.key}: ${message?.error?.message}`,
44
+ code,
45
+ },
46
+ };
47
+ },
48
+ };
49
+
50
+ /** True when running in a development build (Vite or Node). Defaults to false for safety. */
51
+ function isDevEnvironment() {
52
+ if (typeof import.meta !== "undefined" && "env" in import.meta) {
53
+ const env = import.meta.env;
54
+ if (env?.DEV === true || env?.MODE === "development")
55
+ return true;
56
+ if (env?.DEV === false || env?.MODE === "production")
57
+ return false;
58
+ }
59
+ if (typeof process !== "undefined" && process.env?.NODE_ENV) {
60
+ return process.env.NODE_ENV !== "production";
61
+ }
62
+ return false;
63
+ }
64
+ function logDev(...args) {
65
+ if (isDevEnvironment()) {
66
+ console.log(...args);
67
+ }
68
+ }
69
+ function logDevGroup(label, fn) {
70
+ if (!isDevEnvironment())
71
+ return;
72
+ console.group(label);
73
+ try {
74
+ fn();
75
+ }
76
+ finally {
77
+ console.groupEnd();
78
+ }
79
+ }
80
+ /** Log internal details, then throw a sanitized error safe to expose to callers. */
81
+ function handleSupabaseError(context, error, publicMessage) {
82
+ console.error(`[${context}] failed:`, error);
83
+ throw new Error(publicMessage ?? `[${context}] Operation failed`);
84
+ }
85
+ /** Raw payload -> Available data */
86
+ class BaseValidator {
87
+ requiredFields = [];
88
+ optionalFields = [];
89
+ ignoredFields = [];
90
+ customValidators = [];
91
+ addCustomValidator(validator) {
92
+ this.customValidators.push(validator);
93
+ return this;
94
+ }
95
+ validateField(_field, value) {
96
+ // TODO now only empty check, later should add type checks
97
+ return value != null;
98
+ }
99
+ validate = (val) => {
100
+ const errors = [];
101
+ // Step 1: Check required fields
102
+ this.requiredFields.forEach((field) => {
103
+ if (!this.validateField(field, val[field])) {
104
+ errors.push(`Missing required field: ${String(field)}`);
105
+ }
106
+ });
107
+ // Step 2: Run custom validators
108
+ this.customValidators.forEach((validator) => {
109
+ const result = validator(val);
110
+ if (result !== true) {
111
+ errors.push(`Custom validation failed ${result}`);
112
+ }
113
+ });
114
+ if (errors.length > 0) {
115
+ const errorCount = errors.length;
116
+ const errorList = errors.map((error, index) => ` ${index + 1}. ${error}`).join("\n");
117
+ throw new Error(`[${this.constructor.name}] Validation failed (${errorCount} error${errorCount > 1 ? "s" : ""}):\n${errorList}`);
118
+ }
119
+ // Step 3: Pick required and optional fields
120
+ const required = pick(val, this.requiredFields);
121
+ const optional = pickBy(val, (value, key) => {
122
+ const typedKey = key;
123
+ return this.optionalFields.includes(typedKey) && value != null;
124
+ });
125
+ // TODO ignoredFields
126
+ return { ...required, ...optional };
127
+ };
128
+ }
129
+
130
+ class SupabaseInitializer {
131
+ static instance;
132
+ isInitialized = false;
133
+ _mainClient = null;
134
+ _authClient = null;
135
+ constructor() { }
136
+ static getInstance() {
137
+ if (!SupabaseInitializer.instance) {
138
+ SupabaseInitializer.instance = new SupabaseInitializer();
139
+ }
140
+ return SupabaseInitializer.instance;
141
+ }
142
+ /**
143
+ * Initialize Supabase clients
144
+ */
145
+ async initialize(params) {
146
+ if (this.isInitialized) {
147
+ logDev("🚫 Supabase already initialized");
148
+ return { supabase: this._mainClient, supabaseAuth: this._authClient };
149
+ }
150
+ logDev("🔧 Initializing Supabase...");
151
+ // Validate and get environment variables
152
+ const config = this.validateEnvironmentVariables(params);
153
+ // Create main client
154
+ this._mainClient = createClient(config.main.url, config.main.anonKey, {
155
+ // TODO
156
+ // auth: {
157
+ // persistSession: true,
158
+ // autoRefreshToken: true,
159
+ // },
160
+ });
161
+ // Create auth client if configured
162
+ if (config.auth) {
163
+ this._authClient = createClient(config.auth.url, config.auth.anonKey, {
164
+ // TODO
165
+ // auth: {
166
+ // persistSession: true,
167
+ // autoRefreshToken: true,
168
+ // },
169
+ });
170
+ }
171
+ // Log configuration
172
+ this.logConfiguration(config);
173
+ this.isInitialized = true;
174
+ logDev("✅ Supabase initialization completed");
175
+ return { supabase: this._mainClient, supabaseAuth: this._authClient };
176
+ }
177
+ validateEnvironmentVariables({ supabaseUrl, supabaseAnonKey, supabaseNeedAuthUrl, supabaseNeedAuthAnonKey, }) {
178
+ const mainUrl = supabaseUrl;
179
+ const mainAnonKey = supabaseAnonKey;
180
+ const authUrl = supabaseNeedAuthUrl;
181
+ const authAnonKey = supabaseNeedAuthAnonKey;
182
+ if (!mainUrl || !mainAnonKey) {
183
+ throw new Error("Missing required Supabase environment variables: SUPABASE_URL, SUPABASE_ANON_KEY");
184
+ }
185
+ return {
186
+ main: { url: mainUrl, anonKey: mainAnonKey },
187
+ auth: authUrl && authAnonKey ? { url: authUrl, anonKey: authAnonKey } : null,
188
+ };
189
+ }
190
+ logConfiguration(config) {
191
+ logDevGroup("🔧 Supabase Configuration", () => {
192
+ console.log("Main URL:", config.main.url);
193
+ console.log("Auth URL:", config.auth?.url || "Not configured");
194
+ console.log("Clients:", {
195
+ main: !!this._mainClient,
196
+ auth: !!this._authClient,
197
+ });
198
+ });
199
+ }
200
+ getClients() {
201
+ if (!this.isInitialized) {
202
+ throw new Error("Supabase not initialized. Call initialize() first.");
203
+ }
204
+ return { supabase: this._mainClient, supabaseAuth: this._authClient };
205
+ }
206
+ get client() {
207
+ if (!this.isInitialized) {
208
+ throw new Error("Supabase not initialized. Call initialize() first.");
209
+ }
210
+ if (!this._mainClient) {
211
+ throw new Error("Main Supabase client is null. Initialization may have failed.");
212
+ }
213
+ return this._mainClient;
214
+ }
215
+ get authClient() {
216
+ if (!this.isInitialized) {
217
+ throw new Error("Supabase not initialized. Call initialize() first.");
218
+ }
219
+ return this._authClient;
220
+ }
221
+ reset() {
222
+ this.isInitialized = false;
223
+ this._mainClient = null;
224
+ this._authClient = null;
225
+ }
226
+ }
227
+ /** Process-wide holder — import this; class is module-private. */
228
+ const supabase = SupabaseInitializer.getInstance();
229
+
230
+ const MAX_TARGET_LIST_PAGE_SIZE = 100;
231
+ /** Alias for {@link pollTargetList} batch size cap. */
232
+ const MAX_POLL_TARGET_LIST_SIZE = MAX_TARGET_LIST_PAGE_SIZE;
233
+ const TARGET_LIST_ORDER_FIELDS = new Set(["created_at", "name", "value", "category"]);
234
+ function validateTargetListPagination(pageNum, pageSize) {
235
+ if (!Number.isInteger(pageNum) || pageNum < 0) {
236
+ throw new Error(`[getTargetList] pageNum must be a non-negative integer, got ${pageNum}`);
237
+ }
238
+ if (!Number.isInteger(pageSize) || pageSize < 1 || pageSize > MAX_TARGET_LIST_PAGE_SIZE) {
239
+ throw new Error(`[getTargetList] pageSize must be an integer between 1 and ${MAX_TARGET_LIST_PAGE_SIZE}, got ${pageSize}`);
240
+ }
241
+ }
242
+ function resolveTargetListPagination(params) {
243
+ if (params.limit != null) {
244
+ validateTargetListPagination(0, params.limit);
245
+ return { pageNum: 0, pageSize: params.limit };
246
+ }
247
+ if (params.pageNum === undefined || params.pageSize === undefined) {
248
+ throw new Error("[getTargetList] Provide pageNum and pageSize, or limit.");
249
+ }
250
+ validateTargetListPagination(params.pageNum, params.pageSize);
251
+ return { pageNum: params.pageNum, pageSize: params.pageSize };
252
+ }
253
+ function validateTargetListOrderBy(orderBy) {
254
+ if (!TARGET_LIST_ORDER_FIELDS.has(orderBy.field)) {
255
+ throw new Error(`[getTargetList] Unsupported orderBy.field "${orderBy.field}"; allowed: ${[...TARGET_LIST_ORDER_FIELDS].join(", ")}`);
256
+ }
257
+ }
258
+ /**
259
+ * 构建带 category 作用域的 target 查询(供 getTargetList / getTargetTotalCount / pollTargetList 共用)。
260
+ *
261
+ * 必要性:
262
+ * 1. category 是 target 表的分区维度,所有列表/计数/出队都必须限定 category,避免跨类型扫表。
263
+ * 2. 传入 filterBuilder 时仍强制 `.eq("category", category)`,防止自定义 builder 漏加 category 导致误查或安全问题。
264
+ * 3. 统一 select 普通列表与 count head 两种查询形态,再叠加 filterList,避免三处复制分支逻辑。
265
+ */
266
+ function buildCategoryScopedQuery({ category, filterList, filterBuilder, select, selectOptions, }) {
267
+ const base = filterBuilder != null
268
+ ? filterBuilder.eq("category", category)
269
+ : selectOptions != null
270
+ ? supabase.client.from("target").select(select, selectOptions).eq("category", category)
271
+ : supabase.client.from("target").select(select).eq("category", category);
272
+ return applyQueryFilters(base, filterList);
273
+ }
274
+ // biome-ignore lint/suspicious/noExplicitAny: PostgrestFilterBuilder is generic over schema
275
+ function applyQueryFilter(query, filter) {
276
+ switch (filter.operator) {
277
+ case "eq":
278
+ return query.eq(filter.field, filter.value);
279
+ case "neq":
280
+ return query.neq(filter.field, filter.value);
281
+ case "in":
282
+ return query.in(filter.field, filter.value);
283
+ default: {
284
+ const unsupportedOperator = filter.operator;
285
+ throw new Error(`[applyQueryFilter] Unsupported operator: ${unsupportedOperator}`);
286
+ }
287
+ }
288
+ }
289
+ // biome-ignore lint/suspicious/noExplicitAny: PostgrestFilterBuilder is generic over schema
290
+ function applyQueryFilters(query, filterList) {
291
+ return filterList.reduce((q, filter) => applyQueryFilter(q, filter), query);
292
+ }
293
+ const getTarget = async ({ id, filterList }) => {
294
+ const query = filterList != null && filterList.length > 0
295
+ ? applyQueryFilters(supabase.client.from("target").select().eq("id", id), filterList)
296
+ : supabase.client.from("target").select().eq("id", id);
297
+ const { data, error } = await query.single();
298
+ if (error) {
299
+ handleSupabaseError("getTarget", error, "Failed to fetch target.");
300
+ }
301
+ return generateResponse.success(data);
302
+ };
303
+ const getPossibleTarget = async ({ filterList }) => {
304
+ const query = applyQueryFilters(supabase.client.from("target").select(), filterList);
305
+ const { data, error } = await query.maybeSingle();
306
+ if (error) {
307
+ handleSupabaseError("getPossibleTarget", error, "Failed to fetch target.");
308
+ }
309
+ return generateResponse.success(data);
310
+ };
311
+ /**
312
+ * Paginated target list by category. Failures throw via `handleSupabaseError` (no `{ error }` envelope).
313
+ */
314
+ const getTargetList = async ({ pageNum, pageSize, limit, category, filterList = [], orderBy = { field: "created_at", ascending: false }, selectFields = "*", filterBuilder, }) => {
315
+ const { pageNum: resolvedPageNum, pageSize: resolvedPageSize } = resolveTargetListPagination({
316
+ pageNum,
317
+ pageSize,
318
+ limit,
319
+ });
320
+ validateTargetListOrderBy(orderBy);
321
+ const query = buildCategoryScopedQuery({
322
+ category,
323
+ filterList,
324
+ filterBuilder,
325
+ select: selectFields,
326
+ });
327
+ const { data, error } = await query
328
+ .order(orderBy.field, { ascending: orderBy.ascending })
329
+ .range(resolvedPageNum * resolvedPageSize, (resolvedPageNum + 1) * resolvedPageSize - 1);
330
+ if (error) {
331
+ handleSupabaseError("getTargetList", error, "Failed to fetch target list.");
332
+ }
333
+ return generateResponse.success((data ?? []));
334
+ };
335
+ /**
336
+ * Scan all rows matching `category` + `filterList` by paging until exhausted.
337
+ *
338
+ * Use for worker bootstrap / sync jobs that need the full matching set.
339
+ * For UI pagination, use {@link getTargetList} (single page, explicit pageNum).
340
+ *
341
+ * Internal batch size is fixed at {@link MAX_TARGET_LIST_PAGE_SIZE} (PostgREST max-rows).
342
+ * Callers receive the full merged result; they do not pass a per-request page size.
343
+ *
344
+ * Uses offset pagination (`.range`). Stable enough for small catalogs (e.g. Repo registry);
345
+ * for large tables under concurrent writes, consider a DB RPC or keyset pagination later.
346
+ */
347
+ const scanTargetList = async ({ category, filterList = [], orderBy = { field: "created_at", ascending: false }, selectFields = "*", filterBuilder, maxRows, }) => {
348
+ const batchSize = MAX_TARGET_LIST_PAGE_SIZE;
349
+ validateTargetListOrderBy(orderBy);
350
+ if (maxRows != null && (!Number.isInteger(maxRows) || maxRows < 1)) {
351
+ throw new Error(`[scanTargetList] maxRows must be a positive integer, got ${maxRows}`);
352
+ }
353
+ const rows = [];
354
+ let pageNum = 0;
355
+ while (true) {
356
+ const query = buildCategoryScopedQuery({
357
+ category,
358
+ filterList,
359
+ filterBuilder,
360
+ select: selectFields,
361
+ });
362
+ const { data, error } = await query
363
+ .order(orderBy.field, { ascending: orderBy.ascending })
364
+ .range(pageNum * batchSize, (pageNum + 1) * batchSize - 1);
365
+ if (error) {
366
+ handleSupabaseError("scanTargetList", error, "Failed to scan target list.");
367
+ }
368
+ const page = (data ?? []);
369
+ if (page.length === 0) {
370
+ break;
371
+ }
372
+ rows.push(...page);
373
+ if (maxRows != null && rows.length >= maxRows) {
374
+ rows.length = maxRows;
375
+ break;
376
+ }
377
+ if (page.length < batchSize) {
378
+ break;
379
+ }
380
+ pageNum += 1;
381
+ }
382
+ return generateResponse.success(rows);
383
+ };
384
+ const getTargetTotalCount = async ({ category, filterList = [], filterBuilder }) => {
385
+ const query = buildCategoryScopedQuery({
386
+ category,
387
+ filterList,
388
+ filterBuilder,
389
+ select: "id",
390
+ selectOptions: { count: "exact", head: true },
391
+ });
392
+ const { count, error } = await query;
393
+ if (error) {
394
+ handleSupabaseError("getTargetTotalCount", error, "Failed to fetch target count.");
395
+ }
396
+ return generateResponse.success(count ?? 0);
397
+ };
398
+ function validatePollTargetListSize(size) {
399
+ if (!Number.isInteger(size) || size < 1 || size > MAX_POLL_TARGET_LIST_SIZE) {
400
+ throw new Error(`[pollTargetList] size must be an integer between 1 and ${MAX_POLL_TARGET_LIST_SIZE}, got ${size}`);
401
+ }
402
+ }
403
+ /**
404
+ * Queue poll: SELECT up to `size` rows matching `category` + `filterList`, ordered by
405
+ * `created_at`, then DELETE each by `id`. Returns only dequeued rows (at-most-once).
406
+ *
407
+ * Delete failures (concurrent consumer) are skipped silently.
408
+ * Failures on the initial SELECT throw via `handleSupabaseError`.
409
+ *
410
+ * TODO(concurrency): 当前为 SELECT → 逐条 DELETE,非 DB 原子出队,多 consumer 并发时可能:
411
+ * - 重叠读取:两个 worker 同一批 SELECT 命中相同行,靠 DELETE 竞速,后者 skip(多数 at-most-once)
412
+ * - TOCTOU:SELECT 与 DELETE 之间无锁,极端情况下 DELETE 0 行仍不报错 → 可能重复计入 polled
413
+ * - 非 exactly-once:行已删但 worker 崩溃未处理 → 消息丢失
414
+ * 若同一 filter 多实例 poll(或多 worker 同 nodeId),需改为 DB 侧原子方案,例如:
415
+ * - RPC:`DELETE … WHERE id IN (SELECT … FOR UPDATE SKIP LOCKED) RETURNING *`
416
+ * - 或 claim 状态机:UPDATE … WHERE pending → DELETE/标记已消费(类似 patchClaimTask 乐观锁)
417
+ * - 短期加固:DELETE 后校验影响行数,0 行则不 push 到 polled
418
+ */
419
+ const pollTargetList = async ({ category, size, filterList = [], ascending = true, selectFields = "*", }) => {
420
+ validatePollTargetListSize(size);
421
+ const query = buildCategoryScopedQuery({
422
+ category,
423
+ filterList,
424
+ select: selectFields,
425
+ });
426
+ const { data, error } = await query.order("created_at", { ascending }).limit(size);
427
+ if (error) {
428
+ handleSupabaseError("pollTargetList", error, "Failed to fetch targets for poll.");
429
+ }
430
+ const candidates = (data ?? []);
431
+ const polled = [];
432
+ for (const row of candidates) {
433
+ try {
434
+ await deleteTarget({ id: row.id });
435
+ polled.push(row);
436
+ }
437
+ catch {
438
+ // Concurrent dequeue — row already removed
439
+ }
440
+ }
441
+ return generateResponse.success(polled);
442
+ };
443
+ const deleteTarget = async ({ id, filterList }) => {
444
+ // Check whether the target exists given filterList
445
+ if (filterList != null && filterList.length > 0) {
446
+ const query = applyQueryFilters(supabase.client.from("target").select().eq("id", id), filterList);
447
+ const { data: existingTarget, error: existingError } = await query.single();
448
+ if (existingError || existingTarget == null) {
449
+ const msg = `[deleteTarget] Cannot find the target ${id}`;
450
+ console.error(msg, { filterList }, existingError);
451
+ throw new Error(msg);
452
+ }
453
+ }
454
+ const { error } = await supabase.client.from("target").delete().eq("id", id);
455
+ if (error) {
456
+ handleSupabaseError("deleteTarget", error, `Failed to delete target ${id}.`);
457
+ }
458
+ return generateResponse.success();
459
+ };
460
+ class PostTargetPayloadValidator extends BaseValidator {
461
+ requiredFields = ["category", "name", "value", "tagList"];
462
+ optionalFields = ["extra", "details"];
463
+ constructor() {
464
+ super();
465
+ // Add custom
466
+ this.addCustomValidator((_val) => {
467
+ return true;
468
+ });
469
+ }
470
+ }
471
+ const postTarget = async (payload) => {
472
+ const validPayload = new PostTargetPayloadValidator().validate(payload);
473
+ const { data, error } = await supabase.client
474
+ .from("target")
475
+ .insert([{ ...validPayload }])
476
+ .select()
477
+ .single();
478
+ if (error) {
479
+ handleSupabaseError("postTarget", error, "Failed to create target.");
480
+ }
481
+ return generateResponse.success(data);
482
+ };
483
+ const patchTarget = async ({ id, ...restPayload }) => {
484
+ const { data: currentData, error: fetchError } = await supabase.client
485
+ .from("target")
486
+ .select()
487
+ .eq("id", id)
488
+ .single();
489
+ if (!currentData) {
490
+ throw new Error("Target NOT exists");
491
+ }
492
+ if (fetchError)
493
+ handleSupabaseError("patchTarget", fetchError, "Failed to fetch target.");
494
+ const updatedTarget = new PostTargetPayloadValidator().validate(restPayload);
495
+ const { data, error } = await supabase.client
496
+ .from("target")
497
+ .update({
498
+ ...updatedTarget,
499
+ })
500
+ .eq("id", id)
501
+ .select()
502
+ .single();
503
+ if (error) {
504
+ handleSupabaseError("patchTarget", error, "Failed to update target.");
505
+ }
506
+ return generateResponse.success(data);
507
+ };
508
+ const updateTargetDetails = async ({ id, updateFn, updateExtraFn, optimisticLockFilterList = [], }) => {
509
+ const { data: currentData, error: fetchError } = await supabase.client
510
+ .from("target")
511
+ .select("details")
512
+ .eq("id", id)
513
+ .single();
514
+ if (fetchError) {
515
+ handleSupabaseError("updateTargetDetails", fetchError, "Failed to fetch target.");
516
+ }
517
+ if (!currentData) {
518
+ const msg = `[updateTargetDetails] Target NOT exists: ${id}`;
519
+ console.error(msg);
520
+ throw new Error(msg);
521
+ }
522
+ const currentDetails = currentData.details;
523
+ const updatedDetails = updateFn(currentDetails);
524
+ const updated = updateExtraFn == null
525
+ ? {
526
+ details: updatedDetails,
527
+ }
528
+ : {
529
+ details: updatedDetails,
530
+ extra: updateExtraFn(currentDetails),
531
+ };
532
+ const updateQuery = applyQueryFilters(supabase.client.from("target").update(updated).eq("id", id), optimisticLockFilterList);
533
+ const { data, error } = await updateQuery.select().maybeSingle();
534
+ if (error) {
535
+ handleSupabaseError("updateTargetDetails", error, "Failed to update target details.");
536
+ }
537
+ if (!data) {
538
+ const msg = optimisticLockFilterList.length > 0
539
+ ? OPTIMISTIC_LOCK_FAILED_MESSAGE
540
+ : "[updateTargetDetails] Target not found or was deleted.";
541
+ throw new Error(msg);
542
+ }
543
+ return data;
544
+ };
545
+ const OPTIMISTIC_LOCK_FAILED_MESSAGE = "[updateTargetDetails] Optimistic lock failed: target no longer matches expected state.";
546
+ const OPTIMISTIC_LOCK_ERROR_CODE = "OPTIMISTIC_LOCK";
547
+ function isOptimisticLockError(error) {
548
+ return error instanceof Error && error.message === OPTIMISTIC_LOCK_FAILED_MESSAGE;
549
+ }
550
+ function isOptimisticLockResponse(error) {
551
+ return error?.code === OPTIMISTIC_LOCK_ERROR_CODE;
552
+ }
553
+ const CREATE_TARGET_ALREADY_EXISTS_MESSAGE = "[createTarget] Target already exists";
554
+ const CREATE_TARGET_REDUNDANCY_MISMATCH_MESSAGE = "[createTarget] Inserted row does not match checkRedundancyFilterList; verify createFn aligns with filters.";
555
+ /** Max rows to fetch during post-verify — only need to detect one other match. */
556
+ const REDUNDANCY_VERIFY_ROW_LIMIT = 2;
557
+ function isCreateTargetAlreadyExistsError(error) {
558
+ return error instanceof Error && error.message === CREATE_TARGET_ALREADY_EXISTS_MESSAGE;
559
+ }
560
+ /** Roll back an optimistic insert when redundancy filters match other rows. */
561
+ async function rollbackCreateTargetInsert(id) {
562
+ const { error } = await supabase.client.from("target").delete().eq("id", id);
563
+ if (error) {
564
+ handleSupabaseError("createTarget", error, "Failed to rollback conflicting insert.");
565
+ }
566
+ }
567
+ /** Roll back the new row and signal a redundancy conflict to the caller. */
568
+ function throwCreateTargetAlreadyExists(checkRedundancyFilterList) {
569
+ console.error(CREATE_TARGET_ALREADY_EXISTS_MESSAGE, checkRedundancyFilterList);
570
+ throw new Error(CREATE_TARGET_ALREADY_EXISTS_MESSAGE);
571
+ }
572
+ async function failCreateTargetRedundancy(selfId, checkRedundancyFilterList) {
573
+ await rollbackCreateTargetInsert(selfId);
574
+ return throwCreateTargetAlreadyExists(checkRedundancyFilterList);
575
+ }
576
+ /**
577
+ * Create a `target` row with optional payload validation and optimistic redundancy checks.
578
+ *
579
+ * When `checkRedundancyFilterList` is set, uses insert-first + post-verify (not SELECT-before-INSERT).
580
+ * See `.cursor/skills/create-target-redundancy/SKILL.md`.
581
+ */
582
+ const createTarget = async ({ payload, validator, createFn, checkRedundancyFilterList, upsert = false, }) => {
583
+ if (upsert) {
584
+ console.warn("[createTarget] `upsert` is deprecated and has no effect.");
585
+ }
586
+ const validPayload = validator != null ? new validator().validate(payload) : payload;
587
+ const newTarget = createFn(validPayload);
588
+ const hasRedundancyCheck = checkRedundancyFilterList != null && checkRedundancyFilterList.length > 0;
589
+ // 1. Optimistic insert (see create-target-redundancy skill)
590
+ const { data, error } = await supabase.client.from("target").insert([newTarget]).select().single();
591
+ if (error) {
592
+ handleSupabaseError("createTarget", error, "Failed to create target.");
593
+ }
594
+ if (!hasRedundancyCheck) {
595
+ return generateResponse.success(data);
596
+ }
597
+ // 2. Post-verify: limit(2) — enough to detect one other row matching the business-key filters
598
+ const { data: matches, error: matchError } = await applyQueryFilters(supabase.client.from("target").select("id"), checkRedundancyFilterList).limit(REDUNDANCY_VERIFY_ROW_LIMIT);
599
+ if (matchError) {
600
+ handleSupabaseError("createTarget", matchError, "Failed to verify target redundancy.");
601
+ }
602
+ const selfId = data.id;
603
+ const rows = matches ?? [];
604
+ const selfMatchesFilters = rows.some((row) => row.id === selfId);
605
+ if (!selfMatchesFilters) {
606
+ console.warn(CREATE_TARGET_REDUNDANCY_MISMATCH_MESSAGE, checkRedundancyFilterList);
607
+ }
608
+ const hasOtherRow = rows.some((row) => row.id !== selfId);
609
+ // 3. No conflict — keep the inserted row; otherwise rollback and reject
610
+ if (!hasOtherRow) {
611
+ return generateResponse.success(data);
612
+ }
613
+ return failCreateTargetRedundancy(selfId, checkRedundancyFilterList);
614
+ };
615
+ function validateWith(ValidatorClass) {
616
+ return (fn) => {
617
+ return (payload) => {
618
+ const validPayload = new ValidatorClass().validate(payload);
619
+ return fn(validPayload);
620
+ };
621
+ };
622
+ }
623
+ function formatZodValidationError(schemaName, error) {
624
+ const errorList = error.issues
625
+ .map((issue, index) => {
626
+ const path = issue.path.length > 0 ? issue.path.join(".") : "(root)";
627
+ return ` ${index + 1}. ${path}: ${issue.message}`;
628
+ })
629
+ .join("\n");
630
+ const errorCount = error.issues.length;
631
+ return new Error(`[${schemaName}] Validation failed (${errorCount} error${errorCount > 1 ? "s" : ""}):\n${errorList}`);
632
+ }
633
+ /** Zod-based counterpart to {@link validateWith} — requires `zod` as a peer dependency. */
634
+ function validateWithSchema(schema, schemaName = "Schema") {
635
+ return (fn) => {
636
+ return (payload) => {
637
+ const result = schema.safeParse(payload);
638
+ if (!result.success) {
639
+ throw formatZodValidationError(schemaName, result.error);
640
+ }
641
+ return fn(result.data);
642
+ };
643
+ };
644
+ }
645
+
646
+ var CategoryList;
647
+ (function (CategoryList) {
648
+ CategoryList["LIST"] = "list";
649
+ })(CategoryList || (CategoryList = {}));
650
+
651
+ class PostListValidator extends BaseValidator {
652
+ requiredFields = ["name", "value", "category", "details"];
653
+ optionalFields = [];
654
+ constructor() {
655
+ super();
656
+ // Add custom
657
+ this.addCustomValidator((_val) => {
658
+ return true;
659
+ });
660
+ }
661
+ }
662
+ const postListCreate = async (payload) => {
663
+ return createTarget({
664
+ payload: payload,
665
+ validator: PostListValidator,
666
+ createFn: (validPayload) => {
667
+ const { name, value, category, details } = validPayload;
668
+ return {
669
+ name,
670
+ category,
671
+ value,
672
+ tagList: [],
673
+ details,
674
+ };
675
+ },
676
+ });
677
+ };
678
+ /** Log batch create — idempotent on List.value (stable batch hash). */
679
+ const postLogListCreate = async (payload) => {
680
+ return createTarget({
681
+ payload,
682
+ validator: PostListValidator,
683
+ checkRedundancyFilterList: [
684
+ { field: "category", operator: "eq", value: CategoryList.LIST },
685
+ { field: "value", operator: "eq", value: payload.value },
686
+ ],
687
+ createFn: (validPayload) => {
688
+ const { name, value, category, details } = validPayload;
689
+ return {
690
+ name,
691
+ category,
692
+ value,
693
+ tagList: [],
694
+ details,
695
+ };
696
+ },
697
+ });
698
+ };
699
+
700
+ /** RFC 4122 v4 UUID for trace / correlation ids. Requires Node 18+ (`engines` in package.json). */
701
+ function generateUniqueId() {
702
+ return globalThis.crypto.randomUUID();
703
+ }
704
+
705
+ let offerFn = null;
706
+ function registerLogPersistOffer(fn) {
707
+ offerFn = fn;
708
+ }
709
+ function offerToLogPersist(entry) {
710
+ offerFn?.(entry);
711
+ }
712
+
713
+ function mergeLabels(base, patch) {
714
+ const merged = { ...base, ...patch };
715
+ return Object.keys(merged).length > 0 ? merged : undefined;
716
+ }
717
+ /** Coerce partial input into a {@link LogScope}. */
718
+ function normalizeScope(input, options) {
719
+ const generateTraceId = false;
720
+ const traceId = input.traceId?.trim() || (generateTraceId ? generateUniqueId() : "");
721
+ if (!traceId) {
722
+ throw new Error("[LogScope] traceId is required (or enable generateTraceId)");
723
+ }
724
+ return {
725
+ module: input.module,
726
+ traceId,
727
+ traceParentId: input.traceParentId ?? null,
728
+ labels: mergeLabels(undefined, input.labels),
729
+ };
730
+ }
731
+ /** Build a scope; optional parent links trace chain and merges labels. */
732
+ function createScope(input) {
733
+ const { module, parent, traceId, traceParentId, labels } = input;
734
+ return normalizeScope({
735
+ module,
736
+ traceId,
737
+ traceParentId: traceParentId ?? (parent != null ? parent.traceId : null),
738
+ labels: parent != null ? mergeLabels(parent.labels, labels) : mergeLabels(undefined, labels),
739
+ });
740
+ }
741
+ /** Merge patch into scope (labels deep-merge). Returns a new scope. */
742
+ function patchScope(input) {
743
+ const { scope, patch, allowTraceMutation = false } = input;
744
+ const traceId = allowTraceMutation && patch.traceId != null && patch.traceId !== "" ? patch.traceId : scope.traceId;
745
+ const traceParentId = allowTraceMutation && patch.traceParentId !== undefined ? patch.traceParentId : scope.traceParentId;
746
+ return normalizeScope({
747
+ module: patch.module ?? scope.module,
748
+ traceId,
749
+ traceParentId,
750
+ labels: mergeLabels(scope.labels, patch.labels),
751
+ });
752
+ }
753
+ /** Same trace chain, different module (e.g. prepareTask vs executeTask). */
754
+ function withModule(scope, module) {
755
+ return patchScope({ scope, patch: { module } });
756
+ }
757
+ function formatScopeLabels(labels) {
758
+ if (labels == null || Object.keys(labels).length === 0) {
759
+ return "--";
760
+ }
761
+ return Object.entries(labels)
762
+ .map(([key, value]) => `${key}:${value}`)
763
+ .join(",");
764
+ }
765
+ /** Prefer `data`; fall back to deprecated `context` on log rest params. */
766
+ function resolveLogData(rest) {
767
+ if (rest?.data !== undefined) {
768
+ return rest.data;
769
+ }
770
+ if (rest?.context !== undefined) {
771
+ return rest.context;
772
+ }
773
+ return undefined;
774
+ }
775
+
776
+ /**
777
+ * Log severity and semantics (low → high). `minLevel` filters by {@link LOG_LEVEL_RANK}.
778
+ *
779
+ * | Level | Rank | When to use |
780
+ * |----------|------|-------------|
781
+ * | DEBUG | 0 | Diagnostic detail for dev/troubleshooting; noisy, safe to drop in prod. |
782
+ * | INFO | 1 | Normal operational flow (startup, polling, state transitions). |
783
+ * | SUCCESS | 2 | Positive milestone within a flow (not a separate severity axis — same band as INFO). |
784
+ * | WARN | 3 | Recoverable anomaly or degradation; work continues but worth watching. |
785
+ * | ERROR | 4 | A concrete operation failed (API, task step, I/O); investigate and retry/fix locally. |
786
+ * | CRITICAL | 5 | Invariant violated — design flaw, data-integrity risk, or business rule broken; escalate and fix urgently. |
787
+ */
788
+ var LogLevel;
789
+ (function (LogLevel) {
790
+ LogLevel["DEBUG"] = "DEBUG";
791
+ LogLevel["INFO"] = "INFO";
792
+ LogLevel["SUCCESS"] = "SUCCESS";
793
+ LogLevel["WARN"] = "WARN";
794
+ LogLevel["ERROR"] = "ERROR";
795
+ LogLevel["CRITICAL"] = "CRITICAL";
796
+ })(LogLevel || (LogLevel = {}));
797
+ const LOG_LEVEL_RANK = {
798
+ [LogLevel.DEBUG]: 0,
799
+ [LogLevel.INFO]: 1,
800
+ [LogLevel.SUCCESS]: 2,
801
+ [LogLevel.WARN]: 3,
802
+ [LogLevel.ERROR]: 4,
803
+ [LogLevel.CRITICAL]: 5,
804
+ };
805
+ const DEFAULT_OPTIONS = {
806
+ formatTimestamp: true,
807
+ formatEmoji: true,
808
+ formatPrefix: "",
809
+ minLevel: isDevEnvironment() ? LogLevel.DEBUG : LogLevel.INFO,
810
+ };
811
+ function mergeLogOptions(options) {
812
+ return { ...DEFAULT_OPTIONS, ...options };
813
+ }
814
+ function formatDataValue(value) {
815
+ if (value === undefined) {
816
+ return "";
817
+ }
818
+ if (typeof value === "string") {
819
+ return value;
820
+ }
821
+ try {
822
+ return JSON.stringify(value);
823
+ }
824
+ catch {
825
+ return String(value);
826
+ }
827
+ }
828
+ function validateLogScope(logScope) {
829
+ const missing = [];
830
+ if (!logScope.module?.trim()) {
831
+ missing.push("module");
832
+ }
833
+ if (!logScope.traceId?.trim()) {
834
+ missing.push("traceId");
835
+ }
836
+ if (logScope.traceParentId !== null && typeof logScope.traceParentId !== "string") {
837
+ missing.push("traceParentId");
838
+ }
839
+ if (missing.length > 0) {
840
+ console.warn(`[LogManager] LogScope missing or invalid: ${missing.join(", ")}`, logScope);
841
+ }
842
+ }
843
+ class LogManager {
844
+ static instance;
845
+ options;
846
+ levelEmojis = {
847
+ [LogLevel.DEBUG]: "🔍",
848
+ [LogLevel.INFO]: "ℹ️",
849
+ [LogLevel.SUCCESS]: "✅",
850
+ [LogLevel.WARN]: "⚠️",
851
+ [LogLevel.ERROR]: "❌",
852
+ [LogLevel.CRITICAL]: "💀",
853
+ };
854
+ constructor(options) {
855
+ this.options = mergeLogOptions(options);
856
+ }
857
+ static getInstance(options) {
858
+ if (!LogManager.instance) {
859
+ LogManager.instance = new LogManager(options);
860
+ }
861
+ else if (options != null && Object.keys(options).length > 0) {
862
+ console.warn("[LogManager] getInstance(options) ignored — singleton already created. Use setOptions() instead.");
863
+ }
864
+ return LogManager.instance;
865
+ }
866
+ setOptions(options) {
867
+ this.options = mergeLogOptions({ ...this.options, ...options });
868
+ }
869
+ getMinLevel() {
870
+ return this.options.minLevel ?? DEFAULT_OPTIONS.minLevel ?? LogLevel.INFO;
871
+ }
872
+ shouldLog(level, scopeMinLevel) {
873
+ const minLevel = scopeMinLevel ?? this.getMinLevel();
874
+ return LOG_LEVEL_RANK[level] >= LOG_LEVEL_RANK[minLevel];
875
+ }
876
+ createLogEntry(payload) {
877
+ const { level, message, topic, extra, data, module, traceId, traceParentId, labels } = payload;
878
+ return {
879
+ timestamp: Date.now(),
880
+ level,
881
+ message,
882
+ topic,
883
+ module,
884
+ traceId,
885
+ traceParentId,
886
+ labels,
887
+ extra,
888
+ data,
889
+ };
890
+ }
891
+ formatLevelTag(entry) {
892
+ const emoji = this.options.formatEmoji ? `${this.levelEmojis[entry.level]} ` : "";
893
+ if (entry.level === LogLevel.CRITICAL) {
894
+ return `[${emoji}*** ${entry.level} ***]`;
895
+ }
896
+ return `[${emoji}${entry.level}]`;
897
+ }
898
+ formatLog(entry) {
899
+ const parts = [];
900
+ if (this.options.formatTimestamp) {
901
+ parts.push(`[${new Date(entry.timestamp).toISOString()}]`);
902
+ }
903
+ parts.push(this.formatLevelTag(entry));
904
+ parts.push(`traceId=${entry.traceId} parent=${entry.traceParentId ?? "null"} labels=${formatScopeLabels(entry.labels)} module=${entry.module} topic=${entry.topic}`);
905
+ if (this.options.formatPrefix) {
906
+ parts.push(`prefix=${this.options.formatPrefix}`);
907
+ }
908
+ const message = entry.level === LogLevel.CRITICAL ? `>>> ${entry.message} <<<` : entry.message;
909
+ parts.push(`| ${message}`);
910
+ if (entry.extra) {
911
+ parts.push(`| extra=${entry.extra}`);
912
+ }
913
+ const dataText = formatDataValue(entry.data);
914
+ if (dataText) {
915
+ parts.push(`| data=${dataText}`);
916
+ }
917
+ return parts.join(" ");
918
+ }
919
+ emitLog(entry, formatted) {
920
+ switch (entry.level) {
921
+ case LogLevel.WARN:
922
+ console.warn(formatted);
923
+ break;
924
+ case LogLevel.ERROR:
925
+ case LogLevel.CRITICAL:
926
+ console.error(formatted);
927
+ break;
928
+ default:
929
+ console.log(formatted);
930
+ }
931
+ }
932
+ log(level, message, logScope, restParams, scopeMinLevel) {
933
+ if (!this.shouldLog(level, scopeMinLevel)) {
934
+ return;
935
+ }
936
+ validateLogScope(logScope);
937
+ if (!restParams.topic?.trim()) {
938
+ throw new Error("[LogManager] topic is required on every log call");
939
+ }
940
+ const { topic, extra } = restParams;
941
+ const data = resolveLogData(restParams);
942
+ const entry = this.createLogEntry({
943
+ level,
944
+ message,
945
+ topic,
946
+ extra,
947
+ data,
948
+ ...logScope,
949
+ });
950
+ const formatted = this.formatLog(entry);
951
+ this.emitLog(entry, formatted);
952
+ this.options.onLog?.(entry);
953
+ offerToLogPersist(entry);
954
+ }
955
+ generateTraceId() {
956
+ return generateUniqueId();
957
+ }
958
+ debug(message, logScope, restParams) {
959
+ this.log(LogLevel.DEBUG, message, logScope, restParams);
960
+ }
961
+ info(message, logScope, restParams) {
962
+ this.log(LogLevel.INFO, message, logScope, restParams);
963
+ }
964
+ success(message, logScope, restParams) {
965
+ this.log(LogLevel.SUCCESS, message, logScope, restParams);
966
+ }
967
+ warn(message, logScope, restParams) {
968
+ this.log(LogLevel.WARN, message, logScope, restParams);
969
+ }
970
+ error(message, logScope, restParams) {
971
+ this.log(LogLevel.ERROR, message, logScope, restParams);
972
+ }
973
+ critical(message, logScope, restParams) {
974
+ this.log(LogLevel.CRITICAL, message, logScope, restParams);
975
+ }
976
+ withScope(scope, options) {
977
+ const boundScope = { ...scope, labels: scope.labels ? { ...scope.labels } : undefined };
978
+ const scopeMinLevel = options?.minLevel;
979
+ const logger = {
980
+ debug: (message, restParams) => this.log(LogLevel.DEBUG, message, boundScope, restParams, scopeMinLevel),
981
+ info: (message, restParams) => this.log(LogLevel.INFO, message, boundScope, restParams, scopeMinLevel),
982
+ success: (message, restParams) => this.log(LogLevel.SUCCESS, message, boundScope, restParams, scopeMinLevel),
983
+ warn: (message, restParams) => this.log(LogLevel.WARN, message, boundScope, restParams, scopeMinLevel),
984
+ error: (message, restParams) => this.log(LogLevel.ERROR, message, boundScope, restParams, scopeMinLevel),
985
+ critical: (message, restParams) => this.log(LogLevel.CRITICAL, message, boundScope, restParams, scopeMinLevel),
986
+ resetScope: (patch) => {
987
+ const next = patchScope({
988
+ scope: boundScope,
989
+ patch,
990
+ allowTraceMutation: false,
991
+ });
992
+ boundScope.module = next.module;
993
+ boundScope.traceId = next.traceId;
994
+ boundScope.traceParentId = next.traceParentId;
995
+ boundScope.labels = next.labels;
996
+ },
997
+ };
998
+ return { logger, scope: boundScope };
999
+ }
1000
+ }
1001
+ const logManager = LogManager.getInstance();
1002
+
1003
+ function isScopeInput(input) {
1004
+ return "scope" in input;
1005
+ }
1006
+ /**
1007
+ * Returns a scoped logger — one entry for all call sites.
1008
+ *
1009
+ * - `{ module, traceId?, labels?, … }` — creates a scope (API handlers, one-shot calls)
1010
+ * - `{ scope, minLevel? }` — binds an existing scope (`createScope`, `patchScope`, …)
1011
+ */
1012
+ function createLogger(input) {
1013
+ const { minLevel } = input;
1014
+ const scopeOptions = minLevel != null ? { minLevel } : undefined;
1015
+ if (isScopeInput(input)) {
1016
+ return logManager.withScope(input.scope, scopeOptions).logger;
1017
+ }
1018
+ const scope = createScope({
1019
+ module: input.module,
1020
+ traceId: input.traceId?.trim() || logManager.generateTraceId(),
1021
+ traceParentId: input.traceParentId,
1022
+ labels: input.labels,
1023
+ });
1024
+ return logManager.withScope(scope, scopeOptions).logger;
1025
+ }
1026
+
1027
+ export { updateTargetDetails as A, BaseValidator as B, CREATE_TARGET_ALREADY_EXISTS_MESSAGE as C, validateWith as D, validateWithSchema as E, registerLogPersistOffer as F, createScope as G, patchScope as H, withModule as I, LogLevel as L, MAX_POLL_TARGET_LIST_SIZE as M, OPTIMISTIC_LOCK_ERROR_CODE as O, PostListValidator as P, StatusCode as S, CategoryList as a, MAX_TARGET_LIST_PAGE_SIZE as b, OPTIMISTIC_LOCK_FAILED_MESSAGE as c, createLogger as d, createTarget as e, deleteTarget as f, generateResponse as g, getPossibleTarget as h, getTarget as i, getTargetList as j, getTargetTotalCount as k, handleSupabaseError as l, isCreateTargetAlreadyExistsError as m, isDevEnvironment as n, isOptimisticLockError as o, isOptimisticLockResponse as p, logDev as q, logDevGroup as r, logManager as s, patchTarget as t, pollTargetList as u, postListCreate as v, postLogListCreate as w, postTarget as x, scanTargetList as y, supabase as z };
1028
+ //# sourceMappingURL=create-logger-DyH3mZ8p.js.map