@neetru/sdk 1.2.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/CHANGELOG.md +284 -244
  2. package/README.md +194 -194
  3. package/dist/auth.cjs +3740 -345
  4. package/dist/auth.cjs.map +1 -1
  5. package/dist/auth.d.cts +5 -1
  6. package/dist/auth.d.ts +5 -1
  7. package/dist/auth.mjs +3740 -345
  8. package/dist/auth.mjs.map +1 -1
  9. package/dist/catalog.cjs.map +1 -1
  10. package/dist/catalog.d.cts +5 -1
  11. package/dist/catalog.d.ts +5 -1
  12. package/dist/catalog.mjs.map +1 -1
  13. package/dist/checkout.cjs.map +1 -1
  14. package/dist/checkout.d.cts +5 -1
  15. package/dist/checkout.d.ts +5 -1
  16. package/dist/checkout.mjs.map +1 -1
  17. package/dist/collection-ref-BBvTTXoG.d.cts +423 -0
  18. package/dist/collection-ref-BBvTTXoG.d.ts +423 -0
  19. package/dist/db-react.cjs +136 -0
  20. package/dist/db-react.cjs.map +1 -0
  21. package/dist/db-react.d.cts +99 -0
  22. package/dist/db-react.d.ts +99 -0
  23. package/dist/db-react.mjs +112 -0
  24. package/dist/db-react.mjs.map +1 -0
  25. package/dist/db.cjs +3599 -131
  26. package/dist/db.cjs.map +1 -1
  27. package/dist/db.d.cts +5 -8
  28. package/dist/db.d.ts +5 -8
  29. package/dist/db.mjs +3596 -131
  30. package/dist/db.mjs.map +1 -1
  31. package/dist/entitlements.cjs.map +1 -1
  32. package/dist/entitlements.d.cts +5 -1
  33. package/dist/entitlements.d.ts +5 -1
  34. package/dist/entitlements.mjs.map +1 -1
  35. package/dist/errors.cjs.map +1 -1
  36. package/dist/errors.mjs.map +1 -1
  37. package/dist/index.cjs +3957 -342
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.cts +13 -6
  40. package/dist/index.d.ts +13 -6
  41. package/dist/index.mjs +3877 -263
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/mocks.cjs +183 -7
  44. package/dist/mocks.cjs.map +1 -1
  45. package/dist/mocks.d.cts +18 -5
  46. package/dist/mocks.d.ts +18 -5
  47. package/dist/mocks.mjs +183 -7
  48. package/dist/mocks.mjs.map +1 -1
  49. package/dist/notifications.cjs.map +1 -1
  50. package/dist/notifications.d.cts +5 -1
  51. package/dist/notifications.d.ts +5 -1
  52. package/dist/notifications.mjs.map +1 -1
  53. package/dist/react.cjs.map +1 -1
  54. package/dist/react.d.cts +5 -1
  55. package/dist/react.d.ts +5 -1
  56. package/dist/react.mjs.map +1 -1
  57. package/dist/support.cjs.map +1 -1
  58. package/dist/support.d.cts +5 -1
  59. package/dist/support.d.ts +5 -1
  60. package/dist/support.mjs.map +1 -1
  61. package/dist/telemetry.cjs.map +1 -1
  62. package/dist/telemetry.d.cts +5 -1
  63. package/dist/telemetry.d.ts +5 -1
  64. package/dist/telemetry.mjs.map +1 -1
  65. package/dist/types-B1jylbMC.d.ts +1364 -0
  66. package/dist/types-Kmt4y1FQ.d.cts +1364 -0
  67. package/dist/usage.cjs.map +1 -1
  68. package/dist/usage.d.cts +5 -1
  69. package/dist/usage.d.ts +5 -1
  70. package/dist/usage.mjs.map +1 -1
  71. package/dist/webhooks.cjs.map +1 -1
  72. package/dist/webhooks.d.cts +5 -1
  73. package/dist/webhooks.d.ts +5 -1
  74. package/dist/webhooks.mjs.map +1 -1
  75. package/package.json +133 -111
  76. package/dist/types-CQAfwqUS.d.cts +0 -654
  77. package/dist/types-CQAfwqUS.d.ts +0 -654
package/README.md CHANGED
@@ -1,194 +1,194 @@
1
- # @neetru/sdk
2
-
3
- > Biblioteca runtime oficial pra consumir o ecossistema Neetru a partir de produtos SaaS (Next.js, Node, browser, Edge runtimes).
4
-
5
- <p>
6
- <img alt="npm" src="https://img.shields.io/npm/v/@neetru/sdk?logo=npm">
7
- <img alt="downloads" src="https://img.shields.io/npm/dm/@neetru/sdk?logo=npm">
8
- <img alt="bundle size" src="https://img.shields.io/bundlephobia/minzip/@neetru/sdk">
9
- <img alt="Node" src="https://img.shields.io/badge/node-%3E%3D18-339933?logo=node.js&logoColor=white">
10
- <img alt="license" src="https://img.shields.io/badge/license-MIT-22c55e">
11
- </p>
12
-
13
- ## Instalação
14
-
15
- ```bash
16
- npm install @neetru/sdk
17
- ```
18
-
19
- ## Hello world
20
-
21
- ```ts
22
- import { createNeetruClient } from '@neetru/sdk';
23
-
24
- const neetru = createNeetruClient({
25
- apiKey: process.env.NEETRU_API_KEY, // nrt_<keyId>_<secret>
26
- env: 'prod', // 'dev' = mocks in-memory
27
- });
28
-
29
- // Auth
30
- const user = await neetru.auth.signIn();
31
- console.log('logado como:', user?.email);
32
-
33
- // Entitlement check
34
- const canAi = await neetru.entitlements.check('gestovendas', 'ai_recommendations');
35
- if (canAi) { /* mostrar feature */ }
36
- ```
37
-
38
- ## Princípios
39
-
40
- - **Vendor-neutral** — superfície pública NÃO vaza Firebase/Stripe/etc. Backend Neetru pode mudar no futuro sem reescrever produto.
41
- - **Tree-shakable** — ESM-first, sem side-effects. Importe só os namespaces que usa.
42
- - **Universal** — browser, Node ≥18, Edge runtimes (Vercel Edge, Cloudflare Workers). Usa `fetch` global.
43
- - **Tipado** — erros via `NeetruError` com `.code`, `.status`, `.requestId`.
44
- - **Dev mode** — `NEETRU_ENV=dev` ativa mocks automáticos — zero rede em testes locais.
45
-
46
- ## Namespaces v1.2
47
-
48
- | Namespace | O que oferece |
49
- |---|---|
50
- | `auth` | OIDC sign-in / sign-out + dev fixture user |
51
- | `catalog` | Produtos públicos (`list` / `get`) |
52
- | `entitlements` | Verificação `(productSlug, feature)` → boolean ou detalhado |
53
- | `telemetry` | `event(...)` + `log(...)` per-product |
54
- | `usage` | `track` / `getQuota` / `report` / `check` (metering canônico) |
55
- | `support` | `createTicket` / `listMyTickets` |
56
- | `db` | Coleções tenant-scoped (`list` / `get` / `set` / `add` / `update` / `remove`) |
57
- | `checkout` | Stripe Checkout intent (`start` / `get` / `cancel` + auto-redirect) |
58
- | `webhooks` ⭐ v1.2 | Produtos registram URL pra receber eventos Core (subscription.activated, usage.quota_exceeded, etc) |
59
- | `notifications` ⭐ v1.2 | Produto envia notification in-app pros SEUS usuários (distinto das staff-only do Core) |
60
-
61
- ## Exemplos por namespace
62
-
63
- ### Webhooks outbound (v1.2)
64
-
65
- ```ts
66
- await neetru.webhooks.register({
67
- url: 'https://meu-produto.com/webhooks/neetru',
68
- events: ['subscription.activated', 'subscription.cancelled', 'usage.quota_exceeded'],
69
- secret: 'chave-32-chars-pra-hmac-sha256',
70
- });
71
-
72
- const endpoints = await neetru.webhooks.list();
73
- const test = await neetru.webhooks.test(endpoints[0].id);
74
- console.log(test.statusCode, test.durationMs);
75
- ```
76
-
77
- Eventos recebidos no seu endpoint chegam com:
78
- - `X-Neetru-Signature: sha256=<hmac>` (se `secret` registrado)
79
- - `X-Neetru-Timestamp: <ms>` (replay protection — rejeitar > 5min skew)
80
-
81
- ### Notifications produto → user (v1.2)
82
-
83
- ```ts
84
- await neetru.notifications.send({
85
- userId: 'usr_xyz',
86
- kind: 'order.received',
87
- severity: 'success',
88
- title: 'Novo pedido #1234',
89
- body: 'Pedido de R$ 89,90',
90
- link: '/orders/1234',
91
- fingerprint: 'order:1234', // dedup < 24h
92
- });
93
-
94
- const notifs = await neetru.notifications.list('usr_xyz', { onlyUnread: true });
95
- await neetru.notifications.markRead(notifs[0].id);
96
- ```
97
-
98
- ### Entitlements
99
-
100
- ```ts
101
- const ok = await neetru.entitlements.check('gestovendas', 'ai_recommendations');
102
- const detailed = await neetru.entitlements.detailed('gestovendas', 'ai_recommendations');
103
- // → { allowed, planId, remaining?, limit?, reason }
104
- ```
105
-
106
- ### Usage tracking
107
-
108
- ```ts
109
- await neetru.usage.track('report_generated', { count: 42, format: 'pdf' });
110
-
111
- const quota = await neetru.usage.getQuota('reports_per_month');
112
- // → { used: 15, limit: 100, resetsAt: '...', plan: 'starter' }
113
- ```
114
-
115
- ### Support
116
-
117
- ```ts
118
- await neetru.support.createTicket({
119
- subject: 'Bug ao exportar CSV',
120
- message: 'Quando seleciono >1000 rows o export falha',
121
- severity: 'high',
122
- });
123
-
124
- const myTickets = await neetru.support.listMyTickets({ status: 'open' });
125
- ```
126
-
127
- ### DB (tenant-scoped, vendor-neutral)
128
-
129
- ```ts
130
- await neetru.db.add('orders', { customerId: 'usr_x', total: 9990 });
131
- const orders = await neetru.db.list('orders', {
132
- where: [['customerId', '==', 'usr_x']],
133
- orderBy: 'createdAt',
134
- limit: 50,
135
- });
136
- ```
137
-
138
- ### Checkout
139
-
140
- ```ts
141
- const intent = await neetru.checkout.start({
142
- productId: 'gestovendas',
143
- planId: 'pro',
144
- tenantType: 'company',
145
- tenantId: 'company_xyz',
146
- });
147
- window.location.href = intent.checkoutUrl;
148
- ```
149
-
150
- ## Modo dev (mocks automáticos)
151
-
152
- ```ts
153
- const neetru = createNeetruClient({ env: 'dev' });
154
- // auth retorna DEV_FIXTURE_USER, usage/db/webhooks/notifications são in-memory
155
- ```
156
-
157
- Override pra testes determinísticos:
158
-
159
- ```ts
160
- import { MockAuth, MockUsage } from '@neetru/sdk';
161
-
162
- const neetru = createNeetruClient({
163
- apiKey: 'nrt_test',
164
- env: 'prod',
165
- mocks: {
166
- auth: new MockAuth({ user: { uid: 'test', email: 'a@b' } }),
167
- usage: new MockUsage(),
168
- },
169
- });
170
- ```
171
-
172
- ## Versionamento
173
-
174
- - **SemVer estrito** — breaking changes só em major.
175
- - v1.0 GA (2026-05-06) — superfície estável de 7 namespaces
176
- - v1.1 (2026-05) — checkout namespace
177
- - v1.2 (2026-05) — webhooks + notifications namespaces
178
-
179
- `initNeetru` (API v0.0.1) está deprecated desde v0.2 — funciona até v2.0.
180
-
181
- ## Stack
182
-
183
- - TypeScript 5 ESM-first
184
- - Zero dependências runtime (usa `fetch` global)
185
- - Bundle minzip <10KB (todos namespaces somados, tree-shake-friendly)
186
-
187
- ## Mais info
188
-
189
- - **Repo:** [github.com/Neetru/neetru-core](https://github.com/Neetru/neetru-core)
190
- - **CLI complementar:** `npm install -g @neetru/cli`
191
-
192
- ## Licença
193
-
194
- MIT © Neetru
1
+ # @neetru/sdk
2
+
3
+ > Biblioteca runtime oficial pra consumir o ecossistema Neetru a partir de produtos SaaS (Next.js, Node, browser, Edge runtimes).
4
+
5
+ <p>
6
+ <img alt="npm" src="https://img.shields.io/npm/v/@neetru/sdk?logo=npm">
7
+ <img alt="downloads" src="https://img.shields.io/npm/dm/@neetru/sdk?logo=npm">
8
+ <img alt="bundle size" src="https://img.shields.io/bundlephobia/minzip/@neetru/sdk">
9
+ <img alt="Node" src="https://img.shields.io/badge/node-%3E%3D18-339933?logo=node.js&logoColor=white">
10
+ <img alt="license" src="https://img.shields.io/badge/license-MIT-22c55e">
11
+ </p>
12
+
13
+ ## Instalação
14
+
15
+ ```bash
16
+ npm install @neetru/sdk
17
+ ```
18
+
19
+ ## Hello world
20
+
21
+ ```ts
22
+ import { createNeetruClient } from '@neetru/sdk';
23
+
24
+ const neetru = createNeetruClient({
25
+ apiKey: process.env.NEETRU_API_KEY, // nrt_<keyId>_<secret>
26
+ env: 'prod', // 'dev' = mocks in-memory
27
+ });
28
+
29
+ // Auth
30
+ const user = await neetru.auth.signIn();
31
+ console.log('logado como:', user?.email);
32
+
33
+ // Entitlement check
34
+ const canAi = await neetru.entitlements.check('gestovendas', 'ai_recommendations');
35
+ if (canAi) { /* mostrar feature */ }
36
+ ```
37
+
38
+ ## Princípios
39
+
40
+ - **Vendor-neutral** — superfície pública NÃO vaza Firebase/Stripe/etc. Backend Neetru pode mudar no futuro sem reescrever produto.
41
+ - **Tree-shakable** — ESM-first, sem side-effects. Importe só os namespaces que usa.
42
+ - **Universal** — browser, Node ≥18, Edge runtimes (Vercel Edge, Cloudflare Workers). Usa `fetch` global.
43
+ - **Tipado** — erros via `NeetruError` com `.code`, `.status`, `.requestId`.
44
+ - **Dev mode** — `NEETRU_ENV=dev` ativa mocks automáticos — zero rede em testes locais.
45
+
46
+ ## Namespaces v1.2
47
+
48
+ | Namespace | O que oferece |
49
+ |---|---|
50
+ | `auth` | OIDC sign-in / sign-out + dev fixture user |
51
+ | `catalog` | Produtos públicos (`list` / `get`) |
52
+ | `entitlements` | Verificação `(productSlug, feature)` → boolean ou detalhado |
53
+ | `telemetry` | `event(...)` + `log(...)` per-product |
54
+ | `usage` | `track` / `getQuota` / `report` / `check` (metering canônico) |
55
+ | `support` | `createTicket` / `listMyTickets` |
56
+ | `db` | Coleções tenant-scoped (`list` / `get` / `set` / `add` / `update` / `remove`) |
57
+ | `checkout` | Stripe Checkout intent (`start` / `get` / `cancel` + auto-redirect) |
58
+ | `webhooks` ⭐ v1.2 | Produtos registram URL pra receber eventos Core (subscription.activated, usage.quota_exceeded, etc) |
59
+ | `notifications` ⭐ v1.2 | Produto envia notification in-app pros SEUS usuários (distinto das staff-only do Core) |
60
+
61
+ ## Exemplos por namespace
62
+
63
+ ### Webhooks outbound (v1.2)
64
+
65
+ ```ts
66
+ await neetru.webhooks.register({
67
+ url: 'https://meu-produto.com/webhooks/neetru',
68
+ events: ['subscription.activated', 'subscription.cancelled', 'usage.quota_exceeded'],
69
+ secret: 'chave-32-chars-pra-hmac-sha256',
70
+ });
71
+
72
+ const endpoints = await neetru.webhooks.list();
73
+ const test = await neetru.webhooks.test(endpoints[0].id);
74
+ console.log(test.statusCode, test.durationMs);
75
+ ```
76
+
77
+ Eventos recebidos no seu endpoint chegam com:
78
+ - `X-Neetru-Signature: sha256=<hmac>` (se `secret` registrado)
79
+ - `X-Neetru-Timestamp: <ms>` (replay protection — rejeitar > 5min skew)
80
+
81
+ ### Notifications produto → user (v1.2)
82
+
83
+ ```ts
84
+ await neetru.notifications.send({
85
+ userId: 'usr_xyz',
86
+ kind: 'order.received',
87
+ severity: 'success',
88
+ title: 'Novo pedido #1234',
89
+ body: 'Pedido de R$ 89,90',
90
+ link: '/orders/1234',
91
+ fingerprint: 'order:1234', // dedup < 24h
92
+ });
93
+
94
+ const notifs = await neetru.notifications.list('usr_xyz', { onlyUnread: true });
95
+ await neetru.notifications.markRead(notifs[0].id);
96
+ ```
97
+
98
+ ### Entitlements
99
+
100
+ ```ts
101
+ const ok = await neetru.entitlements.check('gestovendas', 'ai_recommendations');
102
+ const detailed = await neetru.entitlements.detailed('gestovendas', 'ai_recommendations');
103
+ // → { allowed, planId, remaining?, limit?, reason }
104
+ ```
105
+
106
+ ### Usage tracking
107
+
108
+ ```ts
109
+ await neetru.usage.track('report_generated', { count: 42, format: 'pdf' });
110
+
111
+ const quota = await neetru.usage.getQuota('reports_per_month');
112
+ // → { used: 15, limit: 100, resetsAt: '...', plan: 'starter' }
113
+ ```
114
+
115
+ ### Support
116
+
117
+ ```ts
118
+ await neetru.support.createTicket({
119
+ subject: 'Bug ao exportar CSV',
120
+ message: 'Quando seleciono >1000 rows o export falha',
121
+ severity: 'high',
122
+ });
123
+
124
+ const myTickets = await neetru.support.listMyTickets({ status: 'open' });
125
+ ```
126
+
127
+ ### DB (tenant-scoped, vendor-neutral)
128
+
129
+ ```ts
130
+ await neetru.db.add('orders', { customerId: 'usr_x', total: 9990 });
131
+ const orders = await neetru.db.list('orders', {
132
+ where: [['customerId', '==', 'usr_x']],
133
+ orderBy: 'createdAt',
134
+ limit: 50,
135
+ });
136
+ ```
137
+
138
+ ### Checkout
139
+
140
+ ```ts
141
+ const intent = await neetru.checkout.start({
142
+ productId: 'gestovendas',
143
+ planId: 'pro',
144
+ tenantType: 'company',
145
+ tenantId: 'company_xyz',
146
+ });
147
+ window.location.href = intent.checkoutUrl;
148
+ ```
149
+
150
+ ## Modo dev (mocks automáticos)
151
+
152
+ ```ts
153
+ const neetru = createNeetruClient({ env: 'dev' });
154
+ // auth retorna DEV_FIXTURE_USER, usage/db/webhooks/notifications são in-memory
155
+ ```
156
+
157
+ Override pra testes determinísticos:
158
+
159
+ ```ts
160
+ import { MockAuth, MockUsage } from '@neetru/sdk';
161
+
162
+ const neetru = createNeetruClient({
163
+ apiKey: 'nrt_test',
164
+ env: 'prod',
165
+ mocks: {
166
+ auth: new MockAuth({ user: { uid: 'test', email: 'a@b' } }),
167
+ usage: new MockUsage(),
168
+ },
169
+ });
170
+ ```
171
+
172
+ ## Versionamento
173
+
174
+ - **SemVer estrito** — breaking changes só em major.
175
+ - v1.0 GA (2026-05-06) — superfície estável de 7 namespaces
176
+ - v1.1 (2026-05) — checkout namespace
177
+ - v1.2 (2026-05) — webhooks + notifications namespaces
178
+
179
+ `initNeetru` (API v0.0.1) está deprecated desde v0.2 — funciona até v2.0.
180
+
181
+ ## Stack
182
+
183
+ - TypeScript 5 ESM-first
184
+ - Zero dependências runtime (usa `fetch` global)
185
+ - Bundle minzip <10KB (todos namespaces somados, tree-shake-friendly)
186
+
187
+ ## Mais info
188
+
189
+ - **Repo:** [github.com/Neetru/neetru-core](https://github.com/Neetru/neetru-core)
190
+ - **CLI complementar:** `npm install -g @neetru/cli`
191
+
192
+ ## Licença
193
+
194
+ MIT © Neetru