@tailor-platform/sdk 2.0.0-next.1 → 2.0.0-next.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1056 -24
- 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-DqS1yBg3.mjs → application-CM6hKnSK.mjs} +2155 -2008
- package/dist/application-CM6hKnSK.mjs.map +1 -0
- package/dist/application-CXNaUNhv.mjs +3 -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 +2 -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 +4 -0
- package/dist/cli/commands/deploy/aigateway.d.mts +5 -0
- package/dist/cli/commands/deploy/application.d.mts +7 -0
- package/dist/cli/commands/deploy/apply-phases.d.mts +14 -0
- package/dist/cli/commands/deploy/auth.d.mts +5 -0
- package/dist/cli/commands/deploy/deploy.d.mts +35 -0
- package/dist/cli/commands/deploy/executor.d.mts +7 -0
- package/dist/cli/commands/deploy/function-registry-types.d.mts +12 -0
- package/dist/cli/commands/deploy/function-registry.d.mts +6 -0
- package/dist/cli/commands/deploy/idp.d.mts +5 -0
- package/dist/cli/commands/deploy/label.d.mts +2 -0
- package/dist/cli/commands/deploy/resolver.d.mts +5 -0
- package/dist/cli/commands/deploy/secret-manager.d.mts +5 -0
- package/dist/cli/commands/deploy/staticwebsite.d.mts +5 -0
- package/dist/cli/commands/deploy/tailordb/index.d.mts +10 -0
- package/dist/cli/commands/deploy/types.d.mts +4 -0
- package/dist/cli/commands/deploy/workflow-execution-policy.d.mts +2 -0
- package/dist/cli/commands/deploy/workflow.d.mts +4 -0
- package/dist/cli/commands/executor/get.d.mts +19 -0
- package/dist/cli/commands/executor/jobs.d.mts +85 -0
- package/dist/cli/commands/executor/list.d.mts +18 -0
- package/dist/cli/commands/executor/transform.d.mts +42 -0
- package/dist/cli/commands/executor/trigger.d.mts +30 -0
- package/dist/cli/commands/executor/webhook.d.mts +21 -0
- package/dist/cli/commands/function/get.d.mts +17 -0
- package/dist/cli/commands/function/list.d.mts +21 -0
- package/dist/cli/commands/function/transform.d.mts +12 -0
- package/dist/cli/commands/generate/options.d.mts +6 -0
- package/dist/cli/commands/generate/seed/bundler.d.mts +27 -0
- package/dist/cli/commands/generate/service.d.mts +15 -0
- package/dist/cli/commands/machineuser/list.d.mts +26 -0
- package/dist/cli/commands/machineuser/token.d.mts +21 -0
- package/dist/cli/commands/oauth2client/get.d.mts +17 -0
- package/dist/cli/commands/oauth2client/list.d.mts +19 -0
- package/dist/cli/commands/oauth2client/transform.d.mts +21 -0
- package/dist/cli/commands/organization/folder/create.d.mts +17 -0
- package/dist/cli/commands/organization/folder/delete.d.mts +15 -0
- package/dist/cli/commands/organization/folder/get.d.mts +16 -0
- package/dist/cli/commands/organization/folder/list.d.mts +21 -0
- package/dist/cli/commands/organization/folder/update.d.mts +17 -0
- package/dist/cli/commands/organization/get.d.mts +15 -0
- package/dist/cli/commands/organization/list.d.mts +14 -0
- package/dist/cli/commands/organization/transform.d.mts +29 -0
- package/dist/cli/commands/organization/tree.d.mts +24 -0
- package/dist/cli/commands/organization/update.d.mts +16 -0
- package/dist/cli/commands/remove.d.mts +15 -0
- package/dist/cli/commands/show.d.mts +39 -0
- package/dist/cli/commands/staticwebsite/deploy.d.mts +19 -0
- package/dist/cli/commands/tailordb/migrate/bundler.d.mts +29 -0
- package/dist/cli/commands/tailordb/migrate/config.d.mts +18 -0
- package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +246 -0
- package/dist/cli/commands/tailordb/migrate/generate.d.mts +16 -0
- package/dist/cli/commands/tailordb/migrate/schema-checks.d.mts +5 -0
- package/dist/cli/commands/tailordb/migrate/snapshot-types.d.mts +208 -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 +18 -0
- package/dist/cli/commands/workflow/executions.d.mts +62 -0
- package/dist/cli/commands/workflow/get.d.mts +21 -0
- package/dist/cli/commands/workflow/list.d.mts +18 -0
- package/dist/cli/commands/workflow/resume.d.mts +22 -0
- package/dist/cli/commands/workflow/start.d.mts +48 -0
- package/dist/cli/commands/workflow/status.d.mts +6 -0
- package/dist/cli/commands/workflow/transform.d.mts +34 -0
- package/dist/cli/commands/workflow/wait.d.mts +15 -0
- package/dist/cli/commands/workflow/waiter.d.mts +23 -0
- package/dist/cli/commands/workspace/app/health.d.mts +17 -0
- package/dist/cli/commands/workspace/app/list.d.mts +21 -0
- package/dist/cli/commands/workspace/app/transform.d.mts +20 -0
- package/dist/cli/commands/workspace/create.d.mts +27 -0
- package/dist/cli/commands/workspace/delete.d.mts +14 -0
- package/dist/cli/commands/workspace/get.d.mts +16 -0
- package/dist/cli/commands/workspace/list.d.mts +17 -0
- package/dist/cli/commands/workspace/restore.d.mts +14 -0
- package/dist/cli/commands/workspace/transform.d.mts +20 -0
- package/dist/cli/commands/workspace/user/invite.d.mts +21 -0
- package/dist/cli/commands/workspace/user/list.d.mts +21 -0
- package/dist/cli/commands/workspace/user/remove.d.mts +16 -0
- package/dist/cli/commands/workspace/user/transform.d.mts +9 -0
- package/dist/cli/commands/workspace/user/update.d.mts +21 -0
- package/dist/cli/index.mjs +12 -5481
- package/dist/cli/lib.d.mts +86 -21048
- package/dist/cli/lib.mjs +245 -46
- package/dist/cli/lib.mjs.map +1 -1
- package/dist/cli/main.d.mts +23 -0
- package/dist/cli/main.mjs +6777 -0
- package/dist/cli/main.mjs.map +1 -0
- package/dist/cli/query/index.d.mts +38 -0
- package/dist/cli/services/application.d.mts +12 -0
- package/dist/cli/services/auth/service.d.mts +3 -0
- package/dist/cli/services/executor/service.d.mts +1 -0
- package/dist/cli/services/http-adapter/bundler.d.mts +4 -0
- package/dist/cli/services/http-adapter/service.d.mts +2 -0
- package/dist/cli/services/resolver/service.d.mts +1 -0
- package/dist/cli/services/tailordb/service.d.mts +3 -0
- package/dist/cli/services/workflow/bundler.d.mts +3 -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 +1298 -0
- package/dist/cli/shared/config-loader.d.mts +32 -0
- package/dist/cli/shared/context.d.mts +29 -0
- package/dist/cli/shared/error-json.d.mts +23 -0
- package/dist/cli/shared/readonly-guard.d.mts +25 -0
- package/dist/cli/shared/script-executor.d.mts +77 -0
- package/dist/cli/shared/seed-chunker.d.mts +45 -0
- package/dist/cli/shared/seed-context.d.mts +49 -0
- package/dist/cli/shared/tailordb-namespaces.d.mts +40 -0
- package/dist/cli/shared/tsconfig-paths-plugin.d.mts +2 -0
- package/dist/cli/shared/type-generator.d.mts +20 -0
- package/dist/cli/shared/workspace-name.d.mts +1 -0
- package/dist/cli/ts-hook.d.mts +4 -0
- package/dist/cli/ts-hook.mjs +333 -0
- package/dist/completion/zsh-worker.zsh +1471 -1217
- package/dist/configure/config/index.d.mts +20 -0
- package/dist/configure/config/types.d.mts +134 -0
- package/dist/configure/index.d.mts +135 -8
- package/dist/configure/index.mjs +558 -36
- package/dist/configure/index.mjs.map +1 -1
- package/dist/configure/services/aigateway/index.d.mts +16 -0
- package/dist/configure/services/aigateway/types.d.mts +10 -0
- package/dist/configure/services/auth/index.d.mts +33 -0
- package/dist/configure/services/auth/types.d.mts +168 -0
- package/dist/configure/services/executor/executor.d.mts +70 -0
- package/dist/configure/services/executor/index.d.mts +9 -0
- package/dist/configure/services/executor/operation.d.mts +50 -0
- package/dist/configure/services/executor/trigger/event.d.mts +514 -0
- package/dist/configure/services/executor/trigger/index.d.mts +7 -0
- package/dist/configure/services/executor/trigger/schedule.d.mts +24 -0
- package/dist/configure/services/executor/trigger/webhook.d.mts +43 -0
- package/dist/configure/services/executor/types.d.mts +2 -0
- package/dist/configure/services/http-adapter/http-adapter.d.mts +124 -0
- package/dist/configure/services/http-adapter/index.d.mts +2 -0
- package/dist/configure/services/idp/index.d.mts +60 -0
- package/dist/configure/services/idp/permission.d.mts +64 -0
- package/dist/configure/services/idp/types.d.mts +23 -0
- package/dist/configure/services/index.d.mts +40 -0
- package/dist/configure/services/resolver/index.d.mts +6 -0
- package/dist/configure/services/resolver/permission.d.mts +64 -0
- package/dist/configure/services/resolver/resolver.d.mts +88 -0
- package/dist/configure/services/resolver/types.d.mts +5 -0
- package/dist/configure/services/secrets/index.d.mts +37 -0
- package/dist/configure/services/secrets/types.d.mts +10 -0
- package/dist/configure/services/staticwebsite/index.d.mts +18 -0
- package/dist/configure/services/staticwebsite/types.d.mts +10 -0
- package/dist/configure/services/tailordb/index.d.mts +3 -0
- package/dist/configure/services/tailordb/permission.d.mts +103 -0
- package/dist/configure/services/tailordb/schema.d.mts +486 -0
- package/dist/configure/services/tailordb/types.d.mts +198 -0
- package/dist/configure/services/workflow/execution-policy.d.mts +70 -0
- package/dist/configure/services/workflow/execution-policy.types.d.mts +103 -0
- package/dist/configure/services/workflow/index.d.mts +9 -0
- package/dist/configure/services/workflow/job.d.mts +92 -0
- package/dist/configure/services/workflow/types.d.mts +2 -0
- package/dist/configure/services/workflow/wait-point.d.mts +72 -0
- package/dist/configure/services/workflow/workflow.d.mts +66 -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.d.mts +8 -0
- package/dist/configure/types/field.types.d.mts +70 -0
- package/dist/configure/types/idp-name.d.mts +12 -0
- package/dist/configure/types/index.d.mts +5 -0
- package/dist/configure/types/machine-user.d.mts +2 -0
- package/dist/configure/types/permission-operand.types.d.mts +20 -0
- package/dist/configure/types/type.d.mts +73 -0
- package/dist/{context-Bd266-ru.mjs → context-DYQVYWqZ.mjs} +4 -5
- package/dist/context-DYQVYWqZ.mjs.map +1 -0
- package/dist/{crashreport-BsjAkFWw.mjs → crashreport-B5LqCTfF.mjs} +10 -11
- package/dist/{crashreport-BsjAkFWw.mjs.map → crashreport-B5LqCTfF.mjs.map} +1 -1
- package/dist/{crashreport-pr6Rhvza.mjs → crashreport-eI7ty7ok.mjs} +1 -1
- package/dist/{errors-Dtf2WPaW.mjs → errors-D7583Zz7.mjs} +18 -2
- package/dist/errors-D7583Zz7.mjs.map +1 -0
- package/dist/{file-_oUZo76X.mjs → file-BUcmVIH2.mjs} +12 -22
- package/dist/file-BUcmVIH2.mjs.map +1 -0
- package/dist/{globals-Crz8o65k.mjs → globals-TfAVItuK.mjs} +32 -55
- package/dist/globals-TfAVItuK.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 +5 -7
- package/dist/logger-BtX0suGY.mjs +48 -0
- package/dist/logger-BtX0suGY.mjs.map +1 -0
- package/dist/logger-CXQq9YIp.mjs +317 -0
- package/dist/logger-CXQq9YIp.mjs.map +1 -0
- package/dist/node-builtins-CmaL2Cbq.mjs +36 -0
- package/dist/node-builtins-CmaL2Cbq.mjs.map +1 -0
- package/dist/parser/service/auth/index.d.mts +1 -0
- package/dist/parser/service/auth/schema.d.mts +3 -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 +5 -0
- package/dist/parser/service/tailordb/type-source.d.mts +10 -0
- package/dist/parser/service/tailordb/types.d.mts +131 -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 +15 -1
- package/dist/plugin/builtin/enum-constants/index.mjs +115 -2
- package/dist/plugin/builtin/enum-constants/index.mjs.map +1 -0
- package/dist/plugin/builtin/file-utils/index.d.mts +15 -1
- package/dist/plugin/builtin/file-utils/index.mjs +149 -2
- package/dist/plugin/builtin/file-utils/index.mjs.map +1 -0
- package/dist/plugin/builtin/kysely-type/index.d.mts +15 -1
- package/dist/plugin/builtin/kysely-type/index.mjs +274 -2
- package/dist/plugin/builtin/kysely-type/index.mjs.map +1 -0
- package/dist/plugin/builtin/seed/index.d.mts +46 -2
- package/dist/plugin/builtin/seed/index.mjs +1 -1
- package/dist/plugin/builtin/seed/seed-type-processor.d.mts +21 -0
- package/dist/plugin/builtin/seed/types.d.mts +2 -0
- package/dist/plugin/get-generated-type.d.mts +16 -0
- package/dist/plugin/index.d.mts +3 -117
- package/dist/plugin/index.mjs +1 -1
- package/dist/plugin/index.mjs.map +1 -1
- package/dist/plugin/manager.d.mts +2 -0
- package/dist/plugin/types.d.mts +242 -0
- package/dist/plugin/with-context.d.mts +101 -0
- package/dist/{runtime-n9NCkjee.mjs → register-ts-hook-LYV7zH-e.mjs} +9652 -4479
- package/dist/register-ts-hook-LYV7zH-e.mjs.map +1 -0
- package/dist/{registry-DdsYlL_P.mjs → registry-BIGVUrMB.mjs} +12 -9
- package/dist/registry-BIGVUrMB.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/runtime/aigateway.d.mts +25 -0
- package/dist/runtime/aigateway.mjs +3 -0
- package/dist/runtime/authconnection.d.mts +21 -2
- package/dist/runtime/authconnection.mjs +2 -2
- package/dist/runtime/context.d.mts +54 -2
- package/dist/runtime/context.mjs +2 -2
- package/dist/runtime/field-parse.d.mts +10 -0
- package/dist/runtime/file.d.mts +170 -2
- package/dist/runtime/file.mjs +2 -2
- package/dist/runtime/globals.d.mts +38 -20
- 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 +48 -9
- package/dist/runtime/index.mjs +10 -8
- package/dist/runtime/logger.d.mts +98 -0
- package/dist/runtime/logger.mjs +3 -0
- package/dist/runtime/secretmanager.d.mts +41 -2
- package/dist/runtime/secretmanager.mjs +2 -2
- package/dist/runtime/types.d.mts +25 -0
- package/dist/runtime/workflow.d.mts +106 -2
- package/dist/runtime/workflow.mjs +2 -2
- package/dist/{schema-BhkpP5Hw.mjs → schema--xYWRGfe.mjs} +288 -229
- package/dist/schema--xYWRGfe.mjs.map +1 -0
- package/dist/{secret-file-DBqZhjFQ.mjs → secret-file-C3J4Gy8r.mjs} +2 -2
- package/dist/{secret-file-DBqZhjFQ.mjs.map → secret-file-C3J4Gy8r.mjs.map} +1 -1
- package/dist/secretmanager-CYlpffsz.mjs +13 -0
- package/dist/secretmanager-CYlpffsz.mjs.map +1 -0
- package/dist/secretmanager-IY4UvinW.mjs +131 -0
- package/dist/secretmanager-IY4UvinW.mjs.map +1 -0
- package/dist/seed/index.d.mts +4 -4
- package/dist/seed-B-yckgQY.mjs +483 -0
- package/dist/seed-B-yckgQY.mjs.map +1 -0
- package/dist/{service-DU1mVzri.mjs → service-B5WynBHQ.mjs} +3 -3
- package/dist/{service-DU1mVzri.mjs.map → service-B5WynBHQ.mjs.map} +1 -1
- package/dist/service-M7OYziQP.mjs +3 -0
- package/dist/service-k1xy_A5G.mjs +864 -0
- package/dist/service-k1xy_A5G.mjs.map +1 -0
- package/dist/service_pb-D5--My_M.mjs +167 -0
- package/dist/service_pb-D5--My_M.mjs.map +1 -0
- package/dist/service_pb-i8CmnQP4.mjs +3 -0
- package/dist/tailor-proto/src/tailor/v1/aigateway_pb.d.mts +203 -0
- package/dist/tailor-proto/src/tailor/v1/aigateway_resource_pb.d.mts +57 -0
- package/dist/tailor-proto/src/tailor/v1/application_pb.d.mts +420 -0
- package/dist/tailor-proto/src/tailor/v1/application_resource_pb.d.mts +160 -0
- package/dist/tailor-proto/src/tailor/v1/auth_pb.d.mts +2069 -0
- package/dist/tailor-proto/src/tailor/v1/auth_resource_pb.d.mts +865 -0
- package/dist/tailor-proto/src/tailor/v1/events_pb.d.mts +111 -0
- package/dist/tailor-proto/src/tailor/v1/events_resource_pb.d.mts +68 -0
- package/dist/tailor-proto/src/tailor/v1/executor_pb.d.mts +438 -0
- package/dist/tailor-proto/src/tailor/v1/executor_resource_pb.d.mts +586 -0
- package/dist/tailor-proto/src/tailor/v1/function_pb.d.mts +192 -0
- package/dist/tailor-proto/src/tailor/v1/function_registry_pb.d.mts +450 -0
- package/dist/tailor-proto/src/tailor/v1/function_resource_pb.d.mts +191 -0
- package/dist/tailor-proto/src/tailor/v1/http_adapter_resource_pb.d.mts +49 -0
- package/dist/tailor-proto/src/tailor/v1/idp_pb.d.mts +406 -0
- package/dist/tailor-proto/src/tailor/v1/idp_resource_pb.d.mts +429 -0
- package/dist/tailor-proto/src/tailor/v1/metadata_pb.d.mts +72 -0
- package/dist/tailor-proto/src/tailor/v1/metadata_resource_pb.d.mts +16 -0
- package/dist/tailor-proto/src/tailor/v1/meter_pb.d.mts +308 -0
- package/dist/tailor-proto/src/tailor/v1/pipeline_pb.d.mts +590 -0
- package/dist/tailor-proto/src/tailor/v1/pipeline_resource_pb.d.mts +329 -0
- package/dist/tailor-proto/src/tailor/v1/resource_pb.d.mts +112 -0
- package/dist/tailor-proto/src/tailor/v1/secret_manager_pb.d.mts +345 -0
- package/dist/tailor-proto/src/tailor/v1/secret_manager_resource_pb.d.mts +53 -0
- package/dist/tailor-proto/src/tailor/v1/service_pb.d.mts +3658 -0
- package/dist/tailor-proto/src/tailor/v1/stateflow_pb.d.mts +186 -0
- package/dist/tailor-proto/src/tailor/v1/stateflow_resource_pb.d.mts +28 -0
- package/dist/tailor-proto/src/tailor/v1/staticwebsite_pb.d.mts +428 -0
- package/dist/tailor-proto/src/tailor/v1/staticwebsite_resource_pb.d.mts +89 -0
- package/dist/tailor-proto/src/tailor/v1/tailordb_pb.d.mts +683 -0
- package/dist/tailor-proto/src/tailor/v1/tailordb_resource_pb.d.mts +796 -0
- package/dist/tailor-proto/src/tailor/v1/telemetryrouter_pb.d.mts +329 -0
- package/dist/tailor-proto/src/tailor/v1/telemetryrouter_resource_pb.d.mts +207 -0
- package/dist/tailor-proto/src/tailor/v1/workflow_pb.d.mts +961 -0
- package/dist/tailor-proto/src/tailor/v1/workflow_resource_pb.d.mts +330 -0
- package/dist/tailor-proto/src/tailor/v1/workspace_pb.d.mts +2014 -0
- package/dist/tailor-proto/src/tailor/v1/workspace_resource_pb.d.mts +482 -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/test-env-key-D7UkZp99.mjs +75 -0
- package/dist/test-env-key-D7UkZp99.mjs.map +1 -0
- package/dist/types/aigateway.generated.d.mts +12 -0
- package/dist/types/app-config.generated.d.mts +4 -0
- package/dist/types/auth-connection.generated.d.mts +33 -0
- package/dist/types/auth.generated.d.mts +188 -0
- package/dist/types/executor.generated.d.mts +229 -0
- package/dist/types/helpers.d.mts +40 -0
- package/dist/types/http-adapter.generated.d.mts +28 -0
- package/dist/types/idp.generated.d.mts +626 -0
- package/dist/types/resolver.generated.d.mts +82 -0
- package/dist/types/secrets.generated.d.mts +14 -0
- package/dist/types/staticwebsite.generated.d.mts +14 -0
- package/dist/types/tailordb.generated.d.mts +468 -0
- package/dist/types/workflow.generated.d.mts +17 -0
- package/dist/user-agent-Bgsszb5I.mjs +28 -0
- package/dist/user-agent-Bgsszb5I.mjs.map +1 -0
- package/dist/utils/test/index.d.mts +5 -100
- package/dist/utils/test/index.mjs +38 -189
- package/dist/utils/test/index.mjs.map +1 -1
- 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 +17 -431
- package/dist/vitest/index.mjs +1234 -67
- package/dist/vitest/index.mjs.map +1 -1
- package/dist/vitest/mock-kysely.d.mts +61 -0
- package/dist/vitest/mock.d.mts +10 -0
- package/dist/vitest/mocks/aigateway.d.mts +40 -0
- package/dist/vitest/mocks/authconnection.d.mts +38 -0
- package/dist/vitest/mocks/file.d.mts +58 -0
- package/dist/vitest/mocks/iconv.d.mts +51 -0
- package/dist/vitest/mocks/idp.d.mts +60 -0
- package/dist/vitest/mocks/logger.d.mts +45 -0
- package/dist/vitest/mocks/secretmanager.d.mts +44 -0
- package/dist/vitest/mocks/tailordb.d.mts +115 -0
- package/dist/vitest/mocks/workflow.d.mts +148 -0
- package/dist/vitest/setup.d.mts +1 -2
- package/dist/vitest/setup.mjs +2 -2
- package/dist/vitest/workflow-local.d.mts +41 -0
- package/dist/workflow-Bamae_Yc.mjs +34 -0
- package/dist/workflow-Bamae_Yc.mjs.map +1 -0
- package/dist/{client-z_oHGVNy.mjs → workspace_resource_pb-DXnO2AT-.mjs} +57 -621
- package/dist/workspace_resource_pb-DXnO2AT-.mjs.map +1 -0
- package/docs/cli/application.md +150 -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 +72 -183
- package/docs/cli/function.md +16 -132
- 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 +138 -40
- package/docs/cli/skills.md +50 -39
- package/docs/cli/staticwebsite.md +32 -180
- package/docs/cli/tailordb.md +89 -413
- package/docs/cli/upgrade.md +2 -22
- package/docs/cli/user.md +78 -247
- package/docs/cli/workflow.md +150 -172
- package/docs/cli/workspace.md +167 -538
- package/docs/cli-reference.md +214 -96
- package/docs/configuration.md +90 -6
- package/docs/github-actions.md +72 -24
- package/docs/migration/v2.md +1613 -0
- 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 +18 -9
- package/docs/services/aigateway.md +20 -2
- package/docs/services/auth.md +51 -59
- package/docs/services/executor.md +91 -6
- package/docs/services/http-adapter.md +16 -1
- package/docs/services/idp.md +62 -7
- package/docs/services/resolver.md +67 -11
- package/docs/services/secret.md +11 -11
- package/docs/services/staticwebsite.md +8 -2
- package/docs/services/tailordb-migration.md +55 -29
- package/docs/services/tailordb.md +205 -102
- package/docs/services/workflow.md +163 -55
- package/docs/testing.md +244 -143
- package/package.json +61 -46
- package/postinstall.mjs +4 -6
- package/dist/application-DB2r36Et.mjs +0 -3
- package/dist/application-DqS1yBg3.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/cli/erd-viewer-assets/app.js +0 -1181
- package/dist/cli/erd-viewer-assets/index.html +0 -73
- package/dist/cli/erd-viewer-assets/serve.json +0 -13
- package/dist/cli/erd-viewer-assets/styles.css +0 -789
- package/dist/cli/index.d.mts +0 -5
- package/dist/cli/index.mjs.map +0 -1
- package/dist/client-Dbohmtkv.mjs +0 -3
- package/dist/client-z_oHGVNy.mjs.map +0 -1
- package/dist/context-Bd266-ru.mjs.map +0 -1
- package/dist/context-BuuIb8CC.d.mts +0 -68
- package/dist/enum-constants-j9QBF0cB.mjs +0 -116
- package/dist/enum-constants-j9QBF0cB.mjs.map +0 -1
- 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-BB8Vs9O_.d.mts +0 -250
- package/dist/file-_oUZo76X.mjs.map +0 -1
- package/dist/file-utils-DcyIPFQh.mjs +0 -150
- package/dist/file-utils-DcyIPFQh.mjs.map +0 -1
- package/dist/globals-Crz8o65k.mjs.map +0 -1
- package/dist/http-adapter.generated-WgMnb7Sb.d.mts +0 -580
- 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-5vPyRu1y.d.mts +0 -18
- package/dist/index-B7AKc18V.d.mts +0 -47
- package/dist/index-BlpzXncY.d.mts +0 -1016
- package/dist/index-CK7u9isy.d.mts +0 -46
- package/dist/index-CNYe5lnW.d.mts +0 -18
- package/dist/index-DjUdWlzf.d.mts +0 -18
- package/dist/index-ZePLwxw7.d.mts +0 -208
- package/dist/interceptor-D-q1rvRl.mjs.map +0 -1
- package/dist/job-fuc3j1Ma.mjs +0 -53
- package/dist/job-fuc3j1Ma.mjs.map +0 -1
- package/dist/kysely-type-DR8uzZTA.mjs +0 -274
- package/dist/kysely-type-DR8uzZTA.mjs.map +0 -1
- package/dist/logger-CxF-Ex5d.mjs +0 -220
- package/dist/logger-CxF-Ex5d.mjs.map +0 -1
- package/dist/mock-BjFj5o1I.mjs +0 -804
- package/dist/mock-BjFj5o1I.mjs.map +0 -1
- package/dist/registry-DdsYlL_P.mjs.map +0 -1
- package/dist/rolldown-runtime-DXywRVcq.mjs +0 -20
- package/dist/runtime-n9NCkjee.mjs.map +0 -1
- package/dist/schema-BhkpP5Hw.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-jf3008-h.mjs +0 -1160
- package/dist/seed-jf3008-h.mjs.map +0 -1
- package/dist/service-CCL8ruDf.mjs +0 -459
- package/dist/service-CCL8ruDf.mjs.map +0 -1
- package/dist/service-D6yonf2I.mjs +0 -3
- package/dist/telemetry-CdqJEzkj.mjs.map +0 -1
- package/dist/telemetry-ClwW5ohF.mjs +0 -3
- package/dist/test-env-key-D9kM6ETE.mjs +0 -49
- package/dist/test-env-key-D9kM6ETE.mjs.map +0 -1
- package/dist/types-B2RpYyA_.mjs +0 -371
- package/dist/types-B2RpYyA_.mjs.map +0 -1
- package/dist/types-ClhIrW_C.mjs +0 -4
- package/dist/types-DCUhgpyI.d.mts +0 -784
- package/dist/types-DhO_VEZd.d.mts +0 -574
- package/dist/types-DwDgacni.d.mts +0 -338
- package/dist/workflow-BbKvGLQg.d.mts +0 -96
- package/dist/workflow-DgemCAz3.mjs +0 -38
- package/dist/workflow-DgemCAz3.mjs.map +0 -1
- package/dist/workflow.generated-DtQwEo-x.d.mts +0 -671
|
@@ -136,9 +136,9 @@ When the project defines multiple IdPs, pass `idp` to target a specific one. The
|
|
|
136
136
|
idpUserCreatedTrigger({ idp: "my-idp" });
|
|
137
137
|
```
|
|
138
138
|
|
|
139
|
-
Omitting `idp` is allowed only when the project has exactly one IdP; otherwise `
|
|
139
|
+
Omitting `idp` is allowed only when the project has exactly one IdP; otherwise `deploy` fails with an error listing the configured IdPs.
|
|
140
140
|
|
|
141
|
-
These triggers require the IdP to publish user lifecycle events.
|
|
141
|
+
These triggers require the IdP to publish user lifecycle events. `deploy` enables `publishEvents` automatically on each IdP targeted by an `idpUser` trigger taking part in the same run, and turns it back off once no such trigger remains; set the value explicitly on `defineIdp()` to pin it. See [IdP service - publishEvents](./idp.md#publishevents).
|
|
142
142
|
|
|
143
143
|
### Auth Access Token Triggers
|
|
144
144
|
|
|
@@ -152,6 +152,37 @@ Fire on auth access token lifecycle events:
|
|
|
152
152
|
authAccessTokenIssuedTrigger();
|
|
153
153
|
```
|
|
154
154
|
|
|
155
|
+
### Workflow Execution Triggers
|
|
156
|
+
|
|
157
|
+
Fire when a workflow execution changes state. Use the single-event helpers or `workflowExecutionTrigger()` for multiple events:
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
import { createExecutor, workflowExecutionTrigger } from "@tailor-platform/sdk";
|
|
161
|
+
import orderWorkflow from "../workflows/order";
|
|
162
|
+
|
|
163
|
+
export default createExecutor({
|
|
164
|
+
name: "order-workflow-finished",
|
|
165
|
+
trigger: workflowExecutionTrigger({
|
|
166
|
+
workflow: orderWorkflow,
|
|
167
|
+
events: ["completed", "retried"],
|
|
168
|
+
}),
|
|
169
|
+
operation: {
|
|
170
|
+
kind: "function",
|
|
171
|
+
body: async (args) => {
|
|
172
|
+
if (args.event === "completed" && !args.success) {
|
|
173
|
+
console.error(args.error);
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
The available workflow events are `started`, `completed`, `retried`, `resumed`, `wait_started`, and `wait_resolved`. To observe job-level events, use `workflowJobExecutionStartedTrigger()`, `workflowJobExecutionCompletedTrigger()`, `workflowJobExecutionWaitStartedTrigger()`, `workflowJobExecutionWaitResolvedTrigger()`, or `workflowJobExecutionTrigger()`.
|
|
181
|
+
|
|
182
|
+
`completed` events include `success`; when it is `false`, `error` contains the failure message. A job released from a wait point emits `wait_resolved` instead of `completed`.
|
|
183
|
+
|
|
184
|
+
These triggers require the workflow to publish execution events. `deploy` enables `publishEvents` automatically on each targeted workflow, and on every job of a workflow targeted by a `workflowJobExecution*` trigger, and turns it back off once no such trigger remains; set the value explicitly to pin it. See [Workflow service - Execution Events](./workflow.md#execution-events).
|
|
185
|
+
|
|
155
186
|
### Multi-Event Triggers
|
|
156
187
|
|
|
157
188
|
Handle multiple event types in a single executor using multi-event trigger factories. These accept an `events` array of short event names:
|
|
@@ -200,7 +231,14 @@ idpUserTrigger({ events: ["created", "deleted"], idp: "my-idp" });
|
|
|
200
231
|
authAccessTokenTrigger({ events: ["issued", "revoked"] });
|
|
201
232
|
```
|
|
202
233
|
|
|
203
|
-
|
|
234
|
+
#### `workflowExecutionTrigger()` and `workflowJobExecutionTrigger()`
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
workflowExecutionTrigger({ workflow: orderWorkflow, events: ["started", "completed"] });
|
|
238
|
+
workflowJobExecutionTrigger({ workflow: orderWorkflow, events: ["started", "wait_resolved"] });
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
The `event` field on args matches the short event name, enabling type narrowing. Record triggers use names such as `"created"`, auth token triggers use `"issued"`, and workflow triggers use `"started"`, `"completed"`, and `"wait_resolved"`. The `rawEvent` field contains the full event type string (e.g., `"tailordb.type_record.created"`).
|
|
204
242
|
|
|
205
243
|
## Operation Types
|
|
206
244
|
|
|
@@ -219,7 +257,7 @@ createExecutor({
|
|
|
219
257
|
});
|
|
220
258
|
```
|
|
221
259
|
|
|
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,
|
|
260
|
+
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
261
|
|
|
224
262
|
### Job Function Operation
|
|
225
263
|
|
|
@@ -329,9 +367,14 @@ createExecutor({
|
|
|
329
367
|
});
|
|
330
368
|
```
|
|
331
369
|
|
|
370
|
+
`args` must match the workflow's main job input. It is required when that input is required
|
|
371
|
+
and can be omitted when the workflow has no input. Static arguments can be JSON-compatible
|
|
372
|
+
primitives, arrays, or plain objects; top-level `null` is not supported. An argument callback
|
|
373
|
+
must return the same input type.
|
|
374
|
+
|
|
332
375
|
### Authentication for Operations
|
|
333
376
|
|
|
334
|
-
GraphQL and Workflow operations can specify an `
|
|
377
|
+
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
378
|
|
|
336
379
|
```typescript
|
|
337
380
|
import { createExecutor, scheduleTrigger } from "@tailor-platform/sdk";
|
|
@@ -342,7 +385,7 @@ export default createExecutor({
|
|
|
342
385
|
operation: {
|
|
343
386
|
kind: "graphql",
|
|
344
387
|
query: `mutation { cleanupOldRecords { count } }`,
|
|
345
|
-
|
|
388
|
+
invoker: "batch-processor",
|
|
346
389
|
},
|
|
347
390
|
});
|
|
348
391
|
```
|
|
@@ -549,3 +592,45 @@ interface AuthAccessTokenContext {
|
|
|
549
592
|
userId: string; // The user associated with the token
|
|
550
593
|
}
|
|
551
594
|
```
|
|
595
|
+
|
|
596
|
+
### Workflow Execution Event Payload
|
|
597
|
+
|
|
598
|
+
Workflow execution triggers receive execution context:
|
|
599
|
+
|
|
600
|
+
```typescript
|
|
601
|
+
interface WorkflowExecutionContext {
|
|
602
|
+
workspaceId: string; // Workspace identifier
|
|
603
|
+
env: TailorEnv; // Environment variables from tailor.config.ts
|
|
604
|
+
actor: TailorActor | null; // Principal that triggered the workflow
|
|
605
|
+
workflowId: string; // Workflow resource ID
|
|
606
|
+
workflowName: string; // Workflow name
|
|
607
|
+
workflowExecutionId: string; // Workflow execution ID
|
|
608
|
+
event: "started" | "completed" | "retried" | "resumed" | "wait_started" | "wait_resolved";
|
|
609
|
+
rawEvent: string; // Full event type
|
|
610
|
+
}
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
Completed events narrow on `success`. Failed executions include `error`; retried executions include `retryCount` and `retryAfter`.
|
|
614
|
+
|
|
615
|
+
```typescript
|
|
616
|
+
body: async (args) => {
|
|
617
|
+
if (args.event === "completed" && !args.success) {
|
|
618
|
+
console.error(args.error);
|
|
619
|
+
}
|
|
620
|
+
};
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
### Workflow Job Execution Event Payload
|
|
624
|
+
|
|
625
|
+
Workflow job execution triggers include every `WorkflowExecutionContext` field above, plus job-specific fields:
|
|
626
|
+
|
|
627
|
+
```typescript
|
|
628
|
+
interface WorkflowJobExecutionContext {
|
|
629
|
+
workflowJobExecutionId: string; // Job execution ID
|
|
630
|
+
jobFunctionName: string; // Name passed to createWorkflowJob
|
|
631
|
+
event: "started" | "completed" | "wait_started" | "wait_resolved";
|
|
632
|
+
rawEvent: string; // Full event type
|
|
633
|
+
}
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
`wait_started` events include `waitKey`, plus JSON-serialized `waitPayload` when the wait point recorded one; `wait_resolved` events include `waitKey`.
|
|
@@ -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:
|
package/docs/services/idp.md
CHANGED
|
@@ -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.
|
|
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 deployment 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", {
|
|
@@ -266,21 +319,23 @@ defineIdp("my-idp", {
|
|
|
266
319
|
|
|
267
320
|
**Values:** `"en"` or `"ja"`.
|
|
268
321
|
|
|
269
|
-
###
|
|
322
|
+
### publishEvents
|
|
270
323
|
|
|
271
324
|
Publish IdP user lifecycle events (`idp.user.created`, `idp.user.updated`, `idp.user.deleted`). These events are consumed by executors that use `idpUserCreatedTrigger`, `idpUserUpdatedTrigger`, `idpUserDeletedTrigger`, or `idpUserTrigger`.
|
|
272
325
|
|
|
273
326
|
```typescript
|
|
274
327
|
defineIdp("my-idp", {
|
|
275
328
|
clients: ["my-client"],
|
|
276
|
-
|
|
329
|
+
publishEvents: true,
|
|
277
330
|
});
|
|
278
331
|
```
|
|
279
332
|
|
|
280
|
-
**Auto-configuration:** When `
|
|
333
|
+
**Auto-configuration:** When `publishEvents` is omitted, `deploy` sets it from the executors taking part in the same run: `true` while one of their `idpUser` triggers targets this IdP, and `false` once none does. Removing the last such trigger turns publishing back off on the next `deploy`. Targeting is per-IdP: an executor specifies which IdP it subscribes to via the trigger's `idp` option (required in multi-IdP projects). Set the value explicitly to override:
|
|
334
|
+
|
|
335
|
+
- `publishEvents: true`: always publish events.
|
|
336
|
+
- `publishEvents: false`: never publish events. `deploy` rejects this with an error if an `idpUser` trigger taking part in the same run targets this IdP — either remove `publishEvents: false` or remove the matching trigger.
|
|
281
337
|
|
|
282
|
-
- `
|
|
283
|
-
- `publishUserEvents: false`: never publish events. `apply` rejects this with an error if any executor's `idpUser` trigger targets this IdP — either remove `publishUserEvents: false` or remove the matching trigger.
|
|
338
|
+
**Sharing an IdP across configs:** an executor in another config auto-enables publishing the same way, as long as both configs take part in the same `deploy` (`--config a,b`). `deploy` records that dependency, so deploying the owning config alone later asks for confirmation instead of silently turning publishing off — it fails outright in a non-interactive environment. Set `publishEvents: true` on the IdP to keep it on regardless of which configs take part.
|
|
284
339
|
|
|
285
340
|
## Using idp.provider()
|
|
286
341
|
|
|
@@ -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.
|
|
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
|
-
- `
|
|
211
|
+
- `invoker` - The principal performing the operation
|
|
212
212
|
|
|
213
213
|
You can specify validation as:
|
|
214
214
|
|
|
@@ -234,8 +234,8 @@ 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
|
-
- `
|
|
238
|
-
- `invoker` - The principal running this function; equals `
|
|
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
|
|
@@ -305,12 +305,12 @@ createResolver({
|
|
|
305
305
|
**Behavior:**
|
|
306
306
|
|
|
307
307
|
- When `publishEvents: true`, resolver execution events are published
|
|
308
|
-
- When not specified, it
|
|
309
|
-
- When explicitly set to `false` while an executor
|
|
308
|
+
- When not specified, `deploy` sets it from the executors taking part in the same run: `true` while one of them uses this resolver with `resolverExecutedTrigger`, and `false` once none does. Removing the last such trigger turns publishing back off on the next `deploy`
|
|
309
|
+
- When explicitly set to `false` while an executor taking part in the same run uses this resolver, `deploy` fails
|
|
310
310
|
|
|
311
311
|
**Use cases:**
|
|
312
312
|
|
|
313
|
-
1. **Auto-detection (recommended)**: Don't set `publishEvents` -
|
|
313
|
+
1. **Auto-detection (recommended)**: Don't set `publishEvents` - `deploy` enables it while an executor taking part in the same run needs it
|
|
314
314
|
|
|
315
315
|
```typescript
|
|
316
316
|
// publishEvents is automatically enabled because an executor uses this resolver
|
|
@@ -339,7 +339,7 @@ createResolver({
|
|
|
339
339
|
});
|
|
340
340
|
```
|
|
341
341
|
|
|
342
|
-
3. **Explicit disable**: Disable event publishing for a resolver that doesn't need it (error if executor uses it)
|
|
342
|
+
3. **Explicit disable**: Disable event publishing for a resolver that doesn't need it (error if an executor taking part in the same run uses it)
|
|
343
343
|
|
|
344
344
|
```typescript
|
|
345
345
|
createResolver({
|
|
@@ -350,9 +350,65 @@ createResolver({
|
|
|
350
350
|
});
|
|
351
351
|
```
|
|
352
352
|
|
|
353
|
+
**Sharing a resolver across configs:** an executor in another config auto-enables publishing the same way, as long as both configs take part in the same `deploy` (`--config a,b`). `deploy` records that dependency, so deploying the owning config alone later asks for confirmation instead of silently turning publishing off — it fails outright in a non-interactive environment. Set `publishEvents: true` on the resolver to keep it on regardless of which configs take part.
|
|
354
|
+
|
|
355
|
+
## Permissions
|
|
356
|
+
|
|
357
|
+
### Access Requirement (`permission`)
|
|
358
|
+
|
|
359
|
+
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:
|
|
360
|
+
|
|
361
|
+
```typescript
|
|
362
|
+
import { createResolver, t } from "@tailor-platform/sdk";
|
|
363
|
+
|
|
364
|
+
export default createResolver({
|
|
365
|
+
name: "getMyOrders",
|
|
366
|
+
operation: "query",
|
|
367
|
+
permission: [{ conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true }],
|
|
368
|
+
output: t.object({ count: t.int() }),
|
|
369
|
+
body: async (context) => {
|
|
370
|
+
// context.user is guaranteed to be an authenticated caller here
|
|
371
|
+
return { count: 0 };
|
|
372
|
+
},
|
|
373
|
+
});
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
`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:
|
|
377
|
+
|
|
378
|
+
- `{ user: "_loggedIn" }` — whether the caller is authenticated
|
|
379
|
+
- `{ user: "id" }` — the caller's user ID
|
|
380
|
+
- `{ 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
|
|
381
|
+
|
|
382
|
+
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:
|
|
383
|
+
|
|
384
|
+
```typescript
|
|
385
|
+
permission: [
|
|
386
|
+
{ conditions: [[{ user: "isServiceAccount" }, "=", true]], permit: true },
|
|
387
|
+
{ conditions: [[{ user: "role" }, "=", "ADMIN"]], permit: true },
|
|
388
|
+
],
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
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:
|
|
392
|
+
|
|
393
|
+
```typescript
|
|
394
|
+
permission: [
|
|
395
|
+
{ conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true },
|
|
396
|
+
{ conditions: [[{ user: "role" }, "=", "BANNED"]], permit: false },
|
|
397
|
+
],
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
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.
|
|
401
|
+
|
|
402
|
+
Besides a policy array, `permission` also accepts:
|
|
403
|
+
|
|
404
|
+
- `"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.
|
|
405
|
+
- Omitted (default) — unchanged: anonymous callers can still reach the resolver.
|
|
406
|
+
|
|
407
|
+
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.
|
|
408
|
+
|
|
353
409
|
## Authentication
|
|
354
410
|
|
|
355
|
-
Specify an `
|
|
411
|
+
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
412
|
|
|
357
413
|
```typescript
|
|
358
414
|
import { createResolver, t } from "@tailor-platform/sdk";
|
|
@@ -365,10 +421,10 @@ export default createResolver({
|
|
|
365
421
|
// Executes as "batch-processor" machine user
|
|
366
422
|
return { result: "ok" };
|
|
367
423
|
},
|
|
368
|
-
|
|
424
|
+
invoker: "batch-processor",
|
|
369
425
|
});
|
|
370
426
|
```
|
|
371
427
|
|
|
372
428
|
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
429
|
|
|
374
|
-
**Note:** `
|
|
430
|
+
**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.
|
package/docs/services/secret.md
CHANGED
|
@@ -34,11 +34,11 @@ Secrets are key-value pairs stored within a vault. Secret values are encrypted a
|
|
|
34
34
|
|
|
35
35
|
## Managing Secrets
|
|
36
36
|
|
|
37
|
-
There are two ways to manage secrets: declaratively via `defineSecretManager()` in `tailor.config.ts`, or imperatively via the [CLI](#cli-management). Management is scoped per vault — **do not mix both approaches for the same vault**. When a vault is defined in config, the config becomes the source of truth: any secrets in that vault not present in the config will be deleted on `tailor
|
|
37
|
+
There are two ways to manage secrets: declaratively via `defineSecretManager()` in `tailor.config.ts`, or imperatively via the [CLI](#cli-management). Management is scoped per vault — **do not mix both approaches for the same vault**. When a vault is defined in config, the config becomes the source of truth: any secrets in that vault not present in the config will be deleted on `tailor deploy`.
|
|
38
38
|
|
|
39
39
|
### Declarative Configuration
|
|
40
40
|
|
|
41
|
-
Define your secrets in `tailor.config.ts` using `defineSecretManager()`. Each key is a vault name, and its value is a record of secret names to their values. These values are deployed to each vault on `tailor
|
|
41
|
+
Define your secrets in `tailor.config.ts` using `defineSecretManager()`. Each key is a vault name, and its value is a record of secret names to their values. These values are deployed to each vault on `tailor deploy`.
|
|
42
42
|
|
|
43
43
|
Since secret values should not be committed to source control, use environment variables:
|
|
44
44
|
|
|
@@ -87,7 +87,7 @@ When `ignoreNullishValues: true`:
|
|
|
87
87
|
- Skipped secrets are shown in the deploy output for visibility
|
|
88
88
|
- Secrets removed from the config entirely are still deleted (orphan cleanup)
|
|
89
89
|
|
|
90
|
-
This allows you to set secret values once (e.g., via local `tailor
|
|
90
|
+
This allows you to set secret values once (e.g., via local `tailor deploy` or the CLI) and then deploy from CI without needing the actual values in CI environment variables.
|
|
91
91
|
|
|
92
92
|
## Using Secrets
|
|
93
93
|
|
|
@@ -175,25 +175,25 @@ At runtime, these references are replaced with the actual secret values.
|
|
|
175
175
|
|
|
176
176
|
Use the CLI to manage vaults that are **not** defined in `defineSecretManager()`. If you attempt to modify a vault that is managed by the config, the CLI will show a warning and ask for confirmation. Once confirmed, the CLI releases the vault's ownership label so it is no longer managed by config.
|
|
177
177
|
|
|
178
|
-
After ownership is released, the next `tailor
|
|
178
|
+
After ownership is released, the next `tailor deploy` will treat the vault as an unmanaged resource and prompt for confirmation before taking any action on it.
|
|
179
179
|
|
|
180
180
|
### Create a Vault
|
|
181
181
|
|
|
182
182
|
```bash
|
|
183
|
-
tailor
|
|
183
|
+
tailor secret vault create --name api-keys
|
|
184
184
|
```
|
|
185
185
|
|
|
186
186
|
### Add Secrets
|
|
187
187
|
|
|
188
188
|
```bash
|
|
189
189
|
# Create a secret
|
|
190
|
-
tailor
|
|
190
|
+
tailor secret create \
|
|
191
191
|
--vault-name api-keys \
|
|
192
192
|
--name stripe-secret-key \
|
|
193
193
|
--value sk_live_xxxxx
|
|
194
194
|
|
|
195
195
|
# Update a secret
|
|
196
|
-
tailor
|
|
196
|
+
tailor secret update \
|
|
197
197
|
--vault-name api-keys \
|
|
198
198
|
--name stripe-secret-key \
|
|
199
199
|
--value sk_live_yyyyy
|
|
@@ -203,20 +203,20 @@ tailor-sdk secret update \
|
|
|
203
203
|
|
|
204
204
|
```bash
|
|
205
205
|
# List vaults
|
|
206
|
-
tailor
|
|
206
|
+
tailor secret vault list
|
|
207
207
|
|
|
208
208
|
# List secrets in a vault (values are hidden)
|
|
209
|
-
tailor
|
|
209
|
+
tailor secret list --vault-name api-keys
|
|
210
210
|
```
|
|
211
211
|
|
|
212
212
|
### Delete Secrets
|
|
213
213
|
|
|
214
214
|
```bash
|
|
215
215
|
# Delete a secret
|
|
216
|
-
tailor
|
|
216
|
+
tailor secret delete --vault-name api-keys --name old-key --yes
|
|
217
217
|
|
|
218
218
|
# Delete a vault (must be empty)
|
|
219
|
-
tailor
|
|
219
|
+
tailor secret vault delete --name old-vault --yes
|
|
220
220
|
```
|
|
221
221
|
|
|
222
222
|
See [Secret CLI Commands](../cli/secret.md) for full documentation.
|
|
@@ -72,7 +72,7 @@ defineStaticWebSite("my-website", {
|
|
|
72
72
|
});
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
After deploying, use `tailor
|
|
75
|
+
After deploying, use `tailor staticwebsite domain get <domain>` to check domain status and retrieve the CNAME targets required for DNS configuration.
|
|
76
76
|
|
|
77
77
|
A domain can be associated with only one workspace at a time. To set custom domains only in the workspace that owns the domain, see [Multi-Environment Configuration](../multi-environment.md#settings-that-belong-to-a-single-environment).
|
|
78
78
|
|
|
@@ -124,8 +124,14 @@ const website = defineStaticWebSite("my-frontend", {
|
|
|
124
124
|
});
|
|
125
125
|
|
|
126
126
|
const idp = defineIdp("my-idp", {
|
|
127
|
-
authorization: "loggedIn",
|
|
128
127
|
clients: ["default-client"],
|
|
128
|
+
permission: {
|
|
129
|
+
create: [{ conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true }],
|
|
130
|
+
read: [{ conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true }],
|
|
131
|
+
update: [{ conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true }],
|
|
132
|
+
delete: [{ conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true }],
|
|
133
|
+
sendPasswordResetEmail: [{ conditions: [[{ user: "_loggedIn" }, "=", true]], permit: true }],
|
|
134
|
+
},
|
|
129
135
|
});
|
|
130
136
|
|
|
131
137
|
const auth = defineAuth("my-auth", {
|