@tailor-platform/sdk 2.0.0-next.0 → 2.0.0-next.10

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 (497) hide show
  1. package/CHANGELOG.md +972 -0
  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-DArFTTJ9.mjs +3 -0
  7. package/dist/{application-76hhIhnJ.mjs → application-miwiXtB4.mjs} +1963 -1953
  8. package/dist/application-miwiXtB4.mjs.map +1 -0
  9. package/dist/{assert-CKfwrmCV.mjs → assert-DBxo8jPo.mjs} +1 -2
  10. package/dist/{assert-CKfwrmCV.mjs.map → assert-DBxo8jPo.mjs.map} +1 -1
  11. package/dist/authconnection-CZvi9ANm.mjs +9 -0
  12. package/dist/authconnection-CZvi9ANm.mjs.map +1 -0
  13. package/dist/{brand-DlnJ375c.mjs → brand-Eo4pLXPJ.mjs} +1 -2
  14. package/dist/brand-Eo4pLXPJ.mjs.map +1 -0
  15. package/dist/cli/cache/bundle-cache.d.mts +2 -0
  16. package/dist/cli/cache/store.d.mts +1 -0
  17. package/dist/cli/cache/types.d.mts +1 -0
  18. package/dist/cli/commands/api/api-call.d.mts +19 -0
  19. package/dist/cli/commands/api/index.d.mts +4 -0
  20. package/dist/cli/commands/deploy/aigateway.d.mts +5 -0
  21. package/dist/cli/commands/deploy/application.d.mts +7 -0
  22. package/dist/cli/commands/deploy/apply-phases.d.mts +14 -0
  23. package/dist/cli/commands/deploy/auth.d.mts +5 -0
  24. package/dist/cli/commands/deploy/deploy.d.mts +34 -0
  25. package/dist/cli/commands/deploy/executor.d.mts +7 -0
  26. package/dist/cli/commands/deploy/function-registry-types.d.mts +12 -0
  27. package/dist/cli/commands/deploy/function-registry.d.mts +7 -0
  28. package/dist/cli/commands/deploy/idp.d.mts +5 -0
  29. package/dist/cli/commands/deploy/resolver.d.mts +5 -0
  30. package/dist/cli/commands/deploy/secret-manager.d.mts +5 -0
  31. package/dist/cli/commands/deploy/staticwebsite.d.mts +5 -0
  32. package/dist/cli/commands/deploy/tailordb/index.d.mts +9 -0
  33. package/dist/cli/commands/deploy/types.d.mts +3 -0
  34. package/dist/cli/commands/deploy/workflow-execution-policy.d.mts +3 -0
  35. package/dist/cli/commands/deploy/workflow.d.mts +4 -0
  36. package/dist/cli/commands/executor/get.d.mts +28 -0
  37. package/dist/cli/commands/executor/jobs.d.mts +122 -0
  38. package/dist/cli/commands/executor/list.d.mts +18 -0
  39. package/dist/cli/commands/executor/transform.d.mts +42 -0
  40. package/dist/cli/commands/executor/trigger.d.mts +40 -0
  41. package/dist/cli/commands/executor/webhook.d.mts +21 -0
  42. package/dist/cli/commands/function/get.d.mts +17 -0
  43. package/dist/cli/commands/function/list.d.mts +21 -0
  44. package/dist/cli/commands/function/transform.d.mts +12 -0
  45. package/dist/cli/commands/generate/options.d.mts +6 -0
  46. package/dist/cli/commands/generate/seed/bundler.d.mts +26 -0
  47. package/dist/cli/commands/generate/service.d.mts +15 -0
  48. package/dist/cli/commands/machineuser/list.d.mts +26 -0
  49. package/dist/cli/commands/machineuser/token.d.mts +21 -0
  50. package/dist/cli/commands/oauth2client/get.d.mts +17 -0
  51. package/dist/cli/commands/oauth2client/list.d.mts +19 -0
  52. package/dist/cli/commands/oauth2client/transform.d.mts +21 -0
  53. package/dist/cli/commands/organization/folder/create.d.mts +17 -0
  54. package/dist/cli/commands/organization/folder/delete.d.mts +15 -0
  55. package/dist/cli/commands/organization/folder/get.d.mts +16 -0
  56. package/dist/cli/commands/organization/folder/list.d.mts +21 -0
  57. package/dist/cli/commands/organization/folder/update.d.mts +17 -0
  58. package/dist/cli/commands/organization/get.d.mts +15 -0
  59. package/dist/cli/commands/organization/list.d.mts +14 -0
  60. package/dist/cli/commands/organization/transform.d.mts +29 -0
  61. package/dist/cli/commands/organization/tree.d.mts +24 -0
  62. package/dist/cli/commands/organization/update.d.mts +16 -0
  63. package/dist/cli/commands/remove.d.mts +15 -0
  64. package/dist/cli/commands/show.d.mts +39 -0
  65. package/dist/cli/commands/staticwebsite/deploy.d.mts +19 -0
  66. package/dist/cli/commands/tailordb/migrate/bundler.d.mts +29 -0
  67. package/dist/cli/commands/tailordb/migrate/config.d.mts +18 -0
  68. package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +246 -0
  69. package/dist/cli/commands/tailordb/migrate/generate.d.mts +16 -0
  70. package/dist/cli/commands/tailordb/migrate/snapshot-types.d.mts +208 -0
  71. package/dist/cli/commands/tailordb/migrate/snapshot.d.mts +98 -0
  72. package/dist/cli/commands/tailordb/migrate/types.d.mts +7 -0
  73. package/dist/cli/commands/tailordb/truncate.d.mts +18 -0
  74. package/dist/cli/commands/workflow/executions.d.mts +74 -0
  75. package/dist/cli/commands/workflow/get.d.mts +30 -0
  76. package/dist/cli/commands/workflow/list.d.mts +18 -0
  77. package/dist/cli/commands/workflow/resume.d.mts +22 -0
  78. package/dist/cli/commands/workflow/start.d.mts +60 -0
  79. package/dist/cli/commands/workflow/status.d.mts +6 -0
  80. package/dist/cli/commands/workflow/transform.d.mts +34 -0
  81. package/dist/cli/commands/workflow/wait.d.mts +15 -0
  82. package/dist/cli/commands/workflow/waiter.d.mts +23 -0
  83. package/dist/cli/commands/workspace/app/health.d.mts +17 -0
  84. package/dist/cli/commands/workspace/app/list.d.mts +21 -0
  85. package/dist/cli/commands/workspace/app/transform.d.mts +20 -0
  86. package/dist/cli/commands/workspace/create.d.mts +27 -0
  87. package/dist/cli/commands/workspace/delete.d.mts +14 -0
  88. package/dist/cli/commands/workspace/get.d.mts +16 -0
  89. package/dist/cli/commands/workspace/list.d.mts +17 -0
  90. package/dist/cli/commands/workspace/restore.d.mts +14 -0
  91. package/dist/cli/commands/workspace/transform.d.mts +20 -0
  92. package/dist/cli/commands/workspace/user/invite.d.mts +21 -0
  93. package/dist/cli/commands/workspace/user/list.d.mts +21 -0
  94. package/dist/cli/commands/workspace/user/remove.d.mts +16 -0
  95. package/dist/cli/commands/workspace/user/transform.d.mts +9 -0
  96. package/dist/cli/commands/workspace/user/update.d.mts +21 -0
  97. package/dist/cli/index.mjs +12 -5534
  98. package/dist/cli/lib.d.mts +90 -21180
  99. package/dist/cli/lib.mjs +157 -16
  100. package/dist/cli/lib.mjs.map +1 -1
  101. package/dist/cli/main.d.mts +23 -0
  102. package/dist/cli/main.mjs +6583 -0
  103. package/dist/cli/main.mjs.map +1 -0
  104. package/dist/cli/query/index.d.mts +38 -0
  105. package/dist/cli/services/application.d.mts +12 -0
  106. package/dist/cli/services/auth/service.d.mts +3 -0
  107. package/dist/cli/services/executor/service.d.mts +1 -0
  108. package/dist/cli/services/http-adapter/bundler.d.mts +3 -0
  109. package/dist/cli/services/http-adapter/service.d.mts +2 -0
  110. package/dist/cli/services/resolver/service.d.mts +1 -0
  111. package/dist/cli/services/tailordb/service.d.mts +3 -0
  112. package/dist/cli/services/workflow/bundler.d.mts +2 -0
  113. package/dist/cli/services/workflow/service.d.mts +1 -0
  114. package/dist/cli/shared/args.d.mts +13 -0
  115. package/dist/cli/shared/client.d.mts +1273 -0
  116. package/dist/cli/shared/config-loader.d.mts +25 -0
  117. package/dist/cli/shared/context.d.mts +29 -0
  118. package/dist/cli/shared/error-json.d.mts +23 -0
  119. package/dist/cli/shared/readonly-guard.d.mts +25 -0
  120. package/dist/cli/shared/script-executor.d.mts +77 -0
  121. package/dist/cli/shared/seed-chunker.d.mts +45 -0
  122. package/dist/cli/shared/seed-context.d.mts +49 -0
  123. package/dist/cli/shared/tailordb-namespaces.d.mts +40 -0
  124. package/dist/cli/shared/type-generator.d.mts +19 -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 +4223 -0
  129. package/dist/configure/config/index.d.mts +20 -0
  130. package/dist/configure/config/types.d.mts +111 -0
  131. package/dist/configure/index.d.mts +135 -7
  132. package/dist/configure/index.mjs +409 -56
  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 +271 -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 +4 -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 +83 -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 +56 -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-s0lxhu8_.mjs → context-DYQVYWqZ.mjs} +4 -6
  181. package/dist/context-DYQVYWqZ.mjs.map +1 -0
  182. package/dist/{crashreport-BhD0y14F.mjs → crashreport-B5LqCTfF.mjs} +25 -17
  183. package/dist/{crashreport-BhD0y14F.mjs.map → crashreport-B5LqCTfF.mjs.map} +1 -1
  184. package/dist/{crashreport-D1wKBJ8N.mjs → crashreport-eI7ty7ok.mjs} +1 -2
  185. package/dist/{enum-constants-C7DaWeQo.mjs → enum-constants-j9QBF0cB.mjs} +1 -2
  186. package/dist/enum-constants-j9QBF0cB.mjs.map +1 -0
  187. package/dist/{errors-EsY4XO6O.mjs → errors-D7583Zz7.mjs} +18 -3
  188. package/dist/errors-D7583Zz7.mjs.map +1 -0
  189. package/dist/{file-B58Dm-2P.mjs → file-BUcmVIH2.mjs} +12 -23
  190. package/dist/file-BUcmVIH2.mjs.map +1 -0
  191. package/dist/{file-utils-BHPxPXmn.mjs → file-utils-yEiIS4nJ.mjs} +7 -8
  192. package/dist/file-utils-yEiIS4nJ.mjs.map +1 -0
  193. package/dist/{globals-ByrCoDip.mjs → globals-DQotNuwK.mjs} +32 -6
  194. package/dist/globals-DQotNuwK.mjs.map +1 -0
  195. package/dist/iconv-QWaZh0TT.mjs +38 -0
  196. package/dist/iconv-QWaZh0TT.mjs.map +1 -0
  197. package/dist/{idp-Ch95ag8h.mjs → idp-RA_swu-h.mjs} +12 -6
  198. package/dist/idp-RA_swu-h.mjs.map +1 -0
  199. package/dist/{interceptor-DOqRkCya.mjs → interceptor-e33JtsC-.mjs} +2 -3
  200. package/dist/interceptor-e33JtsC-.mjs.map +1 -0
  201. package/dist/kysely/index.d.mts +5 -7
  202. package/dist/kysely/index.mjs +0 -1
  203. package/dist/kysely/index.mjs.map +1 -1
  204. package/dist/{kysely-type-D1e0Vwkd.mjs → kysely-type-DqIRgDYR.mjs} +6 -6
  205. package/dist/kysely-type-DqIRgDYR.mjs.map +1 -0
  206. package/dist/logger-BtX0suGY.mjs +48 -0
  207. package/dist/logger-BtX0suGY.mjs.map +1 -0
  208. package/dist/logger-CXQq9YIp.mjs +317 -0
  209. package/dist/logger-CXQq9YIp.mjs.map +1 -0
  210. package/dist/{multiline-Cf9ODpr1.mjs → multiline-sfHpTZZK.mjs} +1 -2
  211. package/dist/{multiline-Cf9ODpr1.mjs.map → multiline-sfHpTZZK.mjs.map} +1 -1
  212. package/dist/{package-json-DcQApfPQ.mjs → package-json-8b0O9TlX.mjs} +1 -2
  213. package/dist/{package-json-DcQApfPQ.mjs.map → package-json-8b0O9TlX.mjs.map} +1 -1
  214. package/dist/package-json-Cv2Z-TqQ.mjs +3 -0
  215. package/dist/parser/service/auth/index.d.mts +1 -0
  216. package/dist/parser/service/auth/schema.d.mts +3 -0
  217. package/dist/parser/service/http-adapter/index.d.mts +1 -0
  218. package/dist/parser/service/http-adapter/schema.d.mts +1 -0
  219. package/dist/parser/service/idp/types.d.mts +5 -0
  220. package/dist/parser/service/tailordb/type-source.d.mts +10 -0
  221. package/dist/parser/service/tailordb/types.d.mts +131 -0
  222. package/dist/platform-serialize-RoRtBS0v.mjs +46 -0
  223. package/dist/platform-serialize-RoRtBS0v.mjs.map +1 -0
  224. package/dist/plugin/builtin/enum-constants/index.d.mts +15 -1
  225. package/dist/plugin/builtin/enum-constants/index.mjs +1 -2
  226. package/dist/plugin/builtin/file-utils/index.d.mts +15 -1
  227. package/dist/plugin/builtin/file-utils/index.mjs +1 -2
  228. package/dist/plugin/builtin/kysely-type/index.d.mts +15 -1
  229. package/dist/plugin/builtin/kysely-type/index.mjs +1 -2
  230. package/dist/plugin/builtin/seed/index.d.mts +46 -2
  231. package/dist/plugin/builtin/seed/index.mjs +1 -2
  232. package/dist/plugin/builtin/seed/seed-type-processor.d.mts +19 -0
  233. package/dist/plugin/builtin/seed/types.d.mts +2 -0
  234. package/dist/plugin/get-generated-type.d.mts +16 -0
  235. package/dist/plugin/index.d.mts +3 -119
  236. package/dist/plugin/index.mjs +1 -2
  237. package/dist/plugin/index.mjs.map +1 -1
  238. package/dist/plugin/manager.d.mts +2 -0
  239. package/dist/plugin/types.d.mts +242 -0
  240. package/dist/plugin/with-context.d.mts +101 -0
  241. package/dist/{runtime-C7qTBDD2.mjs → register-ts-hook-BAHMwxfG.mjs} +12374 -8672
  242. package/dist/register-ts-hook-BAHMwxfG.mjs.map +1 -0
  243. package/dist/registry-BIGVUrMB.mjs +54 -0
  244. package/dist/registry-BIGVUrMB.mjs.map +1 -0
  245. package/dist/{repl-editor-CJG3sz7A.mjs → repl-editor-BCozyiNq.mjs} +7 -7
  246. package/dist/{repl-editor-CJG3sz7A.mjs.map → repl-editor-BCozyiNq.mjs.map} +1 -1
  247. package/dist/runtime/aigateway.d.mts +25 -0
  248. package/dist/runtime/aigateway.mjs +3 -0
  249. package/dist/runtime/authconnection.d.mts +21 -2
  250. package/dist/runtime/authconnection.mjs +2 -3
  251. package/dist/runtime/context.d.mts +54 -2
  252. package/dist/runtime/context.mjs +2 -3
  253. package/dist/runtime/field-parse.d.mts +10 -0
  254. package/dist/runtime/file.d.mts +170 -2
  255. package/dist/runtime/file.mjs +2 -3
  256. package/dist/runtime/globals.d.mts +38 -53
  257. package/dist/runtime/globals.mjs +0 -1
  258. package/dist/runtime/iconv.d.mts +73 -2
  259. package/dist/runtime/iconv.mjs +2 -3
  260. package/dist/runtime/idp.d.mts +129 -2
  261. package/dist/runtime/idp.mjs +2 -3
  262. package/dist/runtime/index.d.mts +48 -9
  263. package/dist/runtime/index.mjs +10 -9
  264. package/dist/runtime/logger.d.mts +98 -0
  265. package/dist/runtime/logger.mjs +3 -0
  266. package/dist/runtime/secretmanager.d.mts +41 -2
  267. package/dist/runtime/secretmanager.mjs +2 -3
  268. package/dist/runtime/types.d.mts +25 -0
  269. package/dist/runtime/workflow.d.mts +124 -2
  270. package/dist/runtime/workflow.mjs +2 -3
  271. package/dist/{schema-1msIhXwA.mjs → schema--xYWRGfe.mjs} +289 -231
  272. package/dist/schema--xYWRGfe.mjs.map +1 -0
  273. package/dist/{secret-file-CWzF8rry.mjs → secret-file-C3J4Gy8r.mjs} +2 -3
  274. package/dist/{secret-file-CWzF8rry.mjs.map → secret-file-C3J4Gy8r.mjs.map} +1 -1
  275. package/dist/secretmanager-CYlpffsz.mjs +13 -0
  276. package/dist/secretmanager-CYlpffsz.mjs.map +1 -0
  277. package/dist/secretmanager-IY4UvinW.mjs +131 -0
  278. package/dist/secretmanager-IY4UvinW.mjs.map +1 -0
  279. package/dist/seed/index.d.mts +4 -4
  280. package/dist/seed/index.mjs +0 -1
  281. package/dist/seed/index.mjs.map +1 -1
  282. package/dist/seed-LUVr7jHL.mjs +444 -0
  283. package/dist/seed-LUVr7jHL.mjs.map +1 -0
  284. package/dist/{service-DMohAx8a2.mjs → service-B5WynBHQ.mjs} +3 -4
  285. package/dist/service-B5WynBHQ.mjs.map +1 -0
  286. package/dist/service-BNtPsK9Q.mjs +837 -0
  287. package/dist/service-BNtPsK9Q.mjs.map +1 -0
  288. package/dist/service-D5jn05ZI.mjs +3 -0
  289. package/dist/service_pb-BwZRiNug.mjs +167 -0
  290. package/dist/service_pb-BwZRiNug.mjs.map +1 -0
  291. package/dist/service_pb-wRkxUta6.mjs +3 -0
  292. package/dist/tailor-proto/src/tailor/v1/aigateway_pb.d.mts +203 -0
  293. package/dist/tailor-proto/src/tailor/v1/aigateway_resource_pb.d.mts +57 -0
  294. package/dist/tailor-proto/src/tailor/v1/application_pb.d.mts +315 -0
  295. package/dist/tailor-proto/src/tailor/v1/application_resource_pb.d.mts +160 -0
  296. package/dist/tailor-proto/src/tailor/v1/auth_pb.d.mts +2069 -0
  297. package/dist/tailor-proto/src/tailor/v1/auth_resource_pb.d.mts +865 -0
  298. package/dist/tailor-proto/src/tailor/v1/events_pb.d.mts +111 -0
  299. package/dist/tailor-proto/src/tailor/v1/events_resource_pb.d.mts +68 -0
  300. package/dist/tailor-proto/src/tailor/v1/executor_pb.d.mts +438 -0
  301. package/dist/tailor-proto/src/tailor/v1/executor_resource_pb.d.mts +563 -0
  302. package/dist/tailor-proto/src/tailor/v1/function_pb.d.mts +144 -0
  303. package/dist/tailor-proto/src/tailor/v1/function_registry_pb.d.mts +450 -0
  304. package/dist/tailor-proto/src/tailor/v1/function_resource_pb.d.mts +191 -0
  305. package/dist/tailor-proto/src/tailor/v1/http_adapter_resource_pb.d.mts +49 -0
  306. package/dist/tailor-proto/src/tailor/v1/idp_pb.d.mts +406 -0
  307. package/dist/tailor-proto/src/tailor/v1/idp_resource_pb.d.mts +429 -0
  308. package/dist/tailor-proto/src/tailor/v1/metadata_pb.d.mts +72 -0
  309. package/dist/tailor-proto/src/tailor/v1/metadata_resource_pb.d.mts +16 -0
  310. package/dist/tailor-proto/src/tailor/v1/meter_pb.d.mts +308 -0
  311. package/dist/tailor-proto/src/tailor/v1/pipeline_pb.d.mts +590 -0
  312. package/dist/tailor-proto/src/tailor/v1/pipeline_resource_pb.d.mts +329 -0
  313. package/dist/tailor-proto/src/tailor/v1/resource_pb.d.mts +112 -0
  314. package/dist/tailor-proto/src/tailor/v1/secret_manager_pb.d.mts +345 -0
  315. package/dist/tailor-proto/src/tailor/v1/secret_manager_resource_pb.d.mts +53 -0
  316. package/dist/tailor-proto/src/tailor/v1/service_pb.d.mts +3575 -0
  317. package/dist/tailor-proto/src/tailor/v1/stateflow_pb.d.mts +186 -0
  318. package/dist/tailor-proto/src/tailor/v1/stateflow_resource_pb.d.mts +28 -0
  319. package/dist/tailor-proto/src/tailor/v1/staticwebsite_pb.d.mts +428 -0
  320. package/dist/tailor-proto/src/tailor/v1/staticwebsite_resource_pb.d.mts +89 -0
  321. package/dist/tailor-proto/src/tailor/v1/tailordb_pb.d.mts +683 -0
  322. package/dist/tailor-proto/src/tailor/v1/tailordb_resource_pb.d.mts +796 -0
  323. package/dist/tailor-proto/src/tailor/v1/telemetryrouter_pb.d.mts +329 -0
  324. package/dist/tailor-proto/src/tailor/v1/telemetryrouter_resource_pb.d.mts +182 -0
  325. package/dist/tailor-proto/src/tailor/v1/workflow_pb.d.mts +861 -0
  326. package/dist/tailor-proto/src/tailor/v1/workflow_resource_pb.d.mts +309 -0
  327. package/dist/tailor-proto/src/tailor/v1/workspace_pb.d.mts +2014 -0
  328. package/dist/tailor-proto/src/tailor/v1/workspace_resource_pb.d.mts +482 -0
  329. package/dist/{telemetry-BQbbVo2t.mjs → telemetry-BRVdwh14.mjs} +4 -5
  330. package/dist/telemetry-BRVdwh14.mjs.map +1 -0
  331. package/dist/telemetry-CkbkeJxl.mjs +3 -0
  332. package/dist/test-env-key-D7UkZp99.mjs +75 -0
  333. package/dist/test-env-key-D7UkZp99.mjs.map +1 -0
  334. package/dist/type-source-DH_LH20p.mjs +13 -0
  335. package/dist/type-source-DH_LH20p.mjs.map +1 -0
  336. package/dist/types/aigateway.generated.d.mts +12 -0
  337. package/dist/types/app-config.generated.d.mts +4 -0
  338. package/dist/types/auth-connection.generated.d.mts +33 -0
  339. package/dist/types/auth.generated.d.mts +188 -0
  340. package/dist/types/executor.generated.d.mts +209 -0
  341. package/dist/types/helpers.d.mts +40 -0
  342. package/dist/types/http-adapter.generated.d.mts +28 -0
  343. package/dist/types/idp.generated.d.mts +626 -0
  344. package/dist/types/resolver.generated.d.mts +82 -0
  345. package/dist/types/secrets.generated.d.mts +14 -0
  346. package/dist/types/staticwebsite.generated.d.mts +14 -0
  347. package/dist/types/tailordb.generated.d.mts +468 -0
  348. package/dist/types/workflow.generated.d.mts +17 -0
  349. package/dist/user-agent-Bgsszb5I.mjs +28 -0
  350. package/dist/user-agent-Bgsszb5I.mjs.map +1 -0
  351. package/dist/utils/test/index.d.mts +6 -99
  352. package/dist/utils/test/index.mjs +60 -40
  353. package/dist/utils/test/index.mjs.map +1 -1
  354. package/dist/utils/test/mock.d.mts +86 -0
  355. package/dist/vitest/environment.d.mts +1 -2
  356. package/dist/vitest/environment.mjs +2 -3
  357. package/dist/vitest/environment.mjs.map +1 -1
  358. package/dist/vitest/index.d.mts +15 -392
  359. package/dist/vitest/index.mjs +1347 -9
  360. package/dist/vitest/index.mjs.map +1 -1
  361. package/dist/vitest/mock-kysely.d.mts +61 -0
  362. package/dist/vitest/mock.d.mts +10 -0
  363. package/dist/vitest/mocks/aigateway.d.mts +40 -0
  364. package/dist/vitest/mocks/authconnection.d.mts +38 -0
  365. package/dist/vitest/mocks/file.d.mts +58 -0
  366. package/dist/vitest/mocks/iconv.d.mts +51 -0
  367. package/dist/vitest/mocks/idp.d.mts +60 -0
  368. package/dist/vitest/mocks/logger.d.mts +45 -0
  369. package/dist/vitest/mocks/secretmanager.d.mts +44 -0
  370. package/dist/vitest/mocks/tailordb.d.mts +115 -0
  371. package/dist/vitest/mocks/workflow.d.mts +157 -0
  372. package/dist/vitest/setup.d.mts +1 -2
  373. package/dist/vitest/setup.mjs +2 -3
  374. package/dist/vitest/setup.mjs.map +1 -1
  375. package/dist/vitest/workflow-local.d.mts +41 -0
  376. package/dist/workflow-CsaQ9qK-.mjs +42 -0
  377. package/dist/workflow-CsaQ9qK-.mjs.map +1 -0
  378. package/dist/{client-CobIRHl-.mjs → workspace_resource_pb-UGK1SSn_.mjs} +55 -616
  379. package/dist/workspace_resource_pb-UGK1SSn_.mjs.map +1 -0
  380. package/docs/cli/application.md +150 -252
  381. package/docs/cli/auth.md +51 -295
  382. package/docs/cli/completion.md +4 -25
  383. package/docs/cli/crashreport.md +3 -63
  384. package/docs/cli/executor.md +72 -183
  385. package/docs/cli/function.md +17 -133
  386. package/docs/cli/organization.md +11 -221
  387. package/docs/cli/plugin.md +29 -0
  388. package/docs/cli/query.md +2 -22
  389. package/docs/cli/secret.md +71 -251
  390. package/docs/cli/setup.md +138 -40
  391. package/docs/cli/skills.md +50 -39
  392. package/docs/cli/staticwebsite.md +32 -180
  393. package/docs/cli/tailordb.md +71 -427
  394. package/docs/cli/upgrade.md +2 -22
  395. package/docs/cli/user.md +78 -247
  396. package/docs/cli/workflow.md +150 -172
  397. package/docs/cli/workspace.md +167 -538
  398. package/docs/cli-reference.md +213 -96
  399. package/docs/configuration.md +40 -8
  400. package/docs/github-actions.md +72 -24
  401. package/docs/migration/v2.md +1316 -0
  402. package/docs/multi-environment.md +29 -7
  403. package/docs/plugin/custom.md +6 -6
  404. package/docs/plugin/index.md +9 -9
  405. package/docs/quickstart.md +8 -7
  406. package/docs/runtime.md +21 -12
  407. package/docs/services/aigateway.md +115 -0
  408. package/docs/services/auth.md +70 -61
  409. package/docs/services/executor.md +8 -5
  410. package/docs/services/http-adapter.md +16 -1
  411. package/docs/services/idp.md +55 -2
  412. package/docs/services/resolver.md +63 -11
  413. package/docs/services/secret.md +11 -11
  414. package/docs/services/staticwebsite.md +8 -2
  415. package/docs/services/tailordb-migration.md +43 -28
  416. package/docs/services/tailordb.md +200 -99
  417. package/docs/services/workflow.md +135 -59
  418. package/docs/testing.md +253 -145
  419. package/package.json +61 -47
  420. package/postinstall.mjs +4 -6
  421. package/dist/actor-J2gJ0eK5.d.mts +0 -24
  422. package/dist/application-76hhIhnJ.mjs.map +0 -1
  423. package/dist/application-av2raLs6.mjs +0 -4
  424. package/dist/authconnection-BIYzEh2p.d.mts +0 -39
  425. package/dist/authconnection-D8SJGMpj.mjs +0 -16
  426. package/dist/authconnection-D8SJGMpj.mjs.map +0 -1
  427. package/dist/brand-DlnJ375c.mjs.map +0 -1
  428. package/dist/chunk-BkoGK1jX.mjs +0 -21
  429. package/dist/cli/erd-viewer-assets/app.js +0 -1181
  430. package/dist/cli/erd-viewer-assets/index.html +0 -73
  431. package/dist/cli/erd-viewer-assets/serve.json +0 -13
  432. package/dist/cli/erd-viewer-assets/styles.css +0 -789
  433. package/dist/cli/index.d.mts +0 -5
  434. package/dist/cli/index.mjs.map +0 -1
  435. package/dist/cli/skills.d.mts +0 -1
  436. package/dist/cli/skills.mjs +0 -22
  437. package/dist/cli/skills.mjs.map +0 -1
  438. package/dist/client-C68VWo4g.mjs +0 -4
  439. package/dist/client-CobIRHl-.mjs.map +0 -1
  440. package/dist/context-CUBwSBq4.d.mts +0 -68
  441. package/dist/context-s0lxhu8_.mjs.map +0 -1
  442. package/dist/enum-constants-C7DaWeQo.mjs.map +0 -1
  443. package/dist/env-B-g-qgE4.d.mts +0 -7
  444. package/dist/errors-EsY4XO6O.mjs.map +0 -1
  445. package/dist/field-C4zdJLW5.mjs +0 -23
  446. package/dist/field-C4zdJLW5.mjs.map +0 -1
  447. package/dist/file-B58Dm-2P.mjs.map +0 -1
  448. package/dist/file-BzK8z3X-.d.mts +0 -250
  449. package/dist/file-utils-BHPxPXmn.mjs.map +0 -1
  450. package/dist/globals-ByrCoDip.mjs.map +0 -1
  451. package/dist/iconv-DreIffeM.mjs +0 -64
  452. package/dist/iconv-DreIffeM.mjs.map +0 -1
  453. package/dist/iconv-kwrmd1U_.d.mts +0 -122
  454. package/dist/idp-BlBPtXJ-.d.mts +0 -160
  455. package/dist/idp-Ch95ag8h.mjs.map +0 -1
  456. package/dist/index-CLxubakC.d.mts +0 -1225
  457. package/dist/index-CPRnOjjt.d.mts +0 -18
  458. package/dist/index-CQZVJ5SX.d.mts +0 -18
  459. package/dist/index-CfRFkXIO.d.mts +0 -47
  460. package/dist/index-DRhMpdnA.d.mts +0 -46
  461. package/dist/index-DUupuPhZ.d.mts +0 -18
  462. package/dist/interceptor-DOqRkCya.mjs.map +0 -1
  463. package/dist/job-BpsFXPbi.mjs +0 -54
  464. package/dist/job-BpsFXPbi.mjs.map +0 -1
  465. package/dist/kysely-type-D1e0Vwkd.mjs.map +0 -1
  466. package/dist/logger-DpJyJvNz.mjs +0 -221
  467. package/dist/logger-DpJyJvNz.mjs.map +0 -1
  468. package/dist/mock-DMgIygjE.mjs +0 -806
  469. package/dist/mock-DMgIygjE.mjs.map +0 -1
  470. package/dist/package-json-wzO6nV9O.mjs +0 -4
  471. package/dist/plugin-C_FyVSdl.d.mts +0 -634
  472. package/dist/registry-D0uB0OrK.mjs +0 -178
  473. package/dist/registry-D0uB0OrK.mjs.map +0 -1
  474. package/dist/runtime-C7qTBDD2.mjs.map +0 -1
  475. package/dist/schema-1msIhXwA.mjs.map +0 -1
  476. package/dist/secretmanager-B9h-U_8U.mjs +0 -25
  477. package/dist/secretmanager-B9h-U_8U.mjs.map +0 -1
  478. package/dist/secretmanager-CKLB3wAQ.d.mts +0 -55
  479. package/dist/seed-BH2FbrPV.mjs +0 -1171
  480. package/dist/seed-BH2FbrPV.mjs.map +0 -1
  481. package/dist/service-BHQIerYh.mjs +0 -4
  482. package/dist/service-DMohAx8a2.mjs.map +0 -1
  483. package/dist/service-wI3Hvrgx.mjs +0 -460
  484. package/dist/service-wI3Hvrgx.mjs.map +0 -1
  485. package/dist/tailordb-BlBGmQK-.d.mts +0 -863
  486. package/dist/telemetry-BQbbVo2t.mjs.map +0 -1
  487. package/dist/telemetry-w92bvGdC.mjs +0 -4
  488. package/dist/types-2Be3wSMc.mjs +0 -5
  489. package/dist/types-CmzfQP_m.mjs +0 -372
  490. package/dist/types-CmzfQP_m.mjs.map +0 -1
  491. package/dist/workflow--aPbA8Uq.mjs +0 -39
  492. package/dist/workflow--aPbA8Uq.mjs.map +0 -1
  493. package/dist/workflow-CMamswkK.d.mts +0 -96
  494. package/dist/workflow.generated-Bf1tWylx.d.mts +0 -1416
  495. package/docs/generator/builtin.md +0 -257
  496. package/docs/generator/custom.md +0 -147
  497. package/docs/generator/index.md +0 -66
@@ -86,7 +86,7 @@ Example TailorDB type for user profile:
86
86
  // tailordb/user.ts
87
87
  import { db } from "@tailor-platform/sdk";
88
88
 
89
- export const user = db.type("User", {
89
+ export const user = db.table("User", {
90
90
  email: db.string().unique(), // usernameField must have unique constraint
91
91
  role: db.enum(["admin", "user"]),
92
92
  ...db.fields.timestamps(),
@@ -107,7 +107,7 @@ userProfile: {
107
107
 
108
108
  **usernameField**: The field in the TailorDB type used as the username. This field must have a unique constraint (`.unique()`) since it is used to uniquely identify users.
109
109
 
110
- **attributes**: Specifies which fields from the TailorDB type are used as user attributes. Set to `true` to enable a field. Enabled attributes must be assigned values in all machine user definitions. Only fields with ValueOperand types (string, boolean, string[], boolean[]) can be used as attributes. The `id` field and datetime/date/time types are excluded.
110
+ **attributes**: Specifies which fields from the TailorDB type are used as user attributes. Set to `true` to enable a field. Machine user definitions must assign values to attributes derived from required fields; attributes derived from optional fields may be omitted (see [Machine Users](#machine-users)). Only fields with ValueOperand types (string, boolean, string[], boolean[]) can be used as attributes. The `id` field and datetime/date/time types are excluded.
111
111
 
112
112
  ## Attribute List
113
113
 
@@ -130,7 +130,7 @@ Example TailorDB type with UUID fields for attribute list:
130
130
  // tailordb/user.ts
131
131
  import { db } from "@tailor-platform/sdk";
132
132
 
133
- export const user = db.type("User", {
133
+ export const user = db.table("User", {
134
134
  email: db.string().unique(),
135
135
  role: db.enum(["admin", "user"]),
136
136
  organizationId: db.uuid(), // Can be used in attributeList
@@ -139,18 +139,18 @@ export const user = db.type("User", {
139
139
  });
140
140
  ```
141
141
 
142
- The `attributeList` values are accessible via `user.attributeList` as a tuple:
142
+ The `attributeList` values are accessible via the runtime principal's `attributeList` as a tuple:
143
143
 
144
144
  ```typescript
145
145
  // In a resolver
146
146
  body: (context) => {
147
- const [organizationId, teamId] = context.user.attributeList;
147
+ const [organizationId, teamId] = context.caller?.attributeList ?? [];
148
148
  },
149
149
 
150
150
  // In TailorDB hooks
151
151
  .hooks({
152
152
  field: {
153
- create: ({ user }) => user.attributeList[0], // First UUID from list
153
+ create: ({ invoker }) => invoker?.attributeList[0] ?? null, // First UUID from list
154
154
  },
155
155
  })
156
156
  ```
@@ -160,7 +160,7 @@ body: (context) => {
160
160
  When you want to use machine users without defining a `userProfile`, define `machineUserAttributes` instead. These attributes are used for:
161
161
 
162
162
  - type-safe `machineUsers[*].attributes`
163
- - `context.user.attributes` typing (via `tailor.d.ts`)
163
+ - runtime principal `attributes` typing (via `tailor.d.ts`)
164
164
 
165
165
  ```typescript
166
166
  import { defineAuth, t } from "@tailor-platform/sdk";
@@ -182,7 +182,7 @@ export const auth = defineAuth("my-auth", {
182
182
  To update types in `tailor.d.ts`, run:
183
183
 
184
184
  ```bash
185
- tailor-sdk generate
185
+ tailor generate
186
186
  ```
187
187
 
188
188
  ## Machine Users
@@ -200,12 +200,12 @@ machineUsers: {
200
200
  },
201
201
  ```
202
202
 
203
- **attributes**: Values for attributes enabled in `userProfile.attributes` (or all fields defined in `machineUserAttributes` when `userProfile` is omitted). All enabled fields must be set here. These values are accessible via `user.attributes`:
203
+ **attributes**: Values for attributes enabled in `userProfile.attributes` (or fields defined in `machineUserAttributes` when `userProfile` is omitted). Attribute keys mirror the field's optionality: attributes derived from required fields must be set, while attributes derived from optional fields may be omitted. Setting an attribute to `null` or `undefined` is equivalent to omitting it — the attribute is deployed as unset. These values are accessible via the runtime principal's `attributes`:
204
204
 
205
205
  ```typescript
206
206
  // In a resolver
207
207
  body: (context) => {
208
- const role = context.user.attributes?.role;
208
+ const role = context.caller?.attributes.role;
209
209
  },
210
210
  ```
211
211
 
@@ -230,25 +230,25 @@ machineUsers: {
230
230
  },
231
231
  ```
232
232
 
233
- These values are accessible via `user.attributeList`:
233
+ These values are accessible via the runtime principal's `attributeList`:
234
234
 
235
235
  ```typescript
236
236
  // In a resolver
237
237
  body: (context) => {
238
- const [organizationId, teamId] = context.user.attributeList;
238
+ const [organizationId, teamId] = context.caller?.attributeList ?? [];
239
239
  },
240
240
 
241
241
  // In TailorDB hooks
242
242
  .hooks({
243
243
  field: {
244
- create: ({ user }) => user.attributes?.role === "ADMIN" ? "default" : null,
244
+ create: ({ invoker }) => invoker?.attributes.role === "ADMIN" ? "default" : null,
245
245
  },
246
246
  })
247
247
 
248
248
  // In TailorDB validate
249
249
  .validate({
250
250
  field: [
251
- ({ user }) => user.attributes?.role === "ADMIN",
251
+ ({ invoker }) => invoker?.attributes.role === "ADMIN",
252
252
  "Only admins can set this field",
253
253
  ],
254
254
  })
@@ -264,12 +264,12 @@ Machine users are useful for:
264
264
  Get a machine user token using the CLI:
265
265
 
266
266
  ```bash
267
- tailor-sdk machineuser token <name>
267
+ tailor machineuser token <name>
268
268
  ```
269
269
 
270
270
  ### Specifying a machine user invoker
271
271
 
272
- Resolvers, executors, and `workflow.trigger()` accept an `authInvoker` option that chooses which machine user runs the operation. Pass the machine user name as a plain string — it is type-narrowed to the names you registered in `machineUsers`.
272
+ Resolvers, executors, and `workflow.start()` accept an `invoker` option that chooses which machine user runs the operation. Pass the machine user name as a plain string — it is type-narrowed to the names you registered in `machineUsers`.
273
273
 
274
274
  ```typescript
275
275
  // tailor.config.ts
@@ -284,21 +284,21 @@ export const auth = defineAuth("my-auth", {
284
284
  ```
285
285
 
286
286
  ```typescript
287
- // resolvers/trigger-workflow.ts
287
+ // resolvers/start-workflow.ts
288
288
  import { createResolver, t } from "@tailor-platform/sdk";
289
289
  import myWorkflow from "../workflows/my-workflow";
290
290
 
291
291
  export default createResolver({
292
- name: "triggerMyWorkflow",
292
+ name: "startMyWorkflow",
293
293
  operation: "mutation",
294
294
  input: {
295
295
  id: t.string(),
296
296
  },
297
297
  body: async ({ input }) => {
298
- // Trigger workflow with machine user permissions
299
- const workflowRunId = await myWorkflow.trigger(
298
+ // Start workflow with machine user permissions
299
+ const workflowRunId = await myWorkflow.start(
300
300
  { id: input.id },
301
- { authInvoker: "admin-machine-user" },
301
+ { invoker: "admin-machine-user" },
302
302
  );
303
303
  return { workflowRunId };
304
304
  },
@@ -308,9 +308,7 @@ export default createResolver({
308
308
  });
309
309
  ```
310
310
 
311
- Type narrowing is provided by the generated `tailor.d.ts` (the `MachineUserNameRegistry` interface). Run `tailor-sdk generate` (or `apply`) after defining new machine users to refresh it.
312
-
313
- > **Deprecated:** The `auth.invoker("<name>")` helper is still available for backward compatibility. Prefer the string form — it does not require importing `auth` from `tailor.config.ts` into runtime files, avoiding bundling config-layer (Node-only) dependencies.
311
+ Type narrowing is provided by the generated `tailor.d.ts` (the `MachineUserNameRegistry` interface). Run `tailor generate` (or `deploy`) after defining new machine users to refresh it.
314
312
 
315
313
  ## OAuth 2.0 Clients
316
314
 
@@ -350,7 +348,7 @@ oauth2Clients: {
350
348
  Get OAuth2 client credentials using the CLI:
351
349
 
352
350
  ```bash
353
- tailor-sdk oauth2client get <name>
351
+ tailor oauth2client get <name>
354
352
  ```
355
353
 
356
354
  ## Identity Provider
@@ -365,21 +363,18 @@ See [IdP](./idp.md) for configuring identity providers.
365
363
 
366
364
  ## Auth Connections
367
365
 
368
- Auth connections enable OAuth2 authentication with external providers (Google, Microsoft 365, QuickBooks, etc.) for application-to-application flows. Functions can access connection tokens at runtime via `tailor.authconnection.getConnectionToken()`.
366
+ Auth connections enable OAuth2 authentication with external providers (Google, Microsoft 365, QuickBooks, etc.) for application-to-application flows. Functions can access connection tokens at runtime via `authconnection.getConnectionToken()` (from `@tailor-platform/sdk/runtime`).
369
367
 
370
368
  For the official Tailor Platform documentation, see [AuthConnection Guide](https://docs.tailor.tech/guides/auth/authconnection).
371
369
 
372
- > [!WARNING]
373
- > **Managing connections through `tailor.config.ts` is unreliable for shared and CI deploys.**
374
- > A deploy revokes and recreates the connection — discarding the token obtained via `authconnection authorize` — whenever it cannot confirm the secret is unchanged. That check relies on a hash stored locally in `.tailor-sdk/secrets-state.json`, which is gitignored and therefore not shared across machines. So a deploy from CI, a clean checkout, another developer's machine, or after deleting `.tailor-sdk/` recreates the connection and drops its token. Only repeated deploys from the same machine that still holds that state keep the token.
375
- >
376
- > Because of this, prefer to **create the connection and its token from the Console**. You can jump to the connections page with:
370
+ > [!NOTE]
371
+ > Deploy updates connections **in-place**, preserving the OAuth token. If the connection requires re-authorization after an update, the deploy will warn you:
377
372
  >
378
373
  > ```bash
379
- > tailor-sdk authconnection open
374
+ > tailor authconnection authorize --name <connection-name>
375
+ > # Or via the Console:
376
+ > tailor authconnection open
380
377
  > ```
381
- >
382
- > The `connections` field in `defineAuth()` and the `authconnection authorize` flow are documented below for reference.
383
378
 
384
379
  ### Setup Flow
385
380
 
@@ -411,10 +406,10 @@ export const auth = defineAuth("my-auth", {
411
406
  });
412
407
  ```
413
408
 
414
- After `tailor-sdk deploy`, authorize the connection:
409
+ After `tailor deploy`, authorize the connection:
415
410
 
416
411
  ```bash
417
- tailor-sdk authconnection authorize --name google-connection \
412
+ tailor authconnection authorize --name google-connection \
418
413
  --scopes "openid,profile,email"
419
414
  ```
420
415
 
@@ -432,30 +427,25 @@ The authorize command opens a browser for the OAuth2 flow. The authorization cod
432
427
  | `authUrl` | `string` | No | Override for the authorization endpoint. |
433
428
  | `tokenUrl` | `string` | No | Override for the token endpoint. |
434
429
 
435
- ### Change Detection
436
-
437
- The SDK uses hash-based change detection for connection configs. Only connections whose configuration has changed since the last `apply` are updated (revoked and recreated). Deleting the `.tailor-sdk/` directory forces all connections to be re-sent.
430
+ ### Retrieving Connection Tokens
438
431
 
439
- > [!WARNING]
440
- > The secret hash lives in `.tailor-sdk/secrets-state.json`, which is gitignored and not shared across machines or CI. When that state is missing — a clean checkout, CI, another machine, or after deleting `.tailor-sdk/` — a deploy cannot confirm the secret is unchanged, so it revokes and recreates the connection and discards the token stored by `authconnection authorize`. For shared and CI workflows, manage the connection and create its token from the Console (`tailor-sdk authconnection open`) instead.
441
-
442
- ### `auth.getConnectionToken()`
443
-
444
- `auth.getConnectionToken()` retrieves connection tokens at runtime by calling `tailor.authconnection.getConnectionToken()` internally. When `connections` is defined in `defineAuth()`, the connection name is type-checked and autocompleted against the defined keys:
432
+ Use `authconnection.getConnectionToken()` from `@tailor-platform/sdk/runtime` to retrieve connection tokens at runtime. The connection name is type-checked and autocompleted against the connections defined in `defineAuth()`'s `connections`:
445
433
 
446
434
  ```typescript
447
- import { auth } from "../tailor.config";
435
+ import { authconnection } from "@tailor-platform/sdk/runtime";
448
436
 
449
437
  // In a resolver, executor, or workflow:
450
- const tokens = await auth.getConnectionToken("google-connection");
438
+ const tokens = await authconnection.getConnectionToken("google-connection");
451
439
  const response = await fetch("https://www.googleapis.com/...", {
452
440
  headers: { Authorization: `Bearer ${tokens.access_token}` },
453
441
  });
454
442
 
455
- // auth.getConnectionToken("unknown"); // Type error — only "google-connection" is allowed
443
+ // authconnection.getConnectionToken("unknown"); // Type error — only "google-connection" is allowed
456
444
  ```
457
445
 
458
- When `connections` is not defined, `getConnectionToken()` accepts any string. This supports connections managed entirely via the CLI.
446
+ Type narrowing is provided by the generated `tailor.d.ts` (the `ConnectionNameRegistry` interface). Run `tailor generate` (or `deploy`) after defining new connections to refresh it. Before the first generate, or when `connections` is not defined in `defineAuth()`, `getConnectionToken()` accepts any string this also supports connections managed entirely via the CLI.
447
+
448
+ This keeps runtime files independent from `tailor.config.ts`.
459
449
 
460
450
  See [Built-in Interfaces](https://docs.tailor.tech/guides/function/builtin-interfaces.html#auth-connection) for the full runtime API.
461
451
 
@@ -465,19 +455,19 @@ Auth connections can also be managed via the CLI:
465
455
 
466
456
  ```bash
467
457
  # Open the connections page in the Console (recommended for creating connections/tokens)
468
- tailor-sdk authconnection open
458
+ tailor authconnection open
469
459
 
470
460
  # Authorize (opens browser for OAuth2 flow)
471
- tailor-sdk authconnection authorize --name google-connection
461
+ tailor authconnection authorize --name google-connection
472
462
 
473
463
  # List all connections
474
- tailor-sdk authconnection list
464
+ tailor authconnection list
475
465
 
476
466
  # Revoke a connection
477
- tailor-sdk authconnection revoke --name google-connection
467
+ tailor authconnection revoke --name google-connection
478
468
  ```
479
469
 
480
- Connection creation is handled by `tailor-sdk deploy` via the config, but recreation on deploy can drop the authorized token (see the warning at the top of this section) — for shared and CI workflows, create connections and tokens from the Console (`tailor-sdk authconnection open`) instead.
470
+ Connection creation and updates are handled by `tailor deploy` via the config. Deploy updates connections in-place, preserving the authorized token, and warns you if an update requires re-authorization (see the note above).
481
471
 
482
472
  See [Auth Resource Commands](../cli/auth.md) for full CLI documentation.
483
473
 
@@ -515,27 +505,46 @@ export const auth = defineAuth("my-auth", {
515
505
 
516
506
  **invoker**: The machine user whose permissions are used to execute the hook. Must reference a machine user defined in the same auth configuration.
517
507
 
508
+ ### Federated identity claims
509
+
510
+ When a user signs in through a Built-in IdP OAuth provider (Google or Microsoft), the upstream provider's profile is available on `claims.federated_identity`. It is `undefined` for password logins, so guard before reading it. Commonly present claims (`name`, `given_name`, `family_name`, `picture`, `locale`) are typed; any other claim the provider issues is forwarded as-is. Availability varies by provider (for example, Microsoft does not issue `picture`).
511
+
512
+ ```typescript
513
+ hooks: {
514
+ beforeLogin: {
515
+ handler: async ({ claims }) => {
516
+ const federated = claims.federated_identity;
517
+ if (federated?.provider === "google") {
518
+ // Populate the user record from the upstream profile
519
+ const avatarUrl = federated.claims.picture;
520
+ }
521
+ },
522
+ invoker: "hook-invoker",
523
+ },
524
+ }
525
+ ```
526
+
518
527
  ## CLI Commands
519
528
 
520
529
  Manage Auth resources using the CLI:
521
530
 
522
531
  ```bash
523
532
  # Auth connections
524
- tailor-sdk authconnection authorize --name <name>
525
- tailor-sdk authconnection list
526
- tailor-sdk authconnection revoke --name <name>
533
+ tailor authconnection authorize --name <name>
534
+ tailor authconnection list
535
+ tailor authconnection revoke --name <name>
527
536
 
528
537
  # List machine users
529
- tailor-sdk machineuser list
538
+ tailor machineuser list
530
539
 
531
540
  # Get machine user token
532
- tailor-sdk machineuser token <name>
541
+ tailor machineuser token <name>
533
542
 
534
543
  # List OAuth2 clients
535
- tailor-sdk oauth2client list
544
+ tailor oauth2client list
536
545
 
537
546
  # Get OAuth2 client credentials
538
- tailor-sdk oauth2client get <name>
547
+ tailor oauth2client get <name>
539
548
  ```
540
549
 
541
550
  See [Auth Resource Commands](../cli/auth.md) for full documentation.
@@ -219,7 +219,7 @@ createExecutor({
219
219
  });
220
220
  ```
221
221
 
222
- Executor callbacks receive the trigger args, including `env` from `defineConfig({ env })`. `function` and `jobFunction` `body` args also include an `invoker` field: the principal running this function, overridden by `authInvoker` when set; `null` for anonymous calls. Other operation kinds (`graphql`, `webhook`, `workflow`) receive `env` through their callback args but do not pass `invoker` into those callbacks.
222
+ Executor callbacks receive the trigger args, including `env` from `defineConfig({ env })`. `function` and `jobFunction` `body` args also include an `invoker` field: the principal running this function, or the machine user configured through the operation `invoker` option; `null` for anonymous calls. Other operation kinds (`graphql`, `webhook`, `workflow`) receive `env` through their callback args but do not pass `invoker` into those callbacks.
223
223
 
224
224
  ### Job Function Operation
225
225
 
@@ -329,9 +329,14 @@ createExecutor({
329
329
  });
330
330
  ```
331
331
 
332
+ `args` must match the workflow's main job input. It is required when that input is required
333
+ and can be omitted when the workflow has no input. Static arguments can be JSON-compatible
334
+ primitives, arrays, or plain objects; top-level `null` is not supported. An argument callback
335
+ must return the same input type.
336
+
332
337
  ### Authentication for Operations
333
338
 
334
- GraphQL and Workflow operations can specify an `authInvoker` to execute with machine user credentials. Pass the machine user name as a plain string — it is type-narrowed to the names defined in your auth config:
339
+ GraphQL and Workflow operations can specify an `invoker` to execute with machine user credentials. Pass the machine user name as a plain string — it is type-narrowed to the names defined in your auth config:
335
340
 
336
341
  ```typescript
337
342
  import { createExecutor, scheduleTrigger } from "@tailor-platform/sdk";
@@ -342,13 +347,11 @@ export default createExecutor({
342
347
  operation: {
343
348
  kind: "graphql",
344
349
  query: `mutation { cleanupOldRecords { count } }`,
345
- authInvoker: "batch-processor",
350
+ invoker: "batch-processor",
346
351
  },
347
352
  });
348
353
  ```
349
354
 
350
- > **Deprecated:** `auth.invoker("batch-processor")` still works, but is deprecated. Prefer the string form to avoid importing config-layer modules into runtime files.
351
-
352
355
  ## Event Payloads
353
356
 
354
357
  Each trigger type provides specific context data in the callback functions.
@@ -7,7 +7,7 @@ HTTP adapters expose REST-style HTTP endpoints on your application by translatin
7
7
  Each HTTP adapter is a single file that declares:
8
8
 
9
9
  - A `pathPattern` (which methods it handles is derived from the `input` keys)
10
- - An `input` object keyed by lowercase HTTP method (`get`, `post`, `put`, `patch`, `delete`) — each value is a function that converts an incoming HTTP request into a GraphQL request (`query`, `variables`, `operationName`)
10
+ - An `input` object keyed by lowercase HTTP method (`get`, `post`, `put`, `patch`, `delete`) — each value is a function that converts an incoming HTTP request into a GraphQL request (`query`, `variables`, `operationName`). `query` can be a GraphQL string or a generated `TypedDocumentNode`.
11
11
  - An optional `output` function — **shared across all methods** — that converts the GraphQL response into an HTTP response (`statusCode`, `headers`, `body`)
12
12
 
13
13
  Adapters are deployed together with your application. When a request arrives under the `/api/` prefix and matches an adapter, the handler for the request method runs server-side.
@@ -74,6 +74,21 @@ A request to `GET /api/users/abc-123` invokes the `get` handler, runs the result
74
74
 
75
75
  If `output` is omitted, the raw GraphQL response is returned as JSON.
76
76
 
77
+ ### Typed GraphQL Documents
78
+
79
+ `input` handlers can return generated `TypedDocumentNode` values instead of query strings. The SDK uses the document's variables type for `variables`, and passes the document's result type to `output` as `resp.data`.
80
+
81
+ ```typescript
82
+ import { GetUserDocument } from "../generated/graphql";
83
+
84
+ get: (req) => ({
85
+ query: GetUserDocument,
86
+ variables: { id: req.path.split("/")[2] ?? "" },
87
+ });
88
+ ```
89
+
90
+ When multiple methods return different typed documents, `resp.data` is the union of those result types because `output` is shared across the adapter. If a method returns a plain string query, its result type is `unknown`. When extracting an input handler and annotating it separately, pass the document type to `HttpAdapterInputFn` so required variables stay typed.
91
+
77
92
  ### Optional fields
78
93
 
79
94
  Beyond `name`, `pathPattern`, `input`, and `output`, two optional fields control deploy-time behavior:
@@ -86,7 +86,8 @@ defineIdp("my-idp", {
86
86
  - `read` - Controls who can read IdP users
87
87
  - `update` - Controls who can update IdP users
88
88
  - `delete` - Controls who can delete IdP users
89
- - `sendPasswordResetEmail` - Controls who can send password reset emails. The examples above disable this operation; to enable it, use a permission such as `[{ conditions: [[{ user: "role" }, "=", "ADMIN"]], permit: true }]`.
89
+ - `sendPasswordResetEmail` - Controls who can send password reset emails. Required unless `userAuthPolicy.disablePasswordAuth` is `true` or `gqlOperations.sendPasswordResetEmail` is `false` (the password-reset flow has no meaning when password authentication is off or the operation is disabled). Set `[{ conditions: [[{ user: "role" }, "=", "ADMIN"]], permit: true }]` to allow, or `[]` to deny.
90
+ - `unenrollMfa` - Controls who can remove an enrolled MFA factor from a user. Required when `userAuthPolicy.enableMfa` is `true` unless `gqlOperations.unenrollMfa` is `false`; omit otherwise. Typically restricted to administrators.
90
91
 
91
92
  **Policy fields:** each entry in an operation's policy array supports:
92
93
 
@@ -166,6 +167,37 @@ defineIdp("my-idp", {
166
167
  - `allowGoogleOauth` - Enable the "Sign in with Google" button. Default `false`.
167
168
  - `allowMicrosoftOauth` - Enable the "Sign in with Microsoft" button. Default `false`.
168
169
 
170
+ **MFA (TOTP):**
171
+
172
+ ```typescript
173
+ import { defineIdp, defineStaticWebSite } from "@tailor-platform/sdk";
174
+
175
+ const website = defineStaticWebSite("my-frontend", { description: "App frontend" });
176
+
177
+ defineIdp("my-idp", {
178
+ clients: ["my-client"],
179
+ userAuthPolicy: {
180
+ enableMfa: true,
181
+ requireMfa: false,
182
+ allowedReturnOrigins: [website.url, "https://admin.example.com"],
183
+ mfaIssuer: "My App",
184
+ },
185
+ permission: {
186
+ create: [{ conditions: [[{ user: "role" }, "=", "ADMIN"]], permit: true }],
187
+ read: [{ conditions: [[{ user: "role" }, "=", "ADMIN"]], permit: true }],
188
+ update: [{ conditions: [[{ user: "role" }, "=", "ADMIN"]], permit: true }],
189
+ delete: [{ conditions: [[{ user: "role" }, "=", "ADMIN"]], permit: true }],
190
+ sendPasswordResetEmail: [{ conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true }],
191
+ unenrollMfa: [{ conditions: [[{ user: "role" }, "=", "ADMIN"]], permit: true }],
192
+ },
193
+ });
194
+ ```
195
+
196
+ - `enableMfa` - Make TOTP MFA available for users in this namespace. Default `false`. When enabled, users can register an authenticator app (Google Authenticator, 1Password, etc.) from the IdP self-service page.
197
+ - `requireMfa` - Force password-authenticated users to enroll and pass an MFA challenge on each sign-in. Default `false`. Social sign-in (`allowGoogleOauth` / `allowMicrosoftOauth`) is not affected; the upstream provider's MFA covers those sessions.
198
+ - `allowedReturnOrigins` - Origins the IdP self-service pages (such as `/mfa/settings`) are allowed to redirect back to. Each entry is either a literal origin (`https://app.example.com`, scheme + host + optional port, no path/query/fragment) or a static-website placeholder `<name>:url` (e.g. `website.url`) that the CLI resolves to the deployed website's URL at apply time. Required when `enableMfa` is `true`.
199
+ - `mfaIssuer` - Label shown next to the user account in authenticator apps when TOTP is enrolled. Up to 64 characters. Falls back to `"Tailor Platform IdP"` when empty.
200
+
169
201
  **Constraints:** the following combinations are rejected at parse time.
170
202
 
171
203
  - `passwordMinLength` must be less than or equal to `passwordMaxLength`.
@@ -173,6 +205,23 @@ defineIdp("my-idp", {
173
205
  - `allowGoogleOauth` requires a non-empty `allowedEmailDomains`.
174
206
  - `allowMicrosoftOauth` requires both a non-empty `allowedEmailDomains` and `disablePasswordAuth: true`.
175
207
  - `disablePasswordAuth` requires `allowGoogleOauth` or `allowMicrosoftOauth`, and cannot be combined with `allowSelfPasswordReset`.
208
+ - `requireMfa: true` requires `enableMfa: true`.
209
+ - `enableMfa: true` requires at least one entry in `allowedReturnOrigins`.
210
+ - `enableMfa: true` requires `permission` to be defined and to include an explicit `unenrollMfa` policy (an empty array `[]` to deny is fine), unless `gqlOperations.unenrollMfa` is `false` (or `gqlOperations: "query"`, which normalizes to the same), in which case the operation is turned off and the policy may be omitted.
211
+
212
+ **Runtime API:** function code can inspect and revoke a user's enrolled factor through `idp.Client`. The `User` records returned by `user`, `userByName`, `users`, `createUser`, and `updateUser` expose `mfaEnrolled` (boolean) and `mfaFactorIds` (string array), and `client.unenrollMfa({ userId, mfaFactorId })` removes a single factor. The factor ID to pass back is one of the entries in `user.mfaFactorIds`. Calling `unenrollMfa` requires the `unenrollMfa` permission above.
213
+
214
+ ```typescript
215
+ import { idp } from "@tailor-platform/sdk/runtime";
216
+
217
+ const client = new idp.Client({ namespace: "my-idp" });
218
+ const user = await client.user("user-id");
219
+ if (user.mfaEnrolled) {
220
+ for (const factorId of user.mfaFactorIds) {
221
+ await client.unenrollMfa({ userId: user.id, mfaFactorId: factorId });
222
+ }
223
+ }
224
+ ```
176
225
 
177
226
  ### gqlOperations
178
227
 
@@ -187,6 +236,8 @@ defineIdp("my-idp", {
187
236
  update: true,
188
237
  delete: false,
189
238
  sendPasswordResetEmail: false,
239
+ requestMfaSettingsUrl: false,
240
+ unenrollMfa: false,
190
241
  },
191
242
  });
192
243
  ```
@@ -198,8 +249,10 @@ defineIdp("my-idp", {
198
249
  - `update` - The `_updateUser` mutation.
199
250
  - `delete` - The `_deleteUser` mutation.
200
251
  - `sendPasswordResetEmail` - The `_sendPasswordResetEmail` mutation.
252
+ - `requestMfaSettingsUrl` - The `_requestMfaSettingsUrl` query that issues a self-service URL for MFA settings.
253
+ - `unenrollMfa` - The `_unenrollMfa` mutation that removes a user's enrolled MFA factor. When set to `false`, `permission.unenrollMfa` may be omitted even with `userAuthPolicy.enableMfa: true`.
201
254
 
202
- **Shortcut:** pass the string `"query"` to expose a read-only IdP. It enables `read` and disables every mutation.
255
+ **Shortcut:** pass the string `"query"` to expose a read-only IdP. It enables the queries (`read`, `requestMfaSettingsUrl`) and disables every mutation.
203
256
 
204
257
  ```typescript
205
258
  defineIdp("my-idp", {
@@ -108,7 +108,7 @@ Define input/output schemas using methods of `t` object. Basic usage and support
108
108
  You can reuse fields defined with `db` object, but note that unsupported options will be ignored:
109
109
 
110
110
  ```typescript
111
- const user = db.type("User", {
111
+ const user = db.table("User", {
112
112
  name: db.string().unique(),
113
113
  age: db.int(),
114
114
  });
@@ -208,7 +208,7 @@ Validation functions receive:
208
208
 
209
209
  - `value` - The field value being validated
210
210
  - `data` - The entire input object
211
- - `user` - The user performing the operation
211
+ - `invoker` - The principal performing the operation
212
212
 
213
213
  You can specify validation as:
214
214
 
@@ -234,13 +234,13 @@ Validation runs automatically before the `body` function executes. When validati
234
234
  Define actual resolver logic in the `body` function. Function arguments include:
235
235
 
236
236
  - `input` - Input data from GraphQL request
237
- - `user` - The user who called this resolver; unaffected by `authInvoker`
238
- - `invoker` - The principal running this function; equals `user` by default, or the machine user set by `authInvoker`. `null` for anonymous calls.
237
+ - `caller` - The user or machine user who called this resolver; unaffected by `invoker`. `null` for anonymous calls.
238
+ - `invoker` - The principal running this function; equals `caller` by default, or the machine user configured through the resolver `invoker` option. `null` for anonymous calls.
239
239
  - `env` - Environment variables declared in `tailor.config.ts`
240
240
 
241
241
  ### Using Kysely for Database Access
242
242
 
243
- If you're generating Kysely types with a generator, you can use `getDB` to execute typed queries:
243
+ If you're generating Kysely types with `kyselyTypePlugin`, you can use `getDB` to execute typed queries:
244
244
 
245
245
  ```typescript
246
246
  import { getDB } from "../generated/tailordb";
@@ -306,7 +306,7 @@ createResolver({
306
306
 
307
307
  - When `publishEvents: true`, resolver execution events are published
308
308
  - When not specified, it is **automatically set to `true`** if an executor uses this resolver with `resolverExecutedTrigger`
309
- - When explicitly set to `false` while an executor uses this resolver, an error is thrown during `tailor apply`
309
+ - When explicitly set to `false` while an executor uses this resolver, an error is thrown during `tailor deploy`
310
310
 
311
311
  **Use cases:**
312
312
 
@@ -350,9 +350,63 @@ createResolver({
350
350
  });
351
351
  ```
352
352
 
353
+ ## Permissions
354
+
355
+ ### Access Requirement (`permission`)
356
+
357
+ By default, a resolver with no in-body check is reachable by an anonymous (unauthenticated) caller. Set `permission` to reject callers that don't match a condition, evaluated before `body` runs:
358
+
359
+ ```typescript
360
+ import { createResolver, t } from "@tailor-platform/sdk";
361
+
362
+ export default createResolver({
363
+ name: "getMyOrders",
364
+ operation: "query",
365
+ permission: [{ conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true }],
366
+ output: t.object({ count: t.int() }),
367
+ body: async (context) => {
368
+ // context.user is guaranteed to be an authenticated caller here
369
+ return { count: 0 };
370
+ },
371
+ });
372
+ ```
373
+
374
+ `permission` uses the same `conditions`/`permit` notation as TailorDB's `.permission()` — an array of policies, restricted to `user` operands (a resolver has no associated record to compare against) with equality (`=`/`!=`) comparisons:
375
+
376
+ - `{ user: "_loggedIn" }` — whether the caller is authenticated
377
+ - `{ user: "id" }` — the caller's user ID
378
+ - `{ user: "someAttribute" }` — any string or boolean attribute enabled in `auth.userProfile.attributes` (or `auth.machineUserAttributes` for machine users); array attributes aren't supported, since conditions only compare against a single string/boolean value
379
+
380
+ Multiple conditions within the same policy's `conditions` array are combined with AND. `permit` is required, with no implicit default. At least one `permit: true` policy is required: `permission` is an allow-list, denied by default and granted only by a matching `permit: true` policy. This lets you express different eligibility paths, e.g. allowing machine-user callers unconditionally while gating regular users behind a role check:
381
+
382
+ ```typescript
383
+ permission: [
384
+ { conditions: [[{ user: "isServiceAccount" }, "=", true]], permit: true },
385
+ { conditions: [[{ user: "role" }, "=", "ADMIN"]], permit: true },
386
+ ],
387
+ ```
388
+
389
+ A `permit: false` policy always denies matching callers, even ones another policy would otherwise allow. Combine it with a `permit: true` policy to carve out an explicit exception, e.g. granting access broadly but rejecting one banned role:
390
+
391
+ ```typescript
392
+ permission: [
393
+ { conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true },
394
+ { conditions: [[{ user: "role" }, "=", "BANNED"]], permit: false },
395
+ ],
396
+ ```
397
+
398
+ A policy array made up of only `permit: false` policies is rejected: since none of its conditions apply to a caller presenting no user attributes at all, it wouldn't actually keep anyone out who's willing to drop their credentials, so it can't stand in for an allow-list.
399
+
400
+ Besides a policy array, `permission` also accepts:
401
+
402
+ - `"allowAnonymous"` — explicitly documents that anonymous callers are allowed. Behaves the same as omitting `permission`, but records the decision so it isn't mistaken for an oversight.
403
+ - Omitted (default) — unchanged: anonymous callers can still reach the resolver.
404
+
405
+ This check is based on `context.user`, the original caller, so it still applies even when `authInvoker` swaps in a machine user for database access.
406
+
353
407
  ## Authentication
354
408
 
355
- Specify an `authInvoker` to execute the resolver with machine user credentials. Pass the machine user name as a plain string — it is type-narrowed to the names you defined in your auth config:
409
+ Specify an `invoker` to execute the resolver with machine user credentials. Pass the machine user name as a plain string — it is type-narrowed to the names you defined in your auth config:
356
410
 
357
411
  ```typescript
358
412
  import { createResolver, t } from "@tailor-platform/sdk";
@@ -365,12 +419,10 @@ export default createResolver({
365
419
  // Executes as "batch-processor" machine user
366
420
  return { result: "ok" };
367
421
  },
368
- authInvoker: "batch-processor",
422
+ invoker: "batch-processor",
369
423
  });
370
424
  ```
371
425
 
372
426
  The machine user name is looked up in the auth service configured on your app (`machineUsers` in `defineAuth`). The namespace is resolved automatically — no need to import `auth` from `tailor.config.ts` in resolver files.
373
427
 
374
- > **Deprecated:** `auth.invoker("batch-processor")` still works, but is deprecated. Importing `auth` into runtime files pulls config-layer (Node-only) dependencies into the bundle.
375
-
376
- **Note:** `authInvoker` controls the permissions for database operations and other platform actions. The `user` object passed to `body` still reflects the original caller, while `invoker` reflects the principal actually running the body.
428
+ **Note:** The `invoker` option controls the permissions for database operations and other platform actions. The `caller` object passed to `body` still reflects the original caller, while the `invoker` body field reflects the principal actually running the body.