notiformer 1.1.1 → 1.1.3

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/index.d.ts CHANGED
@@ -1,33 +1,23 @@
1
1
  /**
2
- * Notiformer — Real-time alerts and feature gates for your code.
2
+ * Notiformer — Real-time alerts, approval gates, and feature flags.
3
3
  *
4
- * Works in Node.js (backend) and the browser (frontend).
4
+ * Pricing model (v2):
5
+ * Each plan includes a free credit allowance per billing cycle.
6
+ * Once the allowance is consumed, usage continues at fixed per-unit prices
7
+ * (pay-as-you-go), capped at a hard system limit per cycle.
8
+ * See https://notiformer.com/pricing for current rates.
5
9
  *
6
- * @example
7
- * import { Notiformer } from 'notiformer';
10
+ * Billing errors (HTTP 402):
11
+ * - "card_required" → add a payment method at app.notiformer.com
12
+ * - "card_locked" → card declined; update payment method
13
+ * - "cap_reached" → hard cycle cap reached; usage resets at cycleResetsAt
8
14
  *
9
- * const n = new Notiformer({ apiKey: 'ntf_live_...' });
10
- *
11
- * // Fire-and-forget alert
12
- * await n.event({ channel: 'payments', event: 'new_sale', notify: true });
13
- *
14
- * // Block and wait for approval
15
- * const { approved } = await n.ask({ message: 'Deploy to prod?' });
16
- *
17
- * // Block and wait for a choice from multiple options
18
- * const { selected } = await n.select({
19
- * message: 'How to handle the failed payment?',
20
- * options: [
21
- * { value: 'retry', label: '🔄 Retry in 1 hour' },
22
- * { value: 'notify', label: '📧 Notify customer' },
23
- * { value: 'cancel', label: '✕ Cancel order', isDestructive: true },
24
- * ],
25
- * fallback: 'notify',
26
- * });
15
+ * The SDK never throws by default. To opt in:
16
+ * new Notiformer({ apiKey, throwOnError: true })
27
17
  */
28
18
  import type { NotiformerConfig, EventPayload, EventResponse, GateOptions, GateResult, AskPayload, AskResult, SelectPayload, SelectResult } from "./types";
29
- export type { NotiformerConfig, EventPayload, EventResponse, GateOptions, GateResult, AskPayload, AskResult, SelectPayload, SelectResult, };
30
- export type { SelectOption } from "./types";
19
+ export type { NotiformerConfig, EventPayload, EventResponse, GateOptions, GateResult, AskPayload, AskResult, SelectPayload, SelectResult, NotiformerErrorCode, SelectOption, } from "./types";
20
+ export { NotiformerError } from "./types";
31
21
  export declare class Notiformer {
32
22
  private readonly apiKey;
33
23
  private readonly baseUrl;
@@ -39,78 +29,35 @@ export declare class Notiformer {
39
29
  private readonly gateCache;
40
30
  private readonly isPlaceholder;
41
31
  constructor(config: NotiformerConfig);
42
- /**
43
- * Send an event and optionally notify recipients.
44
- * Never throws by default — returns null if the call fails.
45
- */
46
32
  event(payload: EventPayload): Promise<EventResponse | null>;
47
- /**
48
- * Check whether a feature gate is enabled.
49
- * Results are cached locally for 30 seconds by default.
50
- * Returns false if the call fails or the plan doesn't support gates.
51
- */
52
33
  gate(key: string, options?: GateOptions): Promise<boolean>;
53
34
  gateDetails(key: string, options?: GateOptions): Promise<GateResult>;
54
35
  clearGateCache(key?: string): void;
55
- /**
56
- * Pause execution and wait for a human to approve or deny.
57
- *
58
- * A push notification is sent to the Notiformer app with Approve
59
- * and Deny buttons. The Promise resolves when you respond or when
60
- * the timeout expires.
61
- *
62
- * Never throws by default.
63
- *
64
- * @example
65
- * const { approved } = await n.ask({
66
- * message: `Send campaign to ${count} users?`,
67
- * context: `Campaign: Black Friday · ${count} recipients`,
68
- * timeout: 300,
69
- * });
70
- * if (approved) await sendEmails();
71
- */
72
36
  ask(payload: AskPayload): Promise<AskResult>;
73
- /**
74
- * Pause execution and wait for a human to choose from multiple options.
75
- *
76
- * Unlike ask() which returns a boolean, select() returns the `value`
77
- * string of the chosen option. Use it when you need more than two actions.
78
- *
79
- * Uses the same monthly quota as ask().
80
- * Never throws by default.
81
- *
82
- * @example
83
- * const { selected } = await n.select({
84
- * message: 'How should I handle the failed payment?',
85
- * options: [
86
- * { value: 'retry', label: '🔄 Retry in 1 hour' },
87
- * { value: 'notify', label: '📧 Notify the customer' },
88
- * { value: 'cancel', label: '✕ Cancel the order', isDestructive: true },
89
- * ],
90
- * fallback: 'notify', // returned automatically on timeout
91
- * timeout: 300,
92
- * });
93
- *
94
- * if (selected === 'retry') await scheduleRetry();
95
- * if (selected === 'notify') await sendEmail();
96
- * if (selected === 'cancel') await cancelOrder();
97
- */
98
37
  select(payload: SelectPayload): Promise<SelectResult>;
99
38
  private pollAsk;
100
39
  private pollSelect;
101
- private sleep;
102
40
  /**
103
- * If the API response includes an upgradeUrl (quota exceeded),
104
- * print a visible warning in the developer's console.
41
+ * Parse an HTTP error response into a typed NotiformerError.
42
+ */
43
+ private parseError;
44
+ private codeFromStatus;
45
+ /**
46
+ * Print a user-friendly message for billing errors (402).
47
+ * This is what developers see in their console — should be actionable.
48
+ */
49
+ /**
50
+ * Print a formatted, actionable billing error in the developer console.
105
51
  */
106
- private warnUpgrade;
52
+ private logBilling;
53
+ private toError;
107
54
  private failAsk;
108
55
  private failSelect;
109
56
  private fail;
57
+ private sleep;
110
58
  private post;
111
59
  private get;
112
60
  private request;
113
- private friendlyNetworkError;
114
61
  }
115
62
  export default Notiformer;
116
63
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACb,MAAM,SAAS,CAAC;AAIjB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,GACb,CAAC;AACF,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO5C,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;gBAE5B,MAAM,EAAE,gBAAgB;IAwCpC;;;OAGG;IACG,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAsDjE;;;;OAIG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC9D,WAAW,CACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC;IAKtB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQlC;;;;;;;;;;;;;;;;OAgBG;IACG,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAoDlD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YA0E7C,OAAO;YA8CP,UAAU;IAoDxB,OAAO,CAAC,KAAK;IAIb;;;OAGG;IACH,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,IAAI;YAOE,IAAI;YAIJ,GAAG;YAIH,OAAO;IAmBrB,OAAO,CAAC,oBAAoB;CAmB7B;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EAEb,MAAM,SAAS,CAAC;AAKjB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAgB1C,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;gBAE5B,MAAM,EAAE,gBAAgB;IAsC9B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA6C3D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA0B9D,WAAW,CACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC;IAKtB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5B,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IA0C5C,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YA8D7C,OAAO;YAmCP,UAAU;IA0CxB;;OAEG;YACW,UAAU;IAcxB,OAAO,CAAC,cAAc;IAStB;;;OAGG;IACH;;OAEG;IACH,OAAO,CAAC,UAAU;IA8DlB,OAAO,CAAC,OAAO;IA6Bf,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,GAAG;YAIG,OAAO;CAkBtB;AAED,eAAe,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1,39 +1,33 @@
1
1
  "use strict";
2
2
  /**
3
- * Notiformer — Real-time alerts and feature gates for your code.
3
+ * Notiformer — Real-time alerts, approval gates, and feature flags.
4
4
  *
5
- * Works in Node.js (backend) and the browser (frontend).
5
+ * Pricing model (v2):
6
+ * Each plan includes a free credit allowance per billing cycle.
7
+ * Once the allowance is consumed, usage continues at fixed per-unit prices
8
+ * (pay-as-you-go), capped at a hard system limit per cycle.
9
+ * See https://notiformer.com/pricing for current rates.
6
10
  *
7
- * @example
8
- * import { Notiformer } from 'notiformer';
11
+ * Billing errors (HTTP 402):
12
+ * - "card_required" → add a payment method at app.notiformer.com
13
+ * - "card_locked" → card declined; update payment method
14
+ * - "cap_reached" → hard cycle cap reached; usage resets at cycleResetsAt
9
15
  *
10
- * const n = new Notiformer({ apiKey: 'ntf_live_...' });
11
- *
12
- * // Fire-and-forget alert
13
- * await n.event({ channel: 'payments', event: 'new_sale', notify: true });
14
- *
15
- * // Block and wait for approval
16
- * const { approved } = await n.ask({ message: 'Deploy to prod?' });
17
- *
18
- * // Block and wait for a choice from multiple options
19
- * const { selected } = await n.select({
20
- * message: 'How to handle the failed payment?',
21
- * options: [
22
- * { value: 'retry', label: '🔄 Retry in 1 hour' },
23
- * { value: 'notify', label: '📧 Notify customer' },
24
- * { value: 'cancel', label: '✕ Cancel order', isDestructive: true },
25
- * ],
26
- * fallback: 'notify',
27
- * });
16
+ * The SDK never throws by default. To opt in:
17
+ * new Notiformer({ apiKey, throwOnError: true })
28
18
  */
29
19
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.Notiformer = void 0;
20
+ exports.Notiformer = exports.NotiformerError = void 0;
21
+ const types_1 = require("./types");
31
22
  const logger_1 = require("./logger");
32
23
  const cache_1 = require("./cache");
24
+ var types_2 = require("./types");
25
+ Object.defineProperty(exports, "NotiformerError", { enumerable: true, get: function () { return types_2.NotiformerError; } });
33
26
  const PLACEHOLDER_KEY = "ntf_live_test";
34
27
  const API_URL = "https://api.notiformer.com";
35
28
  const DEFAULT_TIMEOUT = 8000;
36
29
  const DEFAULT_GATE_TTL = 30;
30
+ const SDK_VERSION = "2.2.0";
37
31
  class Notiformer {
38
32
  constructor(config) {
39
33
  var _a, _b, _c;
@@ -56,31 +50,25 @@ class Notiformer {
56
50
  "│ notiformer — setup required │\n" +
57
51
  "├─────────────────────────────────────────────────────┤\n" +
58
52
  '│ You are using the example key "ntf_live_test". │\n' +
59
- "│ Events will not be sent until you use a real key. │\n" +
53
+ "│ Calls will not be sent until you use a real key. │\n" +
60
54
  "│ │\n" +
61
55
  "│ 1. Go to https://app.notiformer.com/projects │\n" +
62
56
  "│ 2. Create or open a project │\n" +
63
57
  "│ 3. Copy your API key │\n" +
64
- '│ 4. Replace "ntf_live_test" with your real key │\n' +
65
58
  "└─────────────────────────────────────────────────────┘\n");
66
59
  }
67
60
  }
68
61
  // ─────────────────────────────────────────────────────────────
69
62
  // event()
70
63
  // ─────────────────────────────────────────────────────────────
71
- /**
72
- * Send an event and optionally notify recipients.
73
- * Never throws by default — returns null if the call fails.
74
- */
75
64
  async event(payload) {
76
- var _a, _b;
65
+ var _a;
77
66
  if (!payload.channel)
78
67
  throw new Error("[notiformer] event.channel is required.");
79
68
  if (!payload.event)
80
69
  throw new Error("[notiformer] event.event is required.");
81
70
  if (this.isPlaceholder) {
82
- console.warn('[notiformer] Event not sent — using example key "ntf_live_test".\n' +
83
- "→ Replace it with your real key from https://app.notiformer.com/projects");
71
+ console.warn('[notiformer] Event not sent — using example key "ntf_live_test".');
84
72
  return null;
85
73
  }
86
74
  if (this.silent)
@@ -104,26 +92,19 @@ class Notiformer {
104
92
  }
105
93
  const res = await this.post("/v1/events", body);
106
94
  if (!res.ok) {
107
- const data = await res
108
- .json()
109
- .catch(() => ({ error: `HTTP ${res.status}` }));
110
- this.warnUpgrade(data);
111
- return this.fail(new Error(`[notiformer] ${(_b = data.error) !== null && _b !== void 0 ? _b : res.statusText}`));
95
+ const err = await this.parseError(res);
96
+ this.logBilling(err);
97
+ return this.fail(err);
112
98
  }
113
99
  return (await res.json());
114
100
  }
115
101
  catch (err) {
116
- return this.fail(this.friendlyNetworkError(err));
102
+ return this.fail(this.toError(err));
117
103
  }
118
104
  }
119
105
  // ─────────────────────────────────────────────────────────────
120
106
  // gate()
121
107
  // ─────────────────────────────────────────────────────────────
122
- /**
123
- * Check whether a feature gate is enabled.
124
- * Results are cached locally for 30 seconds by default.
125
- * Returns false if the call fails or the plan doesn't support gates.
126
- */
127
108
  async gate(key, options = {}) {
128
109
  var _a, _b;
129
110
  if (!key)
@@ -138,12 +119,9 @@ class Notiformer {
138
119
  try {
139
120
  const res = await this.get(`/v1/gates/${encodeURIComponent(key)}`);
140
121
  if (!res.ok) {
141
- // 403 = Feature Gates not available on this plan
142
- if (res.status === 403) {
143
- const data = await res.json().catch(() => ({}));
144
- console.warn(`[notiformer] gate("${key}") — Feature Gates require Pro or Business plan.` +
145
- (data.upgradeUrl ? `\n→ Upgrade: ${data.upgradeUrl}` : ""));
146
- }
122
+ const err = await this.parseError(res);
123
+ this.logBilling(err);
124
+ // gate() never throws it always falls back
147
125
  return fallback;
148
126
  }
149
127
  const data = (await res.json());
@@ -156,7 +134,7 @@ class Notiformer {
156
134
  }
157
135
  async gateDetails(key, options = {}) {
158
136
  const enabled = await this.gate(key, options);
159
- return { key, enabled, cached: false, fetchedAt: new Date().toISOString() };
137
+ return { key, enabled, cached: false };
160
138
  }
161
139
  clearGateCache(key) {
162
140
  key ? this.gateCache.delete(key) : this.gateCache.clear();
@@ -164,30 +142,12 @@ class Notiformer {
164
142
  // ─────────────────────────────────────────────────────────────
165
143
  // ask()
166
144
  // ─────────────────────────────────────────────────────────────
167
- /**
168
- * Pause execution and wait for a human to approve or deny.
169
- *
170
- * A push notification is sent to the Notiformer app with Approve
171
- * and Deny buttons. The Promise resolves when you respond or when
172
- * the timeout expires.
173
- *
174
- * Never throws by default.
175
- *
176
- * @example
177
- * const { approved } = await n.ask({
178
- * message: `Send campaign to ${count} users?`,
179
- * context: `Campaign: Black Friday · ${count} recipients`,
180
- * timeout: 300,
181
- * });
182
- * if (approved) await sendEmails();
183
- */
184
145
  async ask(payload) {
185
- var _a, _b, _c;
146
+ var _a, _b;
186
147
  if (!payload.message)
187
148
  throw new Error("[notiformer] ask.message is required.");
188
149
  if (this.isPlaceholder) {
189
- console.warn('[notiformer] ask() not sent — using example key "ntf_live_test".\n' +
190
- "→ Replace it with your real key from https://app.notiformer.com/projects");
150
+ console.warn("[notiformer] ask() not sent — using example key.");
191
151
  return { approved: false, timedOut: false, respondedAt: null };
192
152
  }
193
153
  if (this.silent)
@@ -206,14 +166,12 @@ class Notiformer {
206
166
  createRes = await this.post("/v1/ask", body);
207
167
  }
208
168
  catch (err) {
209
- return this.failAsk(this.friendlyNetworkError(err));
169
+ return this.failAsk(this.toError(err));
210
170
  }
211
171
  if (!createRes.ok) {
212
- const data = await createRes
213
- .json()
214
- .catch(() => ({ error: `HTTP ${createRes.status}` }));
215
- this.warnUpgrade(data);
216
- return this.failAsk(new Error(`[notiformer] ${(_c = data.error) !== null && _c !== void 0 ? _c : createRes.statusText}`));
172
+ const err = await this.parseError(createRes);
173
+ this.logBilling(err);
174
+ return this.failAsk(err);
217
175
  }
218
176
  const created = (await createRes.json());
219
177
  return this.pollAsk(created.id, new Date(created.expiresAt).getTime());
@@ -221,33 +179,8 @@ class Notiformer {
221
179
  // ─────────────────────────────────────────────────────────────
222
180
  // select()
223
181
  // ─────────────────────────────────────────────────────────────
224
- /**
225
- * Pause execution and wait for a human to choose from multiple options.
226
- *
227
- * Unlike ask() which returns a boolean, select() returns the `value`
228
- * string of the chosen option. Use it when you need more than two actions.
229
- *
230
- * Uses the same monthly quota as ask().
231
- * Never throws by default.
232
- *
233
- * @example
234
- * const { selected } = await n.select({
235
- * message: 'How should I handle the failed payment?',
236
- * options: [
237
- * { value: 'retry', label: '🔄 Retry in 1 hour' },
238
- * { value: 'notify', label: '📧 Notify the customer' },
239
- * { value: 'cancel', label: '✕ Cancel the order', isDestructive: true },
240
- * ],
241
- * fallback: 'notify', // returned automatically on timeout
242
- * timeout: 300,
243
- * });
244
- *
245
- * if (selected === 'retry') await scheduleRetry();
246
- * if (selected === 'notify') await sendEmail();
247
- * if (selected === 'cancel') await cancelOrder();
248
- */
249
182
  async select(payload) {
250
- var _a, _b;
183
+ var _a;
251
184
  if (!payload.message)
252
185
  throw new Error("[notiformer] select.message is required.");
253
186
  if (!payload.options || payload.options.length < 2) {
@@ -257,18 +190,15 @@ class Notiformer {
257
190
  throw new Error("[notiformer] select.options supports a maximum of 6 options.");
258
191
  }
259
192
  if (this.isPlaceholder) {
260
- console.warn('[notiformer] select() not sent — using example key "ntf_live_test".\n' +
261
- "→ Replace it with your real key from https://app.notiformer.com/projects");
193
+ console.warn("[notiformer] select() not sent — using example key.");
262
194
  return { selected: null, timedOut: false, respondedAt: null };
263
195
  }
264
196
  if (this.silent)
265
197
  return { selected: null, timedOut: false, respondedAt: null };
266
- // Local validation: fallback must be a valid option value
267
198
  if (payload.fallback !== undefined) {
268
- const validValues = payload.options.map((o) => o.value);
269
- if (!validValues.includes(payload.fallback)) {
270
- throw new Error(`[notiformer] select.fallback "${payload.fallback}" must match one of the option values: ` +
271
- validValues.join(", "));
199
+ const valid = payload.options.map((o) => o.value);
200
+ if (!valid.includes(payload.fallback)) {
201
+ throw new Error(`[notiformer] select.fallback "${payload.fallback}" must match one of: ${valid.join(", ")}`);
272
202
  }
273
203
  }
274
204
  const body = {
@@ -287,103 +217,191 @@ class Notiformer {
287
217
  createRes = await this.post("/v1/select", body);
288
218
  }
289
219
  catch (err) {
290
- return this.failSelect(this.friendlyNetworkError(err));
220
+ return this.failSelect(this.toError(err));
291
221
  }
292
222
  if (!createRes.ok) {
293
- const data = await createRes
294
- .json()
295
- .catch(() => ({ error: `HTTP ${createRes.status}` }));
296
- this.warnUpgrade(data);
297
- return this.failSelect(new Error(`[notiformer] ${(_b = data.error) !== null && _b !== void 0 ? _b : createRes.statusText}`));
223
+ const err = await this.parseError(createRes);
224
+ this.logBilling(err);
225
+ return this.failSelect(err);
298
226
  }
299
227
  const created = (await createRes.json());
300
228
  return this.pollSelect(created.id, new Date(created.expiresAt).getTime());
301
229
  }
302
230
  // ─────────────────────────────────────────────────────────────
303
- // Private: polling
231
+ // Polling
304
232
  // ─────────────────────────────────────────────────────────────
305
233
  async pollAsk(askId, expiresAtMs) {
306
- var _a, _b;
234
+ var _a;
307
235
  const POLL_MS = 2000;
236
+ const GRACE_MS = 5000;
308
237
  while (true) {
309
238
  await this.sleep(POLL_MS);
310
- if (Date.now() >= expiresAtMs) {
311
- return { approved: false, timedOut: true, respondedAt: null };
312
- }
313
239
  try {
314
240
  const res = await this.get(`/v1/ask/${encodeURIComponent(askId)}`);
315
- if (!res.ok) {
316
- if (res.status >= 400 && res.status < 500) {
317
- const data = await res
318
- .json()
319
- .catch(() => ({ error: `HTTP ${res.status}` }));
320
- return this.failAsk(new Error(`[notiformer] ${(_a = data.error) !== null && _a !== void 0 ? _a : res.statusText}`));
241
+ if (res.ok) {
242
+ const data = (await res.json());
243
+ if (data.status !== "pending") {
244
+ return {
245
+ approved: data.status === "approved",
246
+ timedOut: data.status === "timed_out",
247
+ respondedAt: (_a = data.respondedAt) !== null && _a !== void 0 ? _a : null,
248
+ };
321
249
  }
322
- continue; // 5xx — retry
323
250
  }
324
- const data = (await res.json());
325
- if (data.status === "pending")
326
- continue;
327
- return {
328
- approved: data.status === "approved",
329
- timedOut: data.status === "timed_out",
330
- respondedAt: (_b = data.respondedAt) !== null && _b !== void 0 ? _b : null,
331
- };
251
+ else if (res.status >= 400 && res.status < 500) {
252
+ const err = await this.parseError(res);
253
+ return this.failAsk(err);
254
+ }
332
255
  }
333
- catch (_c) {
334
- continue; // network errorretry
256
+ catch (_b) {
257
+ // network bliptry again next loop
258
+ }
259
+ if (Date.now() >= expiresAtMs + GRACE_MS) {
260
+ return { approved: false, timedOut: true, respondedAt: null };
335
261
  }
336
262
  }
337
263
  }
338
264
  async pollSelect(selectId, expiresAtMs) {
339
- var _a, _b, _c;
265
+ var _a, _b;
340
266
  const POLL_MS = 2000;
267
+ const GRACE_MS = 5000;
341
268
  while (true) {
342
269
  await this.sleep(POLL_MS);
343
- if (Date.now() >= expiresAtMs) {
344
- return { selected: null, timedOut: true, respondedAt: null };
345
- }
346
270
  try {
347
271
  const res = await this.get(`/v1/select/${encodeURIComponent(selectId)}`);
348
- if (!res.ok) {
349
- if (res.status >= 400 && res.status < 500) {
350
- const data = await res
351
- .json()
352
- .catch(() => ({ error: `HTTP ${res.status}` }));
353
- return this.failSelect(new Error(`[notiformer] ${(_a = data.error) !== null && _a !== void 0 ? _a : res.statusText}`));
272
+ if (res.ok) {
273
+ const data = (await res.json());
274
+ if (data.status !== "pending") {
275
+ return {
276
+ selected: (_a = data.selectedValue) !== null && _a !== void 0 ? _a : null,
277
+ timedOut: data.status === "timed_out",
278
+ respondedAt: (_b = data.respondedAt) !== null && _b !== void 0 ? _b : null,
279
+ };
354
280
  }
355
- continue; // 5xx — retry
356
281
  }
357
- const data = (await res.json());
358
- if (data.status === "pending")
359
- continue;
360
- return {
361
- selected: (_b = data.selectedValue) !== null && _b !== void 0 ? _b : null,
362
- timedOut: data.status === "timed_out",
363
- respondedAt: (_c = data.respondedAt) !== null && _c !== void 0 ? _c : null,
364
- };
282
+ else if (res.status >= 400 && res.status < 500) {
283
+ const err = await this.parseError(res);
284
+ return this.failSelect(err);
285
+ }
365
286
  }
366
- catch (_d) {
367
- continue; // network errorretry
287
+ catch (_c) {
288
+ // network bliptry again
289
+ }
290
+ if (Date.now() >= expiresAtMs + GRACE_MS) {
291
+ return { selected: null, timedOut: true, respondedAt: null };
368
292
  }
369
293
  }
370
294
  }
371
295
  // ─────────────────────────────────────────────────────────────
372
- // Private: helpers
296
+ // Error helpers
373
297
  // ─────────────────────────────────────────────────────────────
374
- sleep(ms) {
375
- return new Promise((resolve) => setTimeout(resolve, ms));
298
+ /**
299
+ * Parse an HTTP error response into a typed NotiformerError.
300
+ */
301
+ async parseError(res) {
302
+ var _a, _b;
303
+ const body = await res.json().catch(() => ({}));
304
+ const code = (_a = body.code) !== null && _a !== void 0 ? _a : this.codeFromStatus(res.status);
305
+ const msg = (_b = body.error) !== null && _b !== void 0 ? _b : `HTTP ${res.status} ${res.statusText}`;
306
+ return new types_1.NotiformerError(`[notiformer] ${msg}`, code, {
307
+ status: res.status,
308
+ cycleResetsAt: body.cycleResetsAt,
309
+ manageUrl: body.manageUrl,
310
+ upgradeUrl: body.upgradeUrl,
311
+ });
312
+ }
313
+ codeFromStatus(status) {
314
+ if (status === 401)
315
+ return "invalid_api_key";
316
+ if (status === 402)
317
+ return "card_required";
318
+ if (status === 403)
319
+ return "feature_not_available";
320
+ if (status === 429)
321
+ return "rate_limited";
322
+ if (status >= 500)
323
+ return "internal";
324
+ return "validation";
376
325
  }
377
326
  /**
378
- * If the API response includes an upgradeUrl (quota exceeded),
379
- * print a visible warning in the developer's console.
327
+ * Print a user-friendly message for billing errors (402).
328
+ * This is what developers see in their console — should be actionable.
380
329
  */
381
- warnUpgrade(data) {
382
- if (data === null || data === void 0 ? void 0 : data.upgradeUrl) {
383
- console.warn(`[notiformer] Plan limit reached. Upgrade your plan to continue:\n` +
384
- `→ ${data.upgradeUrl}`);
330
+ /**
331
+ * Print a formatted, actionable billing error in the developer console.
332
+ */
333
+ logBilling(err) {
334
+ var _a;
335
+ const hr = "─".repeat(52);
336
+ if (err.code === "cap_reached") {
337
+ const resetStr = err.cycleResetsAt
338
+ ? new Date(err.cycleResetsAt).toDateString()
339
+ : "next billing cycle";
340
+ const isProCap = err.message.toLowerCase().includes("pro plan");
341
+ const lines = [
342
+ ``,
343
+ `┌${"─".repeat(52)}┐`,
344
+ `│ notiformer — spending cap reached${" ".repeat(17)}│`,
345
+ `└${"─".repeat(52)}┘`,
346
+ ``,
347
+ ` ${err.message.split(".")[0]}.`,
348
+ ``,
349
+ ];
350
+ if (isProCap) {
351
+ lines.push(` Need a higher limit?`);
352
+ lines.push(` → Email: support@notiformer.com`);
353
+ }
354
+ else {
355
+ lines.push(` Upgrade to Pro (€4.99/mo) to keep using Notiformer:`);
356
+ if (err.upgradeUrl) {
357
+ lines.push(` → ${err.upgradeUrl}`);
358
+ }
359
+ else if (err.manageUrl) {
360
+ lines.push(` → ${err.manageUrl}`);
361
+ }
362
+ }
363
+ lines.push(``);
364
+ lines.push(` Usage resets on: ${resetStr}`);
365
+ lines.push(``);
366
+ console.warn(lines.join("\n"));
367
+ return;
368
+ }
369
+ if (err.code === "card_required" || err.code === "card_locked") {
370
+ const action = err.code === "card_required"
371
+ ? "Add a payment method"
372
+ : "Update your payment method";
373
+ const lines = [
374
+ ``,
375
+ `[notiformer] ⚠ ${action}`,
376
+ err.manageUrl ? ` → ${err.manageUrl}` : "",
377
+ ].filter(Boolean);
378
+ console.warn(lines.join("\n"));
379
+ return;
380
+ }
381
+ if (err.code === "feature_not_available") {
382
+ const cleanMsg = err.message.replace(/^\[notiformer\]\s*/, "");
383
+ const manage = (_a = err.upgradeUrl) !== null && _a !== void 0 ? _a : err.manageUrl;
384
+ console.warn(`[notiformer] ⚠ ${cleanMsg}` +
385
+ (manage ? `\n → Upgrade: ${manage}` : ""));
385
386
  }
386
387
  }
388
+ toError(err) {
389
+ if (err instanceof types_1.NotiformerError)
390
+ return err;
391
+ const msg = err instanceof Error ? err.message.toLowerCase() : "";
392
+ if (msg.includes("aborted") || msg.includes("timeout")) {
393
+ return new types_1.NotiformerError(`[notiformer] Request timed out after ${this.timeout / 1000}s.`, "network");
394
+ }
395
+ if (msg.includes("failed to fetch") ||
396
+ msg.includes("enotfound") ||
397
+ msg.includes("network")) {
398
+ return new types_1.NotiformerError("[notiformer] Cannot reach the Notiformer API. Check your connection.", "network");
399
+ }
400
+ return new types_1.NotiformerError(err instanceof Error ? err.message : String(err), "internal");
401
+ }
402
+ // ─────────────────────────────────────────────────────────────
403
+ // Failure handlers (default: don't throw, return safe value)
404
+ // ─────────────────────────────────────────────────────────────
387
405
  failAsk(error) {
388
406
  var _a;
389
407
  this.logger.error(error.message);
@@ -408,10 +426,16 @@ class Notiformer {
408
426
  throw error;
409
427
  return null;
410
428
  }
411
- async post(path, body) {
429
+ // ─────────────────────────────────────────────────────────────
430
+ // HTTP plumbing
431
+ // ─────────────────────────────────────────────────────────────
432
+ sleep(ms) {
433
+ return new Promise((r) => setTimeout(r, ms));
434
+ }
435
+ post(path, body) {
412
436
  return this.request(path, { method: "POST", body: JSON.stringify(body) });
413
437
  }
414
- async get(path) {
438
+ get(path) {
415
439
  return this.request(path, { method: "GET" });
416
440
  }
417
441
  async request(path, init) {
@@ -425,7 +449,7 @@ class Notiformer {
425
449
  headers: {
426
450
  "Content-Type": "application/json",
427
451
  Authorization: `Bearer ${this.apiKey}`,
428
- "X-SDK-Version": "1.1.1",
452
+ "X-SDK-Version": SDK_VERSION,
429
453
  ...((_a = init.headers) !== null && _a !== void 0 ? _a : {}),
430
454
  },
431
455
  });
@@ -434,19 +458,6 @@ class Notiformer {
434
458
  clearTimeout(timer);
435
459
  }
436
460
  }
437
- friendlyNetworkError(err) {
438
- const msg = err instanceof Error ? err.message.toLowerCase() : "";
439
- if (msg.includes("aborted") || msg.includes("timeout")) {
440
- return new Error(`[notiformer] Request timed out after ${this.timeout / 1000}s.`);
441
- }
442
- if (msg.includes("failed to fetch") ||
443
- msg.includes("enotfound") ||
444
- msg.includes("network")) {
445
- return new Error("[notiformer] Cannot reach the Notiformer API.\n" +
446
- "Check your connection. If the issue persists: https://status.notiformer.com");
447
- }
448
- return err instanceof Error ? err : new Error(String(err));
449
- }
450
461
  }
451
462
  exports.Notiformer = Notiformer;
452
463
  exports.default = Notiformer;
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":"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"}
package/dist/types.d.ts CHANGED
@@ -1,34 +1,33 @@
1
+ /**
2
+ * SDK types — public surface for consumers of the npm package.
3
+ *
4
+ * The new error codes for the v2 billing model:
5
+ * - "card_required" → user has no valid card on file (402)
6
+ * - "card_locked" → card declined; grace period expired (402)
7
+ * - "cap_reached" → hard system cap hit for this billing cycle (402)
8
+ * - "feature_not_available"→ feature requires Pro plan (403)
9
+ *
10
+ * The old "quota_exceeded" code is gone — there is no monthly event limit
11
+ * anymore, only a credit allowance + cap.
12
+ */
1
13
  export interface NotiformerConfig {
2
14
  apiKey: string;
3
15
  silent?: boolean;
4
16
  throwOnError?: boolean;
5
- onError?: (err: Error) => void;
17
+ onError?: (err: NotiformerError) => void;
6
18
  _baseUrl?: string;
7
19
  }
8
20
  export interface EventPayload {
9
- /** Channel name (lowercase, letters, numbers, hyphens, underscores). */
10
21
  channel: string;
11
- /** Short event name. */
12
22
  event: string;
13
23
  description?: string;
14
24
  icon?: string;
15
25
  tags?: Record<string, string | number | boolean>;
16
26
  value?: string | number;
17
- /**
18
- * Whether to send push/email notifications.
19
- * Defaults to true.
20
- */
21
27
  notify?: boolean;
22
28
  /**
23
29
  * Specific email addresses to notify.
24
- *
25
- * If set, **only** these emails receive notifications — the default
26
- * (owner + channel subscribers) is ignored.
27
- *
28
- * Plan limits: Free=1, Starter=3, Pro=10, Business=30.
29
- *
30
- * @example
31
- * recipients: ['alice@company.com', 'bob@company.com']
30
+ * Plan limits: Dev=1, Pro=10.
32
31
  */
33
32
  recipients?: string[];
34
33
  }
@@ -36,6 +35,8 @@ export interface EventResponse {
36
35
  id: string;
37
36
  createdAt: string;
38
37
  rateLimited?: boolean;
38
+ /** Cumulative cost of this billing cycle so far, in micro-USD. */
39
+ usageMicroUsd?: number;
39
40
  }
40
41
  export interface GateOptions {
41
42
  fallback?: boolean;
@@ -45,105 +46,60 @@ export interface GateResult {
45
46
  key: string;
46
47
  enabled: boolean;
47
48
  cached: boolean;
48
- fetchedAt: string;
49
49
  }
50
50
  export interface AskPayload {
51
- /** The question shown in the push notification title. */
52
51
  message: string;
53
- /** Optional extra detail shown in the notification body (max 500 chars). */
54
52
  context?: string;
55
- /**
56
- * Optional long-form text shown in the approval detail screen of the
57
- * Notiformer app. Supports newlines — use \n to structure content.
58
- * Max 10,000 characters.
59
- *
60
- * @example
61
- * details: `CHANGES\n• Fix auth bug\n\nROLLBACK\n./rollback.sh v1.0.9`
62
- */
63
53
  details?: string;
64
- /**
65
- * Seconds to wait for a response before applying the fallback.
66
- * Default: 300 (5 min). Maximum depends on your plan:
67
- * Starter=300s, Pro=900s, Business=3600s.
68
- */
54
+ /** Seconds. Max depends on plan: Dev=300, Pro=900. */
69
55
  timeout?: number;
70
- /**
71
- * What to return if nobody responds before the timeout.
72
- * Default: 'deny' (safe — approved will be false).
73
- */
74
56
  fallback?: "deny" | "approve";
75
57
  }
76
58
  export interface AskResult {
77
- /** true if the user tapped Approve, false if they tapped Deny or it timed out. */
78
59
  approved: boolean;
79
- /** true if nobody responded before the timeout expired. */
80
60
  timedOut: boolean;
81
- /** ISO timestamp of when the user responded. null if timed out. */
82
61
  respondedAt: string | null;
83
62
  }
84
63
  export interface SelectOption {
85
- /**
86
- * The value returned in `result.selected` when this option is chosen.
87
- * Max 50 chars. Use a short descriptive string.
88
- *
89
- * @example 'deploy' | 'rollback' | 'cancel'
90
- */
91
64
  value: string;
92
- /**
93
- * The button label shown in the Notiformer app.
94
- * Max 80 chars. Supports emoji.
95
- *
96
- * @example '🚀 Deploy to production'
97
- */
98
65
  label: string;
99
- /**
100
- * If true, the button is styled destructively (red) in the mobile app.
101
- * Use for dangerous or irreversible actions.
102
- */
103
66
  isDestructive?: boolean;
104
67
  }
105
68
  export interface SelectPayload {
106
- /**
107
- * The question shown as the push notification title. Required.
108
- */
109
69
  message: string;
110
- /**
111
- * The options shown as buttons in the Notiformer app.
112
- * Minimum 2, maximum 6 options.
113
- */
114
70
  options: SelectOption[];
115
- /** Optional detail shown in the notification body (max 500 chars). */
116
71
  context?: string;
117
- /**
118
- * Optional long-form text shown in the approval detail screen.
119
- * Supports newlines. Max 10,000 chars.
120
- */
121
72
  details?: string;
122
- /**
123
- * Seconds to wait before applying the fallback.
124
- * Default: 300. Maximum depends on your plan.
125
- */
126
73
  timeout?: number;
127
- /**
128
- * The option value to return automatically if nobody responds.
129
- * Must match one of the option values exactly.
130
- * If omitted, `selected` is null on timeout.
131
- *
132
- * @example 'cancel' // safe default
133
- */
74
+ /** A value matching one of the option values, used if timed out. */
134
75
  fallback?: string;
135
76
  }
136
77
  export interface SelectResult {
137
- /**
138
- * The value string of the option the user selected,
139
- * or the fallback value on timeout.
140
- * Null if timed out with no fallback set.
141
- */
142
78
  selected: string | null;
143
- /** True if nobody responded before the timeout expired. */
144
79
  timedOut: boolean;
145
- /** ISO timestamp of when the user responded. null if timed out. */
146
80
  respondedAt: string | null;
147
81
  }
82
+ export type NotiformerErrorCode = "invalid_api_key" | "card_required" | "card_locked" | "cap_reached" | "feature_not_available" | "validation" | "rate_limited" | "network" | "internal";
83
+ export declare class NotiformerError extends Error {
84
+ code: NotiformerErrorCode;
85
+ /** HTTP status returned by the API, when applicable. */
86
+ status?: number;
87
+ /** When code = "cap_reached", this is the ISO date when the cycle resets. */
88
+ cycleResetsAt?: string;
89
+ /** URL to manage billing in the Notiformer dashboard. */
90
+ manageUrl?: string;
91
+ /**
92
+ * Direct URL to start the Pro upgrade flow (Stripe Checkout, pre-configured
93
+ * for the authenticated user). Present when code = "cap_reached" on Dev plan.
94
+ * Open this in a browser — the user must be logged into app.notiformer.com.
95
+ */
96
+ upgradeUrl?: string;
97
+ constructor(message: string, code: NotiformerErrorCode, extras?: {
98
+ status?: number;
99
+ cycleResetsAt?: string;
100
+ manageUrl?: string;
101
+ upgradeUrl?: string;
102
+ });
103
+ }
148
104
  export type LogLevel = "debug" | "info" | "warn" | "error" | "none" | "silent";
149
105
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAMD,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,3 +1,32 @@
1
1
  "use strict";
2
+ /**
3
+ * SDK types — public surface for consumers of the npm package.
4
+ *
5
+ * The new error codes for the v2 billing model:
6
+ * - "card_required" → user has no valid card on file (402)
7
+ * - "card_locked" → card declined; grace period expired (402)
8
+ * - "cap_reached" → hard system cap hit for this billing cycle (402)
9
+ * - "feature_not_available"→ feature requires Pro plan (403)
10
+ *
11
+ * The old "quota_exceeded" code is gone — there is no monthly event limit
12
+ * anymore, only a credit allowance + cap.
13
+ */
2
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.NotiformerError = void 0;
16
+ class NotiformerError extends Error {
17
+ constructor(message, code, extras) {
18
+ super(message);
19
+ this.name = "NotiformerError";
20
+ this.code = code;
21
+ if (extras === null || extras === void 0 ? void 0 : extras.status)
22
+ this.status = extras.status;
23
+ if (extras === null || extras === void 0 ? void 0 : extras.cycleResetsAt)
24
+ this.cycleResetsAt = extras.cycleResetsAt;
25
+ if (extras === null || extras === void 0 ? void 0 : extras.manageUrl)
26
+ this.manageUrl = extras.manageUrl;
27
+ if (extras === null || extras === void 0 ? void 0 : extras.upgradeUrl)
28
+ this.upgradeUrl = extras.upgradeUrl;
29
+ }
30
+ }
31
+ exports.NotiformerError = NotiformerError;
3
32
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAgHH,MAAa,eAAgB,SAAQ,KAAK;IAexC,YACE,OAAe,EACf,IAAyB,EACzB,MAKC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAChD,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa;YAAE,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QACrE,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACzD,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC9D,CAAC;CACF;AAjCD,0CAiCC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "notiformer",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "Human-in-the-loop approval gates and real-time push notifications for AI agents",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",