@taskforcehq/taskforce 0.3.303 → 0.3.305
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/README.md +140 -247
- package/dist/Taskforce.module.css +102 -5
- package/dist/TaskforceCore.js +635 -238
- package/dist/TaskforceCore.test.js +2243 -495
- package/dist/annotatedAttachments/service.d.ts +1 -1
- package/dist/annotatedAttachments/types.d.ts +1 -1
- package/dist/compat/workspaceSyncCompat.js +6 -0
- package/dist/components/features/AgentsModule.js +1 -1
- package/dist/components/features/AgentsModule.test.js +1 -1
- package/dist/components/features/DocumentIndex.d.ts +1 -1
- package/dist/components/features/DocumentIndex.js +1 -1
- package/dist/components/features/DocumentViewer.d.ts +1 -1
- package/dist/components/features/DocumentViewer.js +32 -9
- package/dist/components/features/DocumentWorkspace.d.ts +5 -22
- package/dist/components/features/DocumentWorkspace.js +12 -155
- package/dist/components/features/DocumentWorkspace.test.js +193 -6
- package/dist/components/features/TaskSettings.js +87 -41
- package/dist/components/features/TaskSettings.test.js +180 -40
- package/dist/components/features/documentWorkspaceModel.d.ts +24 -0
- package/dist/components/features/documentWorkspaceModel.js +57 -0
- package/dist/components/features/useDocumentWorkspaceController.d.ts +34 -0
- package/dist/components/features/useDocumentWorkspaceController.js +113 -0
- package/dist/components/task/TaskActionHeader.d.ts +2 -1
- package/dist/components/task/TaskActionHeader.js +3 -3
- package/dist/components/task/TaskActionHeader.test.js +8 -0
- package/dist/components/task/TaskCard.js +16 -1
- package/dist/components/task/TaskCard.test.js +31 -0
- package/dist/components/task/TaskForm.d.ts +9 -8
- package/dist/components/task/TaskForm.js +374 -219
- package/dist/components/task/TaskForm.test.js +482 -361
- package/dist/components/task/TaskKanban.d.ts +1 -1
- package/dist/components/task/TaskKanban.js +33 -161
- package/dist/components/task/TaskStatusActions.d.ts +6 -1
- package/dist/components/task/TaskStatusActions.js +8 -3
- package/dist/components/task/TaskStatusActions.test.js +9 -0
- package/dist/components/task/taskKanbanDropRules.d.ts +58 -0
- package/dist/components/task/taskKanbanDropRules.js +187 -0
- package/dist/components/task/taskKanbanDropRules.test.d.ts +1 -0
- package/dist/components/task/taskKanbanDropRules.test.js +114 -0
- package/dist/components/ui/Modal.d.ts +1 -1
- package/dist/components/ui/Modal.js +1 -0
- package/dist/components/views/AppShellHeader.js +5 -1
- package/dist/components/views/AppShellHeader.test.js +4 -0
- package/dist/components/views/PlanComparisonPage.d.ts +3 -2
- package/dist/components/views/PlanComparisonPage.js +9 -10
- package/dist/components/views/PlanComparisonPage.test.js +55 -41
- package/dist/components/views/PlansPage.d.ts +5 -1
- package/dist/components/views/PlansPage.js +150 -81
- package/dist/components/views/PlansPage.test.js +367 -41
- package/dist/components/views/StandaloneLayout.js +135 -54
- package/dist/components/views/WidgetView.js +11 -2
- package/dist/components/views/panels/FilterToolbar.test.js +6 -4
- package/dist/components/views/standalone/modals/AccountHubModal.d.ts +2 -14
- package/dist/components/views/standalone/modals/AccountHubModal.js +12 -14
- package/dist/components/views/standalone/modals/AccountHubModal.test.js +24 -1
- package/dist/components/views/standalone/modals/SyncStatusModal.js +1 -1
- package/dist/config/envSchema.js +1 -1
- package/dist/core/AiProfileService.d.ts +6 -1
- package/dist/core/AiProfileService.js +161 -16
- package/dist/core/AiProfileService.test.js +3 -1
- package/dist/core/AiProfiles.test.js +200 -0
- package/dist/core/AuthTokenService.test.d.ts +1 -0
- package/dist/core/AuthTokenService.test.js +78 -0
- package/dist/core/DeletedTaskLifecycleService.d.ts +2 -1
- package/dist/core/EntitlementsPolicy.test.js +75 -13
- package/dist/core/PlanEntitlementService.d.ts +9 -1
- package/dist/core/PlanEntitlementService.js +144 -19
- package/dist/core/PlanVersionPolicy.test.js +19 -26
- package/dist/core/SignupMonetizationSettings.test.js +75 -15
- package/dist/core/SystemAdmin.test.js +212 -56
- package/dist/core/TaskActivityService.d.ts +4 -1
- package/dist/core/TaskActivityService.js +45 -0
- package/dist/core/TaskAuditTimeline.test.js +52 -1
- package/dist/core/TaskTaxonomyValidation.test.js +53 -0
- package/dist/core/Taskforce.d.ts +18 -11
- package/dist/core/Taskforce.js +93 -12
- package/dist/core/WorkspacePlanMode.test.js +73 -8
- package/dist/core/shared.d.ts +2 -0
- package/dist/core/shared.js +11 -0
- package/dist/documentReviews/service.d.ts +1 -1
- package/dist/documentReviews/types.d.ts +1 -1
- package/dist/hooks/auth/useTaskforceAuthBootstrap.d.ts +48 -0
- package/dist/hooks/auth/useTaskforceAuthBootstrap.js +219 -0
- package/dist/hooks/sync/auth.d.ts +37 -0
- package/dist/hooks/sync/auth.js +63 -0
- package/dist/hooks/sync/bootstrap.d.ts +34 -0
- package/dist/hooks/sync/bootstrap.js +52 -0
- package/dist/hooks/sync/orchestratorShared.d.ts +36 -0
- package/dist/hooks/sync/orchestratorShared.js +209 -0
- package/dist/hooks/sync/orchestratorShared.test.d.ts +1 -0
- package/dist/hooks/sync/orchestratorShared.test.js +49 -0
- package/dist/hooks/sync/realtime.d.ts +25 -0
- package/dist/hooks/sync/realtime.js +60 -0
- package/dist/hooks/sync/recovery.d.ts +69 -0
- package/dist/hooks/sync/recovery.js +118 -0
- package/dist/hooks/sync/transfers.d.ts +123 -0
- package/dist/hooks/sync/transfers.js +435 -0
- package/dist/hooks/sync/useDataVersionRefresh.d.ts +16 -0
- package/dist/hooks/sync/useDataVersionRefresh.js +73 -0
- package/dist/hooks/ui/useResourceExport.d.ts +3 -1
- package/dist/hooks/ui/useResourceExport.js +5 -2
- package/dist/hooks/ui/useWorkflowTemplates.js +11 -6
- package/dist/hooks/useRealtimeSync.js +2 -1
- package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +8 -0
- package/dist/hooks/useSyncOrchestrator.context-assets.test.d.ts +1 -0
- package/dist/hooks/useSyncOrchestrator.context-assets.test.js +228 -0
- package/dist/hooks/useSyncOrchestrator.d.ts +12 -8
- package/dist/hooks/useSyncOrchestrator.js +388 -879
- package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +641 -6
- package/dist/hooks/useTaskMutations.d.ts +2 -1
- package/dist/hooks/useTaskMutations.js +57 -7
- package/dist/hooks/useTaskMutations.test.js +176 -0
- package/dist/hooks/useTaskforce.d.ts +13 -4
- package/dist/hooks/useTaskforce.js +302 -817
- package/dist/hooks/useTaskforce.sync-behavior.test.js +78 -0
- package/dist/hooks/useWorkspaceSyncController.d.ts +4 -1
- package/dist/hooks/useWorkspaceSyncController.js +33 -11
- package/dist/hooks/useWorkspaceSyncController.test.js +1 -0
- package/dist/hooks/workspace/useTaskforceApiRouting.test.js +17 -0
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +166 -0
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +434 -0
- package/dist/hooks/workspace/workspaceLocalState.d.ts +19 -0
- package/dist/hooks/workspace/workspaceLocalState.js +100 -0
- package/dist/hooks/workspace/workspaceLocalState.test.d.ts +1 -0
- package/dist/hooks/workspace/workspaceLocalState.test.js +59 -0
- package/dist/localization/locales/en-US.js +2 -2
- package/dist/mcp/adminWorkspaceRegistrar.d.ts +2 -0
- package/dist/mcp/adminWorkspaceRegistrar.js +154 -0
- package/dist/mcp/canonicalAssetHelpers.d.ts +70 -0
- package/dist/mcp/canonicalAssetHelpers.js +259 -0
- package/dist/mcp/clientIntegrations.d.ts +12 -1
- package/dist/mcp/clientIntegrations.js +161 -6
- package/dist/mcp/clientIntegrations.test.js +76 -4
- package/dist/mcp/collaborationRegistrar.d.ts +2 -0
- package/dist/mcp/collaborationRegistrar.js +71 -0
- package/dist/mcp/documentAssetRegistrar.d.ts +2 -0
- package/dist/mcp/documentAssetRegistrar.js +346 -0
- package/dist/mcp/documentHelpers.d.ts +100 -0
- package/dist/mcp/documentHelpers.js +161 -0
- package/dist/mcp/runtime.js +2455 -3925
- package/dist/mcp/runtime.test.js +240 -8
- package/dist/mcp/taskAttachmentHelpers.d.ts +41 -0
- package/dist/mcp/taskAttachmentHelpers.js +60 -0
- package/dist/mcp/taskAttachmentTypes.d.ts +37 -0
- package/dist/mcp/taskAttachmentTypes.js +1 -0
- package/dist/mcp/taskPlanningRegistrar.d.ts +2 -0
- package/dist/mcp/taskPlanningRegistrar.js +418 -0
- package/dist/mcp/toolCatalog.d.ts +35 -0
- package/dist/mcp/toolCatalog.js +3 -0
- package/dist/plugins/vite.js +1 -1
- package/dist/runtime/appGateDefinitions.d.ts +1 -1
- package/dist/runtime/appGateDefinitions.js +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.js +46 -3
- package/dist/server/index.test.js +12 -1
- package/dist/server/routes/admin.d.ts +1 -5
- package/dist/server/routes/admin.js +151 -80
- package/dist/server/routes/annotatedAttachments.d.ts +1 -1
- package/dist/server/routes/annotatedAttachments.js +1 -1
- package/dist/server/routes/auth.d.ts +1 -4
- package/dist/server/routes/auth.js +59 -64
- package/dist/server/routes/authSupport.d.ts +30 -0
- package/dist/server/routes/authSupport.js +81 -0
- package/dist/server/routes/billing.d.ts +1 -1
- package/dist/server/routes/billing.js +122 -255
- package/dist/server/routes/billing.test.js +257 -86
- package/dist/server/routes/documentReviews.d.ts +1 -1
- package/dist/server/routes/documentReviews.js +1 -1
- package/dist/server/routes/documents.d.ts +4 -2
- package/dist/server/routes/documents.js +73 -7
- package/dist/server/routes/primitives.d.ts +11 -0
- package/dist/server/routes/primitives.js +73 -0
- package/dist/server/routes/resources.d.ts +1 -1
- package/dist/server/routes/resources.js +1 -1
- package/dist/server/routes/shared.d.ts +31 -1
- package/dist/server/routes/shared.js +26 -0
- package/dist/server/routes/sync.d.ts +1 -1
- package/dist/server/routes/sync.integration.test.js +20 -0
- package/dist/server/routes/sync.js +111 -238
- package/dist/server/routes/tasks.d.ts +1 -1
- package/dist/server/routes/tasks.js +50 -8
- package/dist/server/routes/workspaces.d.ts +1 -1
- package/dist/server/routes/workspaces.js +1 -1
- package/dist/server/routes.d.ts +2 -9
- package/dist/server/routes.js +84 -181
- package/dist/server/routes.test.js +912 -32
- package/dist/shared/taskActor.d.ts +10 -0
- package/dist/shared/taskActor.js +1 -0
- package/dist/sync/collaborationSyncPayload.js +4 -0
- package/dist/sync/collaborationSyncPayload.test.js +8 -0
- package/dist/sync/collaborationSyncState.d.ts +3 -1
- package/dist/sync/collaborationSyncState.js +19 -0
- package/dist/sync/contentSyncState.js +28 -17
- package/dist/sync/syncApplyHandlers.d.ts +87 -1
- package/dist/sync/syncApplyHandlers.js +370 -8
- package/dist/sync/syncApplyHandlers.test.d.ts +1 -0
- package/dist/sync/syncApplyHandlers.test.js +379 -0
- package/dist/sync/syncService.d.ts +9 -1
- package/dist/sync/syncService.js +44 -2
- package/dist/sync/syncService.test.js +62 -0
- package/dist/sync/workspacePullFeed.d.ts +1 -0
- package/dist/sync/workspacePullFeed.js +66 -59
- package/dist/sync/workspacePullFeed.test.js +72 -4
- package/dist/sync/workspaceSyncModel.d.ts +25 -1
- package/dist/sync/workspaceSyncModel.js +77 -3
- package/dist/sync/workspaceSyncModel.test.js +153 -0
- package/dist/sync/workspaceSyncState.d.ts +2 -0
- package/dist/sync/workspaceSyncState.js +1 -0
- package/dist/types.d.ts +2 -10
- package/dist/ui/assets/AgentsModule-N2MnQBZk.js +1 -0
- package/dist/ui/assets/{AnnotatedAttachmentWorkspace-C_TmXZwA.js → AnnotatedAttachmentWorkspace-BG6P_GVW.js} +1 -1
- package/dist/ui/assets/DocumentWorkspace-B3nV_Gc5.css +1 -0
- package/dist/ui/assets/DocumentWorkspace-DRbDMwh8.js +252 -0
- package/dist/ui/assets/{InitiativesModule-4-Rh2K2n.js → InitiativesModule-Dhm7M8e7.js} +1 -1
- package/dist/ui/assets/{PlansPage-BlVC_lRq.css → PlansPage-C2dd2n1X.css} +1 -1
- package/dist/ui/assets/PlansPage-Cq0zXj3I.js +1 -0
- package/dist/ui/assets/TaskSettings-ln0aF7xc.js +9 -0
- package/dist/ui/assets/{WorkflowsModule-CGk9s3NJ.js → WorkflowsModule-BcS4afRn.js} +1 -1
- package/dist/ui/assets/index-C2-OXZV7.css +1 -0
- package/dist/ui/assets/index-DcSI5F86.js +6 -0
- package/dist/ui/assets/{vendor-icons-pWocEipT.js → vendor-icons-BSUaRwF8.js} +1 -1
- package/dist/ui/index.html +4 -4
- package/dist/utils/commercialLifecyclePresentation.d.ts +19 -0
- package/dist/utils/commercialLifecyclePresentation.js +196 -0
- package/dist/utils/taskActivity.js +4 -0
- package/dist/utils/taskActivity.test.js +25 -1
- package/package.json +10 -1
- package/scripts/check-cloud-mcp.mjs +83 -0
- package/scripts/playwright-auth.sh +9 -1
- package/scripts/run-billing-performance-smoke.sh +24 -0
- package/dist/ui/assets/AgentsModule-CpsTmrIW.js +0 -1
- package/dist/ui/assets/DocumentWorkspace-C3GyzrWm.js +0 -250
- package/dist/ui/assets/DocumentWorkspace-C_8T8oz-.css +0 -1
- package/dist/ui/assets/PlansPage-BP7AYOqr.js +0 -1
- package/dist/ui/assets/TaskSettings-BOC5F6Ag.js +0 -8
- package/dist/ui/assets/index-CLIMgR6g.js +0 -6
- package/dist/ui/assets/index-DneETxcu.css +0 -1
|
@@ -22,18 +22,23 @@ function openCore(projectRoot) {
|
|
|
22
22
|
storagePath: path.join(projectRoot, '.taskforce'),
|
|
23
23
|
tenantId: path.basename(projectRoot)
|
|
24
24
|
});
|
|
25
|
-
core.upsertPlanCatalog({ planId: '
|
|
25
|
+
core.upsertPlanCatalog({ planId: 'free', displayName: 'Free', status: 'active' });
|
|
26
|
+
core.updatePlanVersion({
|
|
27
|
+
planId: 'free',
|
|
28
|
+
versionNumber: 1,
|
|
29
|
+
seatLimit: 1
|
|
30
|
+
});
|
|
26
31
|
core.updatePlanVersionFeatures({
|
|
27
|
-
planVersionId: '
|
|
32
|
+
planVersionId: 'free-v1',
|
|
28
33
|
features: [
|
|
29
34
|
{ featureKey: 'workspace.switching', access: 'enabled' }
|
|
30
35
|
]
|
|
31
36
|
});
|
|
32
|
-
insertFreePriceMapping(core, '
|
|
37
|
+
insertFreePriceMapping(core, 'free-v1');
|
|
33
38
|
return core;
|
|
34
39
|
}
|
|
35
40
|
describe('TaskforceCore onboarding policy', () => {
|
|
36
|
-
it('
|
|
41
|
+
it('fails closed to require_plan_selection when no explicit onboarding policy is configured', () => {
|
|
37
42
|
const projectRoot = makeProjectRoot();
|
|
38
43
|
const core = openCore(projectRoot);
|
|
39
44
|
try {
|
|
@@ -47,6 +52,36 @@ describe('TaskforceCore onboarding policy', () => {
|
|
|
47
52
|
fs.rmSync(projectRoot, { recursive: true, force: true });
|
|
48
53
|
}
|
|
49
54
|
});
|
|
55
|
+
it('falls back to require_plan_selection when no free onboarding plan is available', () => {
|
|
56
|
+
const projectRoot = makeProjectRoot();
|
|
57
|
+
const core = new TaskforceCore({
|
|
58
|
+
projectRoot,
|
|
59
|
+
storagePath: path.join(projectRoot, '.taskforce'),
|
|
60
|
+
tenantId: path.basename(projectRoot)
|
|
61
|
+
});
|
|
62
|
+
core.upsertPlanCatalog({ planId: 'free', displayName: 'Free', status: 'active' });
|
|
63
|
+
core.updatePlanVersion({
|
|
64
|
+
planId: 'free',
|
|
65
|
+
versionNumber: 1,
|
|
66
|
+
seatLimit: 1
|
|
67
|
+
});
|
|
68
|
+
core.updatePlanVersionFeatures({
|
|
69
|
+
planVersionId: 'free-v1',
|
|
70
|
+
features: [
|
|
71
|
+
{ featureKey: 'workspace.switching', access: 'enabled' }
|
|
72
|
+
]
|
|
73
|
+
});
|
|
74
|
+
try {
|
|
75
|
+
expect(core.getOnboardingPolicy()).toEqual({
|
|
76
|
+
mode: 'require_plan_selection',
|
|
77
|
+
planVersionId: null
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
core.close();
|
|
82
|
+
fs.rmSync(projectRoot, { recursive: true, force: true });
|
|
83
|
+
}
|
|
84
|
+
});
|
|
50
85
|
it('fails validation for auto_grant_free without a plan version id', () => {
|
|
51
86
|
const projectRoot = makeProjectRoot();
|
|
52
87
|
const core = openCore(projectRoot);
|
|
@@ -85,10 +120,10 @@ describe('TaskforceCore onboarding policy', () => {
|
|
|
85
120
|
const projectRoot = makeProjectRoot();
|
|
86
121
|
const core = openCore(projectRoot);
|
|
87
122
|
try {
|
|
88
|
-
core.upsertPlanCatalog({ planId: '
|
|
123
|
+
core.upsertPlanCatalog({ planId: 'free', displayName: 'Free', status: 'archived' });
|
|
89
124
|
expect(core.validateOnboardingPolicy({
|
|
90
125
|
mode: 'auto_grant_free',
|
|
91
|
-
planVersionId: '
|
|
126
|
+
planVersionId: 'free-v1'
|
|
92
127
|
})).toEqual(expect.objectContaining({
|
|
93
128
|
valid: false,
|
|
94
129
|
code: 'ONBOARDING_PLAN_NOT_ENABLED'
|
|
@@ -103,10 +138,10 @@ describe('TaskforceCore onboarding policy', () => {
|
|
|
103
138
|
const projectRoot = makeProjectRoot();
|
|
104
139
|
const core = openCore(projectRoot);
|
|
105
140
|
try {
|
|
106
|
-
core.upsertPlanCatalog({ planId: '
|
|
141
|
+
core.upsertPlanCatalog({ planId: 'team-5', displayName: 'Team 5', status: 'active' });
|
|
107
142
|
expect(core.validateOnboardingPolicy({
|
|
108
143
|
mode: 'auto_grant_free',
|
|
109
|
-
planVersionId: '
|
|
144
|
+
planVersionId: 'team-5-v1'
|
|
110
145
|
})).toEqual(expect.objectContaining({
|
|
111
146
|
valid: false,
|
|
112
147
|
code: 'ONBOARDING_PLAN_MUST_BE_FREE'
|
|
@@ -131,6 +166,31 @@ describe('TaskforceCore onboarding policy', () => {
|
|
|
131
166
|
fs.rmSync(projectRoot, { recursive: true, force: true });
|
|
132
167
|
}
|
|
133
168
|
});
|
|
169
|
+
it('requires plan selection during registration when no explicit onboarding policy is configured', () => {
|
|
170
|
+
const projectRoot = makeProjectRoot();
|
|
171
|
+
const core = openCore(projectRoot);
|
|
172
|
+
try {
|
|
173
|
+
const created = core.registerPasswordUser({
|
|
174
|
+
email: 'implicit-onboarding@example.com',
|
|
175
|
+
password: 'password123'
|
|
176
|
+
});
|
|
177
|
+
expect(created.planSelectionRequired).toBe(true);
|
|
178
|
+
expect(created.checkoutPending).toBe(false);
|
|
179
|
+
expect(core.getAccountEntitlement(created.userId)).toEqual(expect.objectContaining({
|
|
180
|
+
state: 'pending_plan_selection'
|
|
181
|
+
}));
|
|
182
|
+
expect(core.getAccountAccessStatus(created.userId)).toEqual(expect.objectContaining({
|
|
183
|
+
gate: 'plan_selection_required',
|
|
184
|
+
canAccessApp: false,
|
|
185
|
+
canAccessPlans: true,
|
|
186
|
+
planSelectionRequired: true
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
core.close();
|
|
191
|
+
fs.rmSync(projectRoot, { recursive: true, force: true });
|
|
192
|
+
}
|
|
193
|
+
});
|
|
134
194
|
it('allows backfill transitions to create pending plan selection entitlements', () => {
|
|
135
195
|
const projectRoot = makeProjectRoot();
|
|
136
196
|
const tenantId = path.basename(projectRoot);
|
|
@@ -156,7 +216,7 @@ describe('TaskforceCore onboarding policy', () => {
|
|
|
156
216
|
`).run('pending-u1', tenantId, 'pending_plan_selection', now, now);
|
|
157
217
|
core.transitionCanonicalCommercialState({
|
|
158
218
|
accountId: 'pending-u1',
|
|
159
|
-
planVersionId: '
|
|
219
|
+
planVersionId: 'free-v1',
|
|
160
220
|
state: 'pending_plan_selection',
|
|
161
221
|
source: 'backfill',
|
|
162
222
|
updatedBy: 'backfill',
|
|
@@ -185,7 +245,7 @@ describe('TaskforceCore onboarding policy', () => {
|
|
|
185
245
|
try {
|
|
186
246
|
const now = new Date().toISOString();
|
|
187
247
|
const checkoutExpiresAt = new Date(Date.now() + (60 * 60 * 1000)).toISOString();
|
|
188
|
-
core.upsertPlanCatalog({ planId: '
|
|
248
|
+
core.upsertPlanCatalog({ planId: 'basic', displayName: 'Basic', status: 'active' });
|
|
189
249
|
const db = core.getDatabaseAdapter();
|
|
190
250
|
db.prepare(`
|
|
191
251
|
INSERT INTO users (id, tenant_id, email, display_name, auth_provider, external_auth_id, is_disabled, created_at, updated_at)
|
|
@@ -193,11 +253,11 @@ describe('TaskforceCore onboarding policy', () => {
|
|
|
193
253
|
`).run('checkout-u1', tenantId, 'checkout@example.com', 'Checkout', 'token', 'checkout-u1', now, now);
|
|
194
254
|
core.transitionCanonicalCommercialState({
|
|
195
255
|
accountId: 'checkout-u1',
|
|
196
|
-
planVersionId: '
|
|
256
|
+
planVersionId: 'basic-v1',
|
|
197
257
|
state: 'checkout_pending',
|
|
198
258
|
source: 'checkout-start',
|
|
199
259
|
updatedBy: 'checkout-start',
|
|
200
|
-
billingMirrorPlanId: '
|
|
260
|
+
billingMirrorPlanId: 'basic',
|
|
201
261
|
effectiveAt: now,
|
|
202
262
|
effectiveUntil: checkoutExpiresAt,
|
|
203
263
|
createdAt: now,
|
|
@@ -223,7 +283,7 @@ describe('TaskforceCore onboarding policy', () => {
|
|
|
223
283
|
try {
|
|
224
284
|
const now = new Date().toISOString();
|
|
225
285
|
const expiredAt = new Date(Date.now() - (60 * 1000)).toISOString();
|
|
226
|
-
core.upsertPlanCatalog({ planId: '
|
|
286
|
+
core.upsertPlanCatalog({ planId: 'basic', displayName: 'Basic', status: 'active' });
|
|
227
287
|
const db = core.getDatabaseAdapter();
|
|
228
288
|
db.prepare(`
|
|
229
289
|
INSERT INTO users (id, tenant_id, email, display_name, auth_provider, external_auth_id, is_disabled, created_at, updated_at)
|
|
@@ -231,11 +291,11 @@ describe('TaskforceCore onboarding policy', () => {
|
|
|
231
291
|
`).run('expired-checkout-u1', tenantId, 'expired@example.com', 'Expired Checkout', 'token', 'expired-checkout-u1', now, now);
|
|
232
292
|
core.transitionCanonicalCommercialState({
|
|
233
293
|
accountId: 'expired-checkout-u1',
|
|
234
|
-
planVersionId: '
|
|
294
|
+
planVersionId: 'basic-v1',
|
|
235
295
|
state: 'checkout_pending',
|
|
236
296
|
source: 'checkout-start',
|
|
237
297
|
updatedBy: 'checkout-start',
|
|
238
|
-
billingMirrorPlanId: '
|
|
298
|
+
billingMirrorPlanId: 'basic',
|
|
239
299
|
effectiveAt: now,
|
|
240
300
|
effectiveUntil: expiredAt,
|
|
241
301
|
createdAt: now,
|