canary-kit 0.10.0 → 1.0.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.
package/CANARY.md CHANGED
@@ -31,6 +31,32 @@ The protocol is defined in three layers:
31
31
  monitoring)
32
32
  3. **CANARY-WORDLIST** — Spoken-word encoding optimised for voice clarity
33
33
 
34
+ ## Protocol Layering
35
+
36
+ CANARY builds on two generic protocol specifications:
37
+
38
+ - **[Spoken Token Protocol](https://github.com/forgesworn/spoken-token/blob/main/PROTOCOL.md)**
39
+ — defines SPOKEN-DERIVE (the core HMAC-counter-to-words derivation) and SPOKEN-ENCODE
40
+ (word/PIN/hex encoding). CANARY-DERIVE is a superset of SPOKEN-DERIVE. The generic
41
+ protocol is implemented by the `spoken-token` npm package.
42
+
43
+ - **[Simple Shared Secret Groups](GROUPS.md)** — defines the group lifecycle (creation,
44
+ member management, seed rotation, sync protocol, replay protection). CANARY groups
45
+ are an application of this generic group protocol with additional duress, liveness,
46
+ and beacon extensions.
47
+
48
+ The Nostr transport binding is defined in two layers:
49
+
50
+ - **[NIP-XX: Simple Shared Secret Groups](NIP-XX.md)** — maps the generic group
51
+ protocol onto existing Nostr kinds (30078, NIP-17, 20078). Zero new event kinds.
52
+
53
+ - **[NIP-CANARY](NIP-CANARY.md)** — application profile of NIP-XX adding
54
+ CANARY-specific signal types (duress alerts, beacons) and Meshtastic fallback.
55
+
56
+ CANARY's unique contributions beyond the generic layers are: **duress detection**
57
+ (CANARY-DURESS), **liveness monitoring** (dead man's switch), **threat-profile
58
+ presets**, and **encrypted location beacons**.
59
+
34
60
  ## Motivation
35
61
 
36
62
  AI voice cloning now requires as little as three seconds of audio. A thirty-second clip
@@ -96,6 +122,12 @@ separate keys or counters.
96
122
 
97
123
  Core deterministic token derivation. The universal primitive that all other layers build on.
98
124
 
125
+ > **Generic layer:** The core derivation algorithm (HMAC-SHA256 with context and counter)
126
+ > is specified generically in the [Spoken Token Protocol](https://github.com/forgesworn/spoken-token/blob/main/PROTOCOL.md)
127
+ > as SPOKEN-DERIVE. CANARY-DERIVE is identical to SPOKEN-DERIVE — this section
128
+ > documents it in CANARY's context for completeness. The `spoken-token` npm package
129
+ > provides a standalone implementation of the generic layer.
130
+
99
131
  ### Algorithm
100
132
 
101
133
  ```
@@ -163,6 +195,12 @@ re-sync messages) MUST enforce the following rules:
163
195
 
164
196
  ## CANARY-SYNC: Transport-Agnostic Synchronisation
165
197
 
198
+ > **Generic layer:** The core group management protocol (creation, member management,
199
+ > seed rotation, counter sync, replay protection) is specified generically in
200
+ > [Simple Shared Secret Groups](GROUPS.md). CANARY-SYNC extends it with
201
+ > application-specific message types: `beacon`, `duress-alert`, `duress-clear`,
202
+ > and `liveness-checkin`.
203
+
166
204
  CANARY-SYNC is the protocol layer for propagating group state mutations and telemetry
167
205
  across any transport without depending on Nostr or any specific relay infrastructure.
168
206
  It operates over any channel capable of delivering authenticated, ordered or unordered
@@ -1062,4 +1100,4 @@ import {
1062
1100
  } from 'canary-kit/encoding'
1063
1101
  ```
1064
1102
 
1065
- Source: `https://github.com/TheCryptoDonkey/canary-kit`
1103
+ Source: `https://github.com/forgesworn/canary-kit`
package/INTEGRATION.md CHANGED
@@ -12,6 +12,9 @@ help derive the correct word. Only knowledge of the shared secret does.
12
12
  This guide covers seed establishment patterns and call centre integration for
13
13
  insurance, banking, and enterprise use cases.
14
14
 
15
+ For regulatory alignment analysis — including FCA, RBI, UAE TDRA, EU AI Act,
16
+ eIDAS, and W3C Confidence Method — see [REGULATORY.md](REGULATORY.md).
17
+
15
18
  ## Seed Establishment Patterns
16
19
 
17
20
  The shared seed is the foundation of CANARY verification. How it gets to both
@@ -209,6 +212,152 @@ if (result.status === 'duress') {
209
212
  | Social engineering | Yes | Bidirectional — attacker must know the secret |
210
213
  | Coercion / duress | Yes | Distinct duress token triggers silent alert |
211
214
 
215
+ ## Regulatory Considerations
216
+
217
+ The deployment patterns above align with specific regulatory frameworks. This
218
+ section summarises the alignment; see [REGULATORY.md](REGULATORY.md) for the
219
+ full analysis including gap assessments.
220
+
221
+ ### FCA Strong Customer Authentication (UK)
222
+
223
+ Pattern 1 (App-Derived Seed) provides two SCA factors for voice-channel payment
224
+ authorisation:
225
+
226
+ - **Knowledge factor** — the shared seed, known only to the customer and institution
227
+ - **Possession factor** — the seed stored in device secure storage (Keychain / KeyStore) behind biometrics or PIN
228
+
229
+ CANARY tokens rotate on a time-based counter (P4: Replay Resistance). For
230
+ transaction-specific dynamic linking (required by FCA for remote electronic
231
+ payments), construct the session namespace or counter from transaction parameters:
232
+
233
+ ```typescript
234
+ const session = createSession({
235
+ secret: seed,
236
+ namespace: `aviva:payment:${payeeId}:${amountPence}`,
237
+ roles: ['caller', 'agent'],
238
+ myRole: 'agent',
239
+ preset: 'call',
240
+ theirIdentity: customerId,
241
+ })
242
+ ```
243
+
244
+ ### RBI Digital Payment Authentication (India)
245
+
246
+ Pattern 1 satisfies the RBI's two-factor authentication requirement for digital
247
+ payment transactions (effective 1 April 2026). The CANARY token serves as a
248
+ dynamic factor — unique per time window, computed locally, and not transmitted
249
+ over SMS.
250
+
251
+ For voice-channel payment authorisation, CANARY replaces SMS OTP with a spoken
252
+ dynamic factor that does not require the customer to read digits aloud — reducing
253
+ interception and shoulder-surfing risk.
254
+
255
+ ### UAE TDRA SMS-OTP Phase-Out
256
+
257
+ CBUAE Circular 3057 discontinues SMS and email OTP for financial transactions
258
+ (effective 31 March 2026). Pattern 1 provides a direct replacement:
259
+
260
+ - No SMS dependency — seeds are derived server-side and delivered over TLS during app login
261
+ - Offline derivation — tokens computed locally after initial sync
262
+ - Phishing resistance — tokens are HMAC-derived from a secret unavailable to phishing sites
263
+
264
+ Pattern 3 (SMS/Email OTP Bootstrap) should be treated as a transitional step to
265
+ Pattern 1, not as a long-term authentication mechanism in UAE-regulated contexts.
266
+
267
+ ### EU AI Act Article 50 (Deepfake Transparency)
268
+
269
+ CANARY is complementary to Article 50 obligations (effective 2 August 2026).
270
+ Article 50 requires labelling of AI-generated content. CANARY verifies caller
271
+ identity at the point of interaction — a different concern. Organisations
272
+ deploying both achieve defence-in-depth:
273
+
274
+ - The AI system labels synthetic outputs (Article 50 compliance)
275
+ - CANARY verifies the human on the call is authenticated (caller integrity)
276
+
277
+ "Labelling tells you the content was AI-generated. CANARY tells you the person
278
+ on the phone is who they claim to be."
279
+
280
+ ## Cold-Call Verification (Signet)
281
+
282
+ The patterns above require a prior relationship — the customer must have the
283
+ institution's app installed and a seed provisioned. For the scenario where an
284
+ institution calls a customer who has no prior enrolment, the
285
+ [Signet protocol](https://github.com/forgesworn/signet) provides cold-call
286
+ verification.
287
+
288
+ ### How it works
289
+
290
+ The institution publishes a secp256k1 public key on its domain:
291
+
292
+ ```
293
+ GET https://example-bank.co.uk/.well-known/signet.json
294
+ ```
295
+
296
+ ```json
297
+ {
298
+ "version": 1,
299
+ "name": "Example Bank",
300
+ "pubkeys": [
301
+ {
302
+ "id": "fraud-team",
303
+ "pubkey": "64-char-hex-secp256k1-x-only-pubkey",
304
+ "label": "Fraud & Security Team",
305
+ "created": "2026-01-15T00:00:00Z"
306
+ }
307
+ ],
308
+ "relay": "https://verify.example-bank.co.uk/signet",
309
+ "policy": {
310
+ "rotation": "quarterly",
311
+ "contact": "security@example-bank.co.uk"
312
+ }
313
+ }
314
+ ```
315
+
316
+ When the institution calls a customer:
317
+
318
+ 1. Agent: "I'm calling from Example Bank. Can you Signet me?"
319
+ 2. Customer opens the Signet app, types `example-bank.co.uk`
320
+ 3. App fetches the institution's public key from `.well-known/signet.json`
321
+ 4. App generates an ephemeral keypair, computes ECDH with the institution's key
322
+ 5. App shows a short session code (e.g. `BRAVO-7742`) and 3 verification words
323
+ 6. Customer reads the session code to the agent
324
+ 7. Agent's system resolves the session code, performs ECDH, derives the same words
325
+ 8. Agent reads the words — customer confirms they match
326
+
327
+ No prior enrolment. No shared secret. The trust anchor is DNS domain ownership.
328
+
329
+ ### Deployment for institutions
330
+
331
+ Minimum deployment is a single static JSON file at `/.well-known/signet.json`
332
+ on the institution's domain. Requirements:
333
+
334
+ - HTTPS only (no HTTP fallback)
335
+ - Max 20 pubkeys per file, max 10 KB
336
+ - Pubkeys as 64-character hex (secp256k1 x-only public keys)
337
+ - Key rotation policy recommended (quarterly minimum)
338
+ - Private keys MUST be stored in an HSM for regulated institutions
339
+
340
+ For session code resolution, the institution hosts a lightweight HTTPS endpoint
341
+ (specified in the `relay` field). See the
342
+ [Signet protocol spec §27](https://github.com/forgesworn/signet) for the full
343
+ specification.
344
+
345
+ ### Relationship to CANARY
346
+
347
+ Cold-call verification and CANARY are complementary:
348
+
349
+ | | Cold-Call (Signet) | CANARY Session |
350
+ |---|---|---|
351
+ | Prior relationship | Not required | Required (shared seed) |
352
+ | Duress detection | No | Yes |
353
+ | Liveness monitoring | No | Yes |
354
+ | Offline / mesh | No | Yes |
355
+ | Use case | "Is this my bank calling?" | "Am I safe? Is my family safe?" |
356
+
357
+ For institutions: deploy `.well-known/signet.json` for cold-call verification,
358
+ and Pattern 1 (App-Derived Seed) for enrolled customers. Both use spoken-token
359
+ HMAC-SHA256 derivation under the hood.
360
+
212
361
  ## Example: Insurance Phone Verification
213
362
 
214
363
  End-to-end walkthrough using Aviva as the example:
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 TheCryptoDonkey
3
+ Copyright (c) 2026 forgesworn
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/NIP-CANARY.md CHANGED
@@ -13,6 +13,32 @@ providing group management, seed distribution, and counter synchronisation over
13
13
  Nostr relays. The core protocol (CANARY-DERIVE, CANARY-DURESS, CANARY-WORDLIST)
14
14
  is defined in the transport-agnostic [CANARY specification](CANARY.md).
15
15
 
16
+ ## Protocol Layering
17
+
18
+ NIP-CANARY is an **application profile** of [NIP-XX: Simple Shared Secret Groups](NIP-XX.md).
19
+
20
+ The generic group transport (NIP-XX) defines how to manage shared-secret groups over
21
+ Nostr using existing event kinds:
22
+ - **Kind 30078** (NIP-78) for durable group state
23
+ - **NIP-17 gift wraps** for secret distribution
24
+ - **Kind 20078** (ephemeral) for real-time signals
25
+
26
+ NIP-CANARY extends NIP-XX with CANARY-specific features:
27
+ - **Duress signal semantics** in kind 20078 payloads (`duress-alert`, `duress-clear`)
28
+ - **Encrypted location beacons** in kind 20078 payloads
29
+ - **Liveness check-in signals** for dead man's switch
30
+ - **Meshtastic fallback transport** for offline/mesh operation
31
+
32
+ The six custom event kinds defined below (38800–20800) represent the **current
33
+ implementation**. A future version of this NIP will migrate to NIP-XX's transport
34
+ mapping (zero new kinds). The custom kinds are documented here for compatibility
35
+ with existing deployments.
36
+
37
+ > **Migration path:** New implementations SHOULD use NIP-XX transport (kind 30078,
38
+ > NIP-17, kind 20078) with the `ssg/` tag prefix and CANARY-specific signal types.
39
+ > Existing implementations using kinds 38800–20800 will continue to work — clients
40
+ > MAY support both during the transition period.
41
+
16
42
  ## Nostr Canary Groups
17
43
 
18
44
  This section defines a Nostr application layer built on the CANARY protocol, providing
@@ -608,7 +634,7 @@ and distributed with the `canary-kit` npm package. Implementations MUST use this
608
634
  list without modification. The wordlist file contains exactly 2048 entries, one word per
609
635
  line, ordered alphabetically, UTF-8 encoding, Unix line endings.
610
636
 
611
- Reference: `https://github.com/TheCryptoDonkey/canary-kit` — `src/wordlists/en-v1.txt`
637
+ Reference: `https://github.com/forgesworn/canary-kit` — `src/wordlists/en-v1.txt`
612
638
 
613
639
  ## Reference Implementation
614
640
 
@@ -621,4 +647,4 @@ import {
621
647
  } from 'canary-kit'
622
648
  ```
623
649
 
624
- Source: `https://github.com/TheCryptoDonkey/canary-kit`
650
+ Source: `https://github.com/forgesworn/canary-kit`
package/README.md CHANGED
@@ -3,13 +3,39 @@
3
3
  > Deepfake-proof identity verification. Open protocol, minimal dependencies.
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/canary-kit)](https://www.npmjs.com/package/canary-kit)
6
- [![CI](https://github.com/TheCryptoDonkey/canary-kit/actions/workflows/ci.yml/badge.svg)](https://github.com/TheCryptoDonkey/canary-kit/actions)
6
+ [![CI](https://github.com/forgesworn/canary-kit/actions/workflows/ci.yml/badge.svg)](https://github.com/forgesworn/canary-kit/actions)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
8
8
  [![TypeScript](https://img.shields.io/badge/TypeScript-native-blue)](https://www.typescriptlang.org/)
9
9
  [![Coverage](https://img.shields.io/badge/coverage-95%25-brightgreen)](vitest.config.ts)
10
10
 
11
11
  **[Interactive Demo](https://canary.trotters.cc/)** · [Protocol Spec](CANARY.md) · [Nostr Binding](NIP-CANARY.md) · [Integration Guide](INTEGRATION.md)
12
12
 
13
+ ## Why Now
14
+
15
+ Regulators and criminals arrived at the same inflection point simultaneously. In
16
+ March 2023 the UN Office on Drugs and Crime formally linked AI synthetic voice to
17
+ organised criminal networks operating cross-border fraud at institutional scale.
18
+ Voice cloning tools are now available as a service for under $400/month; vishing
19
+ surged 442% in 2025. The same week, the UAE Central Bank set a 31 March 2026
20
+ deadline banning SMS OTP across all licensed financial institutions — the first
21
+ national regulator to mandate its replacement. India's RBI follows on 1 April 2026
22
+ with mandatory two-factor authentication for all digital payment transactions. The
23
+ EU AI Act's deepfake transparency obligation (Article 50) takes effect in August
24
+ 2026; EUDI Wallets must be available across all 27 Member States by December 2026.
25
+ FCA Strong Customer Authentication technical standards were updated in March 2026.
26
+
27
+ CANARY is positioned where these pressures converge: the voice channel, where
28
+ authentication is weakest and the regulatory gap is largest. For a detailed mapping
29
+ of CANARY's security properties against each regulation, see
30
+ [REGULATORY.md](REGULATORY.md).
31
+
32
+ The full verification stack covers four caller scenarios: known person, known
33
+ institution (CANARY handles this), unknown person, and unknown institution
34
+ cold-calling — the last via [Signet](https://github.com/forgesworn/signet)
35
+ cold-call verification (forthcoming). Deepfake labelling tools and CANARY are
36
+ complementary: one labels AI-generated content after the fact; CANARY verifies
37
+ the caller's identity in real time at the point of interaction.
38
+
13
39
  ## The Problem
14
40
 
15
41
  Voice phishing surged 442% in 2025. AI can clone a voice from three seconds of
@@ -175,7 +201,7 @@ Content is encrypted with **NIP-44**. Events may carry a **NIP-40** `expiration`
175
201
 
176
202
  ## Support
177
203
 
178
- For issues and feature requests, see [GitHub Issues](https://github.com/TheCryptoDonkey/canary-kit/issues).
204
+ For issues and feature requests, see [GitHub Issues](https://github.com/forgesworn/canary-kit/issues).
179
205
 
180
206
  If you find canary-kit useful, consider sending a tip:
181
207
 
package/SECURITY.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  **Please report security vulnerabilities through GitHub Security Advisories only.**
13
13
 
14
- 1. Go to [Security Advisories](https://github.com/TheCryptoDonkey/canary-kit/security/advisories)
14
+ 1. Go to [Security Advisories](https://github.com/forgesworn/canary-kit/security/advisories)
15
15
  2. Click **"New draft security advisory"**
16
16
  3. Fill in the details of the vulnerability
17
17
 
@@ -1 +1 @@
1
- {"version":3,"file":"beacon.d.ts","sourceRoot":"","sources":["../src/beacon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyBH;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAG3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAG3D;AA2CD,+DAA+D;AAC/D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAaxB;AAMD,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAA;IAC9C,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,QAAQ,GAAG,UAAU,CAAA;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,cAAc,GAAG,IAAI,GAC9B,WAAW,CAsBb;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAqBtB"}
1
+ {"version":3,"file":"beacon.d.ts","sourceRoot":"","sources":["../src/beacon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0BH;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAG3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAG3D;AA2CD,+DAA+D;AAC/D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAmBxB;AAMD,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAA;IAC9C,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,QAAQ,GAAG,UAAU,CAAA;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,cAAc,GAAG,IAAI,GAC9B,WAAW,CA+Bb;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAqCtB"}
package/dist/beacon.js CHANGED
@@ -10,6 +10,7 @@
10
10
  */
11
11
  import { hmacSha256, hexToBytes, bytesToBase64, base64ToBytes } from './crypto.js';
12
12
  const HEX_64_RE = /^[0-9a-f]{64}$/;
13
+ const GEOHASH_RE = /^[0-9b-hjkmnp-z]+$/;
13
14
  // ---------------------------------------------------------------------------
14
15
  // Key Derivation (sync)
15
16
  // ---------------------------------------------------------------------------
@@ -87,6 +88,15 @@ async function aesGcmDecrypt(key, content) {
87
88
  * @throws {Error} If key is not 32 bytes.
88
89
  */
89
90
  export async function encryptBeacon(key, geohash, precision) {
91
+ if (typeof geohash !== 'string' || geohash.length === 0 || geohash.length > 11) {
92
+ throw new Error('geohash must be a non-empty string of at most 11 characters');
93
+ }
94
+ if (!GEOHASH_RE.test(geohash)) {
95
+ throw new Error('geohash contains invalid characters (valid: 0-9, b-h, j-k, m-n, p-z)');
96
+ }
97
+ if (!Number.isInteger(precision) || precision < 1 || precision > 11) {
98
+ throw new Error('precision must be an integer between 1 and 11');
99
+ }
90
100
  const payload = {
91
101
  geohash,
92
102
  precision,
@@ -116,7 +126,13 @@ export async function decryptBeacon(key, content) {
116
126
  if (typeof obj.geohash !== 'string' || typeof obj.precision !== 'number' || typeof obj.timestamp !== 'number') {
117
127
  throw new Error('Invalid beacon payload: missing or malformed required fields');
118
128
  }
119
- return parsed;
129
+ if (obj.geohash.length > 11 || (obj.geohash.length > 0 && !GEOHASH_RE.test(obj.geohash))) {
130
+ throw new Error('Invalid beacon payload: geohash contains invalid characters or exceeds max length');
131
+ }
132
+ if (!Number.isInteger(obj.precision) || obj.precision < 0 || obj.precision > 11) {
133
+ throw new Error('Invalid beacon payload: precision must be an integer between 0 and 11');
134
+ }
135
+ return { geohash: obj.geohash, precision: obj.precision, timestamp: obj.timestamp };
120
136
  }
121
137
  /**
122
138
  * Construct a duress alert payload.
@@ -135,6 +151,15 @@ export function buildDuressAlert(memberPubkey, location) {
135
151
  throw new Error(`Invalid member pubkey: expected 64 lowercase hex characters, got ${memberPubkey.length} chars`);
136
152
  }
137
153
  if (location) {
154
+ if (typeof location.geohash !== 'string' || location.geohash.length === 0 || location.geohash.length > 11) {
155
+ throw new Error('location.geohash must be a non-empty string of at most 11 characters');
156
+ }
157
+ if (!GEOHASH_RE.test(location.geohash)) {
158
+ throw new Error('location.geohash contains invalid characters (valid: 0-9, b-h, j-k, m-n, p-z)');
159
+ }
160
+ if (!Number.isInteger(location.precision) || location.precision < 1 || location.precision > 11) {
161
+ throw new Error('location.precision must be an integer between 1 and 11');
162
+ }
138
163
  return {
139
164
  type: 'duress',
140
165
  member: memberPubkey,
@@ -192,6 +217,22 @@ export async function decryptDuressAlert(key, content) {
192
217
  !VALID_SOURCES.has(obj.locationSource)) {
193
218
  throw new Error('Invalid duress alert payload: missing or malformed required fields');
194
219
  }
195
- return parsed;
220
+ if (!HEX_64_RE.test(obj.member)) {
221
+ throw new Error('Invalid duress alert payload: member must be a 64-character lowercase hex string');
222
+ }
223
+ if (obj.geohash.length > 11 || (obj.geohash.length > 0 && !GEOHASH_RE.test(obj.geohash))) {
224
+ throw new Error('Invalid duress alert payload: geohash contains invalid characters or exceeds max length');
225
+ }
226
+ if (!Number.isInteger(obj.precision) || obj.precision < 0 || obj.precision > 11) {
227
+ throw new Error('Invalid duress alert payload: precision must be an integer between 0 and 11');
228
+ }
229
+ return {
230
+ type: 'duress',
231
+ member: obj.member,
232
+ geohash: obj.geohash,
233
+ precision: obj.precision,
234
+ locationSource: obj.locationSource,
235
+ timestamp: obj.timestamp,
236
+ };
196
237
  }
197
238
  //# sourceMappingURL=beacon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"beacon.js","sourceRoot":"","sources":["../src/beacon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"beacon.js","sourceRoot":"","sources":["../src/beacon.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../src/group.ts"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAcvD,wDAAwD;AACxD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uGAAuG;IACvG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAA;IACtB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,8HAA8H;IAC9H,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CA4E3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAIpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAU5D;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAEpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAOvE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAG1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAGnF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAS3D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,MAAsC,GAC7C,UAAU,CAIZ"}
1
+ {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../src/group.ts"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAcvD,wDAAwD;AACxD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uGAAuG;IACvG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAA;IACtB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,8HAA8H;IAC9H,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CA+E3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAIpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAU5D;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAEpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAOvE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAG1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAGnF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAU3D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,MAAsC,GAC7C,UAAU,CAIZ"}
package/dist/group.js CHANGED
@@ -40,6 +40,9 @@ export function createGroup(config) {
40
40
  if (typeof config.name !== 'string' || config.name.length === 0) {
41
41
  throw new Error('name must be a non-empty string');
42
42
  }
43
+ if (config.name.length > 256) {
44
+ throw new Error('name must be at most 256 characters');
45
+ }
43
46
  if (config.preset !== undefined) {
44
47
  if (typeof config.preset !== 'string' || !Object.hasOwn(PRESETS, config.preset)) {
45
48
  throw new Error(`Unknown preset: "${config.preset}". Valid presets: ${Object.keys(PRESETS).join(', ')}`);
@@ -244,6 +247,7 @@ export function dissolveGroup(state) {
244
247
  admins: [],
245
248
  usageOffset: 0,
246
249
  consumedOps: [],
250
+ consumedOpsFloor: undefined,
247
251
  };
248
252
  }
249
253
  /**
package/dist/group.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"group.js","sourceRoot":"","sources":["../src/group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../src/group.ts"],"names":[],"mappings":"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"}