affitor 0.2.0 → 0.3.1

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 (63) hide show
  1. package/dist/cli.js +28 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/init.d.ts.map +1 -1
  4. package/dist/commands/init.js +86 -51
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/login.d.ts +3 -0
  7. package/dist/commands/login.d.ts.map +1 -0
  8. package/dist/commands/login.js +123 -0
  9. package/dist/commands/login.js.map +1 -0
  10. package/dist/commands/logout.d.ts +3 -0
  11. package/dist/commands/logout.d.ts.map +1 -0
  12. package/dist/commands/logout.js +23 -0
  13. package/dist/commands/logout.js.map +1 -0
  14. package/dist/commands/programs.d.ts +3 -0
  15. package/dist/commands/programs.d.ts.map +1 -0
  16. package/dist/commands/programs.js +54 -0
  17. package/dist/commands/programs.js.map +1 -0
  18. package/dist/commands/setup-stripe.d.ts.map +1 -1
  19. package/dist/commands/setup-stripe.js +51 -35
  20. package/dist/commands/setup-stripe.js.map +1 -1
  21. package/dist/commands/status.d.ts.map +1 -1
  22. package/dist/commands/status.js +38 -32
  23. package/dist/commands/status.js.map +1 -1
  24. package/dist/commands/test.d.ts.map +1 -1
  25. package/dist/commands/test.js +8 -9
  26. package/dist/commands/test.js.map +1 -1
  27. package/dist/commands/whoami.d.ts +3 -0
  28. package/dist/commands/whoami.d.ts.map +1 -0
  29. package/dist/commands/whoami.js +38 -0
  30. package/dist/commands/whoami.js.map +1 -0
  31. package/dist/lib/api-client.d.ts +25 -1
  32. package/dist/lib/api-client.d.ts.map +1 -1
  33. package/dist/lib/api-client.js +33 -3
  34. package/dist/lib/api-client.js.map +1 -1
  35. package/dist/lib/config.d.ts +11 -3
  36. package/dist/lib/config.d.ts.map +1 -1
  37. package/dist/lib/config.js +173 -13
  38. package/dist/lib/config.js.map +1 -1
  39. package/dist/lib/inject.d.ts +27 -0
  40. package/dist/lib/inject.d.ts.map +1 -0
  41. package/dist/lib/inject.js +81 -0
  42. package/dist/lib/inject.js.map +1 -0
  43. package/dist/lib/logger.d.ts +8 -0
  44. package/dist/lib/logger.d.ts.map +1 -1
  45. package/dist/lib/logger.js +72 -0
  46. package/dist/lib/logger.js.map +1 -1
  47. package/dist/lib/server-tracking.d.ts +25 -0
  48. package/dist/lib/server-tracking.d.ts.map +1 -0
  49. package/dist/lib/server-tracking.js +109 -0
  50. package/dist/lib/server-tracking.js.map +1 -0
  51. package/dist/lib/stack-detect.d.ts +18 -0
  52. package/dist/lib/stack-detect.d.ts.map +1 -0
  53. package/dist/lib/stack-detect.js +57 -0
  54. package/dist/lib/stack-detect.js.map +1 -0
  55. package/dist/lib/wizard.d.ts +14 -0
  56. package/dist/lib/wizard.d.ts.map +1 -0
  57. package/dist/lib/wizard.js +175 -0
  58. package/dist/lib/wizard.js.map +1 -0
  59. package/dist/types.d.ts +27 -2
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/types.js +3 -0
  62. package/dist/types.js.map +1 -1
  63. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-tracking.js","sourceRoot":"","sources":["../../src/lib/server-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWjC,MAAM,aAAa,GAA0D;IAC3E,MAAM,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,KAAK,EAAE,CAAC,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;IACjE,YAAY,EAAE,CAAC,+BAA+B,CAAC;IAC/C,MAAM,EAAE,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;CACzD,CAAC;AAEF,uEAAuE;AACvE,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,IAAI,IAAI,GAA2B,EAAE,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACxE,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,QAA2B,CAAC;IACrE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;CAOR,CAAC;AACF,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAyB,EACzB,UAAU,GAAG,eAAe;IAE5B,MAAM,IAAI,GAAG;QACX,4BAA4B,UAAU,IAAI;QAC1C,uEAAuE;QACvE,8FAA8F;KAC/F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,WAAmB,CAAC;IACxB,IAAI,IAAY,CAAC;IACjB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,WAAW,GAAG,oDAAoD,CAAC;YACnE,IAAI,GAAG;gBACL,2BAA2B;gBAC3B,oEAAoE;gBACpE,uDAAuD;gBACvD,wBAAwB;gBACxB,iEAAiE;gBACjE,KAAK;aACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM;QACR,KAAK,cAAc;YACjB,WAAW,GAAG,+DAA+D,CAAC;YAC9E,IAAI,GAAG;gBACL,2BAA2B;gBAC3B,wFAAwF;gBACxF,uDAAuD;gBACvD,+BAA+B;gBAC/B,KAAK;aACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM;QACR,KAAK,QAAQ;YACX,WAAW,GAAG,gEAAgE,CAAC;YAC/E,IAAI,GAAG;gBACL,2BAA2B;gBAC3B,kDAAkD;gBAClD,yDAAyD;gBACzD,uBAAuB;gBACvB,KAAK;aACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM;QACR,KAAK,QAAQ;YACX,WAAW;gBACT,8HAA8H,CAAC;YACjI,IAAI,GAAG;gBACL,2BAA2B;gBAC3B,oDAAoD;gBACpD,+CAA+C;gBAC/C,0BAA0B;gBAC1B,KAAK;aACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM;QACR;YACE,WAAW,GAAG,qEAAqE,CAAC;YACpF,IAAI,GAAG;gBACL,2BAA2B;gBAC3B,gCAAgC;gBAChC,0BAA0B;gBAC1B,6BAA6B;gBAC7B,KAAK;aACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG;QACb,oFAAoF;QACpF,mEAAmE;QACnE,qFAAqF;KACtF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACzD,CAAC"}
@@ -0,0 +1,18 @@
1
+ export type Framework = "next-app" | "next-pages" | "unknown";
2
+ export type PackageManager = "npm" | "yarn" | "pnpm";
3
+ export interface StackInfo {
4
+ framework: Framework;
5
+ packageManager: PackageManager;
6
+ /** Absolute path to the entry file to wire (layout.tsx / _app.tsx), or null. */
7
+ entryFile: string | null;
8
+ /** Directory to create the tracker component in, or null. */
9
+ componentDir: string | null;
10
+ }
11
+ export declare function detectPackageManager(cwd: string): PackageManager;
12
+ /**
13
+ * Detect the framework + package manager + entry file of the project at `cwd`.
14
+ * Next.js only for now (App Router preferred, then Pages Router); everything
15
+ * else is `unknown` so the wizard falls back to printed instructions.
16
+ */
17
+ export declare function detectStack(cwd: string): StackInfo;
18
+ //# sourceMappingURL=stack-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-detect.d.ts","sourceRoot":"","sources":["../../src/lib/stack-detect.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,gFAAgF;IAChF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAWD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAIhE;AAUD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CA2BlD"}
@@ -0,0 +1,57 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ function readDeps(cwd) {
4
+ try {
5
+ const pkg = JSON.parse(readFileSync(join(cwd, "package.json"), "utf8"));
6
+ return { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
7
+ }
8
+ catch {
9
+ return {};
10
+ }
11
+ }
12
+ export function detectPackageManager(cwd) {
13
+ if (existsSync(join(cwd, "pnpm-lock.yaml")))
14
+ return "pnpm";
15
+ if (existsSync(join(cwd, "yarn.lock")))
16
+ return "yarn";
17
+ return "npm";
18
+ }
19
+ function firstExisting(cwd, candidates) {
20
+ for (const c of candidates) {
21
+ const full = join(cwd, c);
22
+ if (existsSync(full))
23
+ return full;
24
+ }
25
+ return null;
26
+ }
27
+ /**
28
+ * Detect the framework + package manager + entry file of the project at `cwd`.
29
+ * Next.js only for now (App Router preferred, then Pages Router); everything
30
+ * else is `unknown` so the wizard falls back to printed instructions.
31
+ */
32
+ export function detectStack(cwd) {
33
+ const packageManager = detectPackageManager(cwd);
34
+ const deps = readDeps(cwd);
35
+ if (deps["next"]) {
36
+ const appLayout = firstExisting(cwd, [
37
+ "app/layout.tsx",
38
+ "app/layout.jsx",
39
+ "src/app/layout.tsx",
40
+ "src/app/layout.jsx",
41
+ ]);
42
+ if (appLayout) {
43
+ return { framework: "next-app", packageManager, entryFile: appLayout, componentDir: dirname(appLayout) };
44
+ }
45
+ const pagesApp = firstExisting(cwd, [
46
+ "pages/_app.tsx",
47
+ "pages/_app.jsx",
48
+ "src/pages/_app.tsx",
49
+ "src/pages/_app.jsx",
50
+ ]);
51
+ if (pagesApp) {
52
+ return { framework: "next-pages", packageManager, entryFile: pagesApp, componentDir: dirname(pagesApp) };
53
+ }
54
+ }
55
+ return { framework: "unknown", packageManager, entryFile: null, componentDir: null };
56
+ }
57
+ //# sourceMappingURL=stack-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-detect.js","sourceRoot":"","sources":["../../src/lib/stack-detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAc1C,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACxE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,UAAoB;IACtD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE3B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,EAAE;YACnC,gBAAgB;YAChB,gBAAgB;YAChB,oBAAoB;YACpB,oBAAoB;SACrB,CAAC,CAAC;QACH,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3G,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE;YAClC,gBAAgB;YAChB,gBAAgB;YAChB,oBAAoB;YACpB,oBAAoB;SACrB,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3G,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACvF,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface WizardOptions {
2
+ cwd: string;
3
+ programId: string | number;
4
+ apiUrl: string;
5
+ autoConfirm: boolean;
6
+ }
7
+ /**
8
+ * Auto-install wizard: detect the stack, install @affitor/sdk, create the
9
+ * tracker component, and wire it into the app entry — with a diff preview and
10
+ * confirmation. Never edits auth/checkout code (signup() is printed as a
11
+ * snippet). Any failure degrades gracefully to printed instructions.
12
+ */
13
+ export declare function runInstallWizard(opts: WizardOptions): Promise<void>;
14
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAiBD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DzE"}
@@ -0,0 +1,175 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { basename, join, relative } from "node:path";
3
+ import { spawnSync } from "node:child_process";
4
+ import * as logger from "./logger.js";
5
+ import { format } from "./logger.js";
6
+ import { confirmAction } from "./prompts.js";
7
+ import { detectStack } from "./stack-detect.js";
8
+ import { injectAppLayout, injectPagesApp, trackerComponentSource } from "./inject.js";
9
+ import { affitorClientSource, detectPaymentProvider, serverTrackingSnippets, } from "./server-tracking.js";
10
+ // One consolidated package covers browser + server via subpaths:
11
+ // `@affitor/sdk` (init/signup), `@affitor/sdk/react` (AffitorProvider),
12
+ // `@affitor/sdk/server` (Affitor class). Install it once.
13
+ const SDK_PACKAGE = "@affitor/sdk";
14
+ function rel(cwd, p) {
15
+ return relative(cwd, p) || basename(p);
16
+ }
17
+ function installCommand(pm, pkg) {
18
+ switch (pm) {
19
+ case "yarn":
20
+ return { cmd: "yarn", args: ["add", pkg] };
21
+ case "pnpm":
22
+ return { cmd: "pnpm", args: ["add", pkg] };
23
+ default:
24
+ return { cmd: "npm", args: ["install", pkg] };
25
+ }
26
+ }
27
+ /**
28
+ * Auto-install wizard: detect the stack, install @affitor/sdk, create the
29
+ * tracker component, and wire it into the app entry — with a diff preview and
30
+ * confirmation. Never edits auth/checkout code (signup() is printed as a
31
+ * snippet). Any failure degrades gracefully to printed instructions.
32
+ */
33
+ export async function runInstallWizard(opts) {
34
+ const stack = detectStack(opts.cwd);
35
+ logger.titledBox("Auto-install", [
36
+ "",
37
+ ` Framework: ${stack.framework === "unknown" ? format.yellow("not detected") : format.green(stack.framework)}`,
38
+ ` Installer: ${format.cyan(stack.packageManager)}`,
39
+ "",
40
+ ]);
41
+ // ── Browser tracking (@affitor/sdk) — click capture ──
42
+ // `@affitor/sdk` is one package covering browser + server (via the /server
43
+ // subpath); installing it here also satisfies the server-side step below.
44
+ let sdkInstalled = false;
45
+ if (stack.framework === "unknown" || !stack.entryFile || !stack.componentDir) {
46
+ logger.step("Framework not auto-detectable — add the browser tracker manually:");
47
+ printScriptTagInstructions(opts);
48
+ }
49
+ else if (!(sdkInstalled = await installPackage(stack.packageManager, opts.cwd, SDK_PACKAGE, opts.autoConfirm))) {
50
+ logger.warn(`Skipped/failed installing ${SDK_PACKAGE} — use the script tag instead:`);
51
+ printScriptTagInstructions(opts);
52
+ }
53
+ else {
54
+ // Create the tracker component (new file — always safe).
55
+ const componentPath = join(stack.componentDir, "affitor-tracker.tsx");
56
+ if (existsSync(componentPath)) {
57
+ logger.step(`${rel(opts.cwd, componentPath)} already exists — skipped`);
58
+ }
59
+ else {
60
+ const useClient = stack.framework === "next-app";
61
+ writeFileSync(componentPath, trackerComponentSource(opts.programId, useClient), "utf8");
62
+ logger.success(`Created ${rel(opts.cwd, componentPath)}`);
63
+ }
64
+ // Wire <AffitorTracker /> into the entry (diff preview + confirm).
65
+ const original = readFileSync(stack.entryFile, "utf8");
66
+ const result = stack.framework === "next-app"
67
+ ? injectAppLayout(original, "./affitor-tracker")
68
+ : injectPagesApp(original, "./affitor-tracker");
69
+ const entryLabel = rel(opts.cwd, stack.entryFile);
70
+ if (result.status === "already") {
71
+ logger.step(`${entryLabel} already wired — skipped`);
72
+ }
73
+ else if (result.status === "unrecognized") {
74
+ logger.warn(`Couldn't safely edit ${entryLabel}. Add this yourself:`);
75
+ printEntrySnippet(stack.framework);
76
+ }
77
+ else {
78
+ showAddedDiff(entryLabel, result.added);
79
+ const ok = opts.autoConfirm || (await confirmAction(`Apply this change to ${basename(stack.entryFile)}?`));
80
+ if (ok) {
81
+ writeFileSync(stack.entryFile, result.content, "utf8");
82
+ logger.success(`Wired tracking into ${entryLabel}`);
83
+ }
84
+ else {
85
+ logger.step("Skipped. Add <AffitorTracker /> at the app root when ready.");
86
+ }
87
+ }
88
+ }
89
+ // ── Server-side conversion (@affitor/sdk/server) — lead binding + sale ──
90
+ // Scaffold the client + print guided snippets. The Affitor class ships in the
91
+ // same `@affitor/sdk` package (via /server), so reuse the browser install
92
+ // above — never run a second `npm install`. Never edits auth/payment code.
93
+ await setupServerTracking(opts, stack.packageManager, sdkInstalled);
94
+ }
95
+ async function setupServerTracking(opts, pm, sdkInstalled) {
96
+ const provider = detectPaymentProvider(opts.cwd);
97
+ logger.titledBox("Server-side conversion (@affitor/sdk/server)", [
98
+ "",
99
+ ` Payment provider: ${provider === "unknown" ? format.yellow("not detected") : format.green(provider)}`,
100
+ "",
101
+ ]);
102
+ // `@affitor/sdk` is one package (browser + server). Install it only if the
103
+ // browser step didn't already — otherwise dedupe and reuse it.
104
+ const installed = sdkInstalled || (await installPackage(pm, opts.cwd, SDK_PACKAGE, opts.autoConfirm));
105
+ if (installed) {
106
+ const clientDir = existsSync(join(opts.cwd, "src")) ? join(opts.cwd, "src", "lib") : join(opts.cwd, "lib");
107
+ const clientPath = join(clientDir, "affitor.ts");
108
+ if (existsSync(clientPath)) {
109
+ logger.step(`${rel(opts.cwd, clientPath)} already exists — skipped`);
110
+ }
111
+ else {
112
+ mkdirSync(clientDir, { recursive: true });
113
+ writeFileSync(clientPath, affitorClientSource(), "utf8");
114
+ logger.success(`Created ${rel(opts.cwd, clientPath)}`);
115
+ }
116
+ }
117
+ else {
118
+ const { cmd, args } = installCommand(pm, SDK_PACKAGE);
119
+ logger.warn(`Skipped/failed installing ${SDK_PACKAGE} — install it when ready: ${cmd} ${args.join(" ")}`);
120
+ }
121
+ printServerSnippets(serverTrackingSnippets(provider));
122
+ }
123
+ function printServerSnippets(s) {
124
+ const lines = ["", ` ${format.dim("1) At signup — bind the customer (server-side):")}`];
125
+ for (const l of s.lead.split("\n"))
126
+ lines.push(` ${format.cyan(l)}`);
127
+ lines.push("", ` ${format.dim(`2) At purchase — ${s.saleContext}:`)}`);
128
+ for (const l of s.sale.split("\n"))
129
+ lines.push(` ${format.cyan(l)}`);
130
+ lines.push("", ` ${format.dim("3) On refund — reverse the commission:")}`);
131
+ for (const l of s.refund.split("\n"))
132
+ lines.push(` ${format.cyan(l)}`);
133
+ lines.push("", ` ${format.dim("Paste these in — the wizard never edits your auth/payment code.")}`, "");
134
+ logger.titledBox("Track conversions (add to your backend)", lines);
135
+ }
136
+ async function installPackage(pm, cwd, pkg, autoConfirm) {
137
+ const { cmd, args } = installCommand(pm, pkg);
138
+ const ok = autoConfirm || (await confirmAction(`Install ${pkg} with \`${cmd} ${args.join(" ")}\`?`));
139
+ if (!ok)
140
+ return false;
141
+ logger.step(`Running ${cmd} ${args.join(" ")} …`);
142
+ try {
143
+ const res = spawnSync(cmd, args, { cwd, stdio: "inherit" });
144
+ return res.status === 0;
145
+ }
146
+ catch {
147
+ return false;
148
+ }
149
+ }
150
+ function showAddedDiff(file, added) {
151
+ logger.newline();
152
+ logger.info(` ${format.dim("Proposed change to")} ${format.cyan(file)}${format.dim(":")}`);
153
+ for (const line of added) {
154
+ logger.info(` ${format.green("+ " + line)}`);
155
+ }
156
+ logger.newline();
157
+ }
158
+ function printEntrySnippet(framework) {
159
+ if (framework === "next-pages") {
160
+ logger.info(` ${format.cyan("import { AffitorTracker } from './affitor-tracker';")}`);
161
+ logger.info(` ${format.dim("// render <AffitorTracker /> alongside <Component {...pageProps} />")}`);
162
+ }
163
+ else {
164
+ logger.info(` ${format.cyan("import { AffitorTracker } from './affitor-tracker';")}`);
165
+ logger.info(` ${format.dim("// render <AffitorTracker /> inside <body> of app/layout.tsx")}`);
166
+ }
167
+ logger.newline();
168
+ }
169
+ function printScriptTagInstructions(opts) {
170
+ logger.info(` ${format.cyan(`<script src="${opts.apiUrl}/js/affitor-tracker.js"`)}`);
171
+ logger.info(` ${format.cyan(` data-affitor-program-id="${opts.programId}"></script>`)}`);
172
+ logger.info(` ${format.dim("(add to your site's <head>)")}`);
173
+ logger.newline();
174
+ }
175
+ //# sourceMappingURL=wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -13,11 +13,24 @@ export interface AffitorConfig {
13
13
  duration_days: number;
14
14
  };
15
15
  ref_param: string;
16
- stripe_connected: boolean;
16
+ stripe_connected?: boolean;
17
17
  stripe_account_id?: string;
18
- api_key: string;
19
18
  api_url: string;
20
19
  created_at: string;
20
+ api_key?: string;
21
+ }
22
+ export interface AffitorSecrets {
23
+ api_key: string;
24
+ program_id: string;
25
+ stripe_account_id?: string;
26
+ }
27
+ export interface UserCredentials {
28
+ token: string;
29
+ email: string;
30
+ user_id: string;
31
+ advertiser_id: string;
32
+ expires_at: string;
33
+ created_at: string;
21
34
  }
22
35
  export type CommissionType = "percent" | "fixed" | "recurring_percent" | "recurring_fixed";
23
36
  export interface InitOptions {
@@ -56,6 +69,15 @@ export interface ProgramStatus {
56
69
  active_partners: number;
57
70
  pending_commissions: number;
58
71
  }
72
+ export interface ProgramSummary {
73
+ id: number;
74
+ name: string;
75
+ domain: string;
76
+ status: string;
77
+ commission: string;
78
+ partners: number;
79
+ created_at: string;
80
+ }
59
81
  export interface TestEventResult {
60
82
  event_type: "click" | "lead" | "sale";
61
83
  event_id: string;
@@ -77,6 +99,9 @@ export declare const API_URL_UAT = "https://uat-affitor-cms.vanilla-ott.com";
77
99
  export declare const DEFAULT_API_URL = "https://api.affitor.com";
78
100
  export declare const CONFIG_DIR = ".affitor";
79
101
  export declare const CONFIG_FILE = "config.json";
102
+ export declare const SECRETS_FILE = ".env";
103
+ export declare const GLOBAL_CONFIG_DIR = ".affitor";
104
+ export declare const CREDENTIALS_FILE = "credentials.json";
80
105
  export declare const OAUTH_CALLBACK_PORT_START = 3456;
81
106
  export declare const OAUTH_CALLBACK_PORT_END = 3465;
82
107
  export declare const OAUTH_TIMEOUT_MS = 120000;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -3,6 +3,9 @@ export const API_URL_UAT = "https://uat-affitor-cms.vanilla-ott.com";
3
3
  export const DEFAULT_API_URL = API_URL_PROD;
4
4
  export const CONFIG_DIR = ".affitor";
5
5
  export const CONFIG_FILE = "config.json";
6
+ export const SECRETS_FILE = ".env";
7
+ export const GLOBAL_CONFIG_DIR = ".affitor";
8
+ export const CREDENTIALS_FILE = "credentials.json";
6
9
  export const OAUTH_CALLBACK_PORT_START = 3456;
7
10
  export const OAUTH_CALLBACK_PORT_END = 3465;
8
11
  export const OAUTH_TIMEOUT_MS = 120_000;
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsFA,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CAAC;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,yCAAyC,CAAC;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,kBAAkB;IAClB,4BAA4B;IAC5B,cAAc;IACd,wBAAwB;IACxB,iBAAiB;IACjB,+BAA+B;CACvB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgHA,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CAAC;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,yCAAyC,CAAC;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AACnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,kBAAkB;IAClB,4BAA4B;IAC5B,cAAc;IACd,wBAAwB;IACxB,iBAAiB;IACjB,+BAA+B;CACvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "affitor",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "CLI-native affiliate tracking. Connect Stripe, track commissions, manage partners — all from your terminal.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,7 +10,7 @@
10
10
  "build": "tsc",
11
11
  "dev": "tsc --watch",
12
12
  "start": "node dist/cli.js",
13
- "test": "vitest run",
13
+ "test": "vitest run --passWithNoTests",
14
14
  "test:watch": "vitest",
15
15
  "lint": "tsc --noEmit",
16
16
  "prepublishOnly": "npm run build"
@@ -30,7 +30,7 @@
30
30
  "license": "MIT",
31
31
  "repository": {
32
32
  "type": "git",
33
- "url": "https://github.com/Affitor/affiliate-cli"
33
+ "url": "https://github.com/Affitor/cli"
34
34
  },
35
35
  "homepage": "https://affitor.com",
36
36
  "engines": {