@mailto.foo/sdk 1.5.4 → 1.5.6

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 CHANGED
@@ -87,15 +87,15 @@ try {
87
87
  Your publish key (`pk_xxx`) is tied to your mailto.foo account and the domain you registered. It is safe to expose in frontend code — it only allows submissions, not reads.
88
88
  Get your publish key from your mailto.foo dashboard.
89
89
 
90
- ## Claude Code
90
+ ## AI Setup
91
91
 
92
- If you use [Claude Code](https://claude.com/claude-code), run:
92
+ If you use an AI coding agent ([Claude Code](https://claude.com/claude-code), Cursor, or anything else that reads `AGENTS.md`), run:
93
93
 
94
94
  ```bash
95
95
  npx @mailto.foo/sdk init
96
96
  ```
97
97
 
98
- This adds a `/mailto-foo` slash command to your project (`.claude/commands/mailto-foo.md`) with everything Claude needs to know to wire up subscribe/contact forms with this SDK.
98
+ This writes everything your agent needs to know to wire up subscribe/contact forms into `AGENTS.md` at your project root creating the file if it doesn't exist, or appending to it if it does.
99
99
 
100
100
  ## License
101
101
  MIT
package/dist/bin/cli.js CHANGED
@@ -1,17 +1,25 @@
1
1
  #!/usr/bin/env node
2
- import { copyFileSync, mkdirSync } from "node:fs";
2
+ import { appendFileSync, existsSync, readFileSync, writeFileSync } from "node:fs";
3
3
  import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  const __dirname = dirname(fileURLToPath(import.meta.url));
6
6
  const command = process.argv[2];
7
+ const MARKER = "<!-- mailto.foo/sdk -->";
7
8
  const init = () => {
8
- const src = join(__dirname, "..", "commands", "mailto-foo.md");
9
- const destDir = join(process.cwd(), ".claude", "commands");
10
- const dest = join(destDir, "mailto-foo.md");
11
- mkdirSync(destDir, { recursive: true });
12
- copyFileSync(src, dest);
13
- console.log(`Created ${join(".claude", "commands", "mailto-foo.md")}`);
14
- console.log("Run /mailto-foo in Claude Code to integrate @mailto.foo/sdk.");
9
+ const src = join(__dirname, "..", "knowledge", "mailto-foo.md");
10
+ const dest = join(process.cwd(), "AGENTS.md");
11
+ const content = readFileSync(src, "utf8");
12
+ if (existsSync(dest)) {
13
+ if (readFileSync(dest, "utf8").includes(MARKER)) {
14
+ console.log("AGENTS.md already has mailto.foo/sdk integration notes.");
15
+ return;
16
+ }
17
+ appendFileSync(dest, `\n${content}`);
18
+ }
19
+ else {
20
+ writeFileSync(dest, content);
21
+ }
22
+ console.log("Added @mailto.foo/sdk integration notes to AGENTS.md");
15
23
  };
16
24
  switch (command) {
17
25
  case "init":
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,MAAM,IAAI,GAAG,GAAG,EAAE;IACjB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAE5C,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,QAAQ,OAAO,EAAE,CAAC;IACjB,KAAK,MAAM;QACV,IAAI,EAAE,CAAC;QACP,MAAM;IACP;QACC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,MAAM,MAAM,GAAG,yBAAyB,CAAC;AAEzC,MAAM,IAAI,GAAG,GAAG,EAAE;IACjB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE1C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO;QACR,CAAC;QACD,cAAc,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACP,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF,QAAQ,OAAO,EAAE,CAAC;IACjB,KAAK,MAAM;QACV,IAAI,EAAE,CAAC;QACP,MAAM;IACP;QACC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@ interface SubscribeConfig {
8
8
  sid?: string;
9
9
  f?: string;
10
10
  }
11
- export declare const API_BASE = "https://api-mailto-foo.dan-7bc.workers.dev";
11
+ export declare const API_BASE = "https://api.mailto.foo";
12
12
  export declare class Mailto {
13
13
  private publishKey;
14
14
  private _sid?;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export const API_BASE = "https://api-mailto-foo.dan-7bc.workers.dev";
1
+ export const API_BASE = "https://api.mailto.foo";
2
2
  const fetchPublisherConfig = async (publishKey) => {
3
3
  const controller = new AbortController();
4
4
  const timeout = setTimeout(() => controller.abort(), 5000);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAEjD,MAAM,oBAAoB,GAAG,KAAK,EAAE,UAAkB,EAA4B,EAAE;IAClF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,WAAW,UAAU,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClG,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;YAC9E,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBACtD,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAyB,CAAA,CAAC,KAAK,IAAI,wBAAwB,GAAG,CAAC,MAAM,EAAE;gBACxF,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,EAA8B,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,sBAAsB,GAAyB,IAAI,CAAC;AAExD,MAAM,mBAAmB,GAAG,GAAkB,EAAE;IAC9C,IAAK,MAAc,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IACxD,IAAI,sBAAsB;QAAE,OAAO,sBAAsB,CAAC;IAE1D,sBAAsB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,GAAG,uEAAuE,CAAC;QACrF,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE;YACvB,sBAAsB,GAAG,IAAI,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,OAAO,sBAAsB,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAmB,EAAE;IACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG;YACtB,gBAAgB;YAChB,SAAS;YACT,oBAAoB;YACpB,cAAc;YACd,oBAAoB;YACpB,wBAAwB;YACxB,4BAA4B;SAC7B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,IAAI,QAAgB,CAAC;QACrB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC;gBAAE,MAAc,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1E,IAAI,CAAC;gBAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;QAC7E,CAAC,CAAC;QAEF,QAAQ,GAAI,MAAc,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE;YAClD,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YACD,gBAAgB,EAAE,GAAG,EAAE;gBACrB,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,kBAAkB,EAAE,GAAG,EAAE;gBACvB,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC/C,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE;IACnE,MAAM,mBAAmB,EAAE,CAAC;IAE5B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,oFAAoF,CAAC;IAC/G,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,QAAgB,CAAC;IACrB,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,CAAC;YAAE,MAAc,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1E,IAAI,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC/E,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACjE,QAAQ,GAAI,MAAc,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE;YACrD,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,kBAAkB;YAC9B,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,gBAAgB,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrD,kBAAkB,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;SACvF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,OAAO,MAAM;IACT,UAAU,CAAS;IACnB,IAAI,CAAU;IACd,GAAG,CAAU;IAErB,YAAY,MAAuB;QACjC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAqB;QACxC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAI,EAAuB,CAAC,IAAI,CAAC;YAC3C,IAAI,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,WAAW,IAAI,CAAC,UAAU,OAAO,CAAC,CAAC;QAClE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAErD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO;YACpB,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAA4C,CAAC;YACxF,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACjB,IAAI,SAAS;gBAAE,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YAErC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;YACpB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;YACnB,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;YAC3B,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YACpB,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAC1C,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,kFAAkF,CAAC;YACzG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAmB;QACjC,MAAM,eAAe,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpE,MAAM,KAAK,GAAG,eAAe,CAAC,gBAAgB;YAC5C,CAAC,CAAC,MAAM,iBAAiB,CAAC,eAAe,CAAC,gBAAgB,CAAC;YAC3D,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,IAAI,GAAkB;YAC1B,IAAI;YACJ,MAAM,EAAE;gBACN,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK;gBACL,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClD,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;aAC/C;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,YAAY,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBACtD,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAyB,CAAA,CAAC,KAAK,IAAI,qBAAqB;gBACzE,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;CACF"}
@@ -1,6 +1,4 @@
1
- ---
2
- description: Integrate @mailto.foo/sdk for email subscription/contact forms
3
- ---
1
+ <!-- mailto.foo/sdk -->
4
2
 
5
3
  # @mailto.foo/sdk integration
6
4
 
@@ -23,7 +21,7 @@ await mailto.subscribe({ email: 'user@example.com', /* ...any extra string field
23
21
  - On a non-OK response it throws an `Error` whose message is the API's `error` field (JSON responses) or raw text body (non-JSON responses).
24
22
  - On success it resolves with `void` — there is no return payload to inspect.
25
23
 
26
- `API_BASE` is hardcoded to `https://api-mailto-foo.dan-7bc.workers.dev`.
24
+ `API_BASE` is a hardcoded constant: `https://api.mailto.foo`. There is intentionally no env var or build-time override — allowing one would let anyone embedding the SDK silently redirect subscribe/config traffic to an arbitrary host while still presenting as `@mailto.foo/sdk`.
27
25
 
28
26
  ## CDN auto-enhancement (`src/cdn.ts`)
29
27
 
@@ -89,9 +87,3 @@ try {
89
87
  - Turnstile script loading is memoized via the module-level `turnstileScriptPromise` — it's only ever injected once per page, even across multiple forms/instances.
90
88
  - The form-action regex requires the action URL to end in `/<publishKey>/subscribe` (optionally with a trailing slash or query/hash) and the key to start with `pk_` or `ph_public_` — forms with other URL shapes are silently skipped, but forms pointing at *some* `<key>/subscribe` path on a mailto.foo host with an unrecognized prefix have submission blocked with a console warning.
91
89
  - Extra form fields beyond `email` are passed straight through to the API as arbitrary string key/value pairs (`SubscribeData` is `{ email: string; [key: string]: string }`).
92
-
93
- ## Task
94
-
95
- $ARGUMENTS
96
-
97
- Use the reference above to add or debug a mailto.foo subscribe/contact form in this project.
package/dist/sdk.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";(()=>{var m="https://api-mailto-foo.dan-7bc.workers.dev",h=async t=>{let e=new AbortController,o=setTimeout(()=>e.abort(),5e3);try{let n=await fetch(`${m}/config/${t}/config`,{signal:e.signal});if(clearTimeout(o),!n.ok){if(n.status===404)throw new Error(`Invalid publish key: ${t}`);let i=(n.headers.get("content-type")??"").includes("application/json")?(await n.json()).error??`Config fetch failed: ${n.status}`:await n.text();throw new Error(i)}return n.json()}catch(n){throw clearTimeout(o),n}},u=null,g=()=>window.turnstile?Promise.resolve():u||(u=new Promise((t,e)=>{let o=document.createElement("script");o.src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit",o.async=!0,o.defer=!0,o.onload=()=>t(),o.onerror=n=>{u=null,e(n)},document.head.appendChild(o)}),u),y=t=>new Promise((e,o)=>{let n=document.createElement("div");n.style.cssText=["position:fixed","inset:0","z-index:2147483647","display:flex","align-items:center","justify-content:center","background:rgba(0,0,0,0.5)"].join(";");let s=document.createElement("div");n.appendChild(s),document.body.appendChild(n);let i,r=()=>{try{window.turnstile.remove(i)}catch{}try{document.body.removeChild(n)}catch{}};i=window.turnstile.render(s,{sitekey:t,callback:a=>{r(),e(a)},"error-callback":()=>{r(),o(new Error("Turnstile verification failed"))},"expired-callback":()=>{r(),o(new Error("Turnstile token expired"))}})}),w=async t=>{await g();let e=document.createElement("div");e.style.cssText="position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:2147483647;",document.body.appendChild(e);let o,n=()=>{try{window.turnstile.remove(o)}catch{}try{document.body.removeChild(e)}catch{}};return await new Promise((i,r)=>{o=window.turnstile.render(e,{sitekey:t,appearance:"interaction-only",callback:a=>{n(),i(a)},"error-callback":()=>{n(),i(null)},"expired-callback":()=>{n(),r(new Error("Turnstile token expired"))}})})??y(t)},d=class{publishKey;_sid;_hf;constructor(e){this.publishKey=e.publishKey}async injectHoneypot(e){let o=new Set;for(let r of e.elements){let a=r.name;a&&o.add(a)}let n=new URL(`${m}/config/${this.publishKey}/hint`);n.searchParams.set("fields",[...o].join(","));let s=new AbortController,i=setTimeout(()=>s.abort(),5e3);try{let r=await fetch(n.toString(),{signal:s.signal});if(clearTimeout(i),!r.ok)return;let{field:a,sessionId:c}=await r.json();if(!a)return;this._hf=a,c&&(this._sid=c);let l=document.createElement("input");l.type="text",l.name=a,l.autocomplete="off",l.tabIndex=-1,l.setAttribute("aria-hidden","true"),l.style.cssText="position:absolute;left:-9999px;top:-9999px;width:1px;height:1px;overflow:hidden;",e.appendChild(l)}catch{clearTimeout(i)}}async subscribe(e){let o=await h(this.publishKey),n=o.turnstileSiteKey?await w(o.turnstileSiteKey):void 0,s={data:e,config:{publishKey:this.publishKey,token:n,...this._sid!==void 0&&{sid:this._sid},...this._hf!==void 0&&{f:this._hf}}},i=await fetch(`${m}/subscribe`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!i.ok){let a=(i.headers.get("content-type")??"").includes("application/json")?(await i.json()).error??"Subscription failed":await i.text();throw new Error(a)}}};var E=/\/((?:pk_|ph_public_)[A-Za-z0-9_-]+)\/subscribe\/?(?:[?#].*)?$/,T=/\/[A-Za-z0-9_-]+\/subscribe\/?(?:[?#].*)?$/,S=/(?:^|\.)mailto-foo\.|(?:^|\.)mailto\.foo$/,v=t=>{try{let e=new URL(t,window.location.href);return S.test(e.hostname)&&T.test(e.pathname)}catch{return!1}},C=t=>{t.addEventListener("submit",e=>{e.preventDefault(),console.warn(`mailto.foo: unrecognized publish key in form action "${t.action}" \u2014 submission blocked to avoid a full-page redirect. Update the SDK or check the form action URL.`)})},k=t=>{let e={};for(let[o,n]of new FormData(t).entries())typeof n=="string"&&(e[o]=n);return e},x="mailto-foo-error",L="mailto-foo-success",_="mailto-foo-button",A="mailto:submitting",P="mailto:success",M="mailto:error",b=(t,e)=>{let o=t.querySelector(`.${e}`);if(o)return o;let n=document.createElement("div");return n.className=e,t.appendChild(n),n},H=t=>{let e=new Set;for(let o of t.querySelectorAll(`.${_}, button[type="submit"], input[type="submit"]`))(o instanceof HTMLButtonElement||o instanceof HTMLInputElement)&&e.add(o);return[...e]},f=(t,e)=>{for(let o of t)o.disabled=e,e?o.setAttribute("data-loading","true"):o.removeAttribute("data-loading")},B=(t,e)=>{let o=new d({publishKey:e}),n=t.hasAttribute("data-verbose"),s=n?b(t,x):null,i=n?b(t,L):null,r=n?H(t):[];o.injectHoneypot(t),t.addEventListener("submit",async a=>{a.preventDefault(),n&&f(r,!0),t.dispatchEvent(new CustomEvent(A,{bubbles:!0}));try{await o.subscribe(k(t)),s&&(s.textContent=""),i&&(i.textContent="Thanks for subscribing!"),t.reset(),t.dispatchEvent(new CustomEvent(P,{bubbles:!0}))}catch(c){i&&(i.textContent=""),s&&(s.textContent=c instanceof Error?c.message:String(c)),t.dispatchEvent(new CustomEvent(M,{bubbles:!0,detail:{error:c}}))}finally{n&&f(r,!1)}})},p=()=>{for(let t of document.querySelectorAll("form[action]")){let e=t.action.match(E);e?.[1]?B(t,e[1]):v(t.action)&&C(t)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",p):p();window.Mailto=d;})();
1
+ "use strict";(()=>{var m="https://api.mailto.foo",h=async t=>{let e=new AbortController,o=setTimeout(()=>e.abort(),5e3);try{let n=await fetch(`${m}/config/${t}/config`,{signal:e.signal});if(clearTimeout(o),!n.ok){if(n.status===404)throw new Error(`Invalid publish key: ${t}`);let i=(n.headers.get("content-type")??"").includes("application/json")?(await n.json()).error??`Config fetch failed: ${n.status}`:await n.text();throw new Error(i)}return n.json()}catch(n){throw clearTimeout(o),n}},u=null,g=()=>window.turnstile?Promise.resolve():u||(u=new Promise((t,e)=>{let o=document.createElement("script");o.src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit",o.async=!0,o.defer=!0,o.onload=()=>t(),o.onerror=n=>{u=null,e(n)},document.head.appendChild(o)}),u),y=t=>new Promise((e,o)=>{let n=document.createElement("div");n.style.cssText=["position:fixed","inset:0","z-index:2147483647","display:flex","align-items:center","justify-content:center","background:rgba(0,0,0,0.5)"].join(";");let s=document.createElement("div");n.appendChild(s),document.body.appendChild(n);let i,r=()=>{try{window.turnstile.remove(i)}catch{}try{document.body.removeChild(n)}catch{}};i=window.turnstile.render(s,{sitekey:t,callback:a=>{r(),e(a)},"error-callback":()=>{r(),o(new Error("Turnstile verification failed"))},"expired-callback":()=>{r(),o(new Error("Turnstile token expired"))}})}),w=async t=>{await g();let e=document.createElement("div");e.style.cssText="position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:2147483647;",document.body.appendChild(e);let o,n=()=>{try{window.turnstile.remove(o)}catch{}try{document.body.removeChild(e)}catch{}};return await new Promise((i,r)=>{o=window.turnstile.render(e,{sitekey:t,appearance:"interaction-only",callback:a=>{n(),i(a)},"error-callback":()=>{n(),i(null)},"expired-callback":()=>{n(),r(new Error("Turnstile token expired"))}})})??y(t)},d=class{publishKey;_sid;_hf;constructor(e){this.publishKey=e.publishKey}async injectHoneypot(e){let o=new Set;for(let r of e.elements){let a=r.name;a&&o.add(a)}let n=new URL(`${m}/config/${this.publishKey}/hint`);n.searchParams.set("fields",[...o].join(","));let s=new AbortController,i=setTimeout(()=>s.abort(),5e3);try{let r=await fetch(n.toString(),{signal:s.signal});if(clearTimeout(i),!r.ok)return;let{field:a,sessionId:c}=await r.json();if(!a)return;this._hf=a,c&&(this._sid=c);let l=document.createElement("input");l.type="text",l.name=a,l.autocomplete="off",l.tabIndex=-1,l.setAttribute("aria-hidden","true"),l.style.cssText="position:absolute;left:-9999px;top:-9999px;width:1px;height:1px;overflow:hidden;",e.appendChild(l)}catch{clearTimeout(i)}}async subscribe(e){let o=await h(this.publishKey),n=o.turnstileSiteKey?await w(o.turnstileSiteKey):void 0,s={data:e,config:{publishKey:this.publishKey,token:n,...this._sid!==void 0&&{sid:this._sid},...this._hf!==void 0&&{f:this._hf}}},i=await fetch(`${m}/subscribe`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!i.ok){let a=(i.headers.get("content-type")??"").includes("application/json")?(await i.json()).error??"Subscription failed":await i.text();throw new Error(a)}}};var E=/\/((?:pk_|ph_public_)[A-Za-z0-9_-]+)\/subscribe\/?(?:[?#].*)?$/,T=/\/[A-Za-z0-9_-]+\/subscribe\/?(?:[?#].*)?$/,S=/(?:^|\.)mailto-foo\.|(?:^|\.)mailto\.foo$/,C=t=>{try{let e=new URL(t,window.location.href);return S.test(e.hostname)&&T.test(e.pathname)}catch{return!1}},v=t=>{t.addEventListener("submit",e=>{e.preventDefault(),console.warn(`mailto.foo: unrecognized publish key in form action "${t.action}" \u2014 submission blocked to avoid a full-page redirect. Update the SDK or check the form action URL.`)})},k=t=>{let e={};for(let[o,n]of new FormData(t).entries())typeof n=="string"&&(e[o]=n);return e},x="mailto-foo-error",L="mailto-foo-success",_="mailto-foo-button",A="mailto:submitting",P="mailto:success",M="mailto:error",b=(t,e)=>{let o=t.querySelector(`.${e}`);if(o)return o;let n=document.createElement("div");return n.className=e,t.appendChild(n),n},H=t=>{let e=new Set;for(let o of t.querySelectorAll(`.${_}, button[type="submit"], input[type="submit"]`))(o instanceof HTMLButtonElement||o instanceof HTMLInputElement)&&e.add(o);return[...e]},f=(t,e)=>{for(let o of t)o.disabled=e,e?o.setAttribute("data-loading","true"):o.removeAttribute("data-loading")},B=(t,e)=>{let o=new d({publishKey:e}),n=t.hasAttribute("data-verbose"),s=n?b(t,x):null,i=n?b(t,L):null,r=n?H(t):[];o.injectHoneypot(t),t.addEventListener("submit",async a=>{a.preventDefault(),n&&f(r,!0),t.dispatchEvent(new CustomEvent(A,{bubbles:!0}));try{await o.subscribe(k(t)),s&&(s.textContent=""),i&&(i.textContent="Thanks for subscribing!"),t.reset(),t.dispatchEvent(new CustomEvent(P,{bubbles:!0}))}catch(c){i&&(i.textContent=""),s&&(s.textContent=c instanceof Error?c.message:String(c)),t.dispatchEvent(new CustomEvent(M,{bubbles:!0,detail:{error:c}}))}finally{n&&f(r,!1)}})},p=()=>{for(let t of document.querySelectorAll("form[action]")){let e=t.action.match(E);e?.[1]?B(t,e[1]):C(t.action)&&v(t)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",p):p();window.Mailto=d;})();
package/package.json CHANGED
@@ -2,11 +2,11 @@
2
2
  "name": "@mailto.foo/sdk",
3
3
  "type": "module",
4
4
  "description": "Headless email subscription and contact form SDK for mailto.foo",
5
- "version": "1.5.4",
5
+ "version": "1.5.6",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "bin": {
9
- "sdk": "./dist/bin/cli.js"
9
+ "mailto-foo": "./dist/bin/cli.js"
10
10
  },
11
11
  "repository": {
12
12
  "type": "git",
@@ -30,9 +30,9 @@
30
30
  "url": "https://gitlab.com/mailto.foo/sdk/-/boards"
31
31
  },
32
32
  "scripts": {
33
- "build": "tsc && pnpm run build:cdn && pnpm run build:commands && chmod +x dist/bin/cli.js",
33
+ "build": "tsc && pnpm run build:cdn && pnpm run build:knowledge && chmod +x dist/bin/cli.js",
34
34
  "build:cdn": "esbuild src/cdn.ts --bundle --minify --format=iife --outfile=dist/sdk.min.js",
35
- "build:commands": "mkdir -p dist/commands && cp src/commands/mailto-foo.md dist/commands/mailto-foo.md",
35
+ "build:knowledge": "mkdir -p dist/knowledge && cp src/knowledge/mailto-foo.md dist/knowledge/mailto-foo.md",
36
36
  "check": "biome check --write ./src",
37
37
  "workflow:check": "biome check ./src",
38
38
  "release": "pnpm run build && changeset publish"