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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +181 -0
  2. package/dist/index.js +1 -1
  3. package/package.json +10 -9
  4. package/templates/executor/.oxlintrc.json +9 -1
  5. package/templates/executor/__dot__gitignore +1 -1
  6. package/templates/executor/package.json +11 -9
  7. package/templates/executor/src/db/auditLog.ts +1 -1
  8. package/templates/executor/src/db/notification.ts +1 -1
  9. package/templates/executor/src/db/user.ts +1 -1
  10. package/templates/executor/src/generated/db.ts +3 -3
  11. package/templates/executor/tailor.d.ts +4 -2
  12. package/templates/generators/.oxlintrc.json +9 -1
  13. package/templates/generators/README.md +1 -1
  14. package/templates/generators/__dot__gitignore +1 -1
  15. package/templates/generators/package.json +14 -9
  16. package/templates/generators/src/db/category.ts +1 -1
  17. package/templates/generators/src/db/order.ts +1 -1
  18. package/templates/generators/src/db/product.ts +1 -1
  19. package/templates/generators/src/db/user.ts +1 -1
  20. package/templates/generators/src/generated/db.ts +3 -3
  21. package/templates/generators/src/generated/files.ts +5 -5
  22. package/templates/generators/src/resolver/getProduct.test.ts +31 -27
  23. package/templates/generators/src/seed/data/Order.schema.ts +2 -2
  24. package/templates/generators/src/seed/data/Product.schema.ts +2 -2
  25. package/templates/generators/src/seed/data/User.schema.ts +2 -2
  26. package/templates/generators/tailor.d.ts +4 -2
  27. package/templates/hello-world/.oxlintrc.json +9 -1
  28. package/templates/hello-world/README.md +6 -6
  29. package/templates/hello-world/__dot__gitignore +1 -1
  30. package/templates/hello-world/package.json +10 -8
  31. package/templates/hello-world/src/db/user.ts +1 -1
  32. package/templates/hello-world/src/generated/kysely-tailordb.ts +1 -1
  33. package/templates/hello-world/tailor.d.ts +4 -2
  34. package/templates/inventory-management/.oxlintrc.json +9 -1
  35. package/templates/inventory-management/README.md +8 -8
  36. package/templates/inventory-management/__dot__gitignore +1 -1
  37. package/templates/inventory-management/package.json +10 -8
  38. package/templates/inventory-management/src/db/category.ts +1 -1
  39. package/templates/inventory-management/src/db/contact.ts +1 -1
  40. package/templates/inventory-management/src/db/inventory.ts +2 -2
  41. package/templates/inventory-management/src/db/notification.ts +1 -1
  42. package/templates/inventory-management/src/db/order.ts +1 -1
  43. package/templates/inventory-management/src/db/orderItem.ts +12 -8
  44. package/templates/inventory-management/src/db/product.ts +1 -1
  45. package/templates/inventory-management/src/db/user.ts +1 -1
  46. package/templates/inventory-management/src/executor/checkInventory.ts +0 -2
  47. package/templates/inventory-management/src/generated/kysely-tailordb.ts +9 -9
  48. package/templates/inventory-management/src/resolver/registerOrder.ts +4 -2
  49. package/templates/inventory-management/tailor.d.ts +4 -2
  50. package/templates/multi-application/.oxlintrc.json +9 -1
  51. package/templates/multi-application/README.md +2 -2
  52. package/templates/multi-application/__dot__gitignore +1 -1
  53. package/templates/multi-application/apps/admin/db/adminNote.ts +2 -2
  54. package/templates/multi-application/apps/admin/tailor.config.ts +1 -1
  55. package/templates/multi-application/apps/user/db/user.ts +1 -1
  56. package/templates/multi-application/apps/user/tailor.config.ts +1 -1
  57. package/templates/multi-application/package.json +10 -8
  58. package/templates/resolver/.oxlintrc.json +9 -1
  59. package/templates/resolver/README.md +2 -2
  60. package/templates/resolver/__dot__gitignore +1 -1
  61. package/templates/resolver/package.json +11 -9
  62. package/templates/resolver/src/db/user.ts +1 -1
  63. package/templates/resolver/src/generated/db.ts +1 -1
  64. package/templates/resolver/src/resolver/add.test.ts +4 -3
  65. package/templates/resolver/src/resolver/incrementUserAge.test.ts +6 -5
  66. package/templates/resolver/src/resolver/showEnv.test.ts +2 -2
  67. package/templates/resolver/src/resolver/showUserInfo.test.ts +12 -9
  68. package/templates/resolver/src/resolver/showUserInfo.ts +3 -3
  69. package/templates/resolver/src/resolver/upsertUsers.test.ts +2 -2
  70. package/templates/resolver/tailor.d.ts +4 -2
  71. package/templates/static-web-site/.oxlintrc.json +9 -1
  72. package/templates/static-web-site/__dot__gitignore +1 -1
  73. package/templates/static-web-site/package.json +10 -8
  74. package/templates/static-web-site/src/db/user.ts +1 -1
  75. package/templates/static-web-site/tailor.d.ts +4 -2
  76. package/templates/tailordb/.oxlintrc.json +9 -1
  77. package/templates/tailordb/README.md +1 -1
  78. package/templates/tailordb/__dot__gitignore +1 -1
  79. package/templates/tailordb/package.json +11 -9
  80. package/templates/tailordb/src/db/category.ts +1 -1
  81. package/templates/tailordb/src/db/comment.ts +4 -2
  82. package/templates/tailordb/src/db/task.ts +19 -27
  83. package/templates/tailordb/src/db/user.ts +1 -1
  84. package/templates/tailordb/src/generated/db.ts +3 -3
  85. package/templates/tailordb/tailor.d.ts +4 -2
  86. package/templates/workflow/.oxlintrc.json +9 -1
  87. package/templates/workflow/README.md +3 -3
  88. package/templates/workflow/__dot__gitignore +1 -1
  89. package/templates/workflow/e2e/globalSetup.ts +1 -1
  90. package/templates/workflow/e2e/workflow.test.ts +1 -2
  91. package/templates/workflow/package.json +12 -10
  92. package/templates/workflow/src/db/order.ts +1 -1
  93. package/templates/workflow/src/db/user.ts +1 -1
  94. package/templates/workflow/src/generated/db.ts +2 -2
  95. package/templates/workflow/src/resolver/resolveApproval.test.ts +18 -13
  96. package/templates/workflow/src/workflow/approval.test.ts +16 -11
  97. package/templates/workflow/src/workflow/approval.ts +2 -2
  98. package/templates/workflow/src/workflow/order-fulfillment.test.ts +34 -21
  99. package/templates/workflow/src/workflow/order-fulfillment.ts +4 -4
  100. package/templates/workflow/tailor.d.ts +4 -2
  101. package/templates/workflow/vitest.config.ts +1 -0
  102. package/templates/generators/src/seed/exec.mjs +0 -485
@@ -55,7 +55,7 @@ export async function setup(project: TestProject): Promise<void> {
55
55
  process.env.TAILOR_PLATFORM_WORKSPACE_ID = createdWorkspace.id;
56
56
  // This pipeline deploys a fresh app into a per-run workspace, so let the
57
57
  // SDK inject a missing app id even in CI (normally a hard error there).
58
- process.env.TAILOR_PLATFORM_SDK_ALLOW_CI_ID_INJECTION = "true";
58
+ process.env.TAILOR_CI_ALLOW_ID_INJECTION = "true";
59
59
  await deployApplication();
60
60
  }
61
61
 
@@ -1,7 +1,6 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { describe, expect, test } from "vitest";
3
3
  import { startWorkflow } from "@tailor-platform/sdk/cli";
4
- import config from "../tailor.config";
5
4
  import userProfileSyncWorkflow from "../src/workflow/sync-profile";
6
5
 
7
6
  describe("workflow", () => {
@@ -11,7 +10,7 @@ describe("workflow", () => {
11
10
 
12
11
  const { executionId, wait } = await startWorkflow({
13
12
  workflow: userProfileSyncWorkflow,
14
- authInvoker: config.auth.invoker("admin"),
13
+ invoker: "admin",
15
14
  arg: {
16
15
  name: "workflow-test-user",
17
16
  email: testEmail,
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "workflow",
3
+ "version": "0.0.0",
3
4
  "private": true,
4
5
  "type": "module",
5
6
  "scripts": {
6
- "generate": "tailor-sdk generate",
7
- "deploy": "tailor-sdk deploy",
7
+ "generate": "tailor generate",
8
+ "deploy": "tailor deploy",
8
9
  "test": "vitest --project unit",
9
10
  "test:unit": "vitest --project unit",
10
11
  "test:e2e": "vitest --project e2e",
@@ -15,14 +16,15 @@
15
16
  "typecheck": "tsc --noEmit"
16
17
  },
17
18
  "devDependencies": {
18
- "@tailor-platform/sdk": "2.0.0-next.0",
19
- "@types/node": "24.13.1",
20
- "graphql": "16.14.1",
19
+ "@tailor-platform/eslint-plugin-sdk": "0.2.0-next.0",
20
+ "@tailor-platform/sdk": "2.0.0-next.10",
21
+ "@types/node": "24.13.3",
22
+ "graphql": "17.0.2",
21
23
  "graphql-request": "7.4.0",
22
- "oxfmt": "0.54.0",
23
- "oxlint": "1.69.0",
24
- "oxlint-tsgolint": "0.23.0",
25
- "typescript": "5.9.3",
26
- "vitest": "4.1.8"
24
+ "oxfmt": "0.59.0",
25
+ "oxlint": "1.74.0",
26
+ "oxlint-tsgolint": "0.25.0",
27
+ "typescript": "6.0.3",
28
+ "vitest": "4.1.10"
27
29
  }
28
30
  }
@@ -1,7 +1,7 @@
1
1
  import { db } from "@tailor-platform/sdk";
2
2
 
3
3
  export const order = db
4
- .type("Order", {
4
+ .table("Order", {
5
5
  customerName: db.string(),
6
6
  amount: db.int(),
7
7
  status: db.enum(["PENDING", "PROCESSING", "COMPLETED", "FAILED"]),
@@ -1,7 +1,7 @@
1
1
  import { db } from "@tailor-platform/sdk";
2
2
 
3
3
  export const user = db
4
- .type("User", {
4
+ .table("User", {
5
5
  name: db.string(),
6
6
  email: db.string().unique(),
7
7
  age: db.int(),
@@ -19,7 +19,7 @@ export interface Namespace {
19
19
  amount: number;
20
20
  status: "PENDING" | "PROCESSING" | "COMPLETED" | "FAILED";
21
21
  createdAt: Generated<Timestamp>;
22
- updatedAt: Timestamp | null;
22
+ updatedAt: Generated<Timestamp>;
23
23
  }
24
24
 
25
25
  User: {
@@ -28,7 +28,7 @@ export interface Namespace {
28
28
  email: string;
29
29
  age: number;
30
30
  createdAt: Generated<Timestamp>;
31
- updatedAt: Timestamp | null;
31
+ updatedAt: Generated<Timestamp>;
32
32
  }
33
33
  }
34
34
  }
@@ -1,42 +1,47 @@
1
1
  import { describe, expect, test } from "vitest";
2
2
  import { mockWorkflow } from "@tailor-platform/sdk/vitest";
3
- import { unauthenticatedTailorUser } from "@tailor-platform/sdk/test";
3
+ import { approval } from "../workflow/approval";
4
4
  import resolver from "./resolveApproval";
5
5
 
6
6
  describe("resolveApproval resolver", () => {
7
7
  test("resolves approval with approved=true", async () => {
8
8
  using wf = mockWorkflow();
9
- wf.setResolveHandler((_executionId, _key, callback) => {
10
- const callbackResult = callback({
11
- message: "Please approve order order-1",
12
- orderId: "order-1",
13
- });
14
- expect(callbackResult).toEqual({ approved: true });
9
+ const approvalMock = wf.waitPoint(approval);
10
+ const payload = {
11
+ message: "Please approve order order-1",
12
+ orderId: "order-1",
13
+ };
14
+ approvalMock.resolve.mockImplementation(async (_executionId, callback) => {
15
+ expect(await callback(payload)).toEqual({ approved: true });
15
16
  });
16
17
 
17
18
  const result = await resolver.body({
18
19
  input: { executionId: "exec-1", approved: true },
19
- user: unauthenticatedTailorUser,
20
+ caller: null,
21
+ invoker: null,
20
22
  env: {},
21
23
  });
22
24
 
23
25
  expect(result).toEqual({ resolved: true });
24
- expect(wf.resolveCalls).toEqual([{ executionId: "exec-1", key: "approval" }]);
26
+ expect(approvalMock.resolve).toHaveBeenCalledWith("exec-1", expect.any(Function));
25
27
  });
26
28
 
27
29
  test("resolves approval with approved=false", async () => {
28
30
  using wf = mockWorkflow();
29
- wf.setResolveHandler((_executionId, _key, callback) => {
30
- const callbackResult = callback({ message: "Please approve", orderId: "order-2" });
31
- expect(callbackResult).toEqual({ approved: false });
31
+ const approvalMock = wf.waitPoint(approval);
32
+ const payload = { message: "Please approve", orderId: "order-2" };
33
+ approvalMock.resolve.mockImplementation(async (_executionId, callback) => {
34
+ expect(await callback(payload)).toEqual({ approved: false });
32
35
  });
33
36
 
34
37
  const result = await resolver.body({
35
38
  input: { executionId: "exec-2", approved: false },
36
- user: unauthenticatedTailorUser,
39
+ caller: null,
40
+ invoker: null,
37
41
  env: {},
38
42
  });
39
43
 
40
44
  expect(result).toEqual({ resolved: true });
45
+ expect(approvalMock.resolve).toHaveBeenCalledWith("exec-2", expect.any(Function));
41
46
  });
42
47
  });
@@ -1,28 +1,33 @@
1
1
  import { describe, expect, test } from "vitest";
2
2
  import { mockWorkflow } from "@tailor-platform/sdk/vitest";
3
- import workflow, { processWithApproval } from "./approval";
3
+ import workflow, { approval, processWithApproval } from "./approval";
4
4
 
5
5
  describe("approval workflow", () => {
6
6
  test("approved flow returns approved status", async () => {
7
7
  using wf = mockWorkflow();
8
- wf.setWaitHandler((_key, _payload) => ({ approved: true }));
8
+ const approvalMock = wf.waitPoint(approval);
9
+ approvalMock.wait.mockResolvedValue({ approved: true });
9
10
 
10
- const result = await processWithApproval.body({ orderId: "order-1" }, { env: {} });
11
+ const result = await processWithApproval.body(
12
+ { orderId: "order-1" },
13
+ { env: {}, invoker: null },
14
+ );
11
15
 
12
16
  expect(result).toEqual({ orderId: "order-1", status: "approved" });
13
- expect(wf.waitCalls).toEqual([
14
- {
15
- key: "approval",
16
- payload: { message: "Please approve order order-1", orderId: "order-1" },
17
- },
18
- ]);
17
+ expect(approvalMock.wait).toHaveBeenCalledWith({
18
+ message: "Please approve order order-1",
19
+ orderId: "order-1",
20
+ });
19
21
  });
20
22
 
21
23
  test("rejected flow returns rejected status", async () => {
22
24
  using wf = mockWorkflow();
23
- wf.setWaitHandler({ approved: false });
25
+ wf.waitPoint(approval).wait.mockResolvedValue({ approved: false });
24
26
 
25
- const result = await processWithApproval.body({ orderId: "order-2" }, { env: {} });
27
+ const result = await processWithApproval.body(
28
+ { orderId: "order-2" },
29
+ { env: {}, invoker: null },
30
+ );
26
31
 
27
32
  expect(result).toEqual({ orderId: "order-2", status: "rejected" });
28
33
  });
@@ -1,6 +1,6 @@
1
- import { createWorkflow, createWorkflowJob, defineWaitPoints } from "@tailor-platform/sdk";
1
+ import { createWaitPoints, createWorkflow, createWorkflowJob } from "@tailor-platform/sdk";
2
2
 
3
- export const { approval } = defineWaitPoints((define) => ({
3
+ export const { approval } = createWaitPoints((define) => ({
4
4
  /** Approval for order processing */
5
5
  approval: define<{ message: string; orderId: string }, { approved: boolean }>(),
6
6
  }));
@@ -1,3 +1,4 @@
1
+ import { runWorkflowLocally } from "@tailor-platform/sdk/vitest";
1
2
  import { describe, expect, test, vi } from "vitest";
2
3
  import workflow, {
3
4
  fulfillOrder,
@@ -9,18 +10,24 @@ import workflow, {
9
10
  describe("order fulfillment workflow", () => {
10
11
  describe("individual job tests with .body()", () => {
11
12
  test("validateOrder accepts valid order", () => {
12
- const result = validateOrder.body({ orderId: "order-1", amount: 100 }, { env: {} });
13
+ const result = validateOrder.body(
14
+ { orderId: "order-1", amount: 100 },
15
+ { env: {}, invoker: null },
16
+ );
13
17
  expect(result).toEqual({ valid: true, orderId: "order-1" });
14
18
  });
15
19
 
16
20
  test("validateOrder rejects zero amount", () => {
17
- expect(() => validateOrder.body({ orderId: "order-1", amount: 0 }, { env: {} })).toThrow(
18
- "Order amount must be positive",
19
- );
21
+ expect(() =>
22
+ validateOrder.body({ orderId: "order-1", amount: 0 }, { env: {}, invoker: null }),
23
+ ).toThrow("Order amount must be positive");
20
24
  });
21
25
 
22
26
  test("processPayment returns transaction", () => {
23
- const result = processPayment.body({ orderId: "order-1", amount: 100 }, { env: {} });
27
+ const result = processPayment.body(
28
+ { orderId: "order-1", amount: 100 },
29
+ { env: {}, invoker: null },
30
+ );
24
31
  expect(result).toEqual({
25
32
  transactionId: "txn-order-1",
26
33
  amount: 100,
@@ -31,7 +38,7 @@ describe("order fulfillment workflow", () => {
31
38
  test("sendConfirmation returns confirmation", () => {
32
39
  const result = sendConfirmation.body(
33
40
  { orderId: "order-1", transactionId: "txn-1" },
34
- { env: {} },
41
+ { env: {}, invoker: null },
35
42
  );
36
43
  expect(result).toEqual({
37
44
  orderId: "order-1",
@@ -41,34 +48,37 @@ describe("order fulfillment workflow", () => {
41
48
  });
42
49
  });
43
50
 
44
- describe("orchestration tests with mocked triggers", () => {
51
+ describe("orchestration tests with mocked starts", () => {
45
52
  test("fulfillOrder chains all jobs", async () => {
46
- using _validateSpy = vi.spyOn(validateOrder, "trigger").mockResolvedValue({
53
+ using _validateSpy = vi.spyOn(validateOrder, "start").mockReturnValue({
47
54
  valid: true,
48
55
  orderId: "order-1",
49
56
  });
50
- using _paymentSpy = vi.spyOn(processPayment, "trigger").mockResolvedValue({
57
+ using _paymentSpy = vi.spyOn(processPayment, "start").mockReturnValue({
51
58
  transactionId: "txn-order-1",
52
59
  amount: 100,
53
60
  status: "completed" as const,
54
61
  });
55
- using _confirmSpy = vi.spyOn(sendConfirmation, "trigger").mockResolvedValue({
62
+ using _confirmSpy = vi.spyOn(sendConfirmation, "start").mockReturnValue({
56
63
  orderId: "order-1",
57
64
  transactionId: "txn-order-1",
58
65
  confirmed: true,
59
66
  });
60
67
 
61
- const result = await fulfillOrder.body({ orderId: "order-1", amount: 100 }, { env: {} });
68
+ const result = await fulfillOrder.body(
69
+ { orderId: "order-1", amount: 100 },
70
+ { env: {}, invoker: null },
71
+ );
62
72
 
63
- expect(validateOrder.trigger).toHaveBeenCalledWith({
73
+ expect(validateOrder.start).toHaveBeenCalledWith({
64
74
  orderId: "order-1",
65
75
  amount: 100,
66
76
  });
67
- expect(processPayment.trigger).toHaveBeenCalledWith({
77
+ expect(processPayment.start).toHaveBeenCalledWith({
68
78
  orderId: "order-1",
69
79
  amount: 100,
70
80
  });
71
- expect(sendConfirmation.trigger).toHaveBeenCalledWith({
81
+ expect(sendConfirmation.start).toHaveBeenCalledWith({
72
82
  orderId: "order-1",
73
83
  transactionId: "txn-order-1",
74
84
  });
@@ -81,22 +91,25 @@ describe("order fulfillment workflow", () => {
81
91
  });
82
92
 
83
93
  test("workflow.mainJob.body() chains all jobs", async () => {
84
- using _validateSpy = vi.spyOn(validateOrder, "trigger").mockResolvedValue({
94
+ using _validateSpy = vi.spyOn(validateOrder, "start").mockReturnValue({
85
95
  valid: true,
86
96
  orderId: "order-2",
87
97
  });
88
- using _paymentSpy = vi.spyOn(processPayment, "trigger").mockResolvedValue({
98
+ using _paymentSpy = vi.spyOn(processPayment, "start").mockReturnValue({
89
99
  transactionId: "txn-order-2",
90
100
  amount: 200,
91
101
  status: "completed" as const,
92
102
  });
93
- using _confirmSpy = vi.spyOn(sendConfirmation, "trigger").mockResolvedValue({
103
+ using _confirmSpy = vi.spyOn(sendConfirmation, "start").mockReturnValue({
94
104
  orderId: "order-2",
95
105
  transactionId: "txn-order-2",
96
106
  confirmed: true,
97
107
  });
98
108
 
99
- const result = await workflow.mainJob.body({ orderId: "order-2", amount: 200 }, { env: {} });
109
+ const result = await workflow.mainJob.body(
110
+ { orderId: "order-2", amount: 200 },
111
+ { env: {}, invoker: null },
112
+ );
100
113
 
101
114
  expect(result).toEqual({
102
115
  orderId: "order-2",
@@ -107,9 +120,9 @@ describe("order fulfillment workflow", () => {
107
120
  });
108
121
  });
109
122
 
110
- describe("integration tests with .trigger()", () => {
111
- test("workflow.mainJob.trigger() executes all jobs", async () => {
112
- const result = await workflow.mainJob.trigger({
123
+ describe("integration tests with runWorkflowLocally()", () => {
124
+ test("runWorkflowLocally() executes all jobs", async () => {
125
+ const result = await runWorkflowLocally(workflow, {
113
126
  orderId: "order-3",
114
127
  amount: 300,
115
128
  });
@@ -34,8 +34,8 @@ export const sendConfirmation = createWorkflowJob({
34
34
 
35
35
  export const fulfillOrder = createWorkflowJob({
36
36
  name: "fulfill-order",
37
- body: async (input: { orderId: string; amount: number }) => {
38
- const validation = await validateOrder.trigger({
37
+ body: (input: { orderId: string; amount: number }) => {
38
+ const validation = validateOrder.start({
39
39
  orderId: input.orderId,
40
40
  amount: input.amount,
41
41
  });
@@ -44,12 +44,12 @@ export const fulfillOrder = createWorkflowJob({
44
44
  throw new Error("Order validation failed");
45
45
  }
46
46
 
47
- const payment = await processPayment.trigger({
47
+ const payment = processPayment.start({
48
48
  orderId: input.orderId,
49
49
  amount: input.amount,
50
50
  });
51
51
 
52
- const confirmation = await sendConfirmation.trigger({
52
+ const confirmation = sendConfirmation.start({
53
53
  orderId: input.orderId,
54
54
  transactionId: payment.transactionId,
55
55
  });
@@ -1,9 +1,9 @@
1
1
  // This file is auto-generated by @tailor-platform/sdk
2
2
  // Do not edit this file manually
3
- // Regenerated automatically when running 'tailor-sdk deploy' or 'tailor-sdk generate'
3
+ // Regenerated automatically when running 'tailor deploy' or 'tailor generate'
4
4
 
5
5
  declare module "@tailor-platform/sdk" {
6
- interface AttributeMap {
6
+ interface Attributes {
7
7
  role: string;
8
8
  }
9
9
  interface AttributeList {
@@ -14,6 +14,8 @@ declare module "@tailor-platform/sdk" {
14
14
  admin: true;
15
15
  }
16
16
  interface IdpNameRegistry {}
17
+ interface ConnectionNameRegistry {}
18
+ interface AIGatewayNameRegistry {}
17
19
  }
18
20
 
19
21
  export {};
@@ -20,6 +20,7 @@ export default defineConfig({
20
20
  name: { label: "e2e", color: "green" },
21
21
  include: ["e2e/**/*.test.ts"],
22
22
  globalSetup: "e2e/globalSetup.ts",
23
+ testTimeout: 60_000,
23
24
  },
24
25
  },
25
26
  ],