notiformer 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -77
- package/dist/index.d.ts +22 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -19,21 +19,21 @@ npm install notiformer
|
|
|
19
19
|
## Quick start
|
|
20
20
|
|
|
21
21
|
```ts
|
|
22
|
-
import { Notiformer } from
|
|
22
|
+
import { Notiformer } from "notiformer";
|
|
23
23
|
|
|
24
24
|
const n = new Notiformer({
|
|
25
|
-
apiKey:
|
|
25
|
+
apiKey: "ntf_live_...", // from app.notiformer.com/projects
|
|
26
26
|
});
|
|
27
27
|
|
|
28
28
|
await n.event({
|
|
29
|
-
channel:
|
|
30
|
-
event:
|
|
31
|
-
description:
|
|
32
|
-
icon:
|
|
33
|
-
tags: { userId:
|
|
34
|
-
value:
|
|
35
|
-
notify: true,
|
|
36
|
-
recipients: [
|
|
29
|
+
channel: "payments", // groups related events — auto-created on first use
|
|
30
|
+
event: "payment_success", // machine-readable event name
|
|
31
|
+
description: "$49.00 — john@example.com", // optional human-readable detail
|
|
32
|
+
icon: "💳", // optional emoji shown in the feed and notification
|
|
33
|
+
tags: { userId: "usr_123", plan: "pro" }, // optional key-value metadata
|
|
34
|
+
value: "$49.00", // optional value highlighted in the feed
|
|
35
|
+
notify: true, // true → push notification | false → silent log only
|
|
36
|
+
recipients: ["you@company.com"], // optional — notify specific people only (see below)
|
|
37
37
|
});
|
|
38
38
|
```
|
|
39
39
|
|
|
@@ -54,24 +54,24 @@ await n.event({
|
|
|
54
54
|
|
|
55
55
|
```ts
|
|
56
56
|
await n.event({
|
|
57
|
-
channel:
|
|
58
|
-
event:
|
|
59
|
-
|
|
60
|
-
description:
|
|
61
|
-
icon:
|
|
62
|
-
tags:
|
|
63
|
-
value:
|
|
64
|
-
notify:
|
|
65
|
-
recipients:
|
|
57
|
+
channel: "payments", // required — string, lowercase, a-z 0-9 - _
|
|
58
|
+
event: "payment_success", // required — machine-readable event name
|
|
59
|
+
|
|
60
|
+
description: "$49.00 — john@example.com", // optional
|
|
61
|
+
icon: "💳", // optional — emoji
|
|
62
|
+
tags: { plan: "pro", userId: "123" }, // optional — displayed in the event feed
|
|
63
|
+
value: "$49.00", // optional — highlighted value in the feed
|
|
64
|
+
notify: true, // optional — default: true
|
|
65
|
+
recipients: ["alice@company.com"], // optional — see "Targeting specific people"
|
|
66
66
|
});
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
### `notify`
|
|
70
70
|
|
|
71
|
-
| Value
|
|
72
|
-
|
|
73
|
-
| `true` (default) | Sends push notification to subscribed members
|
|
74
|
-
| `false`
|
|
71
|
+
| Value | Behaviour |
|
|
72
|
+
| ---------------- | -------------------------------------------------------------- |
|
|
73
|
+
| `true` (default) | Sends push notification to subscribed members |
|
|
74
|
+
| `false` | Stores the event silently for analytics — no notification sent |
|
|
75
75
|
|
|
76
76
|
### Return value
|
|
77
77
|
|
|
@@ -93,27 +93,28 @@ You can override this and target specific people by email:
|
|
|
93
93
|
|
|
94
94
|
```ts
|
|
95
95
|
await n.event({
|
|
96
|
-
channel:
|
|
97
|
-
event:
|
|
98
|
-
description:
|
|
99
|
-
notify:
|
|
100
|
-
recipients:
|
|
96
|
+
channel: "payments",
|
|
97
|
+
event: "large_order",
|
|
98
|
+
description: "$2,400 — enterprise@client.com",
|
|
99
|
+
notify: true,
|
|
100
|
+
recipients: ["cto@company.com", "billing@company.com"], // only these two are notified
|
|
101
101
|
});
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
**How it works:**
|
|
105
|
+
|
|
105
106
|
- If a recipient has a Notiformer account linked to that email and has installed the app, they receive a **push notification**
|
|
106
107
|
- Email notifications are **coming soon** — recipients will receive emails once this feature launches
|
|
107
108
|
- If you don't specify `recipients`, all project members subscribed to the channel are notified
|
|
108
109
|
|
|
109
110
|
**Plan limits for `recipients`:**
|
|
110
111
|
|
|
111
|
-
| Plan
|
|
112
|
-
|
|
113
|
-
| Free
|
|
114
|
-
| Starter
|
|
115
|
-
| Pro
|
|
116
|
-
| Business | 30
|
|
112
|
+
| Plan | Max recipients per event |
|
|
113
|
+
| -------- | ------------------------ |
|
|
114
|
+
| Free | 1 |
|
|
115
|
+
| Starter | 3 |
|
|
116
|
+
| Pro | 10 |
|
|
117
|
+
| Business | 30 |
|
|
117
118
|
|
|
118
119
|
> Members are managed from the project dashboard at [app.notiformer.com](https://app.notiformer.com/projects).
|
|
119
120
|
|
|
@@ -124,7 +125,7 @@ await n.event({
|
|
|
124
125
|
Toggle features in your code remotely from the Notiformer dashboard — no redeploy needed.
|
|
125
126
|
|
|
126
127
|
```ts
|
|
127
|
-
const isEnabled = await n.gate(
|
|
128
|
+
const isEnabled = await n.gate("new-checkout-flow");
|
|
128
129
|
|
|
129
130
|
if (isEnabled) {
|
|
130
131
|
// new behaviour
|
|
@@ -138,24 +139,24 @@ Gates are **cached locally for 30 seconds** by default to avoid hammering the AP
|
|
|
138
139
|
### Options
|
|
139
140
|
|
|
140
141
|
```ts
|
|
141
|
-
const isEnabled = await n.gate(
|
|
142
|
-
fallback:
|
|
143
|
-
cacheTtl:
|
|
142
|
+
const isEnabled = await n.gate("my-gate", {
|
|
143
|
+
fallback: false, // optional — returned if the gate can't be fetched (default: false)
|
|
144
|
+
cacheTtl: 60, // optional — cache duration in seconds (default: 30)
|
|
144
145
|
});
|
|
145
146
|
```
|
|
146
147
|
|
|
147
148
|
### Full gate result
|
|
148
149
|
|
|
149
150
|
```ts
|
|
150
|
-
const result = await n.gateDetails(
|
|
151
|
+
const result = await n.gateDetails("my-gate");
|
|
151
152
|
// { key: 'my-gate', enabled: true, cached: false, fetchedAt: '2025-...' }
|
|
152
153
|
```
|
|
153
154
|
|
|
154
155
|
### Clear the cache
|
|
155
156
|
|
|
156
157
|
```ts
|
|
157
|
-
n.clearGateCache(
|
|
158
|
-
n.clearGateCache();
|
|
158
|
+
n.clearGateCache("my-gate"); // clear a specific gate
|
|
159
|
+
n.clearGateCache(); // clear all gates
|
|
159
160
|
```
|
|
160
161
|
|
|
161
162
|
---
|
|
@@ -164,10 +165,11 @@ n.clearGateCache(); // clear all gates
|
|
|
164
165
|
|
|
165
166
|
```ts
|
|
166
167
|
const n = new Notiformer({
|
|
167
|
-
apiKey:
|
|
168
|
-
silent:
|
|
169
|
-
throwOnError: false,
|
|
170
|
-
onError:
|
|
168
|
+
apiKey: "ntf_live_...", // required — from app.notiformer.com/projects
|
|
169
|
+
silent: false, // optional — true = no API calls (great for local dev)
|
|
170
|
+
throwOnError: false, // optional — true = throws instead of returning null
|
|
171
|
+
onError: (err) => {
|
|
172
|
+
// optional — called when any call fails
|
|
171
173
|
Sentry.captureException(err);
|
|
172
174
|
},
|
|
173
175
|
});
|
|
@@ -178,7 +180,7 @@ const n = new Notiformer({
|
|
|
178
180
|
```ts
|
|
179
181
|
const n = new Notiformer({
|
|
180
182
|
apiKey: process.env.NOTIFORMER_API_KEY!,
|
|
181
|
-
silent: process.env.NODE_ENV !==
|
|
183
|
+
silent: process.env.NODE_ENV !== "production", // no calls in dev/test
|
|
182
184
|
});
|
|
183
185
|
```
|
|
184
186
|
|
|
@@ -186,13 +188,13 @@ const n = new Notiformer({
|
|
|
186
188
|
|
|
187
189
|
## Rate limits & quotas
|
|
188
190
|
|
|
189
|
-
| Limit
|
|
190
|
-
|
|
191
|
-
| Events per minute (per project) | 60
|
|
192
|
-
| Events per month (Free plan)
|
|
193
|
-
| Events per month (Starter)
|
|
194
|
-
| Events per month (Pro)
|
|
195
|
-
| Events per month (Business)
|
|
191
|
+
| Limit | Value |
|
|
192
|
+
| ------------------------------- | ------- |
|
|
193
|
+
| Events per minute (per project) | 60 |
|
|
194
|
+
| Events per month (Free plan) | 100 |
|
|
195
|
+
| Events per month (Starter) | 5,000 |
|
|
196
|
+
| Events per month (Pro) | 75,000 |
|
|
197
|
+
| Events per month (Business) | 300,000 |
|
|
196
198
|
|
|
197
199
|
If you exceed **60 events/minute**: the event is stored and visible in your feed, but no notification is sent. The API response includes `rateLimited: true`.
|
|
198
200
|
|
|
@@ -206,12 +208,12 @@ If you exceed your **monthly quota**: the event is rejected with HTTP 429. Upgra
|
|
|
206
208
|
|
|
207
209
|
```ts
|
|
208
210
|
await n.event({
|
|
209
|
-
channel:
|
|
210
|
-
event:
|
|
211
|
+
channel: "payments",
|
|
212
|
+
event: "payment_success",
|
|
211
213
|
description: `${amount} — ${user.email}`,
|
|
212
|
-
icon:
|
|
213
|
-
value:
|
|
214
|
-
notify:
|
|
214
|
+
icon: "💳",
|
|
215
|
+
value: amount,
|
|
216
|
+
notify: true,
|
|
215
217
|
});
|
|
216
218
|
```
|
|
217
219
|
|
|
@@ -221,14 +223,14 @@ await n.event({
|
|
|
221
223
|
// Express error middleware
|
|
222
224
|
app.use(async (err, req, res, next) => {
|
|
223
225
|
await n.event({
|
|
224
|
-
channel:
|
|
225
|
-
event:
|
|
226
|
+
channel: "errors",
|
|
227
|
+
event: "unhandled_error",
|
|
226
228
|
description: err.message,
|
|
227
|
-
icon:
|
|
228
|
-
tags:
|
|
229
|
-
notify:
|
|
229
|
+
icon: "🔴",
|
|
230
|
+
tags: { path: req.path, method: req.method },
|
|
231
|
+
notify: true,
|
|
230
232
|
});
|
|
231
|
-
res.status(500).json({ error:
|
|
233
|
+
res.status(500).json({ error: "Internal server error" });
|
|
232
234
|
});
|
|
233
235
|
```
|
|
234
236
|
|
|
@@ -236,10 +238,10 @@ app.use(async (err, req, res, next) => {
|
|
|
236
238
|
|
|
237
239
|
```ts
|
|
238
240
|
await n.event({
|
|
239
|
-
channel:
|
|
240
|
-
event:
|
|
241
|
-
tags:
|
|
242
|
-
notify:
|
|
241
|
+
channel: "analytics",
|
|
242
|
+
event: "page_view",
|
|
243
|
+
tags: { path: req.path, userId: session.userId },
|
|
244
|
+
notify: false, // stored in feed, no push notification sent
|
|
243
245
|
});
|
|
244
246
|
```
|
|
245
247
|
|
|
@@ -248,7 +250,7 @@ await n.event({
|
|
|
248
250
|
```ts
|
|
249
251
|
// Next.js API route
|
|
250
252
|
export async function POST(req: Request) {
|
|
251
|
-
const useNewFlow = await n.gate(
|
|
253
|
+
const useNewFlow = await n.gate("new-checkout-flow");
|
|
252
254
|
|
|
253
255
|
if (useNewFlow) {
|
|
254
256
|
return newCheckoutHandler(req);
|
|
@@ -262,13 +264,13 @@ export async function POST(req: Request) {
|
|
|
262
264
|
```ts
|
|
263
265
|
// Only notify the CTO for large orders
|
|
264
266
|
await n.event({
|
|
265
|
-
channel:
|
|
266
|
-
event:
|
|
267
|
+
channel: "sales",
|
|
268
|
+
event: "enterprise_signup",
|
|
267
269
|
description: `${company} — ${mrr}/mo`,
|
|
268
|
-
icon:
|
|
269
|
-
value:
|
|
270
|
-
notify:
|
|
271
|
-
recipients:
|
|
270
|
+
icon: "🏢",
|
|
271
|
+
value: mrr,
|
|
272
|
+
notify: true,
|
|
273
|
+
recipients: ["cto@yourcompany.com"], // only they get the push
|
|
272
274
|
});
|
|
273
275
|
```
|
|
274
276
|
|
|
@@ -329,10 +331,11 @@ Content-Type: application/json
|
|
|
329
331
|
```
|
|
330
332
|
|
|
331
333
|
Response:
|
|
334
|
+
|
|
332
335
|
```json
|
|
333
336
|
{
|
|
334
|
-
"id":
|
|
335
|
-
"createdAt":
|
|
337
|
+
"id": "evt_abc123",
|
|
338
|
+
"createdAt": "2025-01-15T10:30:00.000Z",
|
|
336
339
|
"rateLimited": false
|
|
337
340
|
}
|
|
338
341
|
```
|
package/dist/index.d.ts
CHANGED
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
* recipients: ['admin@company.com', 'billing@company.com'],
|
|
20
20
|
* });
|
|
21
21
|
*/
|
|
22
|
-
import type { NotiformerConfig, EventPayload, EventResponse, GateOptions, GateResult } from "./types";
|
|
23
|
-
export type { NotiformerConfig, EventPayload, EventResponse, GateOptions, GateResult, };
|
|
22
|
+
import type { NotiformerConfig, EventPayload, EventResponse, GateOptions, GateResult, AskPayload, AskResult } from "./types";
|
|
23
|
+
export type { NotiformerConfig, EventPayload, EventResponse, GateOptions, GateResult, AskPayload, AskResult, };
|
|
24
24
|
export declare class Notiformer {
|
|
25
25
|
private readonly apiKey;
|
|
26
26
|
private readonly baseUrl;
|
|
@@ -51,6 +51,26 @@ export declare class Notiformer {
|
|
|
51
51
|
gate(key: string, options?: GateOptions): Promise<boolean>;
|
|
52
52
|
gateDetails(key: string, options?: GateOptions): Promise<GateResult>;
|
|
53
53
|
clearGateCache(key?: string): void;
|
|
54
|
+
/**
|
|
55
|
+
* Pause execution and wait for a human to approve or deny from the Notiformer app.
|
|
56
|
+
*
|
|
57
|
+
* Your agent stops here. A push notification is sent to your phone with
|
|
58
|
+
* Approve and Deny buttons. The method resolves when you respond,
|
|
59
|
+
* or when the timeout expires.
|
|
60
|
+
*
|
|
61
|
+
* Never throws by default — returns { approved: false, timedOut: false } on error.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* const { approved } = await n.ask({
|
|
65
|
+
* message: `Send campaign to ${count} users?`,
|
|
66
|
+
* timeout: 300,
|
|
67
|
+
* });
|
|
68
|
+
* if (approved) await sendEmails();
|
|
69
|
+
*/
|
|
70
|
+
ask(payload: AskPayload): Promise<AskResult>;
|
|
71
|
+
private pollAsk;
|
|
72
|
+
private sleep;
|
|
73
|
+
private failAsk;
|
|
54
74
|
private post;
|
|
55
75
|
private get;
|
|
56
76
|
private request;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACV,MAAM,SAAS,CAAC;AAIjB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,GACV,CAAC;AAOF,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;IAoCpC;;;;;;;;;OASG;IACG,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAiDjE;;;;OAIG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsB9D,WAAW,CACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC;IAKtB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlC;;;;;;;;;;;;;;;OAeG;IACG,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;YA+CpC,OAAO;IAiDrB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;YAOD,IAAI;YAIJ,GAAG;YAIH,OAAO;IAmBrB,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,oBAAoB;CAmB7B;AAED,eAAe,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -147,6 +147,102 @@ class Notiformer {
|
|
|
147
147
|
clearGateCache(key) {
|
|
148
148
|
key ? this.gateCache.delete(key) : this.gateCache.clear();
|
|
149
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Pause execution and wait for a human to approve or deny from the Notiformer app.
|
|
152
|
+
*
|
|
153
|
+
* Your agent stops here. A push notification is sent to your phone with
|
|
154
|
+
* Approve and Deny buttons. The method resolves when you respond,
|
|
155
|
+
* or when the timeout expires.
|
|
156
|
+
*
|
|
157
|
+
* Never throws by default — returns { approved: false, timedOut: false } on error.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* const { approved } = await n.ask({
|
|
161
|
+
* message: `Send campaign to ${count} users?`,
|
|
162
|
+
* timeout: 300,
|
|
163
|
+
* });
|
|
164
|
+
* if (approved) await sendEmails();
|
|
165
|
+
*/
|
|
166
|
+
async ask(payload) {
|
|
167
|
+
var _a, _b, _c;
|
|
168
|
+
if (!payload.message)
|
|
169
|
+
throw new Error("[notiformer] ask.message is required.");
|
|
170
|
+
if (this.isPlaceholder) {
|
|
171
|
+
console.warn('[notiformer] ask() not sent — using example key "ntf_live_test".\n' +
|
|
172
|
+
"→ Replace it with your real key from https://app.notiformer.com/projects");
|
|
173
|
+
return { approved: false, timedOut: false, respondedAt: null };
|
|
174
|
+
}
|
|
175
|
+
if (this.silent)
|
|
176
|
+
return { approved: false, timedOut: false, respondedAt: null };
|
|
177
|
+
const body = {
|
|
178
|
+
message: payload.message,
|
|
179
|
+
timeout: (_a = payload.timeout) !== null && _a !== void 0 ? _a : 300,
|
|
180
|
+
fallback: (_b = payload.fallback) !== null && _b !== void 0 ? _b : "deny",
|
|
181
|
+
};
|
|
182
|
+
if (payload.context !== undefined)
|
|
183
|
+
body.context = payload.context;
|
|
184
|
+
let createRes;
|
|
185
|
+
try {
|
|
186
|
+
createRes = await this.post("/v1/ask", body);
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
return this.failAsk(this.friendlyNetworkError(err));
|
|
190
|
+
}
|
|
191
|
+
if (!createRes.ok) {
|
|
192
|
+
const data = await createRes
|
|
193
|
+
.json()
|
|
194
|
+
.catch(() => ({ error: `HTTP ${createRes.status}` }));
|
|
195
|
+
return this.failAsk(new Error(`[notiformer] ${(_c = data.error) !== null && _c !== void 0 ? _c : createRes.statusText}`));
|
|
196
|
+
}
|
|
197
|
+
const created = (await createRes.json());
|
|
198
|
+
return this.pollAsk(created.id, new Date(created.expiresAt).getTime());
|
|
199
|
+
}
|
|
200
|
+
async pollAsk(askId, expiresAtMs) {
|
|
201
|
+
var _a, _b;
|
|
202
|
+
const POLL_INTERVAL_MS = 2000;
|
|
203
|
+
while (true) {
|
|
204
|
+
await this.sleep(POLL_INTERVAL_MS);
|
|
205
|
+
if (Date.now() >= expiresAtMs) {
|
|
206
|
+
return { approved: false, timedOut: true, respondedAt: null };
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
209
|
+
const res = await this.get(`/v1/ask/${encodeURIComponent(askId)}`);
|
|
210
|
+
if (!res.ok) {
|
|
211
|
+
if (res.status >= 400 && res.status < 500) {
|
|
212
|
+
const data = await res
|
|
213
|
+
.json()
|
|
214
|
+
.catch(() => ({ error: `HTTP ${res.status}` }));
|
|
215
|
+
return this.failAsk(new Error(`[notiformer] ${(_a = data.error) !== null && _a !== void 0 ? _a : res.statusText}`));
|
|
216
|
+
}
|
|
217
|
+
// 5xx — server error, retry on next interval
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
const data = (await res.json());
|
|
221
|
+
if (data.status === "pending")
|
|
222
|
+
continue;
|
|
223
|
+
return {
|
|
224
|
+
approved: data.status === "approved",
|
|
225
|
+
timedOut: data.status === "timed_out",
|
|
226
|
+
respondedAt: (_b = data.respondedAt) !== null && _b !== void 0 ? _b : null,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
catch (_c) {
|
|
230
|
+
// Network error during a single poll — retry until expiry
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
sleep(ms) {
|
|
236
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
237
|
+
}
|
|
238
|
+
failAsk(error) {
|
|
239
|
+
var _a;
|
|
240
|
+
this.logger.error(error.message);
|
|
241
|
+
(_a = this.onError) === null || _a === void 0 ? void 0 : _a.call(this, error);
|
|
242
|
+
if (this.throwOnError)
|
|
243
|
+
throw error;
|
|
244
|
+
return { approved: false, timedOut: false, respondedAt: null };
|
|
245
|
+
}
|
|
150
246
|
async post(path, body) {
|
|
151
247
|
return this.request(path, { method: "POST", body: JSON.stringify(body) });
|
|
152
248
|
}
|
|
@@ -164,7 +260,7 @@ class Notiformer {
|
|
|
164
260
|
headers: {
|
|
165
261
|
"Content-Type": "application/json",
|
|
166
262
|
Authorization: `Bearer ${this.apiKey}`,
|
|
167
|
-
"X-SDK-Version": "1.0.
|
|
263
|
+
"X-SDK-Version": "1.0.9",
|
|
168
264
|
...((_a = init.headers) !== null && _a !== void 0 ? _a : {}),
|
|
169
265
|
},
|
|
170
266
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -50,5 +50,30 @@ export interface GateResult {
|
|
|
50
50
|
cached: boolean;
|
|
51
51
|
fetchedAt: string;
|
|
52
52
|
}
|
|
53
|
+
export interface AskPayload {
|
|
54
|
+
/** The question shown in the push notification title. */
|
|
55
|
+
message: string;
|
|
56
|
+
/** Optional extra detail shown in the notification body. */
|
|
57
|
+
context?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Seconds to wait for a response before applying the fallback.
|
|
60
|
+
* Default: 300 (5 min). Maximum depends on your plan:
|
|
61
|
+
* Starter=300s, Pro=900s, Business=3600s.
|
|
62
|
+
*/
|
|
63
|
+
timeout?: number;
|
|
64
|
+
/**
|
|
65
|
+
* What to return if nobody responds before the timeout.
|
|
66
|
+
* Default: 'deny' (safe — approved will be false).
|
|
67
|
+
*/
|
|
68
|
+
fallback?: "deny" | "approve";
|
|
69
|
+
}
|
|
70
|
+
export interface AskResult {
|
|
71
|
+
/** true if the user tapped Approve, false if they tapped Deny or it timed out. */
|
|
72
|
+
approved: boolean;
|
|
73
|
+
/** true if nobody responded before the timeout expired. */
|
|
74
|
+
timedOut: boolean;
|
|
75
|
+
/** ISO timestamp of when the user responded. null if timed out. */
|
|
76
|
+
respondedAt: string | null;
|
|
77
|
+
}
|
|
53
78
|
export type LogLevel = "debug" | "info" | "warn" | "error" | "none" | "silent";
|
|
54
79
|
//# 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,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;;;;;;;;;;;;;OAaG;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,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":"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;;;;;;;;;;;;;OAaG;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,4DAA4D;IAC5D,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;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "notiformer",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.9",
|
|
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",
|
|
7
7
|
"files": [
|
|
@@ -13,13 +13,17 @@
|
|
|
13
13
|
"prepublishOnly": "npm run build"
|
|
14
14
|
},
|
|
15
15
|
"keywords": [
|
|
16
|
+
"human-in-the-loop",
|
|
17
|
+
"ai-agent",
|
|
18
|
+
"ai-agent-approval",
|
|
19
|
+
"approval-gate",
|
|
16
20
|
"notifications",
|
|
17
21
|
"alerts",
|
|
18
22
|
"monitoring",
|
|
19
23
|
"feature-flags",
|
|
20
24
|
"feature-gates",
|
|
21
25
|
"events",
|
|
22
|
-
"
|
|
26
|
+
"push-notifications",
|
|
23
27
|
"developer-tools"
|
|
24
28
|
],
|
|
25
29
|
"author": "Notiformer",
|