@seedprotocol/eas 0.7.4-next.793.g6dd83dd → 0.7.5-next.850.g9ab585b

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 ADDED
@@ -0,0 +1,81 @@
1
+ # @seedprotocol/eas
2
+
3
+ [![npm](https://img.shields.io/npm/v/@seedprotocol/eas.svg)](https://www.npmjs.com/package/@seedprotocol/eas)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ Read-side [Ethereum Attestation Service (EAS)](https://attest.sh) client and helpers for [Seed Protocol](https://seedprotocol.io). It queries an EAS indexer (easscan GraphQL) for Seed, Version and property attestations, resolves which chain and indexer to read from, ships known EAS deployments per chain, and decodes Seed Protocol sidecar attestations (PublishedBy, PublishAuthorization, DomainOwnership). It does not write to chain; attesting and revoking live in `@seedprotocol/publish`.
7
+
8
+ This is a lean building block. [`@seedprotocol/sdk`](https://www.npmjs.com/package/@seedprotocol/sdk) depends on it and registers the platform clients during init, so **app developers should use the SDK**. Install this package directly for servers, scripts or tools (feeds, indexers, verifiers) that read Seed attestations without the full SDK.
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm install @seedprotocol/eas
14
+ # or
15
+ bun add @seedprotocol/eas
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ The read helpers go through two process-wide clients (`EasClient` for GraphQL, `BaseQueryClient` for request de-duplication) that need a platform implementation. In Node.js, import the `/node` subpath, which registers both on import (`registerNodeEasPlatform()` does the same explicitly):
21
+
22
+ ```ts
23
+ import '@seedprotocol/eas/node'
24
+ import {
25
+ getSeedsBySchemaName,
26
+ getItemVersionsFromEas,
27
+ getCanonicalItemPropertiesFromEas,
28
+ } from '@seedprotocol/eas'
29
+
30
+ // Newest seeds for an EAS schema name, revoked ones excluded
31
+ const seeds = await getSeedsBySchemaName('post', 20)
32
+
33
+ // Versions of those seeds, then the newest live property attestation per (version, schema)
34
+ const versions = await getItemVersionsFromEas({ seedUids: seeds.map((s) => s.id) })
35
+ const properties = await getCanonicalItemPropertiesFromEas({
36
+ versionUids: versions.map((v) => v.id),
37
+ })
38
+ ```
39
+
40
+ Revoked attestations are excluded by default (`excludeRevoked: true`). See [ATTESTATION_REVOCATION.md](https://github.com/JournoLabs/seed-protocol-sdk/blob/main/docs/ATTESTATION_REVOCATION.md).
41
+
42
+ ### Choosing the chain
43
+
44
+ Reads default to Optimism Sepolia (`11155420`). Without SDK or publish config, set the chain with `EAS_CHAIN_ID` (or `NEXT_PUBLIC_EAS_CHAIN_ID`); override the indexer with `EAS_ENDPOINT` / `NEXT_PUBLIC_EAS_ENDPOINT`. The SDK and `@seedprotocol/publish` set it through `configureEasReadChain`, and a conflicting chain id throws rather than reading one chain while writing another.
45
+
46
+ ```ts
47
+ import { getEasReadChainId, getEasEndpoint, getEasChainDeployment } from '@seedprotocol/eas'
48
+
49
+ getEasReadChainId() // e.g. 8453 when EAS_CHAIN_ID=8453
50
+ getEasEndpoint() // https://base.easscan.org/graphql
51
+ getEasChainDeployment(8453) // { name: 'Base', easContractAddress, indexerUrl, explorerUrl, ... }
52
+ ```
53
+
54
+ ## Exports
55
+
56
+ | Entry | Main exports |
57
+ |-------|--------------|
58
+ | `@seedprotocol/eas` | Seeds / Versions / properties: `getSeedsBySchemaName`, `getSeedsByUidsFromEas`, `getSeedsFromSchemaUids`, `getSeedUidsBySchemaName`, `getItemVersionsFromEas`, `getItemPropertiesFromEas`, `getCanonicalItemPropertiesFromEas`, `getAttestationChangesSince` |
59
+ | | Schemas: `getEasSchemaUidBySchemaName`, `fetchEasSchemaUidBySchemaName`, `getSchemaNamesBySchemaUids`, schema UID cache (`cachedSchemaLookup`, `getEasSchemaUidForSchemaDefinition`, `setSchemaUidForModel`, …) |
60
+ | | Chain config: `configureEasReadChain`, `getEasReadChainId`, `getEasEndpoint`, `whenEasReadChainSettled`, `EAS_CHAIN_DEPLOYMENTS`, `DEFAULT_EAS_CHAIN_ID`, `getEasChainDeployment`, `resolveEasChainDeployment`, `getEasAttestationExplorerUrl` |
61
+ | | Canonicalization / filters: `pickLatestPropertyAttestationsByRefAndSchema`, `withExcludeRevokedFilter`, `isValidEasAttestationUid`, `normalizeBytes32Hex` |
62
+ | | Sidecars: `getPublishedByFromEas`, `decodePublishedByData`, `verifyPublishedByBatch`; `getPublishAuthorizationFromEas`, `assessPublishAuthorization`; `getDomainOwnershipFromEas`, `assessDomainOwnership`, plus their `*_SCHEMA_NAME` / `*_SCHEMA_DEF` constants |
63
+ | | Clients: `EasClient` / `BaseEasClient`, `BaseQueryClient`, `IEasClient`, `IQueryClient`; GraphQL documents (`GET_SEEDS`, `GET_VERSIONS`, `GET_PROPERTIES`, …); types `Attestation`, `EASSchema` |
64
+ | `@seedprotocol/eas/node` | `registerNodeEasPlatform()`, `NodeEasClient`, `NodeQueryClient` (a `@tanstack/query-core` client: concurrent identical requests share one fetch) |
65
+
66
+ Sidecar details: [PUBLISHING.md](https://github.com/JournoLabs/seed-protocol-sdk/blob/main/docs/PUBLISHING.md) (PublishedBy), [PUBLISH_AUTOMATION.md](https://github.com/JournoLabs/seed-protocol-sdk/blob/main/docs/PUBLISH_AUTOMATION.md) (PublishAuthorization), [DOMAIN_OWNERSHIP.md](https://github.com/JournoLabs/seed-protocol-sdk/blob/main/docs/DOMAIN_OWNERSHIP.md).
67
+
68
+ ## Related packages
69
+
70
+ - [`@seedprotocol/sdk`](https://www.npmjs.com/package/@seedprotocol/sdk) — the full local-first SDK (uses this package for EAS sync)
71
+ - [`@seedprotocol/query`](https://www.npmjs.com/package/@seedprotocol/query) — assembled Seed JSON (`getSeed`, `queryBySchema`) built on these reads
72
+ - [`@seedprotocol/arweave`](https://www.npmjs.com/package/@seedprotocol/arweave) — Arweave gateway client
73
+
74
+ ## Documentation
75
+
76
+ - [seedprotocol.io](https://seedprotocol.io)
77
+ - [Changelog](https://github.com/JournoLabs/seed-protocol-sdk/blob/main/packages/eas/CHANGELOG.md)
78
+
79
+ ## License
80
+
81
+ MIT
package/dist/api.d.ts CHANGED
@@ -9,13 +9,18 @@ export declare const getItemPropertiesFromEas: ({ versionUids, excludeRevoked, }
9
9
  excludeRevoked?: boolean;
10
10
  }) => Promise<Attestation[]>;
11
11
  /**
12
- * Canonical properties of the given versions. It doesn't check attesters: filter `getItemPropertiesFromEas`
13
- * results with `keepAttestationsFromRefAttester(properties, versions)` first when the versions may
14
- * not all be trusted (see easRefAttester.ts).
12
+ * Canonical properties of the given versions: the newest per version and property schema.
13
+ *
14
+ * By default only attestations from the right accounts count (easRefAttester.ts): a version must
15
+ * be attested by its seed's attester, and a property by its version's. Anyone can attest with any
16
+ * refUID, so without this another account's newer property would win. That costs two more
17
+ * requests (the versions and their seeds); pass `checkAttesters: false` when the versions are
18
+ * already known to be trusted.
15
19
  */
16
- export declare const getCanonicalItemPropertiesFromEas: (props: {
20
+ export declare const getCanonicalItemPropertiesFromEas: ({ versionUids, excludeRevoked, checkAttesters, }: {
17
21
  versionUids: string[];
18
22
  excludeRevoked?: boolean;
23
+ checkAttesters?: boolean;
19
24
  }) => Promise<Attestation[]>;
20
25
  /**
21
26
  * UID of the first EAS schema whose definition ends with `schemaName`, or undefined when there is
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,0BAA0B,CAAA;AAEhF,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEhF,eAAO,MAAM,sBAAsB,GAAU,+BAG1C;IACD,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,KAAG,OAAO,CAAC,WAAW,EAAE,CAiBxB,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAU,kCAG5C;IACD,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,KAAG,OAAO,CAAC,WAAW,EAAE,CAiBxB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,GAAU,OAAO;IAC7D,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,KAAG,OAAO,CAAC,WAAW,EAAE,CAGxB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,GAAU,iBAEjD;IACD,UAAU,EAAE,MAAM,CAAA;CACnB,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAyB7B,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAU,iBAE/C;IACD,UAAU,EAAE,MAAM,CAAA;CACnB,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAS7B,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAU,4CAI1C;IACD,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,2BAsCA,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,MAAM,EAClB,QAAO,MAAW,EAClB,OAAO,MAAM,EACb,UAAU;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2BAiCjC,CAAA;AAkBD,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,QAAO,IAExC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,YAAY,MAAM,EAAE,KACnB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA6B/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAU,2BAGzC;IACD,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,KAAG,OAAO,CAAC,WAAW,EAAE,CAcxB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAKD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GAAU,0BAI9C;IACD,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,KAAG,OAAO,CAAC,iBAAiB,EAAE,CA8B9B,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAU,YAAY,MAAM,EAAE,QAAO,MAAW,sBAGnF,CAAA"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,0BAA0B,CAAA;AAEhF,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEhF,eAAO,MAAM,sBAAsB,GAAU,+BAG1C;IACD,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,KAAG,OAAO,CAAC,WAAW,EAAE,CAiBxB,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAU,kCAG5C;IACD,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,KAAG,OAAO,CAAC,WAAW,EAAE,CAiBxB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iCAAiC,GAAU,kDAIrD;IACD,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,KAAG,OAAO,CAAC,WAAW,EAAE,CA6BxB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,GAAU,iBAEjD;IACD,UAAU,EAAE,MAAM,CAAA;CACnB,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAyB7B,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAU,iBAE/C;IACD,UAAU,EAAE,MAAM,CAAA;CACnB,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAS7B,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAU,4CAI1C;IACD,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,2BAsCA,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,MAAM,EAClB,QAAO,MAAW,EAClB,OAAO,MAAM,EACb,UAAU;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2BAiCjC,CAAA;AAkBD,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,QAAO,IAExC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,YAAY,MAAM,EAAE,KACnB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA6B/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAU,2BAGzC;IACD,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,KAAG,OAAO,CAAC,WAAW,EAAE,CAcxB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAKD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GAAU,0BAI9C;IACD,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,KAAG,OAAO,CAAC,iBAAiB,EAAE,CA8B9B,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAU,YAAY,MAAM,EAAE,QAAO,MAAW,sBAGnF,CAAA"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Names on EAS (ADR 0008).
3
+ *
4
+ * Writing: {@link easName} is the only function that turns a local model or property name into an
5
+ * EAS name (`HTMLPage` → `html_page`). Everything that registers, attests or looks up a schema by
6
+ * name uses it.
7
+ *
8
+ * Reading: an EAS name is never turned back into a local name. It is matched against the local
9
+ * candidates by key, at a {@link NameMatchLevel}:
10
+ *
11
+ * - `exact`: the EAS name is exactly `easName(local)`, what this SDK publishes.
12
+ * - `normalized`: lowercase alphanumerics only. `html_page`, `htmlpage`, `HTMLPage` and
13
+ * `html-page` are the same; this finds seeds published under older SDKs' names.
14
+ * - `fuzzy`: the normalized key without a trailing plural `s`, and for relations without a
15
+ * trailing `id`/`ids`. `posts` matches `post`, `author_id` matches the relation `author`.
16
+ * No edit distance: `title` never matches `tile`.
17
+ *
18
+ * The tightest tier wins; a tie in the best tier matches nothing.
19
+ */
20
+ /**
21
+ * The EAS name of a local model or property name: words split at lowercase-or-digit to uppercase
22
+ * boundaries and before the last capital of an acronym, every other run of non-alphanumerics
23
+ * turned into `_`, trimmed, lowercased.
24
+ * `HTMLPage → html_page`, `ID3Tag → id3_tag`, `imageV2 → image_v2`, `New model → new_model`.
25
+ */
26
+ export declare const easName: (name: string) => string;
27
+ export type NameMatchLevel = 'exact' | 'normalized' | 'fuzzy';
28
+ /** The levels, tightest first. */
29
+ export declare const NAME_MATCH_LEVELS: readonly NameMatchLevel[];
30
+ export declare const isNameMatchLevel: (value: unknown) => value is NameMatchLevel;
31
+ /** How closely two names matched: the tightest level that accepts them. */
32
+ export type NameMatchTier = NameMatchLevel;
33
+ /** The default level (ADR 0008 and the nameMatch design): fuzzy. */
34
+ export declare const DEFAULT_NAME_MATCH_LEVEL: NameMatchLevel;
35
+ /** Lowercase alphanumerics only. */
36
+ export declare const normalizedNameKey: (name: string) => string;
37
+ /**
38
+ * The normalized key without a relation's trailing `ids`/`id` (when `relation`), then without a
39
+ * trailing plural `s`. Short keys are left alone, so `ids` and `bus` stay themselves.
40
+ */
41
+ export declare const fuzzyNameKey: (name: string, options?: {
42
+ relation?: boolean;
43
+ }) => string;
44
+ /**
45
+ * The tightest tier at which a local name and a name from EAS match, or undefined. `relation`
46
+ * says whether the local name is a relation (Relation, Image, File, Html, or a List of them).
47
+ */
48
+ export declare function nameMatchTier(localName: string, name: string, options?: {
49
+ relation?: boolean;
50
+ }): NameMatchTier | undefined;
51
+ export declare const isNameMatchAllowed: (tier: NameMatchTier, level: NameMatchLevel) => boolean;
52
+ export declare const compareNameMatchTiers: (a: NameMatchTier, b: NameMatchTier) => number;
53
+ export type NameMatchCandidate<T> = {
54
+ value: T;
55
+ /** The local name as it is written to EAS (a list relation's storage name, for instance). */
56
+ name: string;
57
+ relation?: boolean;
58
+ /** This candidate's level. Default {@link DEFAULT_NAME_MATCH_LEVEL}. */
59
+ level?: NameMatchLevel;
60
+ };
61
+ export type NameMatchResult<T> = {
62
+ kind: 'match';
63
+ value: T;
64
+ tier: NameMatchTier;
65
+ } | {
66
+ kind: 'ambiguous';
67
+ values: T[];
68
+ tier: NameMatchTier;
69
+ } | {
70
+ kind: 'none';
71
+ };
72
+ /**
73
+ * The candidate an EAS name matches: the one in the tightest tier its own level allows. Several
74
+ * candidates in that tier are ambiguous, and match nothing.
75
+ */
76
+ export declare function matchEasName<T>(name: string, candidates: readonly NameMatchCandidate<T>[]): NameMatchResult<T>;
77
+ /**
78
+ * The local names an EAS name matches in the tightest tier that has any (each name at `level`, or
79
+ * at the level `level(localName)` returns). Several names can share a tier, e.g. `New model` and
80
+ * `NewModel` for `new_model`: the caller decides whether that's ambiguous (models in different
81
+ * schemas) or the same thing.
82
+ */
83
+ export declare function localNamesInBestMatchTier(name: string, localNames: Iterable<string>, options?: {
84
+ relation?: boolean;
85
+ level?: NameMatchLevel | ((localName: string) => NameMatchLevel);
86
+ }): Set<string>;
87
+ /**
88
+ * Names that can match `name` at the normalized level and that an SDK may have written: its EAS
89
+ * name, and what older SDKs published (the simple snake_case: `HTMLPage` → `htmlpage`). For
90
+ * fetching schemas by name; the results are then filtered with {@link matchEasName}.
91
+ */
92
+ export declare function easNameVariants(name: string): string[];
93
+ /**
94
+ * The EAS names to fetch schemas under for a local model name at `level`: at `exact` its EAS name
95
+ * only; at `normalized` also {@link easNameVariants} and the name as written; at `fuzzy` also a
96
+ * plural or singular form of each. Fetching is a superset: results are still filtered with
97
+ * {@link matchEasName}.
98
+ */
99
+ export declare function easNamesToFetch(name: string, level?: NameMatchLevel): string[];
100
+ //# sourceMappingURL=easNames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easNames.d.ts","sourceRoot":"","sources":["../src/easNames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAMrB,CAAA;AAElB,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,CAAA;AAE7D,kCAAkC;AAClC,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAAqC,CAAA;AAE5F,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,cAC4B,CAAA;AAEvF,2EAA2E;AAC3E,MAAM,MAAM,aAAa,GAAG,cAAc,CAAA;AAI1C,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,EAAE,cAAwB,CAAA;AAE/D,oCAAoC;AACpC,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAAsD,CAAA;AAEvG;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,UAAS;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,KAAG,MAQjF,CAAA;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,aAAa,GAAG,SAAS,CAK3B;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,aAAa,EAAE,OAAO,cAAc,KAAG,OAC3C,CAAA;AAErC,eAAO,MAAM,qBAAqB,GAAI,GAAG,aAAa,EAAE,GAAG,aAAa,KAAG,MAC9C,CAAA;AAE7B,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAClC,KAAK,EAAE,CAAC,CAAA;IACR,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wEAAwE;IACxE,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IACzB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAC3C,eAAe,CAAC,CAAC,CAAC,CAgBpB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC5B,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,cAAc,CAAC,CAAA;CAAO,GACrG,GAAG,CAAC,MAAM,CAAC,CAkBb;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGtD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,cAAyC,GAAG,MAAM,EAAE,CAOxG"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Numeric values on EAS (ADR 0010).
3
+ *
4
+ * The indexer's `decodedDataJson` gives a small uint (`uint8`) as a JSON number or a numeric
5
+ * string, and a wide one (`uint256`) as `{ type: 'BigNumber', hex }`. Seed publishes Number as a
6
+ * decimal string and Date as `uint256` Unix seconds. {@link decodeEasNumber} reads all of these.
7
+ */
8
+ /** `uint8` … `uint256`, `int8` … `int256`, and the bare `uint`/`int`. */
9
+ export declare function isNumericEasType(easType: string | undefined | null): boolean;
10
+ /**
11
+ * The decimal string for a numeric EAS value, or undefined when it isn't numeric.
12
+ *
13
+ * Accepts a finite JSON number, a bigint, a decimal or `0x` hex string, and an ethers v5
14
+ * `{ type: 'BigNumber', hex }` (or `{ _hex }`). Integer strings stay exact (`'9007199254740993'`);
15
+ * other numbers come back as `String(Number(value))` (`'1.5'`, `'1e+21'`). Publish uses the same
16
+ * function for the value it attests, so what is written and what is read agree.
17
+ */
18
+ export declare function decodeEasNumber(value: unknown): string | undefined;
19
+ //# sourceMappingURL=easValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easValues.d.ts","sourceRoot":"","sources":["../src/easValues.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAE5E;AASD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBlE"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,8 @@ export * from './domainOwnership.js';
6
6
  export * from './publishAuthorization.js';
7
7
  export * from './easPropertyCanonical.js';
8
8
  export * from './easRefAttester.js';
9
+ export * from './easNames.js';
10
+ export * from './easValues.js';
9
11
  export * from './easRevokedFilter.js';
10
12
  export * from './easUid.js';
11
13
  export * from './publishedBy.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,cAAc,kCAAkC,CAAA;AAChD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC/E,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACpF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC5F,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAA;AACzB,cAAc,4BAA4B,CAAA;AAC1C,YAAY,EACV,WAAW,EACX,MAAM,IAAI,SAAS,EACnB,gBAAgB,GACjB,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,cAAc,kCAAkC,CAAA;AAChD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC/E,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACpF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC5F,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAA;AACzB,cAAc,4BAA4B,CAAA;AAC1C,YAAY,EACV,WAAW,EACX,MAAM,IAAI,SAAS,EACnB,gBAAgB,GACjB,MAAM,0BAA0B,CAAA"}