@tailor-platform/sdk 2.0.0-next.2 → 2.0.0-next.4
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.
- package/CHANGELOG.md +511 -10
- package/README.md +9 -9
- package/agent-skills/{tailor-sdk → tailor}/SKILL.md +3 -1
- package/dist/aigateway-DR4Kwuik.mjs +9 -0
- package/dist/aigateway-DR4Kwuik.mjs.map +1 -0
- package/dist/application-BO4ZF8wP.mjs +3 -0
- package/dist/application-BX13RArL.mjs +6669 -0
- package/dist/application-BX13RArL.mjs.map +1 -0
- package/dist/authconnection-CZvi9ANm.mjs +9 -0
- package/dist/authconnection-CZvi9ANm.mjs.map +1 -0
- package/dist/brand-Eo4pLXPJ.mjs.map +1 -1
- package/dist/cli/cache/bundle-cache.d.mts +1 -0
- package/dist/cli/cache/store.d.mts +1 -0
- package/dist/cli/cache/types.d.mts +1 -0
- package/dist/cli/commands/api/api-call.d.mts +19 -0
- package/dist/cli/commands/api/index.d.mts +3 -0
- package/dist/cli/commands/deploy/aigateway.d.mts +1 -0
- package/dist/cli/commands/deploy/application.d.mts +1 -0
- package/dist/cli/commands/deploy/apply-phases.d.mts +1 -0
- package/dist/cli/commands/deploy/auth.d.mts +1 -0
- package/dist/cli/commands/deploy/deploy.d.mts +24 -0
- package/dist/cli/commands/deploy/executor.d.mts +1 -0
- package/dist/cli/commands/deploy/function-registry-types.d.mts +12 -0
- package/dist/cli/commands/deploy/function-registry.d.mts +2 -0
- package/dist/cli/commands/deploy/idp.d.mts +1 -0
- package/dist/cli/commands/deploy/resolver.d.mts +1 -0
- package/dist/cli/commands/deploy/secret-manager.d.mts +1 -0
- package/dist/cli/commands/deploy/staticwebsite.d.mts +1 -0
- package/dist/cli/commands/deploy/tailordb/index.d.mts +1 -0
- package/dist/cli/commands/deploy/types.d.mts +1 -0
- package/dist/cli/commands/deploy/workflow-execution-policy.d.mts +1 -0
- package/dist/cli/commands/deploy/workflow.d.mts +1 -0
- package/dist/cli/commands/executor/get.d.mts +29 -0
- package/dist/cli/commands/executor/jobs.d.mts +123 -0
- package/dist/cli/commands/executor/list.d.mts +19 -0
- package/dist/cli/commands/executor/transform.d.mts +41 -0
- package/dist/cli/commands/executor/trigger.d.mts +41 -0
- package/dist/cli/commands/executor/webhook.d.mts +22 -0
- package/dist/cli/commands/function/get.d.mts +18 -0
- package/dist/cli/commands/function/list.d.mts +22 -0
- package/dist/cli/commands/function/transform.d.mts +11 -0
- package/dist/cli/commands/generate/options.d.mts +7 -0
- package/dist/cli/commands/generate/seed/bundler.d.mts +26 -0
- package/dist/cli/commands/generate/service.d.mts +11 -0
- package/dist/cli/commands/machineuser/list.d.mts +27 -0
- package/dist/cli/commands/machineuser/token.d.mts +22 -0
- package/dist/cli/commands/oauth2client/get.d.mts +18 -0
- package/dist/cli/commands/oauth2client/list.d.mts +20 -0
- package/dist/cli/commands/oauth2client/transform.d.mts +20 -0
- package/dist/cli/commands/organization/folder/create.d.mts +18 -0
- package/dist/cli/commands/organization/folder/delete.d.mts +16 -0
- package/dist/cli/commands/organization/folder/get.d.mts +17 -0
- package/dist/cli/commands/organization/folder/list.d.mts +22 -0
- package/dist/cli/commands/organization/folder/update.d.mts +18 -0
- package/dist/cli/commands/organization/get.d.mts +16 -0
- package/dist/cli/commands/organization/list.d.mts +15 -0
- package/dist/cli/commands/organization/transform.d.mts +27 -0
- package/dist/cli/commands/organization/tree.d.mts +25 -0
- package/dist/cli/commands/organization/update.d.mts +17 -0
- package/dist/cli/commands/remove.d.mts +16 -0
- package/dist/cli/commands/show.d.mts +34 -0
- package/dist/cli/commands/tailordb/migrate/bundler.d.mts +28 -0
- package/dist/cli/commands/tailordb/migrate/config.d.mts +19 -0
- package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +223 -0
- package/dist/cli/commands/tailordb/migrate/generate.d.mts +17 -0
- package/dist/cli/commands/tailordb/migrate/snapshot-types.d.mts +202 -0
- package/dist/cli/commands/tailordb/migrate/snapshot.d.mts +98 -0
- package/dist/cli/commands/tailordb/migrate/types.d.mts +7 -0
- package/dist/cli/commands/tailordb/truncate.d.mts +19 -0
- package/dist/cli/commands/workflow/executions.d.mts +75 -0
- package/dist/cli/commands/workflow/get.d.mts +29 -0
- package/dist/cli/commands/workflow/list.d.mts +19 -0
- package/dist/cli/commands/workflow/resume.d.mts +23 -0
- package/dist/cli/commands/workflow/start.d.mts +61 -0
- package/dist/cli/commands/workflow/status.d.mts +5 -0
- package/dist/cli/commands/workflow/transform.d.mts +33 -0
- package/dist/cli/commands/workflow/wait.d.mts +16 -0
- package/dist/cli/commands/workflow/waiter.d.mts +23 -0
- package/dist/cli/commands/workspace/app/health.d.mts +18 -0
- package/dist/cli/commands/workspace/app/list.d.mts +22 -0
- package/dist/cli/commands/workspace/app/transform.d.mts +18 -0
- package/dist/cli/commands/workspace/create.d.mts +25 -0
- package/dist/cli/commands/workspace/delete.d.mts +15 -0
- package/dist/cli/commands/workspace/get.d.mts +17 -0
- package/dist/cli/commands/workspace/list.d.mts +17 -0
- package/dist/cli/commands/workspace/restore.d.mts +15 -0
- package/dist/cli/commands/workspace/transform.d.mts +16 -0
- package/dist/cli/commands/workspace/user/invite.d.mts +22 -0
- package/dist/cli/commands/workspace/user/list.d.mts +22 -0
- package/dist/cli/commands/workspace/user/remove.d.mts +17 -0
- package/dist/cli/commands/workspace/user/transform.d.mts +8 -0
- package/dist/cli/commands/workspace/user/update.d.mts +22 -0
- package/dist/cli/erd-viewer-assets/app.js +279 -36
- package/dist/cli/erd-viewer-assets/index.html +4 -0
- package/dist/cli/erd-viewer-assets/styles.css +252 -5
- package/dist/cli/index.d.mts +18 -3
- package/dist/cli/index.mjs +2237 -520
- package/dist/cli/index.mjs.map +1 -1
- package/dist/cli/lib.d.mts +81 -21107
- package/dist/cli/lib.mjs +7 -10
- package/dist/cli/lib.mjs.map +1 -1
- package/dist/cli/query/index.d.mts +39 -0
- package/dist/cli/services/application.d.mts +1 -0
- package/dist/cli/services/auth/service.d.mts +1 -0
- package/dist/cli/services/executor/service.d.mts +1 -0
- package/dist/cli/services/http-adapter/bundler.d.mts +1 -0
- package/dist/cli/services/http-adapter/service.d.mts +1 -0
- package/dist/cli/services/resolver/service.d.mts +1 -0
- package/dist/cli/services/tailordb/service.d.mts +1 -0
- package/dist/cli/services/workflow/bundler.d.mts +1 -0
- package/dist/cli/services/workflow/service.d.mts +1 -0
- package/dist/cli/shared/args.d.mts +13 -0
- package/dist/cli/shared/client.d.mts +1273 -0
- package/dist/cli/shared/config-loader.d.mts +26 -0
- package/dist/cli/shared/context.d.mts +28 -0
- package/dist/cli/shared/script-executor.d.mts +75 -0
- package/dist/cli/shared/seed-chunker.d.mts +46 -0
- package/dist/cli/shared/trigger-context.d.mts +1 -0
- package/dist/cli/shared/type-generator.d.mts +20 -0
- package/dist/cli/ts-hook.d.mts +4 -0
- package/dist/cli/ts-hook.mjs +333 -0
- package/dist/completion/zsh-worker.zsh +1531 -1131
- package/dist/configure/config/index.d.mts +21 -0
- package/dist/configure/config/types.d.mts +105 -0
- package/dist/configure/index.d.mts +124 -9
- package/dist/configure/index.mjs +136 -23
- package/dist/configure/index.mjs.map +1 -1
- package/dist/configure/services/aigateway/index.d.mts +17 -0
- package/dist/configure/services/aigateway/types.d.mts +11 -0
- package/dist/configure/services/auth/index.d.mts +34 -0
- package/dist/configure/services/auth/types.d.mts +172 -0
- package/dist/configure/services/executor/executor.d.mts +81 -0
- package/dist/configure/services/executor/index.d.mts +8 -0
- package/dist/configure/services/executor/operation.d.mts +45 -0
- package/dist/configure/services/executor/trigger/event.d.mts +272 -0
- package/dist/configure/services/executor/trigger/index.d.mts +8 -0
- package/dist/configure/services/executor/trigger/schedule.d.mts +25 -0
- package/dist/configure/services/executor/trigger/webhook.d.mts +44 -0
- package/dist/configure/services/executor/types.d.mts +2 -0
- package/dist/configure/services/http-adapter/http-adapter.d.mts +125 -0
- package/dist/configure/services/http-adapter/index.d.mts +2 -0
- package/dist/configure/services/idp/index.d.mts +64 -0
- package/dist/configure/services/idp/permission.d.mts +80 -0
- package/dist/configure/services/idp/types.d.mts +20 -0
- package/dist/configure/services/index.d.mts +34 -0
- package/dist/configure/services/resolver/index.d.mts +5 -0
- package/dist/configure/services/resolver/resolver.d.mts +75 -0
- package/dist/configure/services/resolver/types.d.mts +6 -0
- package/dist/configure/services/secrets/index.d.mts +38 -0
- package/dist/configure/services/secrets/types.d.mts +11 -0
- package/dist/configure/services/staticwebsite/index.d.mts +19 -0
- package/dist/configure/services/staticwebsite/types.d.mts +11 -0
- package/dist/configure/services/tailordb/index.d.mts +4 -0
- package/dist/configure/services/tailordb/permission.d.mts +119 -0
- package/dist/configure/services/tailordb/schema.d.mts +456 -0
- package/dist/configure/services/tailordb/types.d.mts +149 -0
- package/dist/configure/services/workflow/execution-policy.d.mts +71 -0
- package/dist/configure/services/workflow/execution-policy.types.d.mts +104 -0
- package/dist/configure/services/workflow/index.d.mts +8 -0
- package/dist/configure/services/workflow/job.d.mts +84 -0
- package/dist/configure/services/workflow/types.d.mts +2 -0
- package/dist/configure/services/workflow/wait-point.d.mts +73 -0
- package/dist/configure/services/workflow/workflow.d.mts +54 -0
- package/dist/configure/types/aigateway-name.d.mts +12 -0
- package/dist/configure/types/connection-name.d.mts +12 -0
- package/dist/configure/types/field-runtime.d.mts +17 -0
- package/dist/configure/types/field.d.mts +9 -0
- package/dist/configure/types/field.types.d.mts +109 -0
- package/dist/configure/types/idp-name.d.mts +12 -0
- package/dist/configure/types/index.d.mts +4 -0
- package/dist/configure/types/machine-user.d.mts +2 -0
- package/dist/configure/types/type.d.mts +82 -0
- package/dist/{context-Bd266-ru.mjs → context-DYQVYWqZ.mjs} +4 -5
- package/dist/context-DYQVYWqZ.mjs.map +1 -0
- package/dist/{crashreport-DFq-vsU0.mjs → crashreport-Cg-pqRJV.mjs} +6 -6
- package/dist/{crashreport-DFq-vsU0.mjs.map → crashreport-Cg-pqRJV.mjs.map} +1 -1
- package/dist/{crashreport-BMWcxeSE.mjs → crashreport-D3RjuSYb.mjs} +1 -1
- package/dist/enum-constants-j9QBF0cB.mjs.map +1 -1
- package/dist/{errors-Dtf2WPaW.mjs → errors-118wUDRr.mjs} +2 -2
- package/dist/errors-118wUDRr.mjs.map +1 -0
- package/dist/field-runtime-CAnh_oow.mjs +183 -0
- package/dist/field-runtime-CAnh_oow.mjs.map +1 -0
- package/dist/{file-BbdFGdMV.mjs → file-BUcmVIH2.mjs} +12 -14
- package/dist/file-BUcmVIH2.mjs.map +1 -0
- package/dist/{file-utils-CYZnO1pX.mjs → file-utils-yEiIS4nJ.mjs} +2 -2
- package/dist/file-utils-yEiIS4nJ.mjs.map +1 -0
- package/dist/{globals-Cf0sxIt8.mjs → globals-BjhJJ2dN.mjs} +5 -47
- package/dist/globals-BjhJJ2dN.mjs.map +1 -0
- package/dist/iconv-QWaZh0TT.mjs +38 -0
- package/dist/iconv-QWaZh0TT.mjs.map +1 -0
- package/dist/{idp-BDbK5gjm.mjs → idp-RA_swu-h.mjs} +12 -5
- package/dist/idp-RA_swu-h.mjs.map +1 -0
- package/dist/{interceptor-D-q1rvRl.mjs → interceptor-e33JtsC-.mjs} +2 -2
- package/dist/interceptor-e33JtsC-.mjs.map +1 -0
- package/dist/kysely/index.d.mts +2 -3
- package/dist/{kysely-type-DR8uzZTA.mjs → kysely-type-D-zflMGf.mjs} +2 -2
- package/dist/{kysely-type-DR8uzZTA.mjs.map → kysely-type-D-zflMGf.mjs.map} +1 -1
- package/dist/{logger-CxF-Ex5d.mjs → logger-BEiZZ3qT.mjs} +3 -3
- package/dist/{logger-CxF-Ex5d.mjs.map → logger-BEiZZ3qT.mjs.map} +1 -1
- package/dist/parser/service/auth/index.d.mts +1 -0
- package/dist/parser/service/auth/schema.d.mts +1 -0
- package/dist/parser/service/http-adapter/index.d.mts +1 -0
- package/dist/parser/service/http-adapter/schema.d.mts +1 -0
- package/dist/parser/service/idp/types.d.mts +4 -0
- package/dist/parser/service/tailordb/types.d.mts +126 -0
- package/dist/platform-serialize-RoRtBS0v.mjs +46 -0
- package/dist/platform-serialize-RoRtBS0v.mjs.map +1 -0
- package/dist/plugin/builtin/enum-constants/index.d.mts +16 -1
- package/dist/plugin/builtin/file-utils/index.d.mts +16 -1
- package/dist/plugin/builtin/file-utils/index.mjs +1 -1
- package/dist/plugin/builtin/kysely-type/index.d.mts +16 -1
- package/dist/plugin/builtin/kysely-type/index.mjs +1 -1
- package/dist/plugin/builtin/seed/index.d.mts +45 -1
- package/dist/plugin/builtin/seed/index.mjs +1 -1
- package/dist/plugin/get-generated-type.d.mts +17 -0
- package/dist/plugin/index.d.mts +3 -118
- package/dist/plugin/index.mjs +1 -1
- package/dist/plugin/index.mjs.map +1 -1
- package/dist/plugin/manager.d.mts +1 -0
- package/dist/plugin/types.d.mts +243 -0
- package/dist/plugin/with-context.d.mts +102 -0
- package/dist/{runtime-CY4JvrDj.mjs → register-ts-hook-BM1caLT0.mjs} +4128 -2744
- package/dist/register-ts-hook-BM1caLT0.mjs.map +1 -0
- package/dist/{registry-DH4m7eYo.mjs → registry-BSbq6SPo.mjs} +4 -3
- package/dist/registry-BSbq6SPo.mjs.map +1 -0
- package/dist/{repl-editor-DmGr9zMw.mjs → repl-editor-BCozyiNq.mjs} +6 -5
- package/dist/{repl-editor-DmGr9zMw.mjs.map → repl-editor-BCozyiNq.mjs.map} +1 -1
- package/dist/resource_pb-BRv7AMXK.mjs +49 -0
- package/dist/resource_pb-BRv7AMXK.mjs.map +1 -0
- package/dist/runtime/aigateway.d.mts +26 -0
- package/dist/runtime/aigateway.mjs +3 -0
- package/dist/runtime/authconnection.d.mts +22 -2
- package/dist/runtime/authconnection.mjs +2 -2
- package/dist/runtime/context.d.mts +55 -2
- package/dist/runtime/context.mjs +2 -2
- package/dist/runtime/file.d.mts +170 -2
- package/dist/runtime/file.mjs +2 -2
- package/dist/runtime/globals.d.mts +31 -19
- package/dist/runtime/iconv.d.mts +73 -2
- package/dist/runtime/iconv.mjs +2 -2
- package/dist/runtime/idp.d.mts +129 -2
- package/dist/runtime/idp.mjs +2 -2
- package/dist/runtime/index.d.mts +47 -9
- package/dist/runtime/index.mjs +9 -8
- package/dist/runtime/secretmanager.d.mts +41 -2
- package/dist/runtime/secretmanager.mjs +2 -2
- package/dist/{types-BZ7QKVE8.d.mts → runtime/types.d.mts} +4 -5
- package/dist/runtime/workflow.d.mts +113 -2
- package/dist/runtime/workflow.mjs +2 -2
- package/dist/{schema-Dtw9Orye.mjs → schema-C4LYbXVG.mjs} +21 -186
- package/dist/schema-C4LYbXVG.mjs.map +1 -0
- package/dist/{secret-file-VSVGy1V0.mjs → secret-file-aoNXJmKa.mjs} +3 -3
- package/dist/secret-file-aoNXJmKa.mjs.map +1 -0
- package/dist/secretmanager-Bd45j7an.mjs +98 -0
- package/dist/secretmanager-Bd45j7an.mjs.map +1 -0
- package/dist/secretmanager-CYlpffsz.mjs +13 -0
- package/dist/secretmanager-CYlpffsz.mjs.map +1 -0
- package/dist/seed/index.d.mts +1 -2
- package/dist/{seed-izIEyP3z.mjs → seed-CRSQJI_z.mjs} +14 -3
- package/dist/seed-CRSQJI_z.mjs.map +1 -0
- package/dist/service-CkIwEctX.mjs +3 -0
- package/dist/{service-DU1mVzri2.mjs → service-DeZeYa06.mjs} +3 -3
- package/dist/service-DeZeYa06.mjs.map +1 -0
- package/dist/{service-DjyqbCaJ.mjs → service-ufH7sS8o.mjs} +396 -58
- package/dist/service-ufH7sS8o.mjs.map +1 -0
- package/dist/service_pb-B2FF59sP.mjs +3 -0
- package/dist/service_pb-B5w9rjPY.mjs +955 -0
- package/dist/service_pb-B5w9rjPY.mjs.map +1 -0
- package/dist/tailor-proto/src/tailor/v1/aigateway_pb.d.mts +204 -0
- package/dist/tailor-proto/src/tailor/v1/aigateway_resource_pb.d.mts +58 -0
- package/dist/tailor-proto/src/tailor/v1/application_pb.d.mts +316 -0
- package/dist/tailor-proto/src/tailor/v1/application_resource_pb.d.mts +161 -0
- package/dist/tailor-proto/src/tailor/v1/auth_pb.d.mts +2070 -0
- package/dist/tailor-proto/src/tailor/v1/auth_resource_pb.d.mts +861 -0
- package/dist/tailor-proto/src/tailor/v1/events_pb.d.mts +112 -0
- package/dist/tailor-proto/src/tailor/v1/events_resource_pb.d.mts +69 -0
- package/dist/tailor-proto/src/tailor/v1/executor_pb.d.mts +439 -0
- package/dist/tailor-proto/src/tailor/v1/executor_resource_pb.d.mts +564 -0
- package/dist/tailor-proto/src/tailor/v1/function_pb.d.mts +145 -0
- package/dist/tailor-proto/src/tailor/v1/function_registry_pb.d.mts +451 -0
- package/dist/tailor-proto/src/tailor/v1/function_resource_pb.d.mts +192 -0
- package/dist/tailor-proto/src/tailor/v1/http_adapter_resource_pb.d.mts +50 -0
- package/dist/tailor-proto/src/tailor/v1/idp_pb.d.mts +407 -0
- package/dist/tailor-proto/src/tailor/v1/idp_resource_pb.d.mts +430 -0
- package/dist/tailor-proto/src/tailor/v1/metadata_pb.d.mts +73 -0
- package/dist/tailor-proto/src/tailor/v1/metadata_resource_pb.d.mts +17 -0
- package/dist/tailor-proto/src/tailor/v1/meter_pb.d.mts +309 -0
- package/dist/tailor-proto/src/tailor/v1/pipeline_pb.d.mts +591 -0
- package/dist/tailor-proto/src/tailor/v1/pipeline_resource_pb.d.mts +330 -0
- package/dist/tailor-proto/src/tailor/v1/resource_pb.d.mts +113 -0
- package/dist/tailor-proto/src/tailor/v1/secret_manager_pb.d.mts +346 -0
- package/dist/tailor-proto/src/tailor/v1/secret_manager_resource_pb.d.mts +54 -0
- package/dist/tailor-proto/src/tailor/v1/service_pb.d.mts +3576 -0
- package/dist/tailor-proto/src/tailor/v1/stateflow_pb.d.mts +187 -0
- package/dist/tailor-proto/src/tailor/v1/stateflow_resource_pb.d.mts +29 -0
- package/dist/tailor-proto/src/tailor/v1/staticwebsite_pb.d.mts +429 -0
- package/dist/tailor-proto/src/tailor/v1/staticwebsite_resource_pb.d.mts +90 -0
- package/dist/tailor-proto/src/tailor/v1/tailordb_pb.d.mts +684 -0
- package/dist/tailor-proto/src/tailor/v1/tailordb_resource_pb.d.mts +797 -0
- package/dist/tailor-proto/src/tailor/v1/telemetryrouter_pb.d.mts +330 -0
- package/dist/tailor-proto/src/tailor/v1/telemetryrouter_resource_pb.d.mts +183 -0
- package/dist/tailor-proto/src/tailor/v1/workflow_pb.d.mts +862 -0
- package/dist/tailor-proto/src/tailor/v1/workflow_resource_pb.d.mts +310 -0
- package/dist/tailor-proto/src/tailor/v1/workspace_pb.d.mts +2015 -0
- package/dist/tailor-proto/src/tailor/v1/workspace_resource_pb.d.mts +483 -0
- package/dist/{telemetry-CdqJEzkj.mjs → telemetry-BRVdwh14.mjs} +3 -3
- package/dist/telemetry-BRVdwh14.mjs.map +1 -0
- package/dist/telemetry-CkbkeJxl.mjs +3 -0
- package/dist/types/aigateway.generated.d.mts +9 -0
- package/dist/types/app-config.generated.d.mts +4 -0
- package/dist/types/auth-connection.generated.d.mts +20 -0
- package/dist/types/auth.generated.d.mts +145 -0
- package/dist/types/executor.generated.d.mts +177 -0
- package/dist/types/helpers.d.mts +39 -0
- package/dist/types/http-adapter.generated.d.mts +17 -0
- package/dist/{workflow.generated-ClEjBYhm.d.mts → types/idp.generated.d.mts} +98 -185
- package/dist/types/resolver.generated.d.mts +39 -0
- package/dist/types/secrets.generated.d.mts +14 -0
- package/dist/types/staticwebsite.generated.d.mts +10 -0
- package/dist/{types-CdcQh4Z2.d.mts → types/tailordb.generated.d.mts} +2 -287
- package/dist/types/workflow.generated.d.mts +12 -0
- package/dist/types-C-lQ4se3.mjs +4 -0
- package/dist/types-CXF2OYdR.mjs +199 -0
- package/dist/types-CXF2OYdR.mjs.map +1 -0
- package/dist/utils/test/index.d.mts +5 -89
- package/dist/utils/test/index.mjs.map +1 -1
- package/dist/utils/test/mock.d.mts +87 -0
- package/dist/vitest/environment.d.mts +1 -2
- package/dist/vitest/environment.mjs +2 -2
- package/dist/vitest/environment.mjs.map +1 -1
- package/dist/vitest/index.d.mts +12 -428
- package/dist/vitest/index.mjs +740 -9
- package/dist/vitest/index.mjs.map +1 -1
- package/dist/vitest/mock-kysely.d.mts +62 -0
- package/dist/vitest/mock.d.mts +9 -0
- package/dist/vitest/mocks/aigateway.d.mts +30 -0
- package/dist/vitest/mocks/authconnection.d.mts +28 -0
- package/dist/vitest/mocks/file.d.mts +41 -0
- package/dist/vitest/mocks/iconv.d.mts +27 -0
- package/dist/vitest/mocks/idp.d.mts +44 -0
- package/dist/vitest/mocks/secretmanager.d.mts +33 -0
- package/dist/vitest/mocks/tailordb.d.mts +71 -0
- package/dist/vitest/mocks/workflow.d.mts +117 -0
- package/dist/vitest/setup.d.mts +1 -2
- package/dist/vitest/setup.mjs +2 -2
- package/dist/vitest/workflow-local.d.mts +40 -0
- package/dist/workflow-GNuSnsTx.mjs +22 -0
- package/dist/workflow-GNuSnsTx.mjs.map +1 -0
- package/docs/cli/application.md +98 -250
- package/docs/cli/auth.md +51 -295
- package/docs/cli/completion.md +1 -25
- package/docs/cli/crashreport.md +3 -61
- package/docs/cli/executor.md +23 -187
- package/docs/cli/function.md +14 -130
- package/docs/cli/organization.md +11 -221
- package/docs/cli/plugin.md +29 -0
- package/docs/cli/query.md +2 -22
- package/docs/cli/secret.md +71 -251
- package/docs/cli/setup.md +137 -41
- package/docs/cli/skills.md +50 -39
- package/docs/cli/staticwebsite.md +32 -180
- package/docs/cli/tailordb.md +97 -323
- package/docs/cli/upgrade.md +2 -22
- package/docs/cli/user.md +78 -247
- package/docs/cli/workflow.md +44 -203
- package/docs/cli/workspace.md +165 -538
- package/docs/cli-reference.md +167 -67
- package/docs/configuration.md +34 -4
- package/docs/github-actions.md +46 -19
- package/docs/migration/v2.md +397 -26
- package/docs/multi-environment.md +29 -7
- package/docs/plugin/custom.md +4 -4
- package/docs/plugin/index.md +8 -8
- package/docs/quickstart.md +8 -7
- package/docs/runtime.md +9 -3
- package/docs/services/aigateway.md +18 -2
- package/docs/services/auth.md +34 -42
- package/docs/services/http-adapter.md +16 -1
- package/docs/services/idp.md +55 -2
- package/docs/services/resolver.md +2 -2
- package/docs/services/secret.md +11 -11
- package/docs/services/staticwebsite.md +8 -2
- package/docs/services/tailordb-migration.md +25 -23
- package/docs/services/tailordb.md +55 -32
- package/docs/services/workflow.md +92 -14
- package/docs/testing.md +49 -3
- package/package.json +42 -31
- package/postinstall.mjs +4 -6
- package/dist/application-Dtqap5jM.mjs +0 -3
- package/dist/application-XuMWK4eq.mjs +0 -7257
- package/dist/application-XuMWK4eq.mjs.map +0 -1
- package/dist/authconnection-D2MhtTN5.mjs +0 -15
- package/dist/authconnection-D2MhtTN5.mjs.map +0 -1
- package/dist/authconnection-DvUQAjQS.d.mts +0 -39
- package/dist/context-Bd266-ru.mjs.map +0 -1
- package/dist/context-C2lEi9uw.d.mts +0 -47
- package/dist/errors-Dtf2WPaW.mjs.map +0 -1
- package/dist/field-DOsJCPFa.mjs +0 -22
- package/dist/field-DOsJCPFa.mjs.map +0 -1
- package/dist/file-BbdFGdMV.mjs.map +0 -1
- package/dist/file-Dq3NIt_F.d.mts +0 -211
- package/dist/file-utils-CYZnO1pX.mjs.map +0 -1
- package/dist/globals-Cf0sxIt8.mjs.map +0 -1
- package/dist/http-adapter.generated-DFsXDdm5.d.mts +0 -581
- package/dist/iconv-Co-TOPuH.d.mts +0 -122
- package/dist/iconv-D2vi8G36.mjs +0 -63
- package/dist/iconv-D2vi8G36.mjs.map +0 -1
- package/dist/idp-BDbK5gjm.mjs.map +0 -1
- package/dist/idp-DrhVrLmV.d.mts +0 -160
- package/dist/index-BI-_j9Z3.d.mts +0 -1013
- package/dist/index-C4JirJH8.d.mts +0 -18
- package/dist/index-CZfWhr0a.d.mts +0 -18
- package/dist/index-Cg8VKAdN.d.mts +0 -46
- package/dist/index-DYRjoLXD.d.mts +0 -47
- package/dist/index-lFpcjHPU.d.mts +0 -201
- package/dist/index-nW7hE6oE.d.mts +0 -18
- package/dist/interceptor-D-q1rvRl.mjs.map +0 -1
- package/dist/mock-FPxmnt-y.mjs +0 -759
- package/dist/mock-FPxmnt-y.mjs.map +0 -1
- package/dist/registry-DH4m7eYo.mjs.map +0 -1
- package/dist/rolldown-runtime-DXywRVcq.mjs +0 -20
- package/dist/runtime-CY4JvrDj.mjs.map +0 -1
- package/dist/schema-Dtw9Orye.mjs.map +0 -1
- package/dist/secret-file-VSVGy1V0.mjs.map +0 -1
- package/dist/secretmanager-B3n4KHfm.d.mts +0 -55
- package/dist/secretmanager-BVxw3ih_.mjs +0 -24
- package/dist/secretmanager-BVxw3ih_.mjs.map +0 -1
- package/dist/seed-izIEyP3z.mjs.map +0 -1
- package/dist/service-DCqIWibD.mjs +0 -3
- package/dist/service-DU1mVzri2.mjs.map +0 -1
- package/dist/service-DjyqbCaJ.mjs.map +0 -1
- package/dist/telemetry-CdqJEzkj.mjs.map +0 -1
- package/dist/telemetry-ClwW5ohF.mjs +0 -3
- package/dist/types-74etvaxy.mjs +0 -4
- package/dist/types-BDRml5C3.d.mts +0 -574
- package/dist/types-BQijbo4m.mjs +0 -371
- package/dist/types-BQijbo4m.mjs.map +0 -1
- package/dist/types-BX4q6Mo6.d.mts +0 -339
- package/dist/workflow-BOmaZwwG.mjs +0 -43
- package/dist/workflow-BOmaZwwG.mjs.map +0 -1
- package/dist/workflow-BVy4XWjS.d.mts +0 -101
|
@@ -12,7 +12,7 @@ For the CLI command reference, see [`tailordb migration`](../cli/tailordb.md#tai
|
|
|
12
12
|
|
|
13
13
|
- **Local snapshot–based diff detection** — each migration is generated by diffing your current type definitions against the previous snapshot stored in `migrations/<NNNN>/`.
|
|
14
14
|
- **Transaction-wrapped data migrations** — each `migrate.ts` script runs inside a database transaction on the platform; if the script throws, all changes in that migration roll back.
|
|
15
|
-
- **Automatic execution during `apply`** — `tailor
|
|
15
|
+
- **Automatic execution during `apply`** — `tailor deploy` detects pending migrations, runs the two-stage type update (pre-migration → script → post-migration), and updates the migration checkpoint label.
|
|
16
16
|
- **Type-safe scripts** — the generated `db.ts` provides Kysely types that reflect the schema state **before** the migration runs, so transformations are written against the actual data shape.
|
|
17
17
|
|
|
18
18
|
**Files in `migrations/`**
|
|
@@ -42,24 +42,24 @@ When you start with no `migrations/` directory:
|
|
|
42
42
|
2. Define your initial types in `tailordb/`.
|
|
43
43
|
3. Generate the initial migration:
|
|
44
44
|
```bash
|
|
45
|
-
tailor
|
|
45
|
+
tailor tailordb migration generate
|
|
46
46
|
```
|
|
47
47
|
This creates `migrations/0000/schema.json` from your current types.
|
|
48
|
-
4. Run `tailor
|
|
48
|
+
4. Run `tailor deploy`. The migration label is set to `0000` on the deployed namespace.
|
|
49
49
|
|
|
50
50
|
### Adding migrations to an existing project
|
|
51
51
|
|
|
52
52
|
If you already have a deployed workspace whose schema matches your local type definitions:
|
|
53
53
|
|
|
54
54
|
1. Add the `migration` block to `tailor.config.ts`.
|
|
55
|
-
2. Run `tailor
|
|
56
|
-
3. Run `tailor
|
|
55
|
+
2. Run `tailor tailordb migration generate` to create `0000/schema.json` from current local types.
|
|
56
|
+
3. Run `tailor deploy`. Because remote schema already matches, no script runs; only the migration label is set.
|
|
57
57
|
|
|
58
58
|
If your local types and remote schema have **diverged**, reconcile them before introducing migrations — either update local types to match remote, or accept that the first non-`0000` migration will reflect that gap.
|
|
59
59
|
|
|
60
60
|
### Resetting
|
|
61
61
|
|
|
62
|
-
`tailor
|
|
62
|
+
`tailor tailordb migration generate --init` deletes the existing `migrations/` directory and starts over from `0000`. Use this only on projects that are not yet deployed, or when you have decided to re-baseline (the next `apply` will see all migrations as new and require coordination — see [Resetting a deployed project](#resetting-a-deployed-project)).
|
|
63
63
|
|
|
64
64
|
## Migration Workflow
|
|
65
65
|
|
|
@@ -69,7 +69,7 @@ A typical change cycle:
|
|
|
69
69
|
|
|
70
70
|
```typescript
|
|
71
71
|
// tailordb/user.ts
|
|
72
|
-
export const user = db.
|
|
72
|
+
export const user = db.table("User", {
|
|
73
73
|
name: db.string(),
|
|
74
74
|
email: db.string(), // ← new required field
|
|
75
75
|
...db.fields.timestamps(),
|
|
@@ -79,7 +79,7 @@ A typical change cycle:
|
|
|
79
79
|
2. **Generate the migration.**
|
|
80
80
|
|
|
81
81
|
```bash
|
|
82
|
-
tailor
|
|
82
|
+
tailor tailordb migration generate --name "add email to user"
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
Output:
|
|
@@ -109,7 +109,7 @@ A typical change cycle:
|
|
|
109
109
|
|
|
110
110
|
4. **Apply.**
|
|
111
111
|
```bash
|
|
112
|
-
tailor
|
|
112
|
+
tailor deploy
|
|
113
113
|
```
|
|
114
114
|
The pre-migration phase relaxes the new field to optional, the script runs and populates values, then the post-migration phase enforces `required: true`.
|
|
115
115
|
|
|
@@ -126,10 +126,10 @@ Warning: data loss possible:
|
|
|
126
126
|
No `migrate.ts` is generated automatically because the schema change itself is non-breaking, but the existing data is dropped during the post-migration phase. If you need to preserve or transform that data first (for example, copy a column into another table before it disappears), add a script with:
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
|
-
tailor
|
|
129
|
+
tailor tailordb migration script 0002
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
-
This writes `migrations/0002/migrate.ts` and `migrations/0002/db.ts` next to the existing `diff.json`. The removed field stays readable inside `migrate.ts` because the pre-migration phase keeps it on the type until the script finishes (see [Per-migration phases](#per-migration-phases)). The next `tailor
|
|
132
|
+
This writes `migrations/0002/migrate.ts` and `migrations/0002/db.ts` next to the existing `diff.json`. The removed field stays readable inside `migrate.ts` because the pre-migration phase keeps it on the type until the script finishes (see [Per-migration phases](#per-migration-phases)). The next `tailor deploy` runs the script automatically — `migrate.ts` is executed whenever the file exists on disk, regardless of whether the diff itself required it.
|
|
133
133
|
|
|
134
134
|
## Configuration
|
|
135
135
|
|
|
@@ -245,7 +245,7 @@ The same pattern works for switching between scalar and array.
|
|
|
245
245
|
|
|
246
246
|
## Automatic Migration Execution
|
|
247
247
|
|
|
248
|
-
When you run `tailor
|
|
248
|
+
When you run `tailor deploy`, the SDK detects pending migrations (anything past the current `sdk-migration` label on the deployed namespace) and runs them in order before continuing with the rest of the apply.
|
|
249
249
|
|
|
250
250
|
### Per-migration phases
|
|
251
251
|
|
|
@@ -275,10 +275,12 @@ Namespace: tailordb
|
|
|
275
275
|
- Field 'email': required: remote=false, expected=true
|
|
276
276
|
```
|
|
277
277
|
|
|
278
|
+
The error also points you at `migration status`, `migration generate`, `migration sync`, and `migration set` — see [Remote schema drift detected](#remote-schema-drift-detected) for which one applies.
|
|
279
|
+
|
|
278
280
|
To bypass both checks (not recommended outside of recovery scenarios):
|
|
279
281
|
|
|
280
282
|
```bash
|
|
281
|
-
tailor
|
|
283
|
+
tailor deploy --no-schema-check
|
|
282
284
|
```
|
|
283
285
|
|
|
284
286
|
### Example output
|
|
@@ -297,7 +299,7 @@ tailor-sdk deploy --no-schema-check
|
|
|
297
299
|
|
|
298
300
|
## `migration set` Semantics
|
|
299
301
|
|
|
300
|
-
`tailor
|
|
302
|
+
`tailor tailordb migration set <N>` updates the `sdk-migration` label on the deployed namespace's metadata. **It does not modify any data or schema.** It only changes which migrations the next `apply` will consider pending.
|
|
301
303
|
|
|
302
304
|
| Movement | Effect on next `apply` | Effect on data |
|
|
303
305
|
| -------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------- |
|
|
@@ -314,7 +316,7 @@ Use cases:
|
|
|
314
316
|
|
|
315
317
|
## `migration sync` Semantics
|
|
316
318
|
|
|
317
|
-
`tailor
|
|
319
|
+
`tailor tailordb migration sync <N>` reconstructs the schema snapshot at migration `N` from the working tree's migration history and **overwrites the remote schema to match it**, then sets the `sdk-migration` label to `N`. Unlike `migration set`, it changes the remote schema as well as the bookkeeping. Like `set`, it never runs `migrate.ts` scripts itself — it only changes what the next `apply` considers pending:
|
|
318
320
|
|
|
319
321
|
| Movement | Effect on next `apply` | Effect on data |
|
|
320
322
|
| -------------------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
@@ -325,7 +327,7 @@ Before anything is sent to the remote, `sync` verifies that replaying the full m
|
|
|
325
327
|
|
|
326
328
|
Because syncing backward causes already-applied scripts to re-execute on the next deploy, **write `migrate.ts` scripts to be idempotent** (see [Performance and Large Tables](#performance-and-large-tables) for resumable `where` clauses).
|
|
327
329
|
|
|
328
|
-
The main use case is recovering from drift after a `deploy --no-schema-check` from an older revision: instead of checking out that revision, run `migration sync <N>` to restore the remote to a known snapshot, then `tailor
|
|
330
|
+
The main use case is recovering from drift after a `deploy --no-schema-check` from an older revision: instead of checking out that revision, run `migration sync <N>` to restore the remote to a known snapshot, then `tailor deploy` to apply the remaining migrations from the working tree.
|
|
329
331
|
|
|
330
332
|
## Team Workflow and CI/CD
|
|
331
333
|
|
|
@@ -340,7 +342,7 @@ Migration numbers are assigned sequentially, so two developers branching off the
|
|
|
340
342
|
### CI / CD
|
|
341
343
|
|
|
342
344
|
- For non-interactive environments, pass `--yes` to `migration generate` and `--yes` to `apply`. `apply` runs migrations automatically when the `migrations/` directory is configured.
|
|
343
|
-
- Run `tailor
|
|
345
|
+
- Run `tailor tailordb migration status` in CI to detect "developer forgot to commit a migration" situations early. The exit code is non-zero only on errors, so check the output.
|
|
344
346
|
- Avoid running migrations in parallel against the same workspace — there is no locking. Serialize deploys per environment.
|
|
345
347
|
|
|
346
348
|
### Resetting a deployed project
|
|
@@ -348,8 +350,8 @@ Migration numbers are assigned sequentially, so two developers branching off the
|
|
|
348
350
|
`migration generate --init` is destructive locally but does not touch the deployed workspace. Re-baselining a deployed project requires:
|
|
349
351
|
|
|
350
352
|
1. Run `migration generate --init` to start over from `0000`.
|
|
351
|
-
2. Run `tailor
|
|
352
|
-
3. Run `tailor
|
|
353
|
+
2. Run `tailor tailordb migration set 0` against the deployed namespace.
|
|
354
|
+
3. Run `tailor deploy` — the new `0000` becomes the baseline.
|
|
353
355
|
|
|
354
356
|
Coordinate this with your team because everyone else's local migrations will be invalidated.
|
|
355
357
|
|
|
@@ -367,7 +369,7 @@ After a failure:
|
|
|
367
369
|
|
|
368
370
|
1. Read the `Logs:` block in the apply output to find the cause.
|
|
369
371
|
2. Fix `migrate.ts` (or the data it depends on).
|
|
370
|
-
3. Re-run `tailor
|
|
372
|
+
3. Re-run `tailor deploy`. The same migration runs again because its label was never bumped, and the prior-checkpoint schema is a clean baseline to retry against.
|
|
371
373
|
|
|
372
374
|
If a migration **succeeds in script** but the **post-migration phase** fails (rare; usually a constraint violation the script should have prevented), the pre-migration changes are **not** rolled back: the script's data changes are already committed and the post-migration phase may have dropped removed columns or types, which cannot be reverted without data loss. Investigate, fix, and re-run.
|
|
373
375
|
|
|
@@ -396,7 +398,7 @@ The machine user needs read/write access to every type the migration script touc
|
|
|
396
398
|
|
|
397
399
|
If you see `No machine user available for migration execution`, either:
|
|
398
400
|
|
|
399
|
-
- Add `machineUsers: { ... }` to your auth config and `tailor
|
|
401
|
+
- Add `machineUsers: { ... }` to your auth config and `tailor deploy` it, or
|
|
400
402
|
- Set `migration.machineUser` to an existing machine user name in the db config.
|
|
401
403
|
|
|
402
404
|
## Multi-Namespace Coordination
|
|
@@ -439,7 +441,7 @@ For genuinely different schemas across environments, prefer separate workspaces
|
|
|
439
441
|
|
|
440
442
|
**Resolution:**
|
|
441
443
|
|
|
442
|
-
1. `tailor
|
|
444
|
+
1. `tailor tailordb migration status` to see local vs remote.
|
|
443
445
|
2. Compare with teammates — has someone applied different migrations?
|
|
444
446
|
3. If remote was changed manually, decide whether to update local migrations to match or to use `migration set <N>` to align bookkeeping.
|
|
445
447
|
4. To force the remote schema back to a known snapshot, use `migration sync <N>` (see [`migration sync` Semantics](#migration-sync-semantics)).
|
|
@@ -471,7 +473,7 @@ For genuinely different schemas across environments, prefer separate workspaces
|
|
|
471
473
|
|
|
472
474
|
**Cause:** Runtime error in your `migrate.ts`, a permission error from the machine user, or a constraint violation when post-migration tightens types.
|
|
473
475
|
|
|
474
|
-
**Resolution:** Read the `Logs:` block. Fix the script or the data assumption it relies on, and re-run `tailor
|
|
476
|
+
**Resolution:** Read the `Logs:` block. Fix the script or the data assumption it relies on, and re-run `tailor deploy`. The label is not bumped on failure, so the same migration retries.
|
|
475
477
|
|
|
476
478
|
### `migrate.ts` not found for a migration that needs one
|
|
477
479
|
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
177
|
+
const role = db.table("Role", {
|
|
178
178
|
name: db.string(),
|
|
179
179
|
});
|
|
180
180
|
|
|
181
|
-
const user = db.
|
|
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.
|
|
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.
|
|
205
|
+
const user = db.table("User", {
|
|
206
206
|
roleId: db.uuid().relation({
|
|
207
207
|
type: "keyOnly",
|
|
208
208
|
toward: { type: role },
|
|
@@ -213,11 +213,11 @@ const user = db.type("User", {
|
|
|
213
213
|
Create relations against different fields using `toward.key`:
|
|
214
214
|
|
|
215
215
|
```typescript
|
|
216
|
-
const user = db.
|
|
216
|
+
const user = db.table("User", {
|
|
217
217
|
email: db.string().unique(),
|
|
218
218
|
});
|
|
219
219
|
|
|
220
|
-
const userProfile = db.
|
|
220
|
+
const userProfile = db.table("UserProfile", {
|
|
221
221
|
userEmail: db.string().relation({
|
|
222
222
|
type: "1-1",
|
|
223
223
|
toward: { type: user, key: "email" },
|
|
@@ -228,7 +228,7 @@ const userProfile = db.type("UserProfile", {
|
|
|
228
228
|
Customize relation names using `toward.as` / `backward` options:
|
|
229
229
|
|
|
230
230
|
```typescript
|
|
231
|
-
const userProfile = db.
|
|
231
|
+
const userProfile = db.table("UserProfile", {
|
|
232
232
|
userId: db.uuid().relation({
|
|
233
233
|
type: "1-1",
|
|
234
234
|
toward: { type: user, as: "base" },
|
|
@@ -254,6 +254,29 @@ type User {
|
|
|
254
254
|
- `toward.as` - Customizes the field name for accessing the related type from this type
|
|
255
255
|
- `backward` - Customizes the field name for accessing this type from the related type
|
|
256
256
|
|
|
257
|
+
Relation names share the same GraphQL field namespace as fields, files, and other relations on
|
|
258
|
+
the type. The SDK rejects duplicate or empty relation names. Use `toward.as` when multiple fields
|
|
259
|
+
on the same type point to the same target type, because their default forward names are derived
|
|
260
|
+
from the target type name:
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
const post = db.table("Post", {
|
|
264
|
+
authorID: db.uuid().relation({
|
|
265
|
+
type: "n-1",
|
|
266
|
+
toward: { type: user, as: "author" },
|
|
267
|
+
backward: "authoredPosts",
|
|
268
|
+
}),
|
|
269
|
+
reviewerID: db.uuid().relation({
|
|
270
|
+
type: "n-1",
|
|
271
|
+
toward: { type: user, as: "reviewer" },
|
|
272
|
+
backward: "reviewedPosts",
|
|
273
|
+
}),
|
|
274
|
+
});
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Use `toward.as` or `backward` when a generated relation name would conflict with an existing
|
|
278
|
+
field, files entry, or relation on the same type.
|
|
279
|
+
|
|
257
280
|
### Hooks
|
|
258
281
|
|
|
259
282
|
Add hooks to execute functions during data creation or update. Hooks receive three arguments:
|
|
@@ -277,11 +300,11 @@ db.string().hooks({
|
|
|
277
300
|
|
|
278
301
|
#### Type-level Hooks
|
|
279
302
|
|
|
280
|
-
Set hooks for multiple fields at once using `db.
|
|
303
|
+
Set hooks for multiple fields at once using `db.table().hooks()`:
|
|
281
304
|
|
|
282
305
|
```typescript
|
|
283
306
|
export const customer = db
|
|
284
|
-
.
|
|
307
|
+
.table("Customer", {
|
|
285
308
|
firstName: db.string(),
|
|
286
309
|
lastName: db.string(),
|
|
287
310
|
fullName: db.string(),
|
|
@@ -299,7 +322,7 @@ export const customer = db
|
|
|
299
322
|
```typescript
|
|
300
323
|
// Compile error - cannot set hooks on the same field twice
|
|
301
324
|
export const user = db
|
|
302
|
-
.
|
|
325
|
+
.table("User", {
|
|
303
326
|
name: db.string().hooks({ create: ({ data }) => data.firstName }), // Field-level
|
|
304
327
|
})
|
|
305
328
|
.hooks({
|
|
@@ -308,7 +331,7 @@ export const user = db
|
|
|
308
331
|
|
|
309
332
|
// OK - set hooks on different fields
|
|
310
333
|
export const user = db
|
|
311
|
-
.
|
|
334
|
+
.table("User", {
|
|
312
335
|
firstName: db.string().hooks({ create: () => "John" }), // Field-level on firstName
|
|
313
336
|
lastName: db.string(),
|
|
314
337
|
})
|
|
@@ -340,11 +363,11 @@ db.string().validate(
|
|
|
340
363
|
|
|
341
364
|
#### Type-level Validation
|
|
342
365
|
|
|
343
|
-
Set validators for multiple fields at once using `db.
|
|
366
|
+
Set validators for multiple fields at once using `db.table().validate()`:
|
|
344
367
|
|
|
345
368
|
```typescript
|
|
346
369
|
export const user = db
|
|
347
|
-
.
|
|
370
|
+
.table("User", {
|
|
348
371
|
name: db.string(),
|
|
349
372
|
email: db.string(),
|
|
350
373
|
})
|
|
@@ -362,7 +385,7 @@ export const user = db
|
|
|
362
385
|
```typescript
|
|
363
386
|
// Compile error - cannot set validation on the same field twice
|
|
364
387
|
export const user = db
|
|
365
|
-
.
|
|
388
|
+
.table("User", {
|
|
366
389
|
name: db.string().validate(({ value }) => value.length > 0), // Field-level
|
|
367
390
|
})
|
|
368
391
|
.validate({
|
|
@@ -371,7 +394,7 @@ export const user = db
|
|
|
371
394
|
|
|
372
395
|
// OK - set validation on different fields
|
|
373
396
|
export const user = db
|
|
374
|
-
.
|
|
397
|
+
.table("User", {
|
|
375
398
|
name: db.string().validate(({ value }) => value.length > 0), // Field-level on name
|
|
376
399
|
email: db.string(),
|
|
377
400
|
})
|
|
@@ -403,7 +426,7 @@ db.string().serial({
|
|
|
403
426
|
### Common Fields
|
|
404
427
|
|
|
405
428
|
```typescript
|
|
406
|
-
export const user = db.
|
|
429
|
+
export const user = db.table("User", {
|
|
407
430
|
name: db.string(),
|
|
408
431
|
...db.fields.timestamps(),
|
|
409
432
|
});
|
|
@@ -416,7 +439,7 @@ export const user = db.type("User", {
|
|
|
416
439
|
### Composite Indexes
|
|
417
440
|
|
|
418
441
|
```typescript
|
|
419
|
-
db.
|
|
442
|
+
db.table("User", {
|
|
420
443
|
firstName: db.string(),
|
|
421
444
|
lastName: db.string(),
|
|
422
445
|
}).indexes({
|
|
@@ -429,7 +452,7 @@ db.type("User", {
|
|
|
429
452
|
### File Fields
|
|
430
453
|
|
|
431
454
|
```typescript
|
|
432
|
-
db.
|
|
455
|
+
db.table("User", {
|
|
433
456
|
name: db.string(),
|
|
434
457
|
}).files({
|
|
435
458
|
avatar: "profile image",
|
|
@@ -439,7 +462,7 @@ db.type("User", {
|
|
|
439
462
|
### Features
|
|
440
463
|
|
|
441
464
|
```typescript
|
|
442
|
-
db.
|
|
465
|
+
db.table("User", {
|
|
443
466
|
name: db.string(),
|
|
444
467
|
}).features({
|
|
445
468
|
aggregation: true,
|
|
@@ -452,7 +475,7 @@ db.type("User", {
|
|
|
452
475
|
Enable event publishing for a type to trigger executors on record changes:
|
|
453
476
|
|
|
454
477
|
```typescript
|
|
455
|
-
db.
|
|
478
|
+
db.table("User", {
|
|
456
479
|
name: db.string(),
|
|
457
480
|
}).features({
|
|
458
481
|
publishEvents: true,
|
|
@@ -463,7 +486,7 @@ db.type("User", {
|
|
|
463
486
|
|
|
464
487
|
- When `publishEvents: true`, record creation/update/deletion events are published
|
|
465
488
|
- When not specified, it is **automatically set to `true`** if an executor uses this type with `recordCreatedTrigger`, `recordUpdatedTrigger`, or `recordDeletedTrigger`
|
|
466
|
-
- When explicitly set to `false` while an executor uses this type, an error is thrown during `tailor
|
|
489
|
+
- When explicitly set to `false` while an executor uses this type, an error is thrown during `tailor deploy`
|
|
467
490
|
|
|
468
491
|
**Use cases:**
|
|
469
492
|
|
|
@@ -471,7 +494,7 @@ db.type("User", {
|
|
|
471
494
|
|
|
472
495
|
```typescript
|
|
473
496
|
// publishEvents is automatically enabled because an executor uses this type
|
|
474
|
-
export const order = db.
|
|
497
|
+
export const order = db.table("Order", {
|
|
475
498
|
status: db.string(),
|
|
476
499
|
});
|
|
477
500
|
|
|
@@ -485,7 +508,7 @@ db.type("User", {
|
|
|
485
508
|
2. **Manual enable**: Enable event publishing for external consumers or debugging
|
|
486
509
|
|
|
487
510
|
```typescript
|
|
488
|
-
db.
|
|
511
|
+
db.table("AuditLog", {
|
|
489
512
|
action: db.string(),
|
|
490
513
|
}).features({
|
|
491
514
|
publishEvents: true, // Enable even without executor triggers
|
|
@@ -495,7 +518,7 @@ db.type("User", {
|
|
|
495
518
|
3. **Explicit disable**: Disable event publishing for a type that doesn't need it (error if executor uses it)
|
|
496
519
|
|
|
497
520
|
```typescript
|
|
498
|
-
db.
|
|
521
|
+
db.table("TempData", {
|
|
499
522
|
data: db.string(),
|
|
500
523
|
}).features({
|
|
501
524
|
publishEvents: false, // Explicitly disable
|
|
@@ -511,7 +534,7 @@ Extract subsets of fields from a `TailorDBType` for reuse in resolvers, executor
|
|
|
511
534
|
Select specific fields and optionally modify their properties:
|
|
512
535
|
|
|
513
536
|
```typescript
|
|
514
|
-
const user = db.
|
|
537
|
+
const user = db.table("User", {
|
|
515
538
|
id: db.uuid(),
|
|
516
539
|
name: db.string(),
|
|
517
540
|
email: db.string().unique(),
|
|
@@ -581,7 +604,7 @@ Configure Permission and GQLPermission. For details, see the [TailorDB Permissio
|
|
|
581
604
|
**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).
|
|
582
605
|
|
|
583
606
|
```typescript
|
|
584
|
-
db.
|
|
607
|
+
db.table("User", {
|
|
585
608
|
name: db.string(),
|
|
586
609
|
role: db.enum(["admin", "user"]).index(),
|
|
587
610
|
})
|
|
@@ -611,7 +634,7 @@ import {
|
|
|
611
634
|
unsafeAllowAllGqlPermission,
|
|
612
635
|
} from "@tailor-platform/sdk";
|
|
613
636
|
|
|
614
|
-
db.
|
|
637
|
+
db.table("User", {
|
|
615
638
|
name: db.string(),
|
|
616
639
|
})
|
|
617
640
|
.permission(unsafeAllowAllTypePermission)
|
|
@@ -622,6 +645,6 @@ db.type("User", {
|
|
|
622
645
|
|
|
623
646
|
## Migrations
|
|
624
647
|
|
|
625
|
-
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
|
|
648
|
+
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.
|
|
626
649
|
|
|
627
650
|
For the CLI command reference, see [`tailordb migration`](../cli/tailordb.md#tailordb-migration).
|
|
@@ -207,23 +207,23 @@ Wait points allow a workflow job to suspend execution and wait for an external s
|
|
|
207
207
|
|
|
208
208
|
### Defining Wait Points
|
|
209
209
|
|
|
210
|
-
Use `
|
|
210
|
+
Use `createWaitPoint` to create a single typed wait point:
|
|
211
211
|
|
|
212
212
|
```typescript
|
|
213
|
-
import {
|
|
213
|
+
import { createWaitPoint } from "@tailor-platform/sdk";
|
|
214
214
|
|
|
215
|
-
export const approval =
|
|
215
|
+
export const approval = createWaitPoint<
|
|
216
216
|
{ message: string; requestId: string },
|
|
217
217
|
{ approved: boolean }
|
|
218
218
|
>("approval");
|
|
219
219
|
```
|
|
220
220
|
|
|
221
|
-
For multiple wait points, use `
|
|
221
|
+
For multiple wait points, use `createWaitPoints` with a builder callback. Property names become wait point keys, and JSDoc on each property is preserved in IDE autocompletion:
|
|
222
222
|
|
|
223
223
|
```typescript
|
|
224
|
-
import {
|
|
224
|
+
import { createWaitPoints } from "@tailor-platform/sdk";
|
|
225
225
|
|
|
226
|
-
export const waitPoints =
|
|
226
|
+
export const waitPoints = createWaitPoints((define) => ({
|
|
227
227
|
/** Manager approval step */
|
|
228
228
|
managerApproval: define<{ amount: number }, { approved: boolean }>(),
|
|
229
229
|
/** Finance review step */
|
|
@@ -245,9 +245,9 @@ Both must be JsonValue-compatible (plain objects/arrays; no class instances or f
|
|
|
245
245
|
Call `.wait()` inside a workflow job body to suspend execution:
|
|
246
246
|
|
|
247
247
|
```typescript
|
|
248
|
-
import { createWorkflow, createWorkflowJob
|
|
248
|
+
import { createWaitPoint, createWorkflow, createWorkflowJob } from "@tailor-platform/sdk";
|
|
249
249
|
|
|
250
|
-
export const approval =
|
|
250
|
+
export const approval = createWaitPoint<
|
|
251
251
|
{ message: string; requestId: string },
|
|
252
252
|
{ approved: boolean }
|
|
253
253
|
>("approval");
|
|
@@ -351,6 +351,84 @@ export default createWorkflow({
|
|
|
351
351
|
});
|
|
352
352
|
```
|
|
353
353
|
|
|
354
|
+
## Execution Policies
|
|
355
|
+
|
|
356
|
+
Execution policies apply a per-key concurrency cap to workflow job function dispatches. Declare them at the workspace level and pass a matching key when triggering a job; the platform serializes dispatches that resolve to the same key and suspends any that would exceed the cap until slots free up.
|
|
357
|
+
|
|
358
|
+
### Declaring Policies
|
|
359
|
+
|
|
360
|
+
Use `defineWorkflowExecutionPolicies` with a builder callback. Property names supply the workspace-unique name and default key prefix verbatim, matching the mental model of `defineWaitPoints`. Override `name` or `key` in the body when the property identifier is not valid execution policy grammar or the key prefix needs to differ. Set `matchType: "prefix"` to register the prefix as a wildcard that matches every dispatch key starting with it (the default, `"exact"`, matches only a dispatch key equal to it).
|
|
361
|
+
|
|
362
|
+
```typescript
|
|
363
|
+
import { defineWorkflowExecutionPolicies } from "@tailor-platform/sdk";
|
|
364
|
+
|
|
365
|
+
export const executionPolicies = defineWorkflowExecutionPolicies((define) => ({
|
|
366
|
+
/** Shared cap across every "premium" worker dispatch. */
|
|
367
|
+
premium: define({ concurrencyPolicy: { maxConcurrentExecutions: 5 } }),
|
|
368
|
+
/** Per-tenant cap: one pool per resolved tenant key. */
|
|
369
|
+
tenantApi: define({
|
|
370
|
+
name: "tenant-api",
|
|
371
|
+
matchType: "prefix",
|
|
372
|
+
concurrencyPolicy: { maxConcurrentExecutions: 3 },
|
|
373
|
+
}),
|
|
374
|
+
}));
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
For a single policy, use `defineWorkflowExecutionPolicy(name, def?)`; the key prefix defaults to `name` when `key` is omitted.
|
|
378
|
+
|
|
379
|
+
`concurrencyPolicy` is optional; when omitted, the policy registers the key as valid without a user-defined limit (platform safety nets still apply).
|
|
380
|
+
|
|
381
|
+
Register the policies on your config so the SDK creates them on the workspace during deploy:
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
// tailor.config.ts
|
|
385
|
+
import { defineConfig } from "@tailor-platform/sdk";
|
|
386
|
+
import { executionPolicies } from "./workflows/policies";
|
|
387
|
+
|
|
388
|
+
export default defineConfig({
|
|
389
|
+
workflow: {
|
|
390
|
+
files: ["workflows/**/*.ts"],
|
|
391
|
+
executionPolicies,
|
|
392
|
+
},
|
|
393
|
+
});
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### Key Grammar
|
|
397
|
+
|
|
398
|
+
`key` accepts `[a-z0-9_:.-]` and must start with `[a-z0-9]`. An exact key must also end with `[a-z0-9]`; a wildcard prefix (`matchType: "prefix"`) may end with any of those characters, since the platform appends a trailing `*` after it. The platform-registered key — including that trailing `*` when wildcarded — is 2 to 64 characters long, so a wildcard prefix must be at most 63 characters. `foo:bar` is a valid exact key; `tenant-api` with `matchType: "prefix"` registers `tenant-api*` as a wildcard prefix.
|
|
399
|
+
|
|
400
|
+
An exact-key policy applies to dispatches whose runtime key equals the policy key. A wildcard policy applies to every dispatch whose runtime key begins with the prefix; each concrete resolved key gets its own independent pool of the declared size (a `cap = 3` wildcard yields three concurrent dispatches per resolved key, not three across every match). The longest matching prefix wins when a dispatch could match more than one wildcard.
|
|
401
|
+
|
|
402
|
+
### Referencing a Policy from a Workflow
|
|
403
|
+
|
|
404
|
+
Pass the runtime key through the `executionPolicyKey` option on `job.trigger()` or `tailor.workflow.triggerJobFunction()`. For exact-key policies, use `<policy>.key` directly — it's typed so only a value that came from a declared policy can be passed. For wildcard policies (`matchType: "prefix"`), there is no `<policy>.key` — call `<policy>.keyFor(suffix)` to build the concrete key. `keyFor` joins the prefix and suffix with `.` by default; override it with `separator` — the second argument to `defineWorkflowExecutionPolicies` (applies to every policy in the group), or a `def` field on a single `defineWorkflowExecutionPolicy`.
|
|
405
|
+
|
|
406
|
+
```typescript
|
|
407
|
+
import { createWorkflowJob } from "@tailor-platform/sdk";
|
|
408
|
+
import { executionPolicies } from "./policies";
|
|
409
|
+
import { sendNotification } from "./jobs/send-notification";
|
|
410
|
+
import { fetchTenant } from "./jobs/fetch-tenant";
|
|
411
|
+
|
|
412
|
+
export const mainJob = createWorkflowJob({
|
|
413
|
+
name: "main-job",
|
|
414
|
+
body: async (input: { tenantId: string }) => {
|
|
415
|
+
// Exact key policy: pass .key directly.
|
|
416
|
+
await sendNotification.trigger(
|
|
417
|
+
{ message: "Order processed" },
|
|
418
|
+
{ executionPolicyKey: executionPolicies.premium.key },
|
|
419
|
+
);
|
|
420
|
+
|
|
421
|
+
// Wildcard policy: build the concrete key with keyFor().
|
|
422
|
+
await fetchTenant.trigger(
|
|
423
|
+
{ tenantId: input.tenantId },
|
|
424
|
+
{ executionPolicyKey: executionPolicies.tenantApi.keyFor(input.tenantId) },
|
|
425
|
+
);
|
|
426
|
+
},
|
|
427
|
+
});
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
The same `executionPolicyKey` option is available on `tailor.workflow.triggerJobFunction(name, args, options)` for jobs invoked by name.
|
|
431
|
+
|
|
354
432
|
## Triggering a Workflow from a Resolver
|
|
355
433
|
|
|
356
434
|
You can start a workflow execution from a resolver using `workflow.trigger()`.
|
|
@@ -406,22 +484,22 @@ Manage workflows using the CLI:
|
|
|
406
484
|
|
|
407
485
|
```bash
|
|
408
486
|
# List workflows
|
|
409
|
-
tailor
|
|
487
|
+
tailor workflow list
|
|
410
488
|
|
|
411
489
|
# Get workflow details
|
|
412
|
-
tailor
|
|
490
|
+
tailor workflow get <name>
|
|
413
491
|
|
|
414
492
|
# Start a workflow
|
|
415
|
-
tailor
|
|
493
|
+
tailor workflow start <name> -m <machine-user> -a '{"key": "value"}'
|
|
416
494
|
|
|
417
495
|
# List executions
|
|
418
|
-
tailor
|
|
496
|
+
tailor workflow executions
|
|
419
497
|
|
|
420
498
|
# Get execution details with logs
|
|
421
|
-
tailor
|
|
499
|
+
tailor workflow executions <execution-id> --logs
|
|
422
500
|
|
|
423
501
|
# Resume a failed execution
|
|
424
|
-
tailor
|
|
502
|
+
tailor workflow resume <execution-id>
|
|
425
503
|
```
|
|
426
504
|
|
|
427
505
|
See [Workflow CLI Commands](../cli/workflow.md) for full documentation.
|