@tailor-platform/sdk 1.40.1 → 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +23 -0
  3. package/dist/{actor-B2oEmlTc.d.mts → actor-DzCuoMlP.d.mts} +2 -2
  4. package/dist/application-BZRbA1pL.mjs +4 -0
  5. package/dist/{application-EvhIIVg0.mjs → application-DkVNbIuh.mjs} +95 -16
  6. package/dist/application-DkVNbIuh.mjs.map +1 -0
  7. package/dist/brand-Ll48SMXe.mjs.map +1 -1
  8. package/dist/cli/index.mjs +56 -43
  9. package/dist/cli/index.mjs.map +1 -1
  10. package/dist/cli/lib.d.mts +75 -18
  11. package/dist/cli/lib.mjs +9 -9
  12. package/dist/cli/lib.mjs.map +1 -1
  13. package/dist/cli/skills.mjs.map +1 -1
  14. package/dist/{client-CcV6Jjds.mjs → client-DQl5NPG9.mjs} +103 -43
  15. package/dist/{client-CcV6Jjds.mjs.map → client-DQl5NPG9.mjs.map} +1 -1
  16. package/dist/{client-Cn9SqhZT.mjs → client-EI4pMzvm.mjs} +1 -1
  17. package/dist/configure/index.d.mts +5 -5
  18. package/dist/configure/index.mjs +84 -4
  19. package/dist/configure/index.mjs.map +1 -1
  20. package/dist/{crash-report-CUbm1ErM.mjs → crash-report-CSSrblUv.mjs} +4 -4
  21. package/dist/{crash-report-CUbm1ErM.mjs.map → crash-report-CSSrblUv.mjs.map} +1 -1
  22. package/dist/{crash-report-CSYupJ0T.mjs → crash-report-DtkFq9JF.mjs} +1 -1
  23. package/dist/{enum-constants-Dx82rSjf.mjs → enum-constants-C3KSpsYj.mjs} +1 -1
  24. package/dist/{enum-constants-Dx82rSjf.mjs.map → enum-constants-C3KSpsYj.mjs.map} +1 -1
  25. package/dist/{errors-ChWX5ZG8.mjs → errors-_M2TVoWh.mjs} +1 -1
  26. package/dist/{errors-ChWX5ZG8.mjs.map → errors-_M2TVoWh.mjs.map} +1 -1
  27. package/dist/{file-utils-DeWpvq3T.mjs → file-utils-775qWKoo.mjs} +1 -1
  28. package/dist/{file-utils-DeWpvq3T.mjs.map → file-utils-775qWKoo.mjs.map} +1 -1
  29. package/dist/{index-Chvw1Eod.d.mts → index-0Dk-fDWi.d.mts} +2 -2
  30. package/dist/{index-CiNNNpuH.d.mts → index-BEEL1-6Z.d.mts} +2 -2
  31. package/dist/{index-D_ezppY7.d.mts → index-Br4XCvX1.d.mts} +103 -86
  32. package/dist/{index-BtXZdz-F.d.mts → index-DdsUV-aA.d.mts} +2 -2
  33. package/dist/{index-reFAYSX7.d.mts → index-ZZYEd_0R.d.mts} +2 -2
  34. package/dist/interceptor-4UC-KTno.mjs.map +1 -1
  35. package/dist/{job-p6zf8Qpg.mjs → job-BOvKyNdT.mjs} +15 -9
  36. package/dist/job-BOvKyNdT.mjs.map +1 -0
  37. package/dist/kysely/index.mjs.map +1 -1
  38. package/dist/{kysely-type-CwtvQuxh.mjs → kysely-type-BQsYEZoY.mjs} +1 -1
  39. package/dist/kysely-type-BQsYEZoY.mjs.map +1 -0
  40. package/dist/logger-DTNAMYGy.mjs.map +1 -1
  41. package/dist/{package-json-CWp8s9dE.mjs → package-json-CRzw5eUf.mjs} +1 -1
  42. package/dist/{package-json-CWp8s9dE.mjs.map → package-json-CRzw5eUf.mjs.map} +1 -1
  43. package/dist/package-json-DR_mqrCW.mjs +4 -0
  44. package/dist/plugin/builtin/enum-constants/index.d.mts +1 -1
  45. package/dist/plugin/builtin/enum-constants/index.mjs +1 -1
  46. package/dist/plugin/builtin/file-utils/index.d.mts +1 -1
  47. package/dist/plugin/builtin/file-utils/index.mjs +1 -1
  48. package/dist/plugin/builtin/kysely-type/index.d.mts +1 -1
  49. package/dist/plugin/builtin/kysely-type/index.mjs +1 -1
  50. package/dist/plugin/builtin/seed/index.d.mts +1 -1
  51. package/dist/plugin/builtin/seed/index.mjs +1 -1
  52. package/dist/plugin/index.d.mts +2 -2
  53. package/dist/plugin/index.mjs.map +1 -1
  54. package/dist/repl-editor-DjycioU-.mjs.map +1 -1
  55. package/dist/{runtime-B9R1TzLD.mjs → runtime-l7GFD3Xg.mjs} +503 -196
  56. package/dist/runtime-l7GFD3Xg.mjs.map +1 -0
  57. package/dist/{schema-CEcfEyPN.mjs → schema-DBq6hr6h.mjs} +13 -2
  58. package/dist/{schema-CEcfEyPN.mjs.map → schema-DBq6hr6h.mjs.map} +1 -1
  59. package/dist/{seed-CyYPhvNL.mjs → seed-BkVKgsxf.mjs} +1 -1
  60. package/dist/{seed-CyYPhvNL.mjs.map → seed-BkVKgsxf.mjs.map} +1 -1
  61. package/dist/{service-SrG26B9T.mjs → service-CCnx_IFw.mjs} +2 -2
  62. package/dist/{service-SrG26B9T.mjs.map → service-CCnx_IFw.mjs.map} +1 -1
  63. package/dist/{tailor-db-field-CoFKRCYW.d.mts → tailor-db-field-D_z185oq.d.mts} +36 -6
  64. package/dist/{telemetry-BuDto_2q.mjs → telemetry-B6Le9XT-.mjs} +2 -2
  65. package/dist/{telemetry-BuDto_2q.mjs.map → telemetry-B6Le9XT-.mjs.map} +1 -1
  66. package/dist/telemetry-C_WXxIo0.mjs +4 -0
  67. package/dist/types-Duhhsx3R.mjs.map +1 -1
  68. package/dist/utils/test/index.d.mts +36 -3
  69. package/dist/utils/test/index.mjs +78 -9
  70. package/dist/utils/test/index.mjs.map +1 -1
  71. package/dist/{workflow.generated-Btz6srLR.d.mts → workflow.generated-CDCnZNkH.d.mts} +2 -2
  72. package/docs/cli/application.md +130 -5
  73. package/docs/cli/crash-report.md +12 -1
  74. package/docs/cli/executor.md +6 -4
  75. package/docs/cli/function.md +83 -1
  76. package/docs/cli/organization.md +6 -5
  77. package/docs/cli/workspace.md +16 -13
  78. package/docs/cli-reference.md +13 -10
  79. package/docs/services/executor.md +4 -0
  80. package/docs/services/idp.md +16 -0
  81. package/docs/services/resolver.md +4 -2
  82. package/docs/services/workflow.md +117 -3
  83. package/docs/testing.md +95 -7
  84. package/package.json +24 -24
  85. package/dist/application-CE2s_a6w.mjs +0 -4
  86. package/dist/application-EvhIIVg0.mjs.map +0 -1
  87. package/dist/job-p6zf8Qpg.mjs.map +0 -1
  88. package/dist/kysely-type-CwtvQuxh.mjs.map +0 -1
  89. package/dist/package-json-CPR7s5hf.mjs +0 -4
  90. package/dist/runtime-B9R1TzLD.mjs.map +0 -1
  91. package/dist/telemetry-C1hzFaiV.mjs +0 -4
package/docs/testing.md CHANGED
@@ -10,7 +10,7 @@ npm create @tailor-platform/sdk -- --template testing <your-project-name>
10
10
 
11
11
  ## Unit Tests
12
12
 
13
- Unit tests verify resolver logic without requiring deployment.
13
+ Unit tests verify resolver and workflow logic locally without requiring deployment.
14
14
 
15
15
  ### Simple Resolver Testing
16
16
 
@@ -171,13 +171,52 @@ describe("decrementUserAge resolver", () => {
171
171
  - Mock high-level operations instead of low-level SQL queries
172
172
  - **Best for:** Complex business logic with multiple database operations
173
173
 
174
- ## Workflow Tests
174
+ ### Testing Resolvers that Call `.resolve()`
175
175
 
176
- Test workflows locally without deploying to Tailor Platform.
176
+ Use `setupWaitPointMock` to mock `tailor.workflow.resolve` when testing resolvers that resume a suspended workflow execution.
177
177
 
178
- ### Job Unit Tests
178
+ ```typescript
179
+ import { afterEach } from "vitest";
180
+ import { setupWaitPointMock, unauthenticatedTailorUser } from "@tailor-platform/sdk/test";
181
+ import resolver from "./resolvers/resolveApproval";
182
+
183
+ const TailorGlobal = globalThis as { tailor?: { workflow?: Record<string, unknown> } };
184
+
185
+ describe("resolveApproval resolver", () => {
186
+ afterEach(() => {
187
+ delete TailorGlobal.tailor;
188
+ });
189
+
190
+ test("resolves approval", async () => {
191
+ const { resolveCalls } = setupWaitPointMock({
192
+ onResolve: (_execId, _key, callback) => {
193
+ const result = callback({ message: "Please approve", orderId: "order-1" });
194
+ expect(result).toEqual({ approved: true });
195
+ },
196
+ });
197
+
198
+ const result = await resolver.body({
199
+ input: { executionId: "exec-1", approved: true },
200
+ user: unauthenticatedTailorUser,
201
+ env: {},
202
+ });
179
203
 
180
- Test individual job logic by calling `.body()` directly:
204
+ expect(result).toEqual({ resolved: true });
205
+ expect(resolveCalls).toHaveLength(1);
206
+ expect(resolveCalls[0]).toEqual({ executionId: "exec-1", key: "approval" });
207
+ });
208
+ });
209
+ ```
210
+
211
+ **Key points:**
212
+
213
+ - `onResolve` lets you verify the callback behavior in resolvers that call `.resolve()`
214
+ - Clean up mocks in `afterEach` by deleting `TailorGlobal.tailor`
215
+ - **Best for:** Resolvers that resume suspended workflow executions
216
+
217
+ ### Workflow Job Unit Tests
218
+
219
+ Test individual workflow job logic locally without deploying. Call `.body()` directly:
181
220
 
182
221
  ```typescript
183
222
  import workflow, { addNumbers, calculate } from "./workflows/calculation";
@@ -218,9 +257,9 @@ describe("workflow with dependencies", () => {
218
257
 
219
258
  **Note:** To execute dependent jobs without mocking, and they require `env`, use `vi.stubEnv(WORKFLOW_TEST_ENV_KEY, ...)` and call `.trigger()` directly as shown in the integration test section below.
220
259
 
221
- ### Integration Tests with `.trigger()`
260
+ ### Workflow Integration Tests with `.trigger()`
222
261
 
223
- Test the full workflow execution using `workflow.mainJob.trigger()`:
262
+ Test the full workflow execution locally using `workflow.mainJob.trigger()`:
224
263
 
225
264
  ```typescript
226
265
  import { WORKFLOW_TEST_ENV_KEY } from "@tailor-platform/sdk/test";
@@ -252,6 +291,55 @@ describe("workflow integration", () => {
252
291
  - Use `workflow.mainJob.trigger()` to execute the full workflow chain and get the result
253
292
  - **Best for:** Testing workflow orchestration and job dependencies
254
293
 
294
+ ### Testing Jobs with Wait Points
295
+
296
+ Use `setupWaitPointMock` to mock `tailor.workflow.wait` when testing jobs that suspend on wait points:
297
+
298
+ ```typescript
299
+ import { afterEach, vi } from "vitest";
300
+ import { setupWaitPointMock } from "@tailor-platform/sdk/test";
301
+ import { processWithApproval } from "./workflows/approval";
302
+
303
+ const TailorGlobal = globalThis as { tailor?: { workflow?: Record<string, unknown> } };
304
+
305
+ describe("approval workflow", () => {
306
+ afterEach(() => {
307
+ delete TailorGlobal.tailor;
308
+ });
309
+
310
+ test("approved flow returns approved status", async () => {
311
+ const { waitCalls } = setupWaitPointMock({
312
+ onWait: (_key, _payload) => ({ approved: true }),
313
+ });
314
+
315
+ const result = await processWithApproval.body({ orderId: "order-1" }, { env: {} });
316
+
317
+ expect(result).toEqual({ orderId: "order-1", status: "approved" });
318
+ expect(waitCalls).toHaveLength(1);
319
+ expect(waitCalls[0]).toEqual({
320
+ key: "approval",
321
+ payload: { message: "Please approve order order-1", orderId: "order-1" },
322
+ });
323
+ });
324
+
325
+ test("rejected flow returns rejected status", async () => {
326
+ setupWaitPointMock({
327
+ onWait: () => ({ approved: false }),
328
+ });
329
+
330
+ const result = await processWithApproval.body({ orderId: "order-2" }, { env: {} });
331
+
332
+ expect(result).toEqual({ orderId: "order-2", status: "rejected" });
333
+ });
334
+ });
335
+ ```
336
+
337
+ **Key points:**
338
+
339
+ - `onWait` controls what `.wait()` returns — use it to test different branches (approved/rejected)
340
+ - Clean up mocks in `afterEach` by deleting `TailorGlobal.tailor`
341
+ - **Best for:** Jobs that suspend on wait points for human-in-the-loop approval
342
+
255
343
  ## End-to-End (E2E) Tests
256
344
 
257
345
  E2E tests verify your application works correctly when deployed to Tailor Platform. They test the full stack including GraphQL API, database operations, and authentication.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tailor-platform/sdk",
3
- "version": "1.40.1",
3
+ "version": "1.44.0",
4
4
  "description": "Tailor Platform SDK - The SDK to work with Tailor Platform",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -78,11 +78,11 @@
78
78
  "dependencies": {
79
79
  "@0no-co/graphql.web": "1.2.0",
80
80
  "@badgateway/oauth2-client": "3.3.1",
81
- "@bufbuild/protobuf": "2.11.0",
81
+ "@bufbuild/protobuf": "2.12.0",
82
82
  "@connectrpc/connect": "2.1.1",
83
83
  "@connectrpc/connect-node": "2.1.1",
84
- "@inquirer/core": "11.1.8",
85
- "@inquirer/prompts": "8.4.1",
84
+ "@inquirer/core": "11.1.9",
85
+ "@inquirer/prompts": "8.4.2",
86
86
  "@jridgewell/trace-mapping": "0.3.31",
87
87
  "@liam-hq/cli": "0.7.24",
88
88
  "@napi-rs/keyring": "1.2.0",
@@ -91,18 +91,18 @@
91
91
  "@opentelemetry/resources": "2.7.0",
92
92
  "@opentelemetry/sdk-trace-node": "2.7.0",
93
93
  "@opentelemetry/semantic-conventions": "1.40.0",
94
- "@oxc-project/types": "0.126.0",
94
+ "@oxc-project/types": "0.127.0",
95
95
  "@standard-schema/spec": "1.1.0",
96
96
  "@tailor-platform/function-kysely-tailordb": "0.1.3",
97
- "@tailor-platform/function-types": "0.8.4",
98
- "@toiroakr/lines-db": "0.9.1",
99
- "@toiroakr/read-multiline": "0.3.1",
97
+ "@tailor-platform/function-types": "0.8.5",
98
+ "@toiroakr/lines-db": "0.9.2",
99
+ "@toiroakr/read-multiline": "0.3.2",
100
100
  "@urql/core": "6.0.1",
101
101
  "chalk": "5.6.2",
102
102
  "chokidar": "5.0.0",
103
103
  "confbox": "0.2.4",
104
104
  "date-fns": "4.1.0",
105
- "es-toolkit": "1.45.1",
105
+ "es-toolkit": "1.46.0",
106
106
  "find-up-simple": "1.0.1",
107
107
  "globals": "17.5.0",
108
108
  "graphql": "16.13.2",
@@ -113,21 +113,21 @@
113
113
  "multiline-ts": "4.0.1",
114
114
  "open": "11.0.0",
115
115
  "ora": "9.3.0",
116
- "oxc-parser": "0.126.0",
116
+ "oxc-parser": "0.127.0",
117
117
  "p-limit": "7.3.0",
118
118
  "pathe": "2.0.3",
119
119
  "pgsql-ast-parser": "12.0.2",
120
120
  "pkg-types": "2.3.0",
121
- "politty": "0.4.14",
122
- "rolldown": "1.0.0-rc.16",
121
+ "politty": "0.4.15",
122
+ "rolldown": "1.0.0-rc.17",
123
123
  "semver": "7.7.4",
124
124
  "serve": "14.2.6",
125
125
  "sql-highlight": "6.1.0",
126
- "std-env": "4.0.0",
126
+ "std-env": "4.1.0",
127
127
  "table": "6.9.0",
128
128
  "ts-cron-validator": "1.1.5",
129
129
  "tsx": "4.21.0",
130
- "type-fest": "5.5.0",
130
+ "type-fest": "5.6.0",
131
131
  "xdg-basedir": "5.1.0",
132
132
  "zod": "4.3.6"
133
133
  },
@@ -138,19 +138,19 @@
138
138
  "@types/mime-types": "3.0.1",
139
139
  "@types/node": "24.12.2",
140
140
  "@types/semver": "7.7.1",
141
- "@typescript/native-preview": "7.0.0-dev.20260417.1",
142
- "@vitest/coverage-v8": "4.1.4",
143
- "eslint": "10.2.0",
141
+ "@typescript/native-preview": "7.0.0-dev.20260424.1",
142
+ "@vitest/coverage-v8": "4.1.5",
143
+ "eslint": "10.2.1",
144
144
  "eslint-plugin-jsdoc": "62.9.0",
145
- "eslint-plugin-oxlint": "1.60.0",
146
- "oxfmt": "0.45.0",
147
- "oxlint": "1.60.0",
148
- "oxlint-tsgolint": "0.20.0",
145
+ "eslint-plugin-oxlint": "1.61.0",
146
+ "oxfmt": "0.46.0",
147
+ "oxlint": "1.61.0",
148
+ "oxlint-tsgolint": "0.21.1",
149
149
  "sonda": "0.11.1",
150
- "tsdown": "0.21.9",
150
+ "tsdown": "0.21.10",
151
151
  "typescript": "5.9.3",
152
- "typescript-eslint": "8.58.2",
153
- "vitest": "4.1.4",
152
+ "typescript-eslint": "8.59.0",
153
+ "vitest": "4.1.5",
154
154
  "zinfer": "0.1.8"
155
155
  },
156
156
  "scripts": {
@@ -1,4 +0,0 @@
1
-
2
- import { n as generatePluginFilesIfNeeded, r as loadApplication, t as defineApplication } from "./application-EvhIIVg0.mjs";
3
-
4
- export { defineApplication };