signet-protocol 1.10.1 → 1.11.1
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 +15 -10
- package/dist/bot-ownership.d.ts +61 -0
- package/dist/bot-ownership.d.ts.map +1 -0
- package/dist/bot-ownership.js +88 -0
- package/dist/bot-ownership.js.map +1 -0
- package/dist/crypto.d.ts +2 -0
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +4 -0
- package/dist/crypto.js.map +1 -1
- package/dist/experimental.d.ts +19 -0
- package/dist/experimental.d.ts.map +1 -0
- package/dist/experimental.js +16 -0
- package/dist/experimental.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/url-auth.d.ts.map +1 -1
- package/dist/url-auth.js +2 -1
- package/dist/url-auth.js.map +1 -1
- package/dist/utils.d.ts +46 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +127 -0
- package/dist/utils.js.map +1 -1
- package/dist/vault-checkpoint.d.ts +50 -0
- package/dist/vault-checkpoint.d.ts.map +1 -0
- package/dist/vault-checkpoint.js +84 -0
- package/dist/vault-checkpoint.js.map +1 -0
- package/dist/vault-keys.d.ts +19 -0
- package/dist/vault-keys.d.ts.map +1 -0
- package/dist/vault-keys.js +57 -0
- package/dist/vault-keys.js.map +1 -0
- package/dist/vault-recovery.d.ts +99 -0
- package/dist/vault-recovery.d.ts.map +1 -0
- package/dist/vault-recovery.js +305 -0
- package/dist/vault-recovery.js.map +1 -0
- package/dist/vault-relay.d.ts +29 -0
- package/dist/vault-relay.d.ts.map +1 -0
- package/dist/vault-relay.js +131 -0
- package/dist/vault-relay.js.map +1 -0
- package/llms-full.txt +3744 -0
- package/llms.txt +134 -0
- package/package.json +15 -6
- package/src/bot-ownership.ts +77 -0
- package/src/crypto.ts +5 -0
- package/src/experimental.ts +25 -0
- package/src/index.ts +3 -0
- package/src/url-auth.ts +2 -1
- package/src/utils.ts +122 -0
- package/src/vault-checkpoint.ts +98 -0
- package/src/vault-keys.ts +59 -0
- package/src/vault-recovery.ts +284 -0
- package/src/vault-relay.ts +112 -0
package/README.md
CHANGED
|
@@ -27,14 +27,16 @@ Signet solves this without centralised data collection. A professional verifies
|
|
|
27
27
|
npm install signet-protocol
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Requires Node ≥22. ESM only (no CommonJS `require` export).
|
|
31
|
+
|
|
32
|
+
Display a verification badge for any Nostr user (Level 1: a weekend to integrate):
|
|
31
33
|
|
|
32
34
|
```typescript
|
|
33
|
-
import { computeBadge, buildBadgeFilters, meetsMinimumTier } from 'signet-protocol';
|
|
35
|
+
import { computeBadge, buildBadgeFilters, fetchFromRelay, meetsMinimumTier } from 'signet-protocol';
|
|
34
36
|
|
|
35
37
|
const filters = buildBadgeFilters(['<hex-pubkey>']);
|
|
36
|
-
const events = await fetchFromRelay(filters);
|
|
37
|
-
const badge = computeBadge('<hex-pubkey>', events, { verifySignatures: true });
|
|
38
|
+
const events = await fetchFromRelay('wss://relay.example.com', filters);
|
|
39
|
+
const badge = await computeBadge('<hex-pubkey>', events, { verifySignatures: true });
|
|
38
40
|
|
|
39
41
|
// badge.tier => 3, badge.score => 106, badge.displayLabel => "Verified (Tier 3)"
|
|
40
42
|
if (meetsMinimumTier(badge, 2)) {
|
|
@@ -42,8 +44,12 @@ if (meetsMinimumTier(badge, 2)) {
|
|
|
42
44
|
}
|
|
43
45
|
```
|
|
44
46
|
|
|
47
|
+
`fetchFromRelay(relayUrl, filters)` is the package's own minimal relay client and returns `Promise<NostrEvent[]>`. Any other Nostr client works too: pass `buildBadgeFilters` output as the REQ filters and hand the resulting events to `computeBadge`. `computeBadge` is async and returns `Promise<BadgeInfo>`.
|
|
48
|
+
|
|
45
49
|
See [Signet in 5 Minutes](docs/signet-in-5-minutes.md) for a full developer overview, or the [full flow example](examples/full-flow.ts) for all 4 tiers, trust scoring, policies, and verifier lifecycle.
|
|
46
50
|
|
|
51
|
+
For LLM and agent tooling, [llms.txt](llms.txt) is a concise API overview and [llms-full.txt](llms-full.txt) adds the full protocol and voting specifications and the developer guides in one file. Both ship in the npm package.
|
|
52
|
+
|
|
47
53
|
## Protocol
|
|
48
54
|
|
|
49
55
|
The full specification is at [`spec/protocol.md`](spec/protocol.md).
|
|
@@ -62,9 +68,8 @@ All identity attestations use a single NIP-VA kind (31000), differentiated by `t
|
|
|
62
68
|
| 31000 | `revocation` | Verifier Revocation | Community confirms challenge, revokes verifier |
|
|
63
69
|
| 31000 | `identity-bridge` | Identity Bridge | Link two keypairs via ring signature |
|
|
64
70
|
| 31000 | `delegation` | Delegation | Guardian or agent delegation with scoped permission |
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
| 30484 | — | Election Result | Voting extension: publish tallied result |
|
|
71
|
+
|
|
72
|
+
Voting extension: kinds 30482 (election), 30483 (ballot) and 30484 (election result) are specified in [`spec/voting.md`](spec/voting.md) and implemented in the separate [`nostr-anon-vote`](https://github.com/forgesworn/nostr-anon-vote) package, not in `signet-protocol`.
|
|
68
73
|
|
|
69
74
|
### Crypto Stack
|
|
70
75
|
|
|
@@ -73,8 +78,8 @@ Layer 1: Schnorr (secp256k1) — zero new dependencies
|
|
|
73
78
|
Credential signing, Merkle selective disclosure,
|
|
74
79
|
ring signatures for issuer privacy, MuSig2
|
|
75
80
|
|
|
76
|
-
Layer 2:
|
|
77
|
-
|
|
81
|
+
Layer 2: Pedersen range proofs (secp256k1): age range proofs
|
|
82
|
+
via @forgesworn/range-proof, no trusted setup
|
|
78
83
|
|
|
79
84
|
Layer 3: General-purpose ZK (future, if needed)
|
|
80
85
|
Complex threshold proofs, recursive composition
|
|
@@ -82,7 +87,7 @@ Layer 3: General-purpose ZK (future, if needed)
|
|
|
82
87
|
|
|
83
88
|
## Status
|
|
84
89
|
|
|
85
|
-
**
|
|
90
|
+
**Status:** spec complete, TypeScript library implemented, reference apps functional. Seeking community feedback.
|
|
86
91
|
|
|
87
92
|
All identity attestations use kind 31000 (NIP-VA, Verifiable Attestations), differentiated by `type` tag.
|
|
88
93
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { NostrEvent, UnsignedEvent } from './types.js';
|
|
2
|
+
export declare const BOT_OWNERSHIP_TYPE = "bot-ownership";
|
|
3
|
+
export declare const BOT_OWNERSHIP_POLICY: Readonly<{
|
|
4
|
+
defaultDays: 30;
|
|
5
|
+
minDays: 1;
|
|
6
|
+
maxDays: 90;
|
|
7
|
+
renewBeforeDays: 10;
|
|
8
|
+
retrySeconds: 86400;
|
|
9
|
+
clockToleranceSeconds: 300;
|
|
10
|
+
}>;
|
|
11
|
+
/** The caller selects a persona, obtains explicit creation consent, and signs
|
|
12
|
+
* this ordinary Nostr event through its existing local or NIP-46 backend. */
|
|
13
|
+
export declare function buildBotOwnership(args: {
|
|
14
|
+
ownerPubkey: string;
|
|
15
|
+
botPubkey: string;
|
|
16
|
+
label: string;
|
|
17
|
+
now: number;
|
|
18
|
+
expiresAt?: number;
|
|
19
|
+
}): UnsignedEvent;
|
|
20
|
+
export declare function buildBotOwnershipRevocation(args: {
|
|
21
|
+
ownerPubkey: string;
|
|
22
|
+
botPubkey: string;
|
|
23
|
+
now: number;
|
|
24
|
+
}): UnsignedEvent;
|
|
25
|
+
export interface BotOwnershipClaim {
|
|
26
|
+
ownerPubkey: string;
|
|
27
|
+
botPubkey: string;
|
|
28
|
+
label: string;
|
|
29
|
+
issuedAt: number;
|
|
30
|
+
expiresAt: number;
|
|
31
|
+
eventId: string;
|
|
32
|
+
}
|
|
33
|
+
export type BotOwnershipResult = {
|
|
34
|
+
status: 'invalid';
|
|
35
|
+
} | {
|
|
36
|
+
status: 'revoked';
|
|
37
|
+
ownerPubkey: string;
|
|
38
|
+
botPubkey: string;
|
|
39
|
+
eventId: string;
|
|
40
|
+
} | {
|
|
41
|
+
status: 'valid' | 'lapsed';
|
|
42
|
+
claim: BotOwnershipClaim;
|
|
43
|
+
};
|
|
44
|
+
/** No ownership trust is inherited by the bot. Callers pin the expected persona
|
|
45
|
+
* and bot and separately establish that they selected the newest event. */
|
|
46
|
+
export declare function readBotOwnership(event: NostrEvent, expected: {
|
|
47
|
+
ownerPubkey: string;
|
|
48
|
+
botPubkey: string;
|
|
49
|
+
now: number;
|
|
50
|
+
maxLifetimeDays?: number;
|
|
51
|
+
}): Promise<BotOwnershipResult>;
|
|
52
|
+
/** Same validation for synchronous transport/storage codecs. */
|
|
53
|
+
export declare function readBotOwnershipSync(event: NostrEvent, expected: {
|
|
54
|
+
ownerPubkey: string;
|
|
55
|
+
botPubkey: string;
|
|
56
|
+
now: number;
|
|
57
|
+
maxLifetimeDays?: number;
|
|
58
|
+
}): BotOwnershipResult;
|
|
59
|
+
/** Scheduling only: hardware signing still needs its normal approval. */
|
|
60
|
+
export declare function botOwnershipRenewalDue(result: BotOwnershipResult, now: number, lastAttemptAt?: number): boolean;
|
|
61
|
+
//# sourceMappingURL=bot-ownership.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot-ownership.d.ts","sourceRoot":"","sources":["../src/bot-ownership.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5D,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAClD,eAAO,MAAM,oBAAoB;;;;;;;EACwC,CAAC;AAQ1E;6EAC6E;AAC7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAOjJ;AACD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAIxH;AACD,MAAM,WAAW,iBAAiB;IAAG,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAClJ,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnI;IAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAC7D;2EAC2E;AAC3E,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAElL;AACD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CA+BvK;AACD,yEAAyE;AACzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAI/G"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/** Draft bot ownership profile of nostr-attestations. Builders never publish. */
|
|
2
|
+
import { createAttestation, createRevocation, buildDTag } from 'nostr-attestations';
|
|
3
|
+
import { verifyEventSync } from './crypto.js';
|
|
4
|
+
import { isSafeLabel } from './utils.js';
|
|
5
|
+
export const BOT_OWNERSHIP_TYPE = 'bot-ownership';
|
|
6
|
+
export const BOT_OWNERSHIP_POLICY = Object.freeze({ defaultDays: 30, minDays: 1, maxDays: 90,
|
|
7
|
+
renewBeforeDays: 10, retrySeconds: 86400, clockToleranceSeconds: 300 });
|
|
8
|
+
const DAY = 86400, HEX = /^[0-9a-f]{64}$/;
|
|
9
|
+
const stamp = (value) => Number.isSafeInteger(value) && Number(value) >= 0;
|
|
10
|
+
const labelOk = (label) => typeof label === 'string' && !!label.trim() && label.length <= 100
|
|
11
|
+
&& isSafeLabel(label);
|
|
12
|
+
function validateParties(ownerPubkey, botPubkey, now) {
|
|
13
|
+
if (!HEX.test(ownerPubkey) || !HEX.test(botPubkey) || ownerPubkey === botPubkey || !stamp(now))
|
|
14
|
+
throw new Error('Invalid bot ownership parties or time');
|
|
15
|
+
}
|
|
16
|
+
/** The caller selects a persona, obtains explicit creation consent, and signs
|
|
17
|
+
* this ordinary Nostr event through its existing local or NIP-46 backend. */
|
|
18
|
+
export function buildBotOwnership(args) {
|
|
19
|
+
validateParties(args.ownerPubkey, args.botPubkey, args.now);
|
|
20
|
+
const expiresAt = args.expiresAt ?? args.now + BOT_OWNERSHIP_POLICY.defaultDays * DAY;
|
|
21
|
+
if (!labelOk(args.label) || !stamp(expiresAt) || expiresAt < args.now + DAY || expiresAt > args.now + 90 * DAY)
|
|
22
|
+
throw new Error('Bot ownership requires a label and a lifetime from one to ninety days');
|
|
23
|
+
return { ...createAttestation({ type: BOT_OWNERSHIP_TYPE, subject: args.botPubkey,
|
|
24
|
+
validFrom: args.now, validTo: expiresAt, expiration: expiresAt,
|
|
25
|
+
content: JSON.stringify({ v: 1, label: args.label.trim() }) }), pubkey: args.ownerPubkey, created_at: args.now };
|
|
26
|
+
}
|
|
27
|
+
export function buildBotOwnershipRevocation(args) {
|
|
28
|
+
validateParties(args.ownerPubkey, args.botPubkey, args.now);
|
|
29
|
+
return { ...createRevocation({ type: BOT_OWNERSHIP_TYPE, identifier: args.botPubkey, subject: args.botPubkey,
|
|
30
|
+
effective: args.now }), pubkey: args.ownerPubkey, created_at: args.now };
|
|
31
|
+
}
|
|
32
|
+
/** No ownership trust is inherited by the bot. Callers pin the expected persona
|
|
33
|
+
* and bot and separately establish that they selected the newest event. */
|
|
34
|
+
export async function readBotOwnership(event, expected) {
|
|
35
|
+
return readBotOwnershipSync(event, expected);
|
|
36
|
+
}
|
|
37
|
+
/** Same validation for synchronous transport/storage codecs. */
|
|
38
|
+
export function readBotOwnershipSync(event, expected) {
|
|
39
|
+
const invalid = { status: 'invalid' };
|
|
40
|
+
const maximum = expected.maxLifetimeDays ?? BOT_OWNERSHIP_POLICY.maxDays;
|
|
41
|
+
if (!stamp(expected.now) || !Number.isSafeInteger(maximum) || maximum < 1 || maximum > 90
|
|
42
|
+
|| !event || event.kind !== 31000 || event.pubkey !== expected.ownerPubkey || !HEX.test(expected.ownerPubkey)
|
|
43
|
+
|| !HEX.test(expected.botPubkey) || expected.ownerPubkey === expected.botPubkey
|
|
44
|
+
|| !stamp(event.created_at) || event.created_at > expected.now + BOT_OWNERSHIP_POLICY.clockToleranceSeconds
|
|
45
|
+
|| typeof event.content !== 'string' || event.content.length > 1000 || !Array.isArray(event.tags) || event.tags.length > 16
|
|
46
|
+
|| !event.tags.every(tag => Array.isArray(tag) && tag.length >= 2 && tag.length <= 4 && tag.every(value => typeof value === 'string' && value.length <= 256)))
|
|
47
|
+
return invalid;
|
|
48
|
+
const single = (name) => {
|
|
49
|
+
const values = event.tags.filter(tag => tag[0] === name);
|
|
50
|
+
return values.length === 1 ? values[0][1] : undefined;
|
|
51
|
+
};
|
|
52
|
+
if (single('d') !== buildDTag(BOT_OWNERSHIP_TYPE, expected.botPubkey) || single('type') !== BOT_OWNERSHIP_TYPE
|
|
53
|
+
|| single('p') !== expected.botPubkey || !verifyEventSync(event))
|
|
54
|
+
return invalid;
|
|
55
|
+
const statuses = event.tags.filter(tag => tag[0] === 'status');
|
|
56
|
+
if (statuses.length) {
|
|
57
|
+
if (statuses.length !== 1 || statuses[0][1] !== 'revoked' || event.content !== '')
|
|
58
|
+
return invalid;
|
|
59
|
+
return { status: 'revoked', ownerPubkey: event.pubkey, botPubkey: expected.botPubkey, eventId: event.id };
|
|
60
|
+
}
|
|
61
|
+
const start = single('valid_from'), end = single('valid_to'), expiration = single('expiration');
|
|
62
|
+
if (start !== String(event.created_at) || !end || !/^\d+$/.test(end) || end !== expiration)
|
|
63
|
+
return invalid;
|
|
64
|
+
const declared = Number(end);
|
|
65
|
+
if (!stamp(declared) || declared < event.created_at + DAY)
|
|
66
|
+
return invalid;
|
|
67
|
+
let body;
|
|
68
|
+
try {
|
|
69
|
+
body = JSON.parse(event.content);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return invalid;
|
|
73
|
+
}
|
|
74
|
+
if (!body || body.v !== 1 || !labelOk(body.label))
|
|
75
|
+
return invalid;
|
|
76
|
+
// A user may choose a stricter ceiling. It never extends the signed expiry.
|
|
77
|
+
const expiresAt = Math.min(declared, event.created_at + maximum * DAY, event.created_at + 90 * DAY);
|
|
78
|
+
return { status: expected.now > expiresAt + BOT_OWNERSHIP_POLICY.clockToleranceSeconds ? 'lapsed' : 'valid',
|
|
79
|
+
claim: { ownerPubkey: event.pubkey, botPubkey: expected.botPubkey, label: body.label.trim(), issuedAt: event.created_at, expiresAt, eventId: event.id } };
|
|
80
|
+
}
|
|
81
|
+
/** Scheduling only: hardware signing still needs its normal approval. */
|
|
82
|
+
export function botOwnershipRenewalDue(result, now, lastAttemptAt) {
|
|
83
|
+
if (!stamp(now) || (lastAttemptAt !== undefined && (!stamp(lastAttemptAt) || now - lastAttemptAt < BOT_OWNERSHIP_POLICY.retrySeconds)))
|
|
84
|
+
return false;
|
|
85
|
+
return (result.status === 'valid' || result.status === 'lapsed') && now >= result.claim.issuedAt
|
|
86
|
+
&& result.claim.expiresAt - now <= BOT_OWNERSHIP_POLICY.renewBeforeDays * DAY;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=bot-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot-ownership.js","sourceRoot":"","sources":["../src/bot-ownership.ts"],"names":[],"mappings":"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"}
|
package/dist/crypto.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export declare function getEventId(event: UnsignedEvent): string;
|
|
|
20
20
|
export declare function signEvent(event: UnsignedEvent, privateKey: string): Promise<NostrEvent>;
|
|
21
21
|
/** Verify a signed Nostr event's signature */
|
|
22
22
|
export declare function verifyEvent(event: NostrEvent): Promise<boolean>;
|
|
23
|
+
/** Synchronous verification for codecs that must reject invalid events inline. */
|
|
24
|
+
export declare function verifyEventSync(event: NostrEvent): boolean;
|
|
23
25
|
/** SHA-256 hash of arbitrary data, returned as hex */
|
|
24
26
|
export declare function hash(data: Uint8Array): string;
|
|
25
27
|
/** SHA-256 hash of a UTF-8 string, returned as hex */
|
package/dist/crypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;0EAM0E;AAC1E,wBAAgB,eAAe,IAAI;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAU3E;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAS3D;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAGvD;AAED,0DAA0D;AAC1D,wBAAsB,SAAS,CAC7B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED,8CAA8C;AAC9C,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;0EAM0E;AAC1E,wBAAgB,eAAe,IAAI;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAU3E;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAS3D;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAGvD;AAED,0DAA0D;AAC1D,wBAAsB,SAAS,CAC7B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED,8CAA8C;AAC9C,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAErE;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAQ1D;AAED,sDAAsD;AACtD,wBAAgB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAE7C;AAED,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
package/dist/crypto.js
CHANGED
|
@@ -54,6 +54,10 @@ export async function signEvent(event, privateKey) {
|
|
|
54
54
|
}
|
|
55
55
|
/** Verify a signed Nostr event's signature */
|
|
56
56
|
export async function verifyEvent(event) {
|
|
57
|
+
return verifyEventSync(event);
|
|
58
|
+
}
|
|
59
|
+
/** Synchronous verification for codecs that must reject invalid events inline. */
|
|
60
|
+
export function verifyEventSync(event) {
|
|
57
61
|
try {
|
|
58
62
|
const expectedId = getEventId(event);
|
|
59
63
|
if (expectedId !== event.id)
|
package/dist/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,kEAAkE;AAElE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC;;;;;;0EAM0E;AAC1E,MAAM,UAAU,eAAe;IAC7B,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3C,SAAS,CAAC,aAAa,CAAC,CAAC;IACzB,OAAO;QACL,UAAU;QACV,SAAS,EAAE,YAAY;KACxB,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,CAAC;QACD,KAAK,CAAC,MAAM;QACZ,KAAK,CAAC,UAAU;QAChB,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,OAAO;KACd,CAAC,CAAC;AACL,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,KAAoB;IAC7C,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAoB,EACpB,UAAkB;IAElB,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,OAAO;QACL,GAAG,KAAK;QACR,EAAE;QACF,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAiB;IACjD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,UAAU,KAAK,KAAK,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC1C,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,IAAI,CAAC,IAAgB;IACnC,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* signet-protocol/experimental — UNSTABLE, UNRELEASED draft contracts.
|
|
3
|
+
*
|
|
4
|
+
* The private vault checkpoint (docs/private-vault-v1.md) and the bot ownership
|
|
5
|
+
* profile (docs/bot-ownership-v1.md) are still under protocol review. Anything
|
|
6
|
+
* exported here may change or be removed in any release, including a minor or
|
|
7
|
+
* patch, without a deprecation period. Do not depend on it for production data.
|
|
8
|
+
* None of these names are exported from the package root.
|
|
9
|
+
*/
|
|
10
|
+
export { vaultPurpose, parseVaultPurpose, vaultKeyContext, deriveVaultIdentity, vaultIdentityFromMnemonic } from './vault-keys.js';
|
|
11
|
+
export type { VaultDataset } from './vault-keys.js';
|
|
12
|
+
export { VAULT_EVENT_KIND, MAX_VAULT_CHUNKS, MAX_VAULT_DEVICES, MAX_VAULT_CONTROL_BYTES, MAX_VAULT_CHUNK_BYTES, vaultCheckpointTag, vaultContentHash, parseVaultCheckpoint, matchesVaultChunk, vaultCheckpointShapedTag } from './vault-checkpoint.js';
|
|
13
|
+
export type { VaultCheckpoint, VaultChunkRef } from './vault-checkpoint.js';
|
|
14
|
+
export { readVaultSnapshot, readVaultRotations, readVaultHeads, readVaultHeadRotations, VAULT_CLOCK_TOLERANCE_SECONDS } from './vault-recovery.js';
|
|
15
|
+
export type { VaultReadResult, VaultReader, VaultHeadsResult } from './vault-recovery.js';
|
|
16
|
+
export { createVaultRelayReader, fetchVaultEvents, MAX_VAULT_EVENTS_PER_RELAY, VaultRelayError } from './vault-relay.js';
|
|
17
|
+
export { BOT_OWNERSHIP_TYPE, BOT_OWNERSHIP_POLICY, buildBotOwnership, buildBotOwnershipRevocation, readBotOwnership, readBotOwnershipSync, botOwnershipRenewalDue } from './bot-ownership.js';
|
|
18
|
+
export type { BotOwnershipClaim, BotOwnershipResult } from './bot-ownership.js';
|
|
19
|
+
//# sourceMappingURL=experimental.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experimental.d.ts","sourceRoot":"","sources":["../src/experimental.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAClI,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EACrF,qBAAqB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,EACjF,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAC5E,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,sBAAsB,EACpF,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AAC5D,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEzF,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAExH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,2BAA2B,EAC/F,gBAAgB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* signet-protocol/experimental — UNSTABLE, UNRELEASED draft contracts.
|
|
3
|
+
*
|
|
4
|
+
* The private vault checkpoint (docs/private-vault-v1.md) and the bot ownership
|
|
5
|
+
* profile (docs/bot-ownership-v1.md) are still under protocol review. Anything
|
|
6
|
+
* exported here may change or be removed in any release, including a minor or
|
|
7
|
+
* patch, without a deprecation period. Do not depend on it for production data.
|
|
8
|
+
* None of these names are exported from the package root.
|
|
9
|
+
*/
|
|
10
|
+
// Private vault: dedicated dataset keys (flat derivation; index means rotation).
|
|
11
|
+
export { vaultPurpose, parseVaultPurpose, vaultKeyContext, deriveVaultIdentity, vaultIdentityFromMnemonic } from './vault-keys.js';
|
|
12
|
+
export { VAULT_EVENT_KIND, MAX_VAULT_CHUNKS, MAX_VAULT_DEVICES, MAX_VAULT_CONTROL_BYTES, MAX_VAULT_CHUNK_BYTES, vaultCheckpointTag, vaultContentHash, parseVaultCheckpoint, matchesVaultChunk, vaultCheckpointShapedTag } from './vault-checkpoint.js';
|
|
13
|
+
export { readVaultSnapshot, readVaultRotations, readVaultHeads, readVaultHeadRotations, VAULT_CLOCK_TOLERANCE_SECONDS } from './vault-recovery.js';
|
|
14
|
+
export { createVaultRelayReader, fetchVaultEvents, MAX_VAULT_EVENTS_PER_RELAY, VaultRelayError } from './vault-relay.js';
|
|
15
|
+
export { BOT_OWNERSHIP_TYPE, BOT_OWNERSHIP_POLICY, buildBotOwnership, buildBotOwnershipRevocation, readBotOwnership, readBotOwnershipSync, botOwnershipRenewalDue } from './bot-ownership.js';
|
|
16
|
+
//# sourceMappingURL=experimental.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experimental.js","sourceRoot":"","sources":["../src/experimental.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,iFAAiF;AACjF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAElI,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EACrF,qBAAqB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,EACjF,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAE5E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,sBAAsB,EACpF,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AAG5D,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAExH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,2BAA2B,EAC/F,gBAAgB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -103,4 +103,6 @@ export { getSignetMeDisplay, verifySignetMe, SIGNET_ME_ROTATION_SECONDS, SIGNET_
|
|
|
103
103
|
export { buildVenueEntryEventTemplate, VENUE_ENTRY_KIND, } from './venue-entry.js';
|
|
104
104
|
// Migration (kind 31000, type: migration — see spec/protocol.md §21.4.3)
|
|
105
105
|
export { createMigrationEvent, parseMigrationEvent, followMigrationChain, } from './migration.js';
|
|
106
|
+
// Private vault and bot-ownership contracts are unreleased drafts: import them
|
|
107
|
+
// from 'signet-protocol/experimental'. Nothing from them is exported here.
|
|
106
108
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,gDAAgD;AAkDhD,kDAAkD;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,YAAY;AACZ,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,EACxB,iCAAiC,EACjC,4BAA4B,EAC5B,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,wBAAwB;AACxB,iBAAiB;AACjB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,SAAS;AACT,OAAO,EACL,eAAe,EACf,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,IAAI,EACJ,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,6CAA6C;AAC7C,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,gBAAgB,EAChB,mBAAmB,EACnB,eAAe;AACf,uCAAuC;AACvC,6BAA6B,EAC7B,kCAAkC,EAClC,0BAA0B;AAC1B,qBAAqB;AACrB,eAAe,EACf,YAAY;AACZ,0BAA0B;AAC1B,2BAA2B;AAC3B,kBAAkB;AAClB,UAAU;AACV,oBAAoB;AACpB,mBAAmB,EACnB,sBAAsB,EACtB,YAAY;AACZ,sBAAsB;AACtB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB;AACtB,oCAAoC;AACpC,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B;AAC7B,sBAAsB;AACtB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAI1B,oCAAoC;AACpC,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,+BAA+B;AAC/B,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,qBAAqB,EACrB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,yCAAyC;AACzC,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,6EAA6E;AAC7E,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAIpB,sEAAsE;AACtE,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AAEzB,eAAe;AACf,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,cAAc;AACd,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,kBAAkB;AAClB,OAAO,EACL,aAAa,EACb,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAI7B,kCAAkC;AAClC,OAAO,EACL,aAAa,IAAI,kBAAkB,EACnC,eAAe,EACf,QAAQ,EACR,UAAU,EACV,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAInB,sDAAsD;AACtD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,sCAAsC;AACtC,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAI1B,eAAe;AACf,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AAUpB,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,oBAAoB;AACpB,OAAO,EACL,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAQtB,oDAAoD;AACpD,OAAO,EACL,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,6BAA6B,EAC7B,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC;AAY1B,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,CAAC,EACD,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAInB,aAAa;AACb,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,gCAAgC,EAChC,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AAWzB,aAAa;AACb,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,YAAY,GACb,MAAM,iBAAiB,CAAC;AAIzB,SAAS;AACT,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,kBAAkB;AAClB,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE/E,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,IAAI,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpE,wCAAwC;AACxC,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAI5B,uBAAuB;AACvB,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAChF,gFAAgF;AAChF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG5C,uCAAuC;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEpF,0BAA0B;AAC1B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,MAAM,0BAA0B,CAAC;AAIlC,mCAAmC;AACnC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAI1B,sCAAsC;AACtC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAIpB,mEAAmE;AACnE,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,QAAQ,EACR,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAI3B,0GAA0G;AAC1G,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,4BAA4B,EAC5B,4BAA4B,GAE7B,MAAM,gBAAgB,CAAC;AAIxB,0DAA0D;AAC1D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,gBAAgB,GAGjB,MAAM,mBAAmB,CAAC;AAE3B,iDAAiD;AACjD,OAAO,EACL,OAAO,EACP,mBAAmB,GAIpB,MAAM,gBAAgB,CAAC;AAExB,+CAA+C;AAC/C,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,6DAA6D;AAC7D,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,GAE/B,MAAM,mBAAmB,CAAC;AAE3B,6CAA6C;AAC7C,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,mBAAmB,GAEpB,MAAM,gBAAgB,CAAC;AAExB,yCAAyC;AACzC,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAK1B,yEAAyE;AACzE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/url-auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-auth.d.ts","sourceRoot":"","sources":["../src/url-auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"url-auth.d.ts","sourceRoot":"","sources":["../src/url-auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAoBnD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAoEtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAcR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIzD"}
|
package/dist/url-auth.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* a challenge, origin, callback, and site name. The app signs the challenge
|
|
6
6
|
* and redirects back with the signature.
|
|
7
7
|
*/
|
|
8
|
+
import { UNSAFE_TEXT_CHARS } from './utils.js';
|
|
8
9
|
/** Check if a URL is https:// or http://localhost (dev). */
|
|
9
10
|
function isValidAuthUrl(url) {
|
|
10
11
|
try {
|
|
@@ -146,6 +147,6 @@ export function buildAuthDeniedUrl(callbackUrl) {
|
|
|
146
147
|
export function getUrlAuthSiteName(search) {
|
|
147
148
|
const params = new URLSearchParams(search);
|
|
148
149
|
const name = params.get('name') ?? '';
|
|
149
|
-
return name.replace(
|
|
150
|
+
return name.replace(new RegExp(UNSAFE_TEXT_CHARS.source, 'gu'), '').slice(0, 64);
|
|
150
151
|
}
|
|
151
152
|
//# sourceMappingURL=url-auth.js.map
|
package/dist/url-auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-auth.js","sourceRoot":"","sources":["../src/url-auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"url-auth.js","sourceRoot":"","sources":["../src/url-auth.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -8,4 +8,50 @@ export declare function zeroBytes(buf: Uint8Array): void;
|
|
|
8
8
|
* but all callers compare fixed-size buffers (32-byte scalars), so this is safe.
|
|
9
9
|
*/
|
|
10
10
|
export declare function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* One character class for text that is shown to people: C0 controls, DEL, C1
|
|
13
|
+
* controls, Arabic letter mark (U+061C), zero-width and LRM/RLM (U+200B-U+200F),
|
|
14
|
+
* line/paragraph separators and bidi embeddings/overrides (U+2028-U+202E), and
|
|
15
|
+
* bidi isolates (U+2066-U+2069). Not global: build a `g` copy to strip.
|
|
16
|
+
*/
|
|
17
|
+
export declare const UNSAFE_TEXT_CHARS: RegExp;
|
|
18
|
+
/**
|
|
19
|
+
* `UNSAFE_TEXT_CHARS` minus U+200D (zero-width joiner), which is not a bidi
|
|
20
|
+
* control and is needed for emoji sequences, plus other invisible/deprecated-
|
|
21
|
+
* format characters a label has no legitimate use for: soft hyphen (U+00AD),
|
|
22
|
+
* Mongolian vowel separator (U+180E), word joiner and the deprecated invisible
|
|
23
|
+
* math operators (U+2060-U+2064), and the BOM / zero width no-break space
|
|
24
|
+
* (U+FEFF). This is a fixed denylist only; it does not cover every Unicode
|
|
25
|
+
* "format" (Cf) or Default_Ignorable code point (variation selectors, emoji
|
|
26
|
+
* tag characters, Hangul fillers, Arabic number-sign marks, deprecated music
|
|
27
|
+
* format controls, ...). Use `isSafeLabel` to validate labels \u2014 it checks
|
|
28
|
+
* this denylist plus those two Unicode categories, carving out only the
|
|
29
|
+
* narrow, positionally-constrained exceptions emoji sequences require.
|
|
30
|
+
*/
|
|
31
|
+
export declare const UNSAFE_LABEL_CHARS: RegExp;
|
|
32
|
+
/**
|
|
33
|
+
* A label is unsafe if it contains a lone (unpaired) UTF-16 surrogate, any
|
|
34
|
+
* `UNSAFE_LABEL_CHARS` character, or any Unicode format (Cf) or
|
|
35
|
+
* Default_Ignorable_Code_Point code point, EXCEPT the narrow in-context uses
|
|
36
|
+
* emoji sequences need:
|
|
37
|
+
*
|
|
38
|
+
* 1. U+200D (ZWJ) only between two emoji elements: the code point before it
|
|
39
|
+
* ends in an emoji element (see `endsInEmojiElement`) and the code point
|
|
40
|
+
* after it is Extended_Pictographic. A leading, trailing or doubled ZWJ,
|
|
41
|
+
* or one between ordinary letters, is rejected.
|
|
42
|
+
* 2. U+FE0E / U+FE0F (text/emoji variation selectors) only directly after
|
|
43
|
+
* an Extended_Pictographic code point or a keycap base ([#*0-9]). Every
|
|
44
|
+
* other variation selector (U+FE00-FE0D, U+E0100-E01EF) is rejected
|
|
45
|
+
* everywhere.
|
|
46
|
+
* 3. Tag characters U+E0020-E007E only inside one of the three RGI UK
|
|
47
|
+
* subdivision emoji flag sequences: U+1F3F4 (waving black flag) followed
|
|
48
|
+
* by the exact tag-character spelling of "gbeng", "gbsct" or "gbwls"
|
|
49
|
+
* then the cancel tag U+E007F, with nothing else in between. Any other
|
|
50
|
+
* tag run — a different or misspelled subdivision code, extra or missing
|
|
51
|
+
* tag characters, a hidden payload, a missing/extra cancel tag, or tag
|
|
52
|
+
* characters with no U+1F3F4 base — is rejected, as is U+E0001 anywhere.
|
|
53
|
+
*
|
|
54
|
+
* Iterates by code point, not UTF-16 code unit.
|
|
55
|
+
*/
|
|
56
|
+
export declare function isSafeLabel(label: string): boolean;
|
|
11
57
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAOvE"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAOvE;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAA+E,CAAC;AAE9G;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,QAAyH,CAAC;AAmCzJ;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAwClD"}
|
package/dist/utils.js
CHANGED
|
@@ -18,4 +18,131 @@ export function constantTimeEqual(a, b) {
|
|
|
18
18
|
}
|
|
19
19
|
return diff === 0;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* One character class for text that is shown to people: C0 controls, DEL, C1
|
|
23
|
+
* controls, Arabic letter mark (U+061C), zero-width and LRM/RLM (U+200B-U+200F),
|
|
24
|
+
* line/paragraph separators and bidi embeddings/overrides (U+2028-U+202E), and
|
|
25
|
+
* bidi isolates (U+2066-U+2069). Not global: build a `g` copy to strip.
|
|
26
|
+
*/
|
|
27
|
+
export const UNSAFE_TEXT_CHARS = /[\u0000-\u001f\u007f-\u009f\u061c\u200b-\u200f\u2028-\u202e\u2066-\u2069]/u;
|
|
28
|
+
/**
|
|
29
|
+
* `UNSAFE_TEXT_CHARS` minus U+200D (zero-width joiner), which is not a bidi
|
|
30
|
+
* control and is needed for emoji sequences, plus other invisible/deprecated-
|
|
31
|
+
* format characters a label has no legitimate use for: soft hyphen (U+00AD),
|
|
32
|
+
* Mongolian vowel separator (U+180E), word joiner and the deprecated invisible
|
|
33
|
+
* math operators (U+2060-U+2064), and the BOM / zero width no-break space
|
|
34
|
+
* (U+FEFF). This is a fixed denylist only; it does not cover every Unicode
|
|
35
|
+
* "format" (Cf) or Default_Ignorable code point (variation selectors, emoji
|
|
36
|
+
* tag characters, Hangul fillers, Arabic number-sign marks, deprecated music
|
|
37
|
+
* format controls, ...). Use `isSafeLabel` to validate labels \u2014 it checks
|
|
38
|
+
* this denylist plus those two Unicode categories, carving out only the
|
|
39
|
+
* narrow, positionally-constrained exceptions emoji sequences require.
|
|
40
|
+
*/
|
|
41
|
+
export const UNSAFE_LABEL_CHARS = /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u180e\u200b\u200c\u200e\u200f\u2028-\u202e\u2060-\u2064\u2066-\u2069\ufeff]/u;
|
|
42
|
+
const CF_OR_DEFAULT_IGNORABLE = /[\p{Cf}\p{Default_Ignorable_Code_Point}]/u;
|
|
43
|
+
const EXTENDED_PICTOGRAPHIC = /\p{Extended_Pictographic}/u;
|
|
44
|
+
const KEYCAP_BASE = /[#*0-9]/;
|
|
45
|
+
// A single unpaired UTF-16 surrogate is not a valid code point. In `u`-mode a
|
|
46
|
+
// correctly paired surrogate combines into one astral code point first and
|
|
47
|
+
// never matches this class; only a lone (unpaired) half does.
|
|
48
|
+
const LONE_SURROGATE = /[\uD800-\uDFFF]/u;
|
|
49
|
+
const ZWJ = 0x200d;
|
|
50
|
+
const VS15 = 0xfe0e, VS16 = 0xfe0f;
|
|
51
|
+
const SKIN_TONE_MIN = 0x1f3fb, SKIN_TONE_MAX = 0x1f3ff;
|
|
52
|
+
const TAG_CHAR_MIN = 0xe0020, TAG_CHAR_MAX = 0xe007e, TAG_CANCEL = 0xe007f, FLAG_BASE = 0x1f3f4;
|
|
53
|
+
// RGI emoji tag sequences: only these three UK subdivision flags are
|
|
54
|
+
// well-formed. Each entry is the tag-character run (base and cancel tag
|
|
55
|
+
// excluded) spelling the ISO 3166-2 subdivision code in lowercase ASCII,
|
|
56
|
+
// shifted into the U+E0000 tag-character plane.
|
|
57
|
+
const RGI_FLAG_TAG_SEQUENCES = ['gbeng', 'gbsct', 'gbwls'].map(code => Array.from(code, ch => 0xe0000 + ch.codePointAt(0)));
|
|
58
|
+
/**
|
|
59
|
+
* Whether `codePoints[index]` is "an emoji element" for the zero-width-joiner
|
|
60
|
+
* rule below: an Extended_Pictographic code point itself, or U+FE0F / an
|
|
61
|
+
* emoji skin-tone modifier (U+1F3FB-1F3FF) that directly follows one.
|
|
62
|
+
*/
|
|
63
|
+
function endsInEmojiElement(codePoints, index) {
|
|
64
|
+
if (index < 0)
|
|
65
|
+
return false;
|
|
66
|
+
const ch = codePoints[index];
|
|
67
|
+
if (EXTENDED_PICTOGRAPHIC.test(ch))
|
|
68
|
+
return true;
|
|
69
|
+
const cp = ch.codePointAt(0);
|
|
70
|
+
if (cp !== VS16 && !(cp >= SKIN_TONE_MIN && cp <= SKIN_TONE_MAX))
|
|
71
|
+
return false;
|
|
72
|
+
const prev = codePoints[index - 1];
|
|
73
|
+
return prev !== undefined && EXTENDED_PICTOGRAPHIC.test(prev);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A label is unsafe if it contains a lone (unpaired) UTF-16 surrogate, any
|
|
77
|
+
* `UNSAFE_LABEL_CHARS` character, or any Unicode format (Cf) or
|
|
78
|
+
* Default_Ignorable_Code_Point code point, EXCEPT the narrow in-context uses
|
|
79
|
+
* emoji sequences need:
|
|
80
|
+
*
|
|
81
|
+
* 1. U+200D (ZWJ) only between two emoji elements: the code point before it
|
|
82
|
+
* ends in an emoji element (see `endsInEmojiElement`) and the code point
|
|
83
|
+
* after it is Extended_Pictographic. A leading, trailing or doubled ZWJ,
|
|
84
|
+
* or one between ordinary letters, is rejected.
|
|
85
|
+
* 2. U+FE0E / U+FE0F (text/emoji variation selectors) only directly after
|
|
86
|
+
* an Extended_Pictographic code point or a keycap base ([#*0-9]). Every
|
|
87
|
+
* other variation selector (U+FE00-FE0D, U+E0100-E01EF) is rejected
|
|
88
|
+
* everywhere.
|
|
89
|
+
* 3. Tag characters U+E0020-E007E only inside one of the three RGI UK
|
|
90
|
+
* subdivision emoji flag sequences: U+1F3F4 (waving black flag) followed
|
|
91
|
+
* by the exact tag-character spelling of "gbeng", "gbsct" or "gbwls"
|
|
92
|
+
* then the cancel tag U+E007F, with nothing else in between. Any other
|
|
93
|
+
* tag run — a different or misspelled subdivision code, extra or missing
|
|
94
|
+
* tag characters, a hidden payload, a missing/extra cancel tag, or tag
|
|
95
|
+
* characters with no U+1F3F4 base — is rejected, as is U+E0001 anywhere.
|
|
96
|
+
*
|
|
97
|
+
* Iterates by code point, not UTF-16 code unit.
|
|
98
|
+
*/
|
|
99
|
+
export function isSafeLabel(label) {
|
|
100
|
+
if (LONE_SURROGATE.test(label) || UNSAFE_LABEL_CHARS.test(label))
|
|
101
|
+
return false;
|
|
102
|
+
const codePoints = Array.from(label);
|
|
103
|
+
// Indices that are part of one of the three well-formed RGI subdivision
|
|
104
|
+
// flag tag sequences: the exact tag-character spelling plus its cancel tag,
|
|
105
|
+
// immediately following a U+1F3F4.
|
|
106
|
+
const reservedTagIndex = new Set();
|
|
107
|
+
for (let i = 0; i < codePoints.length; i++) {
|
|
108
|
+
if (codePoints[i].codePointAt(0) !== FLAG_BASE)
|
|
109
|
+
continue;
|
|
110
|
+
for (const seq of RGI_FLAG_TAG_SEQUENCES) {
|
|
111
|
+
const cancelIndex = i + 1 + seq.length;
|
|
112
|
+
if (cancelIndex >= codePoints.length)
|
|
113
|
+
continue;
|
|
114
|
+
const matchesSpelling = seq.every((cp, k) => codePoints[i + 1 + k].codePointAt(0) === cp);
|
|
115
|
+
if (matchesSpelling && codePoints[cancelIndex].codePointAt(0) === TAG_CANCEL) {
|
|
116
|
+
for (let k = i + 1; k <= cancelIndex; k++)
|
|
117
|
+
reservedTagIndex.add(k);
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
for (let i = 0; i < codePoints.length; i++) {
|
|
123
|
+
const ch = codePoints[i];
|
|
124
|
+
if (!CF_OR_DEFAULT_IGNORABLE.test(ch))
|
|
125
|
+
continue;
|
|
126
|
+
const cp = ch.codePointAt(0);
|
|
127
|
+
if (cp === ZWJ) {
|
|
128
|
+
const next = codePoints[i + 1];
|
|
129
|
+
if (endsInEmojiElement(codePoints, i - 1) && next !== undefined && EXTENDED_PICTOGRAPHIC.test(next))
|
|
130
|
+
continue;
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
if (cp === VS15 || cp === VS16) {
|
|
134
|
+
const prev = codePoints[i - 1];
|
|
135
|
+
if (prev !== undefined && (EXTENDED_PICTOGRAPHIC.test(prev) || KEYCAP_BASE.test(prev)))
|
|
136
|
+
continue;
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
if ((cp >= TAG_CHAR_MIN && cp <= TAG_CHAR_MAX) || cp === TAG_CANCEL) {
|
|
140
|
+
if (reservedTagIndex.has(i))
|
|
141
|
+
continue;
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
21
148
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,GAAe;IACvC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAa,EAAE,CAAa;IAC5D,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|