notiformer 1.1.2 → 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 +27 -80
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +167 -161
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +40 -84
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,33 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Notiformer — Real-time alerts
|
|
2
|
+
* Notiformer — Real-time alerts, approval gates, and feature flags.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
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
|
-
*
|
|
7
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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
|
-
*
|
|
104
|
-
|
|
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
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
3
|
+
* Notiformer — Real-time alerts, approval gates, and feature flags.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
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
|
-
*
|
|
8
|
-
*
|
|
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
|
-
*
|
|
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
|
-
"│
|
|
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
|
|
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"
|
|
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
|
|
108
|
-
|
|
109
|
-
|
|
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.
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
|
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
|
|
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(
|
|
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.
|
|
169
|
+
return this.failAsk(this.toError(err));
|
|
210
170
|
}
|
|
211
171
|
if (!createRes.ok) {
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
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
|
|
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(
|
|
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
|
|
269
|
-
if (!
|
|
270
|
-
throw new Error(`[notiformer] select.fallback "${payload.fallback}" must match one of
|
|
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,30 +217,25 @@ class Notiformer {
|
|
|
287
217
|
createRes = await this.post("/v1/select", body);
|
|
288
218
|
}
|
|
289
219
|
catch (err) {
|
|
290
|
-
return this.failSelect(this.
|
|
220
|
+
return this.failSelect(this.toError(err));
|
|
291
221
|
}
|
|
292
222
|
if (!createRes.ok) {
|
|
293
|
-
const
|
|
294
|
-
|
|
295
|
-
|
|
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
|
-
//
|
|
231
|
+
// Polling
|
|
304
232
|
// ─────────────────────────────────────────────────────────────
|
|
305
233
|
async pollAsk(askId, expiresAtMs) {
|
|
306
|
-
var _a
|
|
234
|
+
var _a;
|
|
307
235
|
const POLL_MS = 2000;
|
|
308
|
-
const GRACE_MS = 5000;
|
|
236
|
+
const GRACE_MS = 5000;
|
|
309
237
|
while (true) {
|
|
310
238
|
await this.sleep(POLL_MS);
|
|
311
|
-
// ── Poll FIRST, check expiry after ─────────────────────
|
|
312
|
-
// This ensures a response made at the last instant is not
|
|
313
|
-
// incorrectly returned as timedOut.
|
|
314
239
|
try {
|
|
315
240
|
const res = await this.get(`/v1/ask/${encodeURIComponent(askId)}`);
|
|
316
241
|
if (res.ok) {
|
|
@@ -324,24 +249,20 @@ class Notiformer {
|
|
|
324
249
|
}
|
|
325
250
|
}
|
|
326
251
|
else if (res.status >= 400 && res.status < 500) {
|
|
327
|
-
const
|
|
328
|
-
|
|
329
|
-
.catch(() => ({ error: `HTTP ${res.status}` }));
|
|
330
|
-
return this.failAsk(new Error(`[notiformer] ${(_b = data.error) !== null && _b !== void 0 ? _b : res.statusText}`));
|
|
252
|
+
const err = await this.parseError(res);
|
|
253
|
+
return this.failAsk(err);
|
|
331
254
|
}
|
|
332
|
-
// 5xx — fall through to expiry check, retry next loop
|
|
333
255
|
}
|
|
334
|
-
catch (
|
|
335
|
-
// network
|
|
256
|
+
catch (_b) {
|
|
257
|
+
// network blip — try again next loop
|
|
336
258
|
}
|
|
337
|
-
// ── Only declare client-side timeout after grace period ─
|
|
338
259
|
if (Date.now() >= expiresAtMs + GRACE_MS) {
|
|
339
260
|
return { approved: false, timedOut: true, respondedAt: null };
|
|
340
261
|
}
|
|
341
262
|
}
|
|
342
263
|
}
|
|
343
264
|
async pollSelect(selectId, expiresAtMs) {
|
|
344
|
-
var _a, _b
|
|
265
|
+
var _a, _b;
|
|
345
266
|
const POLL_MS = 2000;
|
|
346
267
|
const GRACE_MS = 5000;
|
|
347
268
|
while (true) {
|
|
@@ -359,14 +280,12 @@ class Notiformer {
|
|
|
359
280
|
}
|
|
360
281
|
}
|
|
361
282
|
else if (res.status >= 400 && res.status < 500) {
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
.catch(() => ({ error: `HTTP ${res.status}` }));
|
|
365
|
-
return this.failSelect(new Error(`[notiformer] ${(_c = data.error) !== null && _c !== void 0 ? _c : res.statusText}`));
|
|
283
|
+
const err = await this.parseError(res);
|
|
284
|
+
return this.failSelect(err);
|
|
366
285
|
}
|
|
367
286
|
}
|
|
368
|
-
catch (
|
|
369
|
-
// network
|
|
287
|
+
catch (_c) {
|
|
288
|
+
// network blip — try again
|
|
370
289
|
}
|
|
371
290
|
if (Date.now() >= expiresAtMs + GRACE_MS) {
|
|
372
291
|
return { selected: null, timedOut: true, respondedAt: null };
|
|
@@ -374,21 +293,115 @@ class Notiformer {
|
|
|
374
293
|
}
|
|
375
294
|
}
|
|
376
295
|
// ─────────────────────────────────────────────────────────────
|
|
377
|
-
//
|
|
296
|
+
// Error helpers
|
|
378
297
|
// ─────────────────────────────────────────────────────────────
|
|
379
|
-
|
|
380
|
-
|
|
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";
|
|
381
325
|
}
|
|
382
326
|
/**
|
|
383
|
-
*
|
|
384
|
-
*
|
|
327
|
+
* Print a user-friendly message for billing errors (402).
|
|
328
|
+
* This is what developers see in their console — should be actionable.
|
|
385
329
|
*/
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
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}` : ""));
|
|
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");
|
|
390
399
|
}
|
|
400
|
+
return new types_1.NotiformerError(err instanceof Error ? err.message : String(err), "internal");
|
|
391
401
|
}
|
|
402
|
+
// ─────────────────────────────────────────────────────────────
|
|
403
|
+
// Failure handlers (default: don't throw, return safe value)
|
|
404
|
+
// ─────────────────────────────────────────────────────────────
|
|
392
405
|
failAsk(error) {
|
|
393
406
|
var _a;
|
|
394
407
|
this.logger.error(error.message);
|
|
@@ -413,10 +426,16 @@ class Notiformer {
|
|
|
413
426
|
throw error;
|
|
414
427
|
return null;
|
|
415
428
|
}
|
|
416
|
-
|
|
429
|
+
// ─────────────────────────────────────────────────────────────
|
|
430
|
+
// HTTP plumbing
|
|
431
|
+
// ─────────────────────────────────────────────────────────────
|
|
432
|
+
sleep(ms) {
|
|
433
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
434
|
+
}
|
|
435
|
+
post(path, body) {
|
|
417
436
|
return this.request(path, { method: "POST", body: JSON.stringify(body) });
|
|
418
437
|
}
|
|
419
|
-
|
|
438
|
+
get(path) {
|
|
420
439
|
return this.request(path, { method: "GET" });
|
|
421
440
|
}
|
|
422
441
|
async request(path, init) {
|
|
@@ -430,7 +449,7 @@ class Notiformer {
|
|
|
430
449
|
headers: {
|
|
431
450
|
"Content-Type": "application/json",
|
|
432
451
|
Authorization: `Bearer ${this.apiKey}`,
|
|
433
|
-
"X-SDK-Version":
|
|
452
|
+
"X-SDK-Version": SDK_VERSION,
|
|
434
453
|
...((_a = init.headers) !== null && _a !== void 0 ? _a : {}),
|
|
435
454
|
},
|
|
436
455
|
});
|
|
@@ -439,19 +458,6 @@ class Notiformer {
|
|
|
439
458
|
clearTimeout(timer);
|
|
440
459
|
}
|
|
441
460
|
}
|
|
442
|
-
friendlyNetworkError(err) {
|
|
443
|
-
const msg = err instanceof Error ? err.message.toLowerCase() : "";
|
|
444
|
-
if (msg.includes("aborted") || msg.includes("timeout")) {
|
|
445
|
-
return new Error(`[notiformer] Request timed out after ${this.timeout / 1000}s.`);
|
|
446
|
-
}
|
|
447
|
-
if (msg.includes("failed to fetch") ||
|
|
448
|
-
msg.includes("enotfound") ||
|
|
449
|
-
msg.includes("network")) {
|
|
450
|
-
return new Error("[notiformer] Cannot reach the Notiformer API.\n" +
|
|
451
|
-
"Check your connection. If the issue persists: https://status.notiformer.com");
|
|
452
|
-
}
|
|
453
|
-
return err instanceof Error ? err : new Error(String(err));
|
|
454
|
-
}
|
|
455
461
|
}
|
|
456
462
|
exports.Notiformer = Notiformer;
|
|
457
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:
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|