@specific.dev/cli 0.1.103 → 0.1.104

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 (68) hide show
  1. package/dist/admin/404/index.html +1 -1
  2. package/dist/admin/404.html +1 -1
  3. package/dist/admin/__next.!KGRlZmF1bHQp.__PAGE__.txt +1 -1
  4. package/dist/admin/__next.!KGRlZmF1bHQp.txt +1 -1
  5. package/dist/admin/__next._full.txt +1 -1
  6. package/dist/admin/__next._head.txt +1 -1
  7. package/dist/admin/__next._index.txt +1 -1
  8. package/dist/admin/__next._tree.txt +1 -1
  9. package/dist/admin/_not-found/__next._full.txt +1 -1
  10. package/dist/admin/_not-found/__next._head.txt +1 -1
  11. package/dist/admin/_not-found/__next._index.txt +1 -1
  12. package/dist/admin/_not-found/__next._not-found.__PAGE__.txt +1 -1
  13. package/dist/admin/_not-found/__next._not-found.txt +1 -1
  14. package/dist/admin/_not-found/__next._tree.txt +1 -1
  15. package/dist/admin/_not-found/index.html +1 -1
  16. package/dist/admin/_not-found/index.txt +1 -1
  17. package/dist/admin/databases/__next.!KGRlZmF1bHQp.databases.__PAGE__.txt +1 -1
  18. package/dist/admin/databases/__next.!KGRlZmF1bHQp.databases.txt +1 -1
  19. package/dist/admin/databases/__next.!KGRlZmF1bHQp.txt +1 -1
  20. package/dist/admin/databases/__next._full.txt +1 -1
  21. package/dist/admin/databases/__next._head.txt +1 -1
  22. package/dist/admin/databases/__next._index.txt +1 -1
  23. package/dist/admin/databases/__next._tree.txt +1 -1
  24. package/dist/admin/databases/index.html +1 -1
  25. package/dist/admin/databases/index.txt +1 -1
  26. package/dist/admin/fullscreen/__next._full.txt +1 -1
  27. package/dist/admin/fullscreen/__next._head.txt +1 -1
  28. package/dist/admin/fullscreen/__next._index.txt +1 -1
  29. package/dist/admin/fullscreen/__next._tree.txt +1 -1
  30. package/dist/admin/fullscreen/__next.fullscreen.__PAGE__.txt +1 -1
  31. package/dist/admin/fullscreen/__next.fullscreen.txt +1 -1
  32. package/dist/admin/fullscreen/databases/__next._full.txt +1 -1
  33. package/dist/admin/fullscreen/databases/__next._head.txt +1 -1
  34. package/dist/admin/fullscreen/databases/__next._index.txt +1 -1
  35. package/dist/admin/fullscreen/databases/__next._tree.txt +1 -1
  36. package/dist/admin/fullscreen/databases/__next.fullscreen.databases.__PAGE__.txt +1 -1
  37. package/dist/admin/fullscreen/databases/__next.fullscreen.databases.txt +1 -1
  38. package/dist/admin/fullscreen/databases/__next.fullscreen.txt +1 -1
  39. package/dist/admin/fullscreen/databases/index.html +1 -1
  40. package/dist/admin/fullscreen/databases/index.txt +1 -1
  41. package/dist/admin/fullscreen/index.html +1 -1
  42. package/dist/admin/fullscreen/index.txt +1 -1
  43. package/dist/admin/index.html +1 -1
  44. package/dist/admin/index.txt +1 -1
  45. package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.__PAGE__.txt +1 -1
  46. package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.txt +1 -1
  47. package/dist/admin/mail/__next.!KGRlZmF1bHQp.txt +1 -1
  48. package/dist/admin/mail/__next._full.txt +1 -1
  49. package/dist/admin/mail/__next._head.txt +1 -1
  50. package/dist/admin/mail/__next._index.txt +1 -1
  51. package/dist/admin/mail/__next._tree.txt +1 -1
  52. package/dist/admin/mail/index.html +1 -1
  53. package/dist/admin/mail/index.txt +1 -1
  54. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.txt +1 -1
  55. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.__PAGE__.txt +1 -1
  56. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.txt +1 -1
  57. package/dist/admin/workflows/__next._full.txt +1 -1
  58. package/dist/admin/workflows/__next._head.txt +1 -1
  59. package/dist/admin/workflows/__next._index.txt +1 -1
  60. package/dist/admin/workflows/__next._tree.txt +1 -1
  61. package/dist/admin/workflows/index.html +1 -1
  62. package/dist/admin/workflows/index.txt +1 -1
  63. package/dist/cli.js +3 -3
  64. package/dist/docs/sync.md +38 -0
  65. package/package.json +1 -1
  66. /package/dist/admin/_next/static/{rh21O0TR1IaWnJRmFmEQ2 → NS9gTLUjY9l1uwVSPIg1A}/_buildManifest.js +0 -0
  67. /package/dist/admin/_next/static/{rh21O0TR1IaWnJRmFmEQ2 → NS9gTLUjY9l1uwVSPIg1A}/_clientMiddlewareManifest.json +0 -0
  68. /package/dist/admin/_next/static/{rh21O0TR1IaWnJRmFmEQ2 → NS9gTLUjY9l1uwVSPIg1A}/_ssgManifest.js +0 -0
package/dist/cli.js CHANGED
@@ -373039,7 +373039,7 @@ function trackEvent(event, properties) {
373039
373039
  event,
373040
373040
  properties: {
373041
373041
  ...properties,
373042
- cli_version: "0.1.103",
373042
+ cli_version: "0.1.104",
373043
373043
  platform: process.platform,
373044
373044
  node_version: process.version,
373045
373045
  project_id: getProjectId()
@@ -376718,7 +376718,7 @@ function compareVersions(a, b) {
376718
376718
  return 0;
376719
376719
  }
376720
376720
  async function checkForUpdate() {
376721
- const currentVersion = "0.1.103";
376721
+ const currentVersion = "0.1.104";
376722
376722
  const response = await fetch(`${BINARIES_BASE_URL}/latest?t=${Date.now()}`);
376723
376723
  if (!response.ok) {
376724
376724
  throw new Error(`Failed to check for updates: HTTP ${response.status}`);
@@ -376986,7 +376986,7 @@ async function projectListCommand() {
376986
376986
  var program = new Command();
376987
376987
  var env = "production";
376988
376988
  var envLabel = env !== "production" ? `[${env.toUpperCase()}] ` : "";
376989
- program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.103").enablePositionalOptions();
376989
+ program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.104").enablePositionalOptions();
376990
376990
  program.command("init").description("Initialize project for use with a coding agent").option("--agent <name...>", "Agents to configure (cursor, claude, codex, other)").addHelpText("after", `
376991
376991
  Examples:
376992
376992
  $ specific init
package/dist/docs/sync.md CHANGED
@@ -46,6 +46,44 @@ For implementation details, see the Electric documentation:
46
46
  - Authentication and proxying: https://electric-sql.com/docs/guides/auth
47
47
  - Shapes and client usage: https://electric-sql.com/docs/guides/shapes
48
48
  - Handling writes: https://electric-sql.com/docs/guides/writes
49
+ - Troubleshooting: https://electric-sql.com/docs/guides/troubleshooting
50
+
51
+ ## Proxy configuration
52
+
53
+ When proxying Electric requests from your backend, you must handle headers and query parameters correctly. Getting these wrong causes silent failures — browsers block responses or serve stale cached data without clear error messages.
54
+
55
+ ### Expose Electric response headers
56
+
57
+ Electric returns custom headers that the client SDK needs (`electric-handle`, `electric-offset`, `electric-schema`). Browsers block JavaScript from reading non-standard response headers unless they are listed in `Access-Control-Expose-Headers`:
58
+
59
+ ```
60
+ Access-Control-Expose-Headers: electric-handle, electric-offset, electric-schema
61
+ ```
62
+
63
+ ### Strip upstream headers
64
+
65
+ Electric's response includes its own CORS and caching headers. If your proxy copies these through and your CORS middleware also adds its own, the browser receives duplicate `Access-Control-Allow-Origin` values and rejects the response. Before setting your own headers, strip these from Electric's response:
66
+
67
+ - `Access-Control-Allow-Origin` and other `Access-Control-*` headers
68
+ - `Content-Encoding` and `Content-Length` (fetch decompresses the body but doesn't update these headers, which breaks browser decoding)
69
+ - `Cache-Control` (see below)
70
+
71
+ ### Override caching
72
+
73
+ Electric returns `Cache-Control` with `max-age` and `stale-age` for request collapsing at CDN level. During development, this can cause browsers to serve stale cached responses — for example, responses cached before CORS headers were configured correctly will keep failing even after the proxy is fixed. Override with `Cache-Control: no-store` on your proxy response to prevent this.
74
+
75
+ ### Control query parameters
76
+
77
+ Set these server-side — never pass them through from the client:
78
+
79
+ - `table` — letting clients specify the table allows access to any table
80
+ - `where` — this is your authorization filter
81
+ - `columns` — clients could request sensitive columns
82
+ - `secret` — never expose the API secret to clients
83
+
84
+ Only forward Electric protocol parameters from the client:
85
+
86
+ - `offset`, `handle`, `live`, `live_sse`, `replica`, `log`
49
87
 
50
88
  ## Using the Electric TypeScript SDK
51
89
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@specific.dev/cli",
3
- "version": "0.1.103",
3
+ "version": "0.1.104",
4
4
  "description": "CLI for Specific infrastructure-as-code",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",