@funnelsgrove/cli 0.1.87 → 0.1.89
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/dist/apiClient.d.ts +1 -0
- package/dist/apiClient.js +32 -1
- package/funnel-contract-compatibility.json +28 -28
- package/package.json +3 -3
- package/template_docs/.funnelsgrove-docs.json +3 -3
- package/template_docs/docs/funnelsgrove/migrations/step-contract-v3.md +1 -1
- package/template_docs/funnel-docs.config.json +1 -1
- package/template_scaffold/.funnelsgrove-docs.json +3 -3
- package/template_scaffold/.funnelsgrove-scaffold.json +26 -471
- package/template_scaffold/PLAN.md +15 -29
- package/template_scaffold/context/build-context.md +3 -3
- package/template_scaffold/docs/funnelsgrove/migrations/step-contract-v3.md +1 -1
- package/template_scaffold/funnel-docs.config.json +1 -1
- package/template_scaffold/package-lock.json +9 -9
- package/template_scaffold/package.json +2 -2
- package/template_scaffold/public/assets/email-capture-preview.svg +5 -0
- package/template_scaffold/public/assets/paywall-preview.svg +6 -0
- package/template_scaffold/src/app/sdk/page.tsx +14 -26
- package/template_scaffold/src/components/FunnelFlow.tsx +8 -1
- package/template_scaffold/src/config/billing.plans.ts +71 -21
- package/template_scaffold/src/config/funnel.manifest.ts +20 -59
- package/template_scaffold/src/runtime/checkout-runtime-config.ts +0 -7
- package/template_scaffold/src/runtime/step-registry.ts +0 -28
- package/template_scaffold/src/steps/content/step-01.content.ts +4 -9
- package/template_scaffold/src/steps/content/step-32-paywall.content.ts +12 -50
- package/template_scaffold/src/steps/step-01.tsx +43 -50
- package/template_scaffold/src/steps/step-31-email-capture.tsx +18 -1
- package/template_scaffold/src/steps/step-32-paywall.tsx +93 -299
- package/template_scaffold/src/steps/step-33-subscription-started.tsx +1 -1
- package/template_scaffold/src/steps/step-content.registry.ts +1 -26
- package/template_scaffold/public/claimbee/bee.png +0 -0
- package/template_scaffold/public/claimbee/device-iphone.png +0 -0
- package/template_scaffold/public/claimbee/device-macbook.png +0 -0
- package/template_scaffold/public/claimbee/device-none.png +0 -0
- package/template_scaffold/public/claimbee/device-watch.png +0 -0
- package/template_scaffold/public/claimbee/glow.svg +0 -3
- package/template_scaffold/public/claimbee/steps-sprite-alt.png +0 -0
- package/template_scaffold/public/claimbee/steps-sprite-default.png +0 -0
- package/template_scaffold/public/claimbee/testimonial-avatar.png +0 -0
- package/template_scaffold/public/claimbee/testimonial-star.svg +0 -3
- package/template_scaffold/public/paywall/ai-claim-assistant.png +0 -0
- package/template_scaffold/public/paywall/claim-history.png +0 -0
- package/template_scaffold/public/paywall/clear-progress.png +0 -0
- package/template_scaffold/public/paywall/hero.png +0 -0
- package/template_scaffold/public/paywall/money-alerts.png +0 -0
- package/template_scaffold/public/paywall/money-back-badge.png +0 -0
- package/template_scaffold/public/paywall/paywall-image.png +0 -0
- package/template_scaffold/public/paywall/r1.png +0 -0
- package/template_scaffold/public/paywall/r2.png +0 -0
- package/template_scaffold/public/paywall/r3.png +0 -0
- package/template_scaffold/public/paywall/r4.png +0 -0
- package/template_scaffold/public/paywall/r5.png +0 -0
- package/template_scaffold/public/paywall/r6.png +0 -0
- package/template_scaffold/public/paywall/special-offer-gift.png +0 -0
- package/template_scaffold/public/please/bee.png +0 -0
- package/template_scaffold/public/please/device-iphone.png +0 -0
- package/template_scaffold/public/please/device-macbook.png +0 -0
- package/template_scaffold/public/please/device-none.png +0 -0
- package/template_scaffold/public/please/device-watch.png +0 -0
- package/template_scaffold/public/please/glow.svg +0 -3
- package/template_scaffold/public/please/steps-sprite-alt.png +0 -0
- package/template_scaffold/public/please/steps-sprite-default.png +0 -0
- package/template_scaffold/public/please/testimonial-avatar.png +0 -0
- package/template_scaffold/public/please/testimonial-star.svg +0 -3
- package/template_scaffold/public/upsell/upgrade-hero.png +0 -0
- package/template_scaffold/src/assets/claimbee/bee.png +0 -0
- package/template_scaffold/src/assets/claimbee/device-iphone.png +0 -0
- package/template_scaffold/src/assets/claimbee/device-macbook.png +0 -0
- package/template_scaffold/src/assets/claimbee/device-none.png +0 -0
- package/template_scaffold/src/assets/claimbee/device-watch.png +0 -0
- package/template_scaffold/src/assets/claimbee/glow.svg +0 -3
- package/template_scaffold/src/assets/claimbee/steps-sprite-alt.png +0 -0
- package/template_scaffold/src/assets/claimbee/steps-sprite-default.png +0 -0
- package/template_scaffold/src/assets/claimbee/testimonial-avatar.png +0 -0
- package/template_scaffold/src/assets/claimbee/testimonial-star.svg +0 -3
- package/template_scaffold/src/components/FunnelStepImage.tsx +0 -28
- package/template_scaffold/src/config/offer-sets.generated.ts +0 -4
- package/template_scaffold/src/steps/content/manage-subscription.content.ts +0 -62
- package/template_scaffold/src/steps/content/paywall.content.ts +0 -191
- package/template_scaffold/src/steps/content/step-02.content.ts +0 -77
- package/template_scaffold/src/steps/content/step-03.content.ts +0 -40
- package/template_scaffold/src/steps/content/step-04.content.ts +0 -49
- package/template_scaffold/src/steps/editor/manage-subscription.editor.ts +0 -179
- package/template_scaffold/src/steps/editor/paywall.editor.ts +0 -232
- package/template_scaffold/src/steps/editor/step-02.editor.ts +0 -41
- package/template_scaffold/src/steps/editor/step-03.editor.ts +0 -58
- package/template_scaffold/src/steps/editor/step-04.editor.ts +0 -98
- package/template_scaffold/src/steps/pricing/paywall-b.pricing.ts +0 -12
- package/template_scaffold/src/steps/step-02.tsx +0 -140
- package/template_scaffold/src/steps/step-03.tsx +0 -262
- package/template_scaffold/src/steps/step-04.tsx +0 -673
- package/template_scaffold/src/steps/step-32b-paywall-b.tsx +0 -35
- package/template_scaffold/src/steps/step-35-manage-subscription.tsx +0 -46
- package/template_scaffold/src/steps/use-claimbee-step-content.ts +0 -15
- package/template_scaffold/tests/funnel-agent-docs.test.ts +0 -751
- package/template_scaffold/tests/package.test.ts +0 -37
- package/template_scaffold/tests/src/app/[stepId]/page.test.tsx +0 -59
- package/template_scaffold/tests/src/app/layout.test.ts +0 -26
- package/template_scaffold/tests/src/components/FunnelFlow.test.tsx +0 -38
- package/template_scaffold/tests/src/components/FunnelStepImage.test.ts +0 -15
- package/template_scaffold/tests/src/config/billing.plans.test.ts +0 -143
- package/template_scaffold/tests/src/config/funnel.manifest.test.ts +0 -166
- package/template_scaffold/tests/src/contract/funnel-project.validation.test.ts +0 -79
- package/template_scaffold/tests/src/contract/golden/golden-fixtures.test.ts +0 -190
- package/template_scaffold/tests/src/contract/validate-funnel.cli.test.ts +0 -191
- package/template_scaffold/tests/src/runtime/checkout-runtime-config.test.ts +0 -60
- package/template_scaffold/tests/src/runtime/funnel-runtime.test.ts +0 -25
- package/template_scaffold/tests/src/runtime/step-content-context.test.ts +0 -38
- package/template_scaffold/tests/src/runtime/use-funnel-flow-controller.integration.test.ts +0 -203
- package/template_scaffold/tests/src/runtime/use-funnel-flow-controller.test.ts +0 -76
- package/template_scaffold/tests/src/steps/paywall-checkout-options.test.ts +0 -104
- package/template_scaffold/tests/src/steps/shared-header-contract.test.ts +0 -29
- package/template_scaffold/tests/src/steps/step-01.test.ts +0 -38
- package/template_scaffold/tests/src/steps/step-02.test.ts +0 -43
- package/template_scaffold/tests/src/steps/step-03.test.ts +0 -15
- package/template_scaffold/tests/src/steps/step-04.test.ts +0 -32
- package/template_scaffold/tests/src/steps/step-31-email-capture.test.ts +0 -22
- package/template_scaffold/tests/src/steps/step-32-paywall.test.ts +0 -773
- package/template_scaffold/tests/src/steps/step-33-subscription-started.test.ts +0 -44
- package/template_scaffold/tests/src/steps/step-34-upsell-form.test.ts +0 -27
- package/template_scaffold/tests/src/steps/step-image-migration.test.ts +0 -20
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { describe, expect, it } from 'vitest';
|
|
4
|
-
|
|
5
|
-
describe('template subscription-started source', () => {
|
|
6
|
-
it('uses the shared runtime handoff screen without browser-owned checkout analytics', () => {
|
|
7
|
-
const stepSource = readFileSync(
|
|
8
|
-
path.resolve(__dirname, '../../../src/steps/step-33-subscription-started.tsx'),
|
|
9
|
-
'utf8',
|
|
10
|
-
);
|
|
11
|
-
|
|
12
|
-
expect(stepSource).toContain('SubscriptionHandoffScreen');
|
|
13
|
-
expect(stepSource.match(/<SubscriptionHandoffScreen/g)).toHaveLength(1);
|
|
14
|
-
expect(stepSource).toContain('isReturningSubscriber');
|
|
15
|
-
expect(stepSource).toContain('returningSubscriberContent');
|
|
16
|
-
expect(stepSource).toContain("completionMode='funnel'");
|
|
17
|
-
expect(stepSource).toContain("type: 'purchase_completed'");
|
|
18
|
-
expect(stepSource).not.toContain('@funnelsgrove/analytics');
|
|
19
|
-
expect(stepSource).not.toContain('publicAnalyticsSdk');
|
|
20
|
-
expect(stepSource).not.toContain("searchParams.get('payment_intent')");
|
|
21
|
-
expect(stepSource).not.toContain("searchParams.get('redirect_status')");
|
|
22
|
-
expect(stepSource).not.toContain("eventType: redirectStatus === 'succeeded'");
|
|
23
|
-
expect(stepSource).not.toContain('trackPurchaseCompleted');
|
|
24
|
-
expect(stepSource).not.toContain("searchParams.get('userId')");
|
|
25
|
-
expect(stepSource).not.toContain('api.qrserver.com');
|
|
26
|
-
expect(stepSource).not.toContain('NEXT_PUBLIC_IOS_APP_STORE_URL');
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('defines the approved returning-subscriber copy', () => {
|
|
30
|
-
const contentSource = readFileSync(
|
|
31
|
-
path.resolve(__dirname, '../../../src/steps/content/subscription-started.content.ts'),
|
|
32
|
-
'utf8',
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
expect(contentSource).toContain("kicker: 'Welcome back'");
|
|
36
|
-
expect(contentSource).toContain("title: 'You already have access.'");
|
|
37
|
-
expect(contentSource).toContain(
|
|
38
|
-
"'Your subscription is active. Open the app and sign in with this email to continue.'",
|
|
39
|
-
);
|
|
40
|
-
expect(contentSource).toContain(
|
|
41
|
-
"'We’ll send you a verification code when you sign in.'",
|
|
42
|
-
);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { describe, expect, it } from 'vitest';
|
|
4
|
-
|
|
5
|
-
describe('template cleanup', () => {
|
|
6
|
-
it('keeps upsell removed while preserving the duplicate paywall variant', () => {
|
|
7
|
-
const manifestSource = readFileSync(
|
|
8
|
-
path.resolve(__dirname, '../../../src/config/funnel.manifest.ts'),
|
|
9
|
-
'utf8',
|
|
10
|
-
);
|
|
11
|
-
const registrySource = readFileSync(
|
|
12
|
-
path.resolve(__dirname, '../../../src/runtime/step-registry.ts'),
|
|
13
|
-
'utf8',
|
|
14
|
-
);
|
|
15
|
-
const contentRegistrySource = readFileSync(
|
|
16
|
-
path.resolve(__dirname, '../../../src/steps/step-content.registry.ts'),
|
|
17
|
-
'utf8',
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
expect(manifestSource).not.toContain("id: 'upsell-form'");
|
|
21
|
-
expect(manifestSource).toContain("id: 'paywall-b'");
|
|
22
|
-
expect(registrySource).not.toContain('stepUpsellForm');
|
|
23
|
-
expect(registrySource).toContain('stepPaywallB');
|
|
24
|
-
expect(contentRegistrySource).not.toContain("'upsell-form'");
|
|
25
|
-
expect(contentRegistrySource).toContain("'paywall-b'");
|
|
26
|
-
});
|
|
27
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { describe, expect, it } from 'vitest';
|
|
4
|
-
|
|
5
|
-
const stepFiles = [
|
|
6
|
-
'step-01.tsx',
|
|
7
|
-
'step-02.tsx',
|
|
8
|
-
'step-03.tsx',
|
|
9
|
-
'step-04.tsx',
|
|
10
|
-
] as const;
|
|
11
|
-
|
|
12
|
-
describe('funnel-template step image migration', () => {
|
|
13
|
-
it('does not leave raw img tags in migrated steps', () => {
|
|
14
|
-
for (const fileName of stepFiles) {
|
|
15
|
-
const filePath = path.resolve(__dirname, '../../../src/steps', fileName);
|
|
16
|
-
const source = readFileSync(filePath, 'utf8');
|
|
17
|
-
expect(source).not.toContain('<img');
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
});
|