@tailor-platform/sdk 2.0.0-next.1 → 2.0.0-next.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/CHANGELOG.md +1056 -24
  2. package/README.md +9 -9
  3. package/agent-skills/{tailor-sdk → tailor}/SKILL.md +3 -1
  4. package/dist/aigateway-DR4Kwuik.mjs +9 -0
  5. package/dist/aigateway-DR4Kwuik.mjs.map +1 -0
  6. package/dist/{application-DqS1yBg3.mjs → application-CM6hKnSK.mjs} +2155 -2008
  7. package/dist/application-CM6hKnSK.mjs.map +1 -0
  8. package/dist/application-CXNaUNhv.mjs +3 -0
  9. package/dist/authconnection-CZvi9ANm.mjs +9 -0
  10. package/dist/authconnection-CZvi9ANm.mjs.map +1 -0
  11. package/dist/brand-Eo4pLXPJ.mjs.map +1 -1
  12. package/dist/cli/cache/bundle-cache.d.mts +2 -0
  13. package/dist/cli/cache/store.d.mts +1 -0
  14. package/dist/cli/cache/types.d.mts +1 -0
  15. package/dist/cli/commands/api/api-call.d.mts +19 -0
  16. package/dist/cli/commands/api/index.d.mts +4 -0
  17. package/dist/cli/commands/deploy/aigateway.d.mts +5 -0
  18. package/dist/cli/commands/deploy/application.d.mts +7 -0
  19. package/dist/cli/commands/deploy/apply-phases.d.mts +14 -0
  20. package/dist/cli/commands/deploy/auth.d.mts +5 -0
  21. package/dist/cli/commands/deploy/deploy.d.mts +35 -0
  22. package/dist/cli/commands/deploy/executor.d.mts +7 -0
  23. package/dist/cli/commands/deploy/function-registry-types.d.mts +12 -0
  24. package/dist/cli/commands/deploy/function-registry.d.mts +6 -0
  25. package/dist/cli/commands/deploy/idp.d.mts +5 -0
  26. package/dist/cli/commands/deploy/label.d.mts +2 -0
  27. package/dist/cli/commands/deploy/resolver.d.mts +5 -0
  28. package/dist/cli/commands/deploy/secret-manager.d.mts +5 -0
  29. package/dist/cli/commands/deploy/staticwebsite.d.mts +5 -0
  30. package/dist/cli/commands/deploy/tailordb/index.d.mts +10 -0
  31. package/dist/cli/commands/deploy/types.d.mts +4 -0
  32. package/dist/cli/commands/deploy/workflow-execution-policy.d.mts +2 -0
  33. package/dist/cli/commands/deploy/workflow.d.mts +4 -0
  34. package/dist/cli/commands/executor/get.d.mts +19 -0
  35. package/dist/cli/commands/executor/jobs.d.mts +85 -0
  36. package/dist/cli/commands/executor/list.d.mts +18 -0
  37. package/dist/cli/commands/executor/transform.d.mts +42 -0
  38. package/dist/cli/commands/executor/trigger.d.mts +30 -0
  39. package/dist/cli/commands/executor/webhook.d.mts +21 -0
  40. package/dist/cli/commands/function/get.d.mts +17 -0
  41. package/dist/cli/commands/function/list.d.mts +21 -0
  42. package/dist/cli/commands/function/transform.d.mts +12 -0
  43. package/dist/cli/commands/generate/options.d.mts +6 -0
  44. package/dist/cli/commands/generate/seed/bundler.d.mts +27 -0
  45. package/dist/cli/commands/generate/service.d.mts +15 -0
  46. package/dist/cli/commands/machineuser/list.d.mts +26 -0
  47. package/dist/cli/commands/machineuser/token.d.mts +21 -0
  48. package/dist/cli/commands/oauth2client/get.d.mts +17 -0
  49. package/dist/cli/commands/oauth2client/list.d.mts +19 -0
  50. package/dist/cli/commands/oauth2client/transform.d.mts +21 -0
  51. package/dist/cli/commands/organization/folder/create.d.mts +17 -0
  52. package/dist/cli/commands/organization/folder/delete.d.mts +15 -0
  53. package/dist/cli/commands/organization/folder/get.d.mts +16 -0
  54. package/dist/cli/commands/organization/folder/list.d.mts +21 -0
  55. package/dist/cli/commands/organization/folder/update.d.mts +17 -0
  56. package/dist/cli/commands/organization/get.d.mts +15 -0
  57. package/dist/cli/commands/organization/list.d.mts +14 -0
  58. package/dist/cli/commands/organization/transform.d.mts +29 -0
  59. package/dist/cli/commands/organization/tree.d.mts +24 -0
  60. package/dist/cli/commands/organization/update.d.mts +16 -0
  61. package/dist/cli/commands/remove.d.mts +15 -0
  62. package/dist/cli/commands/show.d.mts +39 -0
  63. package/dist/cli/commands/staticwebsite/deploy.d.mts +19 -0
  64. package/dist/cli/commands/tailordb/migrate/bundler.d.mts +29 -0
  65. package/dist/cli/commands/tailordb/migrate/config.d.mts +18 -0
  66. package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +246 -0
  67. package/dist/cli/commands/tailordb/migrate/generate.d.mts +16 -0
  68. package/dist/cli/commands/tailordb/migrate/schema-checks.d.mts +5 -0
  69. package/dist/cli/commands/tailordb/migrate/snapshot-types.d.mts +208 -0
  70. package/dist/cli/commands/tailordb/migrate/snapshot.d.mts +98 -0
  71. package/dist/cli/commands/tailordb/migrate/types.d.mts +7 -0
  72. package/dist/cli/commands/tailordb/truncate.d.mts +18 -0
  73. package/dist/cli/commands/workflow/executions.d.mts +62 -0
  74. package/dist/cli/commands/workflow/get.d.mts +21 -0
  75. package/dist/cli/commands/workflow/list.d.mts +18 -0
  76. package/dist/cli/commands/workflow/resume.d.mts +22 -0
  77. package/dist/cli/commands/workflow/start.d.mts +48 -0
  78. package/dist/cli/commands/workflow/status.d.mts +6 -0
  79. package/dist/cli/commands/workflow/transform.d.mts +34 -0
  80. package/dist/cli/commands/workflow/wait.d.mts +15 -0
  81. package/dist/cli/commands/workflow/waiter.d.mts +23 -0
  82. package/dist/cli/commands/workspace/app/health.d.mts +17 -0
  83. package/dist/cli/commands/workspace/app/list.d.mts +21 -0
  84. package/dist/cli/commands/workspace/app/transform.d.mts +20 -0
  85. package/dist/cli/commands/workspace/create.d.mts +27 -0
  86. package/dist/cli/commands/workspace/delete.d.mts +14 -0
  87. package/dist/cli/commands/workspace/get.d.mts +16 -0
  88. package/dist/cli/commands/workspace/list.d.mts +17 -0
  89. package/dist/cli/commands/workspace/restore.d.mts +14 -0
  90. package/dist/cli/commands/workspace/transform.d.mts +20 -0
  91. package/dist/cli/commands/workspace/user/invite.d.mts +21 -0
  92. package/dist/cli/commands/workspace/user/list.d.mts +21 -0
  93. package/dist/cli/commands/workspace/user/remove.d.mts +16 -0
  94. package/dist/cli/commands/workspace/user/transform.d.mts +9 -0
  95. package/dist/cli/commands/workspace/user/update.d.mts +21 -0
  96. package/dist/cli/index.mjs +12 -5481
  97. package/dist/cli/lib.d.mts +86 -21048
  98. package/dist/cli/lib.mjs +245 -46
  99. package/dist/cli/lib.mjs.map +1 -1
  100. package/dist/cli/main.d.mts +23 -0
  101. package/dist/cli/main.mjs +6777 -0
  102. package/dist/cli/main.mjs.map +1 -0
  103. package/dist/cli/query/index.d.mts +38 -0
  104. package/dist/cli/services/application.d.mts +12 -0
  105. package/dist/cli/services/auth/service.d.mts +3 -0
  106. package/dist/cli/services/executor/service.d.mts +1 -0
  107. package/dist/cli/services/http-adapter/bundler.d.mts +4 -0
  108. package/dist/cli/services/http-adapter/service.d.mts +2 -0
  109. package/dist/cli/services/resolver/service.d.mts +1 -0
  110. package/dist/cli/services/tailordb/service.d.mts +3 -0
  111. package/dist/cli/services/workflow/bundler.d.mts +3 -0
  112. package/dist/cli/services/workflow/service.d.mts +1 -0
  113. package/dist/cli/shared/args.d.mts +13 -0
  114. package/dist/cli/shared/client.d.mts +1298 -0
  115. package/dist/cli/shared/config-loader.d.mts +32 -0
  116. package/dist/cli/shared/context.d.mts +29 -0
  117. package/dist/cli/shared/error-json.d.mts +23 -0
  118. package/dist/cli/shared/readonly-guard.d.mts +25 -0
  119. package/dist/cli/shared/script-executor.d.mts +77 -0
  120. package/dist/cli/shared/seed-chunker.d.mts +45 -0
  121. package/dist/cli/shared/seed-context.d.mts +49 -0
  122. package/dist/cli/shared/tailordb-namespaces.d.mts +40 -0
  123. package/dist/cli/shared/tsconfig-paths-plugin.d.mts +2 -0
  124. package/dist/cli/shared/type-generator.d.mts +20 -0
  125. package/dist/cli/shared/workspace-name.d.mts +1 -0
  126. package/dist/cli/ts-hook.d.mts +4 -0
  127. package/dist/cli/ts-hook.mjs +333 -0
  128. package/dist/completion/zsh-worker.zsh +1471 -1217
  129. package/dist/configure/config/index.d.mts +20 -0
  130. package/dist/configure/config/types.d.mts +134 -0
  131. package/dist/configure/index.d.mts +135 -8
  132. package/dist/configure/index.mjs +558 -36
  133. package/dist/configure/index.mjs.map +1 -1
  134. package/dist/configure/services/aigateway/index.d.mts +16 -0
  135. package/dist/configure/services/aigateway/types.d.mts +10 -0
  136. package/dist/configure/services/auth/index.d.mts +33 -0
  137. package/dist/configure/services/auth/types.d.mts +168 -0
  138. package/dist/configure/services/executor/executor.d.mts +70 -0
  139. package/dist/configure/services/executor/index.d.mts +9 -0
  140. package/dist/configure/services/executor/operation.d.mts +50 -0
  141. package/dist/configure/services/executor/trigger/event.d.mts +514 -0
  142. package/dist/configure/services/executor/trigger/index.d.mts +7 -0
  143. package/dist/configure/services/executor/trigger/schedule.d.mts +24 -0
  144. package/dist/configure/services/executor/trigger/webhook.d.mts +43 -0
  145. package/dist/configure/services/executor/types.d.mts +2 -0
  146. package/dist/configure/services/http-adapter/http-adapter.d.mts +124 -0
  147. package/dist/configure/services/http-adapter/index.d.mts +2 -0
  148. package/dist/configure/services/idp/index.d.mts +60 -0
  149. package/dist/configure/services/idp/permission.d.mts +64 -0
  150. package/dist/configure/services/idp/types.d.mts +23 -0
  151. package/dist/configure/services/index.d.mts +40 -0
  152. package/dist/configure/services/resolver/index.d.mts +6 -0
  153. package/dist/configure/services/resolver/permission.d.mts +64 -0
  154. package/dist/configure/services/resolver/resolver.d.mts +88 -0
  155. package/dist/configure/services/resolver/types.d.mts +5 -0
  156. package/dist/configure/services/secrets/index.d.mts +37 -0
  157. package/dist/configure/services/secrets/types.d.mts +10 -0
  158. package/dist/configure/services/staticwebsite/index.d.mts +18 -0
  159. package/dist/configure/services/staticwebsite/types.d.mts +10 -0
  160. package/dist/configure/services/tailordb/index.d.mts +3 -0
  161. package/dist/configure/services/tailordb/permission.d.mts +103 -0
  162. package/dist/configure/services/tailordb/schema.d.mts +486 -0
  163. package/dist/configure/services/tailordb/types.d.mts +198 -0
  164. package/dist/configure/services/workflow/execution-policy.d.mts +70 -0
  165. package/dist/configure/services/workflow/execution-policy.types.d.mts +103 -0
  166. package/dist/configure/services/workflow/index.d.mts +9 -0
  167. package/dist/configure/services/workflow/job.d.mts +92 -0
  168. package/dist/configure/services/workflow/types.d.mts +2 -0
  169. package/dist/configure/services/workflow/wait-point.d.mts +72 -0
  170. package/dist/configure/services/workflow/workflow.d.mts +66 -0
  171. package/dist/configure/types/aigateway-name.d.mts +12 -0
  172. package/dist/configure/types/connection-name.d.mts +12 -0
  173. package/dist/configure/types/field.d.mts +8 -0
  174. package/dist/configure/types/field.types.d.mts +70 -0
  175. package/dist/configure/types/idp-name.d.mts +12 -0
  176. package/dist/configure/types/index.d.mts +5 -0
  177. package/dist/configure/types/machine-user.d.mts +2 -0
  178. package/dist/configure/types/permission-operand.types.d.mts +20 -0
  179. package/dist/configure/types/type.d.mts +73 -0
  180. package/dist/{context-Bd266-ru.mjs → context-DYQVYWqZ.mjs} +4 -5
  181. package/dist/context-DYQVYWqZ.mjs.map +1 -0
  182. package/dist/{crashreport-BsjAkFWw.mjs → crashreport-B5LqCTfF.mjs} +10 -11
  183. package/dist/{crashreport-BsjAkFWw.mjs.map → crashreport-B5LqCTfF.mjs.map} +1 -1
  184. package/dist/{crashreport-pr6Rhvza.mjs → crashreport-eI7ty7ok.mjs} +1 -1
  185. package/dist/{errors-Dtf2WPaW.mjs → errors-D7583Zz7.mjs} +18 -2
  186. package/dist/errors-D7583Zz7.mjs.map +1 -0
  187. package/dist/{file-_oUZo76X.mjs → file-BUcmVIH2.mjs} +12 -22
  188. package/dist/file-BUcmVIH2.mjs.map +1 -0
  189. package/dist/{globals-Crz8o65k.mjs → globals-TfAVItuK.mjs} +32 -55
  190. package/dist/globals-TfAVItuK.mjs.map +1 -0
  191. package/dist/iconv-QWaZh0TT.mjs +38 -0
  192. package/dist/iconv-QWaZh0TT.mjs.map +1 -0
  193. package/dist/{idp-BDbK5gjm.mjs → idp-RA_swu-h.mjs} +12 -5
  194. package/dist/idp-RA_swu-h.mjs.map +1 -0
  195. package/dist/{interceptor-D-q1rvRl.mjs → interceptor-e33JtsC-.mjs} +2 -2
  196. package/dist/interceptor-e33JtsC-.mjs.map +1 -0
  197. package/dist/kysely/index.d.mts +5 -7
  198. package/dist/logger-BtX0suGY.mjs +48 -0
  199. package/dist/logger-BtX0suGY.mjs.map +1 -0
  200. package/dist/logger-CXQq9YIp.mjs +317 -0
  201. package/dist/logger-CXQq9YIp.mjs.map +1 -0
  202. package/dist/node-builtins-CmaL2Cbq.mjs +36 -0
  203. package/dist/node-builtins-CmaL2Cbq.mjs.map +1 -0
  204. package/dist/parser/service/auth/index.d.mts +1 -0
  205. package/dist/parser/service/auth/schema.d.mts +3 -0
  206. package/dist/parser/service/http-adapter/index.d.mts +1 -0
  207. package/dist/parser/service/http-adapter/schema.d.mts +1 -0
  208. package/dist/parser/service/idp/types.d.mts +5 -0
  209. package/dist/parser/service/tailordb/type-source.d.mts +10 -0
  210. package/dist/parser/service/tailordb/types.d.mts +131 -0
  211. package/dist/platform-serialize-RoRtBS0v.mjs +46 -0
  212. package/dist/platform-serialize-RoRtBS0v.mjs.map +1 -0
  213. package/dist/plugin/builtin/enum-constants/index.d.mts +15 -1
  214. package/dist/plugin/builtin/enum-constants/index.mjs +115 -2
  215. package/dist/plugin/builtin/enum-constants/index.mjs.map +1 -0
  216. package/dist/plugin/builtin/file-utils/index.d.mts +15 -1
  217. package/dist/plugin/builtin/file-utils/index.mjs +149 -2
  218. package/dist/plugin/builtin/file-utils/index.mjs.map +1 -0
  219. package/dist/plugin/builtin/kysely-type/index.d.mts +15 -1
  220. package/dist/plugin/builtin/kysely-type/index.mjs +274 -2
  221. package/dist/plugin/builtin/kysely-type/index.mjs.map +1 -0
  222. package/dist/plugin/builtin/seed/index.d.mts +46 -2
  223. package/dist/plugin/builtin/seed/index.mjs +1 -1
  224. package/dist/plugin/builtin/seed/seed-type-processor.d.mts +21 -0
  225. package/dist/plugin/builtin/seed/types.d.mts +2 -0
  226. package/dist/plugin/get-generated-type.d.mts +16 -0
  227. package/dist/plugin/index.d.mts +3 -117
  228. package/dist/plugin/index.mjs +1 -1
  229. package/dist/plugin/index.mjs.map +1 -1
  230. package/dist/plugin/manager.d.mts +2 -0
  231. package/dist/plugin/types.d.mts +242 -0
  232. package/dist/plugin/with-context.d.mts +101 -0
  233. package/dist/{runtime-n9NCkjee.mjs → register-ts-hook-LYV7zH-e.mjs} +9652 -4479
  234. package/dist/register-ts-hook-LYV7zH-e.mjs.map +1 -0
  235. package/dist/{registry-DdsYlL_P.mjs → registry-BIGVUrMB.mjs} +12 -9
  236. package/dist/registry-BIGVUrMB.mjs.map +1 -0
  237. package/dist/{repl-editor-DmGr9zMw.mjs → repl-editor-BCozyiNq.mjs} +6 -5
  238. package/dist/{repl-editor-DmGr9zMw.mjs.map → repl-editor-BCozyiNq.mjs.map} +1 -1
  239. package/dist/runtime/aigateway.d.mts +25 -0
  240. package/dist/runtime/aigateway.mjs +3 -0
  241. package/dist/runtime/authconnection.d.mts +21 -2
  242. package/dist/runtime/authconnection.mjs +2 -2
  243. package/dist/runtime/context.d.mts +54 -2
  244. package/dist/runtime/context.mjs +2 -2
  245. package/dist/runtime/field-parse.d.mts +10 -0
  246. package/dist/runtime/file.d.mts +170 -2
  247. package/dist/runtime/file.mjs +2 -2
  248. package/dist/runtime/globals.d.mts +38 -20
  249. package/dist/runtime/iconv.d.mts +73 -2
  250. package/dist/runtime/iconv.mjs +2 -2
  251. package/dist/runtime/idp.d.mts +129 -2
  252. package/dist/runtime/idp.mjs +2 -2
  253. package/dist/runtime/index.d.mts +48 -9
  254. package/dist/runtime/index.mjs +10 -8
  255. package/dist/runtime/logger.d.mts +98 -0
  256. package/dist/runtime/logger.mjs +3 -0
  257. package/dist/runtime/secretmanager.d.mts +41 -2
  258. package/dist/runtime/secretmanager.mjs +2 -2
  259. package/dist/runtime/types.d.mts +25 -0
  260. package/dist/runtime/workflow.d.mts +106 -2
  261. package/dist/runtime/workflow.mjs +2 -2
  262. package/dist/{schema-BhkpP5Hw.mjs → schema--xYWRGfe.mjs} +288 -229
  263. package/dist/schema--xYWRGfe.mjs.map +1 -0
  264. package/dist/{secret-file-DBqZhjFQ.mjs → secret-file-C3J4Gy8r.mjs} +2 -2
  265. package/dist/{secret-file-DBqZhjFQ.mjs.map → secret-file-C3J4Gy8r.mjs.map} +1 -1
  266. package/dist/secretmanager-CYlpffsz.mjs +13 -0
  267. package/dist/secretmanager-CYlpffsz.mjs.map +1 -0
  268. package/dist/secretmanager-IY4UvinW.mjs +131 -0
  269. package/dist/secretmanager-IY4UvinW.mjs.map +1 -0
  270. package/dist/seed/index.d.mts +4 -4
  271. package/dist/seed-B-yckgQY.mjs +483 -0
  272. package/dist/seed-B-yckgQY.mjs.map +1 -0
  273. package/dist/{service-DU1mVzri.mjs → service-B5WynBHQ.mjs} +3 -3
  274. package/dist/{service-DU1mVzri.mjs.map → service-B5WynBHQ.mjs.map} +1 -1
  275. package/dist/service-M7OYziQP.mjs +3 -0
  276. package/dist/service-k1xy_A5G.mjs +864 -0
  277. package/dist/service-k1xy_A5G.mjs.map +1 -0
  278. package/dist/service_pb-D5--My_M.mjs +167 -0
  279. package/dist/service_pb-D5--My_M.mjs.map +1 -0
  280. package/dist/service_pb-i8CmnQP4.mjs +3 -0
  281. package/dist/tailor-proto/src/tailor/v1/aigateway_pb.d.mts +203 -0
  282. package/dist/tailor-proto/src/tailor/v1/aigateway_resource_pb.d.mts +57 -0
  283. package/dist/tailor-proto/src/tailor/v1/application_pb.d.mts +420 -0
  284. package/dist/tailor-proto/src/tailor/v1/application_resource_pb.d.mts +160 -0
  285. package/dist/tailor-proto/src/tailor/v1/auth_pb.d.mts +2069 -0
  286. package/dist/tailor-proto/src/tailor/v1/auth_resource_pb.d.mts +865 -0
  287. package/dist/tailor-proto/src/tailor/v1/events_pb.d.mts +111 -0
  288. package/dist/tailor-proto/src/tailor/v1/events_resource_pb.d.mts +68 -0
  289. package/dist/tailor-proto/src/tailor/v1/executor_pb.d.mts +438 -0
  290. package/dist/tailor-proto/src/tailor/v1/executor_resource_pb.d.mts +586 -0
  291. package/dist/tailor-proto/src/tailor/v1/function_pb.d.mts +192 -0
  292. package/dist/tailor-proto/src/tailor/v1/function_registry_pb.d.mts +450 -0
  293. package/dist/tailor-proto/src/tailor/v1/function_resource_pb.d.mts +191 -0
  294. package/dist/tailor-proto/src/tailor/v1/http_adapter_resource_pb.d.mts +49 -0
  295. package/dist/tailor-proto/src/tailor/v1/idp_pb.d.mts +406 -0
  296. package/dist/tailor-proto/src/tailor/v1/idp_resource_pb.d.mts +429 -0
  297. package/dist/tailor-proto/src/tailor/v1/metadata_pb.d.mts +72 -0
  298. package/dist/tailor-proto/src/tailor/v1/metadata_resource_pb.d.mts +16 -0
  299. package/dist/tailor-proto/src/tailor/v1/meter_pb.d.mts +308 -0
  300. package/dist/tailor-proto/src/tailor/v1/pipeline_pb.d.mts +590 -0
  301. package/dist/tailor-proto/src/tailor/v1/pipeline_resource_pb.d.mts +329 -0
  302. package/dist/tailor-proto/src/tailor/v1/resource_pb.d.mts +112 -0
  303. package/dist/tailor-proto/src/tailor/v1/secret_manager_pb.d.mts +345 -0
  304. package/dist/tailor-proto/src/tailor/v1/secret_manager_resource_pb.d.mts +53 -0
  305. package/dist/tailor-proto/src/tailor/v1/service_pb.d.mts +3658 -0
  306. package/dist/tailor-proto/src/tailor/v1/stateflow_pb.d.mts +186 -0
  307. package/dist/tailor-proto/src/tailor/v1/stateflow_resource_pb.d.mts +28 -0
  308. package/dist/tailor-proto/src/tailor/v1/staticwebsite_pb.d.mts +428 -0
  309. package/dist/tailor-proto/src/tailor/v1/staticwebsite_resource_pb.d.mts +89 -0
  310. package/dist/tailor-proto/src/tailor/v1/tailordb_pb.d.mts +683 -0
  311. package/dist/tailor-proto/src/tailor/v1/tailordb_resource_pb.d.mts +796 -0
  312. package/dist/tailor-proto/src/tailor/v1/telemetryrouter_pb.d.mts +329 -0
  313. package/dist/tailor-proto/src/tailor/v1/telemetryrouter_resource_pb.d.mts +207 -0
  314. package/dist/tailor-proto/src/tailor/v1/workflow_pb.d.mts +961 -0
  315. package/dist/tailor-proto/src/tailor/v1/workflow_resource_pb.d.mts +330 -0
  316. package/dist/tailor-proto/src/tailor/v1/workspace_pb.d.mts +2014 -0
  317. package/dist/tailor-proto/src/tailor/v1/workspace_resource_pb.d.mts +482 -0
  318. package/dist/{telemetry-CdqJEzkj.mjs → telemetry-BRVdwh14.mjs} +3 -3
  319. package/dist/telemetry-BRVdwh14.mjs.map +1 -0
  320. package/dist/telemetry-CkbkeJxl.mjs +3 -0
  321. package/dist/test-env-key-D7UkZp99.mjs +75 -0
  322. package/dist/test-env-key-D7UkZp99.mjs.map +1 -0
  323. package/dist/types/aigateway.generated.d.mts +12 -0
  324. package/dist/types/app-config.generated.d.mts +4 -0
  325. package/dist/types/auth-connection.generated.d.mts +33 -0
  326. package/dist/types/auth.generated.d.mts +188 -0
  327. package/dist/types/executor.generated.d.mts +229 -0
  328. package/dist/types/helpers.d.mts +40 -0
  329. package/dist/types/http-adapter.generated.d.mts +28 -0
  330. package/dist/types/idp.generated.d.mts +626 -0
  331. package/dist/types/resolver.generated.d.mts +82 -0
  332. package/dist/types/secrets.generated.d.mts +14 -0
  333. package/dist/types/staticwebsite.generated.d.mts +14 -0
  334. package/dist/types/tailordb.generated.d.mts +468 -0
  335. package/dist/types/workflow.generated.d.mts +17 -0
  336. package/dist/user-agent-Bgsszb5I.mjs +28 -0
  337. package/dist/user-agent-Bgsszb5I.mjs.map +1 -0
  338. package/dist/utils/test/index.d.mts +5 -100
  339. package/dist/utils/test/index.mjs +38 -189
  340. package/dist/utils/test/index.mjs.map +1 -1
  341. package/dist/vitest/environment.d.mts +1 -2
  342. package/dist/vitest/environment.mjs +2 -2
  343. package/dist/vitest/environment.mjs.map +1 -1
  344. package/dist/vitest/index.d.mts +17 -431
  345. package/dist/vitest/index.mjs +1234 -67
  346. package/dist/vitest/index.mjs.map +1 -1
  347. package/dist/vitest/mock-kysely.d.mts +61 -0
  348. package/dist/vitest/mock.d.mts +10 -0
  349. package/dist/vitest/mocks/aigateway.d.mts +40 -0
  350. package/dist/vitest/mocks/authconnection.d.mts +38 -0
  351. package/dist/vitest/mocks/file.d.mts +58 -0
  352. package/dist/vitest/mocks/iconv.d.mts +51 -0
  353. package/dist/vitest/mocks/idp.d.mts +60 -0
  354. package/dist/vitest/mocks/logger.d.mts +45 -0
  355. package/dist/vitest/mocks/secretmanager.d.mts +44 -0
  356. package/dist/vitest/mocks/tailordb.d.mts +115 -0
  357. package/dist/vitest/mocks/workflow.d.mts +148 -0
  358. package/dist/vitest/setup.d.mts +1 -2
  359. package/dist/vitest/setup.mjs +2 -2
  360. package/dist/vitest/workflow-local.d.mts +41 -0
  361. package/dist/workflow-Bamae_Yc.mjs +34 -0
  362. package/dist/workflow-Bamae_Yc.mjs.map +1 -0
  363. package/dist/{client-z_oHGVNy.mjs → workspace_resource_pb-DXnO2AT-.mjs} +57 -621
  364. package/dist/workspace_resource_pb-DXnO2AT-.mjs.map +1 -0
  365. package/docs/cli/application.md +150 -250
  366. package/docs/cli/auth.md +51 -295
  367. package/docs/cli/completion.md +1 -25
  368. package/docs/cli/crashreport.md +3 -61
  369. package/docs/cli/executor.md +72 -183
  370. package/docs/cli/function.md +16 -132
  371. package/docs/cli/organization.md +11 -221
  372. package/docs/cli/plugin.md +29 -0
  373. package/docs/cli/query.md +2 -22
  374. package/docs/cli/secret.md +71 -251
  375. package/docs/cli/setup.md +138 -40
  376. package/docs/cli/skills.md +50 -39
  377. package/docs/cli/staticwebsite.md +32 -180
  378. package/docs/cli/tailordb.md +89 -413
  379. package/docs/cli/upgrade.md +2 -22
  380. package/docs/cli/user.md +78 -247
  381. package/docs/cli/workflow.md +150 -172
  382. package/docs/cli/workspace.md +167 -538
  383. package/docs/cli-reference.md +214 -96
  384. package/docs/configuration.md +90 -6
  385. package/docs/github-actions.md +72 -24
  386. package/docs/migration/v2.md +1613 -0
  387. package/docs/multi-environment.md +29 -7
  388. package/docs/plugin/custom.md +4 -4
  389. package/docs/plugin/index.md +8 -8
  390. package/docs/quickstart.md +8 -7
  391. package/docs/runtime.md +18 -9
  392. package/docs/services/aigateway.md +20 -2
  393. package/docs/services/auth.md +51 -59
  394. package/docs/services/executor.md +91 -6
  395. package/docs/services/http-adapter.md +16 -1
  396. package/docs/services/idp.md +62 -7
  397. package/docs/services/resolver.md +67 -11
  398. package/docs/services/secret.md +11 -11
  399. package/docs/services/staticwebsite.md +8 -2
  400. package/docs/services/tailordb-migration.md +55 -29
  401. package/docs/services/tailordb.md +205 -102
  402. package/docs/services/workflow.md +163 -55
  403. package/docs/testing.md +244 -143
  404. package/package.json +61 -46
  405. package/postinstall.mjs +4 -6
  406. package/dist/application-DB2r36Et.mjs +0 -3
  407. package/dist/application-DqS1yBg3.mjs.map +0 -1
  408. package/dist/authconnection-D2MhtTN5.mjs +0 -15
  409. package/dist/authconnection-D2MhtTN5.mjs.map +0 -1
  410. package/dist/authconnection-DvUQAjQS.d.mts +0 -39
  411. package/dist/cli/erd-viewer-assets/app.js +0 -1181
  412. package/dist/cli/erd-viewer-assets/index.html +0 -73
  413. package/dist/cli/erd-viewer-assets/serve.json +0 -13
  414. package/dist/cli/erd-viewer-assets/styles.css +0 -789
  415. package/dist/cli/index.d.mts +0 -5
  416. package/dist/cli/index.mjs.map +0 -1
  417. package/dist/client-Dbohmtkv.mjs +0 -3
  418. package/dist/client-z_oHGVNy.mjs.map +0 -1
  419. package/dist/context-Bd266-ru.mjs.map +0 -1
  420. package/dist/context-BuuIb8CC.d.mts +0 -68
  421. package/dist/enum-constants-j9QBF0cB.mjs +0 -116
  422. package/dist/enum-constants-j9QBF0cB.mjs.map +0 -1
  423. package/dist/errors-Dtf2WPaW.mjs.map +0 -1
  424. package/dist/field-DOsJCPFa.mjs +0 -22
  425. package/dist/field-DOsJCPFa.mjs.map +0 -1
  426. package/dist/file-BB8Vs9O_.d.mts +0 -250
  427. package/dist/file-_oUZo76X.mjs.map +0 -1
  428. package/dist/file-utils-DcyIPFQh.mjs +0 -150
  429. package/dist/file-utils-DcyIPFQh.mjs.map +0 -1
  430. package/dist/globals-Crz8o65k.mjs.map +0 -1
  431. package/dist/http-adapter.generated-WgMnb7Sb.d.mts +0 -580
  432. package/dist/iconv-Co-TOPuH.d.mts +0 -122
  433. package/dist/iconv-D2vi8G36.mjs +0 -63
  434. package/dist/iconv-D2vi8G36.mjs.map +0 -1
  435. package/dist/idp-BDbK5gjm.mjs.map +0 -1
  436. package/dist/idp-DrhVrLmV.d.mts +0 -160
  437. package/dist/index-5vPyRu1y.d.mts +0 -18
  438. package/dist/index-B7AKc18V.d.mts +0 -47
  439. package/dist/index-BlpzXncY.d.mts +0 -1016
  440. package/dist/index-CK7u9isy.d.mts +0 -46
  441. package/dist/index-CNYe5lnW.d.mts +0 -18
  442. package/dist/index-DjUdWlzf.d.mts +0 -18
  443. package/dist/index-ZePLwxw7.d.mts +0 -208
  444. package/dist/interceptor-D-q1rvRl.mjs.map +0 -1
  445. package/dist/job-fuc3j1Ma.mjs +0 -53
  446. package/dist/job-fuc3j1Ma.mjs.map +0 -1
  447. package/dist/kysely-type-DR8uzZTA.mjs +0 -274
  448. package/dist/kysely-type-DR8uzZTA.mjs.map +0 -1
  449. package/dist/logger-CxF-Ex5d.mjs +0 -220
  450. package/dist/logger-CxF-Ex5d.mjs.map +0 -1
  451. package/dist/mock-BjFj5o1I.mjs +0 -804
  452. package/dist/mock-BjFj5o1I.mjs.map +0 -1
  453. package/dist/registry-DdsYlL_P.mjs.map +0 -1
  454. package/dist/rolldown-runtime-DXywRVcq.mjs +0 -20
  455. package/dist/runtime-n9NCkjee.mjs.map +0 -1
  456. package/dist/schema-BhkpP5Hw.mjs.map +0 -1
  457. package/dist/secretmanager-B3n4KHfm.d.mts +0 -55
  458. package/dist/secretmanager-BVxw3ih_.mjs +0 -24
  459. package/dist/secretmanager-BVxw3ih_.mjs.map +0 -1
  460. package/dist/seed-jf3008-h.mjs +0 -1160
  461. package/dist/seed-jf3008-h.mjs.map +0 -1
  462. package/dist/service-CCL8ruDf.mjs +0 -459
  463. package/dist/service-CCL8ruDf.mjs.map +0 -1
  464. package/dist/service-D6yonf2I.mjs +0 -3
  465. package/dist/telemetry-CdqJEzkj.mjs.map +0 -1
  466. package/dist/telemetry-ClwW5ohF.mjs +0 -3
  467. package/dist/test-env-key-D9kM6ETE.mjs +0 -49
  468. package/dist/test-env-key-D9kM6ETE.mjs.map +0 -1
  469. package/dist/types-B2RpYyA_.mjs +0 -371
  470. package/dist/types-B2RpYyA_.mjs.map +0 -1
  471. package/dist/types-ClhIrW_C.mjs +0 -4
  472. package/dist/types-DCUhgpyI.d.mts +0 -784
  473. package/dist/types-DhO_VEZd.d.mts +0 -574
  474. package/dist/types-DwDgacni.d.mts +0 -338
  475. package/dist/workflow-BbKvGLQg.d.mts +0 -96
  476. package/dist/workflow-DgemCAz3.mjs +0 -38
  477. package/dist/workflow-DgemCAz3.mjs.map +0 -1
  478. package/dist/workflow.generated-DtQwEo-x.d.mts +0 -671
@@ -29,7 +29,7 @@ Define TailorDB Types in files matching glob patterns specified in `tailor.confi
29
29
  import { db } from "@tailor-platform/sdk";
30
30
 
31
31
  // Export both value and type
32
- export const user = db.type("User", {
32
+ export const user = db.table("User", {
33
33
  name: db.string(),
34
34
  email: db.string().unique(),
35
35
  age: db.int(),
@@ -38,7 +38,7 @@ export const user = db.type("User", {
38
38
  export type user = typeof user;
39
39
 
40
40
  // You can define multiple types in the same file
41
- export const role = db.type("Role", {
41
+ export const role = db.table("Role", {
42
42
  name: db.string().unique(),
43
43
  });
44
44
  export type role = typeof role;
@@ -47,7 +47,7 @@ export type role = typeof role;
47
47
  Specify plural form by passing an array as first argument:
48
48
 
49
49
  ```typescript
50
- db.type(["User", "UserList"], {
50
+ db.table(["User", "UserList"], {
51
51
  name: db.string(),
52
52
  });
53
53
  ```
@@ -55,7 +55,7 @@ db.type(["User", "UserList"], {
55
55
  Pass a description as second argument:
56
56
 
57
57
  ```typescript
58
- db.type("User", "User in the system", {
58
+ db.table("User", "User in the system", {
59
59
  name: db.string(),
60
60
  });
61
61
  ```
@@ -174,11 +174,11 @@ db.string().unique();
174
174
  Add a relation to field with automatic index and foreign key constraint:
175
175
 
176
176
  ```typescript
177
- const role = db.type("Role", {
177
+ const role = db.table("Role", {
178
178
  name: db.string(),
179
179
  });
180
180
 
181
- const user = db.type("User", {
181
+ const user = db.table("User", {
182
182
  name: db.string(),
183
183
  roleId: db.uuid().relation({
184
184
  type: "n-1",
@@ -190,7 +190,7 @@ const user = db.type("User", {
190
190
  For one-to-one relations, use `type: "1-1"`:
191
191
 
192
192
  ```typescript
193
- const userProfile = db.type("UserProfile", {
193
+ const userProfile = db.table("UserProfile", {
194
194
  userId: db.uuid().relation({
195
195
  type: "1-1",
196
196
  toward: { type: user },
@@ -202,7 +202,7 @@ const userProfile = db.type("UserProfile", {
202
202
  For foreign key constraint without creating a relation, use `type: "keyOnly"`:
203
203
 
204
204
  ```typescript
205
- const user = db.type("User", {
205
+ const user = db.table("User", {
206
206
  roleId: db.uuid().relation({
207
207
  type: "keyOnly",
208
208
  toward: { type: role },
@@ -213,22 +213,25 @@ const user = db.type("User", {
213
213
  Create relations against different fields using `toward.key`:
214
214
 
215
215
  ```typescript
216
- const user = db.type("User", {
216
+ const user = db.table("User", {
217
217
  email: db.string().unique(),
218
218
  });
219
219
 
220
- const userProfile = db.type("UserProfile", {
220
+ const userProfile = db.table("UserProfile", {
221
221
  userEmail: db.string().relation({
222
222
  type: "1-1",
223
- toward: { type: user, key: "email" },
223
+ toward: { type: user, key: "email", as: "user" },
224
224
  }),
225
225
  });
226
226
  ```
227
227
 
228
+ `userEmail` does not end in `ID`, `Id`, or `id`, so this example specifies the forward relation
229
+ name with `toward.as`.
230
+
228
231
  Customize relation names using `toward.as` / `backward` options:
229
232
 
230
233
  ```typescript
231
- const userProfile = db.type("UserProfile", {
234
+ const userProfile = db.table("UserProfile", {
232
235
  userId: db.uuid().relation({
233
236
  type: "1-1",
234
237
  toward: { type: user, as: "base" },
@@ -254,132 +257,166 @@ type User {
254
257
  - `toward.as` - Customizes the field name for accessing the related type from this type
255
258
  - `backward` - Customizes the field name for accessing this type from the related type
256
259
 
257
- ### Hooks
260
+ Relation names share the same GraphQL field namespace as fields, files, and other relations on
261
+ the table. The SDK rejects duplicate or empty relation names. When `toward.as` is omitted, the
262
+ default forward name comes from the relation field name with a trailing `ID`, `Id`, or `id`
263
+ removed. This lets multiple fields point to the same target table with distinct forward names:
258
264
 
259
- Add hooks to execute functions during data creation or update. Hooks receive three arguments:
265
+ ```typescript
266
+ const post = db.table("Post", {
267
+ authorID: db.uuid().relation({
268
+ type: "n-1",
269
+ toward: { type: user },
270
+ backward: "authoredPosts",
271
+ }),
272
+ reviewerID: db.uuid().relation({
273
+ type: "n-1",
274
+ toward: { type: user },
275
+ backward: "reviewedPosts",
276
+ }),
277
+ });
278
+ ```
260
279
 
261
- - `value`: User input if provided, otherwise existing value on update or null on create
262
- - `data`: Entire record data (for accessing other field values)
263
- - `user`: User performing the operation
280
+ These fields generate the forward names `author` and `reviewer`. A relation field without one of
281
+ the recognized ID suffixes needs an explicit `toward.as`, because its generated forward name
282
+ would conflict with the field itself.
283
+
284
+ Use `toward.as` or `backward` when a generated relation name would conflict with an existing
285
+ field, files entry, or relation on the same table.
286
+
287
+ ### Hooks
288
+
289
+ Add hooks to execute functions during data creation or update.
264
290
 
265
291
  #### Field-level Hooks
266
292
 
267
- Set hooks directly on individual fields:
293
+ Set hooks directly on individual fields.
294
+
295
+ Create hooks receive:
296
+
297
+ - `input`: The field value from the input (null when not provided)
298
+ - `invoker`: Principal performing the operation
299
+ - `now`: Operation timestamp (`Date`), shared across all hooks in the same operation
300
+
301
+ Update hooks receive the same arguments plus:
302
+
303
+ - `oldValue`: The previous field value (null only for optional fields)
268
304
 
269
305
  ```typescript
270
306
  db.string().hooks({
271
- create: ({ user }) => user.id,
272
- update: ({ value }) => value,
307
+ create: ({ invoker }) => invoker?.id ?? "",
308
+ update: ({ input, oldValue }) => input ?? oldValue,
273
309
  });
274
310
  ```
275
311
 
276
- **Note:** When setting hooks at the field level, the `data` argument type is `unknown` since the field doesn't know about other fields in the type. Use type-level hooks if you need to access other fields with type safety.
312
+ Field-level hooks operate on a single field and cannot access other fields. Use type-level hooks for cross-field logic.
277
313
 
278
314
  #### Type-level Hooks
279
315
 
280
- Set hooks for multiple fields at once using `db.type().hooks()`:
316
+ Set hooks across multiple fields using `db.table().hooks()`. The hook returns an object with the fields to override. When both field-level and type-level hooks exist for the same field, type-level hooks take priority.
317
+
318
+ Create hooks receive:
319
+
320
+ - `input`: The submitted record data. When field-level hooks or defaults exist, `input` reflects their applied results
321
+ - `invoker`: Principal performing the operation
322
+ - `now`: Operation timestamp (`Date`), shared across all hooks in the same operation
323
+
324
+ Update hooks receive the same arguments plus:
325
+
326
+ - `oldRecord`: The existing record (non-null)
281
327
 
282
328
  ```typescript
283
329
  export const customer = db
284
- .type("Customer", {
330
+ .table("Customer", {
285
331
  firstName: db.string(),
286
332
  lastName: db.string(),
287
333
  fullName: db.string(),
288
334
  })
289
335
  .hooks({
290
- fullName: {
291
- create: ({ data }) => `${data.firstName} ${data.lastName}`,
292
- update: ({ data }) => `${data.firstName} ${data.lastName}`,
293
- },
336
+ create: ({ input }) => ({
337
+ fullName: `${input.firstName} ${input.lastName}`,
338
+ }),
339
+ update: ({ input, oldRecord }) => ({
340
+ fullName: `${input.firstName ?? oldRecord.firstName} ${input.lastName ?? oldRecord.lastName}`,
341
+ }),
294
342
  });
295
343
  ```
296
344
 
297
- **Important:** Field-level and type-level hooks cannot coexist on the same field. TypeScript will prevent this at compile time:
345
+ Use `now` to stamp several fields with the exact same instant:
298
346
 
299
347
  ```typescript
300
- // Compile error - cannot set hooks on the same field twice
301
- export const user = db
302
- .type("User", {
303
- name: db.string().hooks({ create: ({ data }) => data.firstName }), // Field-level
348
+ export const order = db
349
+ .table("Order", {
350
+ createdAt: db.datetime(),
351
+ updatedAt: db.datetime(),
304
352
  })
305
353
  .hooks({
306
- name: { create: ({ data }) => data.lastName }, // Type-level - ERROR
307
- });
308
-
309
- // OK - set hooks on different fields
310
- export const user = db
311
- .type("User", {
312
- firstName: db.string().hooks({ create: () => "John" }), // Field-level on firstName
313
- lastName: db.string(),
314
- })
315
- .hooks({
316
- lastName: { create: () => "Doe" }, // Type-level on lastName
354
+ create: ({ now }) => ({ createdAt: now, updatedAt: now }),
355
+ update: ({ now }) => ({ updatedAt: now }),
317
356
  });
318
357
  ```
319
358
 
359
+ **Note:** `.hooks()` can only be called once on a type. Duplicate type-level calls fail at compile time and throw at runtime.
360
+
320
361
  ### Validation
321
362
 
322
- Add validation rules to fields. Validators receive three arguments (executed after hooks):
363
+ Add validation rules to fields. Validators run after hooks.
323
364
 
324
- - `value`: Field value after hook transformation
325
- - `data`: Entire record data after hook transformations (for accessing other field values)
326
- - `user`: User performing the operation
365
+ **Note:** Custom validators run only when built-in type validation succeeds, so `value` always has the field's declared type. For array fields, the validator is called once with the complete array, not per element:
327
366
 
328
- Validators return `true` for success, `false` for failure. Use array form `[validator, errorMessage]` for custom error messages.
367
+ ```typescript
368
+ // value is string[], not string
369
+ db.string({ array: true }).validate(({ value }) => value.length >= 2);
370
+ ```
329
371
 
330
372
  #### Field-level Validation
331
373
 
332
- Set validators directly on individual fields:
374
+ Set validators directly on individual fields. Each validator receives `{ value }` (the field value after hooks) and returns an error message string to fail, or void to pass:
333
375
 
334
376
  ```typescript
335
377
  db.string().validate(
336
- ({ value }) => value.includes("@"),
337
- [({ value }) => value.length >= 5, "Email must be at least 5 characters"],
378
+ ({ value }) => (value.includes("@") ? undefined : "Must contain @"),
379
+ ({ value }) => (value.length >= 5 ? undefined : "Must be at least 5 characters"),
338
380
  );
339
381
  ```
340
382
 
341
383
  #### Type-level Validation
342
384
 
343
- Set validators for multiple fields at once using `db.type().validate()`:
385
+ Set a validator across all fields using `db.table().validate()`. The validator receives `{ newRecord, oldRecord, invoker }` and an `issues()` callback to report errors per field:
344
386
 
345
387
  ```typescript
346
388
  export const user = db
347
- .type("User", {
389
+ .table("User", {
348
390
  name: db.string(),
349
391
  email: db.string(),
350
392
  })
351
- .validate({
352
- name: [({ value }) => value.length > 5, "Name must be longer than 5 characters"],
353
- email: [
354
- ({ value }) => value.includes("@"),
355
- [({ value }) => value.length >= 5, "Email must be at least 5 characters"],
356
- ],
393
+ .validate(({ newRecord }, issues) => {
394
+ if (newRecord.name.length <= 5) {
395
+ issues("name", "Name must be longer than 5 characters");
396
+ }
397
+ if (!newRecord.email.includes("@")) {
398
+ issues("email", "Must contain @");
399
+ }
357
400
  });
358
401
  ```
359
402
 
360
- **Important:** Field-level and type-level validation cannot coexist on the same field. TypeScript will prevent this at compile time:
403
+ ### Defaults
404
+
405
+ Set a default value for a required field on create. The field becomes optional in the create input — the default fills in when no value is provided:
361
406
 
362
407
  ```typescript
363
- // Compile error - cannot set validation on the same field twice
364
- export const user = db
365
- .type("User", {
366
- name: db.string().validate(({ value }) => value.length > 0), // Field-level
367
- })
368
- .validate({
369
- name: [({ value }) => value.length < 100, "Too long"], // Type-level - ERROR
370
- });
408
+ db.int().default(0);
409
+ db.string().default("pending");
410
+ ```
371
411
 
372
- // OK - set validation on different fields
373
- export const user = db
374
- .type("User", {
375
- name: db.string().validate(({ value }) => value.length > 0), // Field-level on name
376
- email: db.string(),
377
- })
378
- .validate({
379
- email: [({ value }) => value.includes("@"), "Invalid email"], // Type-level on email
380
- });
412
+ For datetime/date/time fields, pass `"now"` to use the operation timestamp:
413
+
414
+ ```typescript
415
+ db.datetime().default("now");
381
416
  ```
382
417
 
418
+ **Note:** `.validate()` can only be called once on a type. Duplicate type-level calls fail at compile time and throw at runtime.
419
+
383
420
  ### Vector Search
384
421
 
385
422
  ```typescript
@@ -403,18 +440,36 @@ db.string().serial({
403
440
  ### Common Fields
404
441
 
405
442
  ```typescript
406
- export const user = db.type("User", {
443
+ export const user = db.table("User", {
407
444
  name: db.string(),
408
445
  ...db.fields.timestamps(),
409
446
  });
410
447
  ```
411
448
 
449
+ `db.fields.timestamps()` adds non-null `createdAt` and `updatedAt` datetime fields. Both fields are populated when a record is created; provided values are preserved so seed data can use historical timestamps. `updatedAt` is also refreshed automatically when a record is updated.
450
+
412
451
  ## Type Modifiers
413
452
 
453
+ Type builder methods that set one type-level configuration can be called only once on the same type. Duplicate calls fail at compile time and throw at runtime. This applies to `.description()`, `.hooks()`, `.validate()`, `.features()`, `.indexes()`, `.files()`, `.permission()`, and `.gqlPermission()`.
454
+
455
+ Conditional assignment is still supported when only one branch calls the method:
456
+
457
+ ```typescript
458
+ let user = db.type("User", {
459
+ name: db.string(),
460
+ });
461
+
462
+ if (enableFiles) {
463
+ user = user.files({
464
+ avatar: "profile image",
465
+ });
466
+ }
467
+ ```
468
+
414
469
  ### Composite Indexes
415
470
 
416
471
  ```typescript
417
- db.type("User", {
472
+ db.table("User", {
418
473
  firstName: db.string(),
419
474
  lastName: db.string(),
420
475
  }).indexes({
@@ -427,7 +482,7 @@ db.type("User", {
427
482
  ### File Fields
428
483
 
429
484
  ```typescript
430
- db.type("User", {
485
+ db.table("User", {
431
486
  name: db.string(),
432
487
  }).files({
433
488
  avatar: "profile image",
@@ -437,7 +492,7 @@ db.type("User", {
437
492
  ### Features
438
493
 
439
494
  ```typescript
440
- db.type("User", {
495
+ db.table("User", {
441
496
  name: db.string(),
442
497
  }).features({
443
498
  aggregation: true,
@@ -450,7 +505,7 @@ db.type("User", {
450
505
  Enable event publishing for a type to trigger executors on record changes:
451
506
 
452
507
  ```typescript
453
- db.type("User", {
508
+ db.table("User", {
454
509
  name: db.string(),
455
510
  }).features({
456
511
  publishEvents: true,
@@ -460,16 +515,16 @@ db.type("User", {
460
515
  **Behavior:**
461
516
 
462
517
  - When `publishEvents: true`, record creation/update/deletion events are published
463
- - When not specified, it is **automatically set to `true`** if an executor uses this type with `recordCreatedTrigger`, `recordUpdatedTrigger`, or `recordDeletedTrigger`
464
- - When explicitly set to `false` while an executor uses this type, an error is thrown during `tailor-sdk deploy`
518
+ - When not specified, `deploy` sets it from the executors taking part in the same run: `true` while one of them uses this type with `recordCreatedTrigger`, `recordUpdatedTrigger`, or `recordDeletedTrigger`, and `false` once none does. Removing the last such trigger turns publishing back off on the next `deploy`
519
+ - When explicitly set to `false` while an executor taking part in the same run uses this type, `deploy` fails
465
520
 
466
521
  **Use cases:**
467
522
 
468
- 1. **Auto-detection (recommended)**: Don't set `publishEvents` - the SDK automatically enables it when needed by executors
523
+ 1. **Auto-detection (recommended)**: Don't set `publishEvents` - `deploy` enables it while an executor taking part in the same run needs it
469
524
 
470
525
  ```typescript
471
526
  // publishEvents is automatically enabled because an executor uses this type
472
- export const order = db.type("Order", {
527
+ export const order = db.table("Order", {
473
528
  status: db.string(),
474
529
  });
475
530
 
@@ -483,23 +538,67 @@ db.type("User", {
483
538
  2. **Manual enable**: Enable event publishing for external consumers or debugging
484
539
 
485
540
  ```typescript
486
- db.type("AuditLog", {
541
+ db.table("AuditLog", {
487
542
  action: db.string(),
488
543
  }).features({
489
544
  publishEvents: true, // Enable even without executor triggers
490
545
  });
491
546
  ```
492
547
 
493
- 3. **Explicit disable**: Disable event publishing for a type that doesn't need it (error if executor uses it)
548
+ 3. **Explicit disable**: Disable event publishing for a type that doesn't need it (error if an executor taking part in the same run uses it)
494
549
 
495
550
  ```typescript
496
- db.type("TempData", {
551
+ db.table("TempData", {
497
552
  data: db.string(),
498
553
  }).features({
499
554
  publishEvents: false, // Explicitly disable
500
555
  });
501
556
  ```
502
557
 
558
+ **Sharing a type across configs:** an executor in another config auto-enables publishing the same way, as long as both configs take part in the same `deploy` (`--config a,b`). `deploy` records that dependency, so deploying the owning config alone later asks for confirmation instead of silently turning publishing off — it fails outright in a non-interactive environment. Set `publishEvents: true` on the type to keep it on regardless of which configs take part.
559
+
560
+ #### GraphQL Operations
561
+
562
+ Control which GraphQL operations (`create`, `update`, `delete`, `read`) are exposed for a type. All operations are enabled by default.
563
+
564
+ ```typescript
565
+ db.type("Order", {
566
+ status: db.string(),
567
+ }).features({
568
+ gqlOperations: {
569
+ delete: false, // Disable the delete mutation
570
+ },
571
+ });
572
+ ```
573
+
574
+ Use the `"query"` alias to disable all mutations at once (read-only type: `create`/`update`/`delete` false, `read` true):
575
+
576
+ ```typescript
577
+ db.type("AuditLog", {
578
+ action: db.string(),
579
+ }).features({
580
+ gqlOperations: "query",
581
+ });
582
+ ```
583
+
584
+ **Namespace-level default**
585
+
586
+ Set a default for every type in a TailorDB namespace in `tailor.config.ts`. A type's own `.features({ gqlOperations })` always takes precedence over this default.
587
+
588
+ ```typescript
589
+ // tailor.config.ts
590
+ export default defineConfig({
591
+ db: {
592
+ tailordb: {
593
+ files: ["./tailordb/*.ts"],
594
+ gqlOperations: { delete: false }, // Default for every type in this namespace
595
+ },
596
+ },
597
+ });
598
+ ```
599
+
600
+ This default is re-evaluated on every `tailor deploy`, so changing it also updates types that already exist on the platform, not only newly created ones.
601
+
503
602
  ### Field Extraction (`pickFields` / `omitFields`)
504
603
 
505
604
  Extract subsets of fields from a `TailorDBType` for reuse in resolvers, executors, seed schemas, etc.
@@ -509,15 +608,15 @@ Extract subsets of fields from a `TailorDBType` for reuse in resolvers, executor
509
608
  Select specific fields and optionally modify their properties:
510
609
 
511
610
  ```typescript
512
- const user = db.type("User", {
611
+ const user = db.table("User", {
513
612
  id: db.uuid(),
514
613
  name: db.string(),
515
614
  email: db.string().unique(),
516
615
  ...db.fields.timestamps(),
517
616
  });
518
617
 
519
- // Pick id and createdAt, making them optional
520
- user.pickFields(["id", "createdAt"], { optional: true });
618
+ // Pick id, createdAt, and updatedAt, making them optional
619
+ user.pickFields(["id", "createdAt", "updatedAt"], { optional: true });
521
620
  ```
522
621
 
523
622
  Available options:
@@ -527,13 +626,15 @@ Available options:
527
626
  | `optional` | Makes the selected fields optional |
528
627
  | `array` | Makes the selected fields array types |
529
628
 
629
+ **Note:** The `array` option cannot change fields with custom validation — their validators expect the original value shape. Define a new field with a matching validator instead.
630
+
530
631
  #### `omitFields(keys)`
531
632
 
532
633
  Return all fields except the specified ones:
533
634
 
534
635
  ```typescript
535
- // All fields except id and createdAt
536
- user.omitFields(["id", "createdAt"]);
636
+ // All fields except id, createdAt, and updatedAt
637
+ user.omitFields(["id", "createdAt", "updatedAt"]);
537
638
  ```
538
639
 
539
640
  #### Common Pattern: Input Schema Composition
@@ -548,9 +649,9 @@ export default createResolver({
548
649
  name: "createUser",
549
650
  operation: "mutation",
550
651
  input: {
551
- // id/createdAt are optional (auto-generated), other fields are required
552
- ...user.pickFields(["id", "createdAt"], { optional: true }),
553
- ...user.omitFields(["id", "createdAt"]),
652
+ // id/createdAt/updatedAt are optional (auto-generated), other fields are required
653
+ ...user.pickFields(["id", "createdAt", "updatedAt"], { optional: true }),
654
+ ...user.omitFields(["id", "createdAt", "updatedAt"]),
554
655
  },
555
656
  output: t.object({ id: t.uuid() }),
556
657
  body: async (context) => {
@@ -567,8 +668,8 @@ import { t } from "@tailor-platform/sdk";
567
668
  import { invoice } from "../../tailordb/invoice";
568
669
 
569
670
  const schemaType = t.object({
570
- ...invoice.pickFields(["id", "createdAt"], { optional: true }),
571
- ...invoice.omitFields(["id", "createdAt", "invoiceNumber", "sequentialId"]),
671
+ ...invoice.pickFields(["id", "createdAt", "updatedAt"], { optional: true }),
672
+ ...invoice.omitFields(["id", "createdAt", "updatedAt", "invoiceNumber", "sequentialId"]),
572
673
  });
573
674
  ```
574
675
 
@@ -578,8 +679,10 @@ Configure Permission and GQLPermission. For details, see the [TailorDB Permissio
578
679
 
579
680
  **Important**: Following the secure-by-default principle, all operations are denied if permissions are not configured. You must explicitly grant permissions for each operation (create, read, update, delete).
580
681
 
682
+ `generate`/`deploy` reject a type that has no `.permission()`, or no `.gqlPermission()` while GraphQL operations are enabled for it (see [GraphQL Operations](#graphql-operations) above). Disable GraphQL exposure entirely with `.features({ gqlOperations: { create: false, update: false, delete: false, read: false } })` if a type only needs record-level permission.
683
+
581
684
  ```typescript
582
- db.type("User", {
685
+ db.table("User", {
583
686
  name: db.string(),
584
687
  role: db.enum(["admin", "user"]).index(),
585
688
  })
@@ -609,7 +712,7 @@ import {
609
712
  unsafeAllowAllGqlPermission,
610
713
  } from "@tailor-platform/sdk";
611
714
 
612
- db.type("User", {
715
+ db.table("User", {
613
716
  name: db.string(),
614
717
  })
615
718
  .permission(unsafeAllowAllTypePermission)
@@ -620,6 +723,6 @@ db.type("User", {
620
723
 
621
724
  ## Migrations
622
725
 
623
- When you change a TailorDB type definition, the SDK can generate a migration that captures the diff and, for breaking changes, runs a data transformation script during `tailor-sdk deploy`. See the [TailorDB Migrations guide](./tailordb-migration.md) for the full workflow, configuration, supported change types, team coordination, and troubleshooting.
726
+ When you change a TailorDB type definition, the SDK can generate a migration that captures the diff and, for breaking changes, runs a data transformation script during `tailor deploy`. See the [TailorDB Migrations guide](./tailordb-migration.md) for the full workflow, configuration, supported change types, team coordination, and troubleshooting.
624
727
 
625
728
  For the CLI command reference, see [`tailordb migration`](../cli/tailordb.md#tailordb-migration).