@agentidentitytrustprotocol/aitp 0.13.2 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +112 -93
  2. package/index.d.ts +74 -15
  3. package/index.js +54 -54
  4. package/package.json +5 -5
package/README.md CHANGED
@@ -1,17 +1,33 @@
1
1
  # aitp — Node.js SDK
2
2
 
3
3
  Node.js bindings for the **Agent Identity & Trust Protocol (AITP)**, built on
4
- the pure-Rust `aitp-rs` protocol crates via [NAPI-rs](https://napi.rs).
4
+ the pure-Rust [`aitp-rs`](https://github.com/agentidentitytrustprotocol/aitp-rs)
5
+ protocol crates via [NAPI-rs](https://napi.rs).
5
6
 
6
- A thin SDK: an `AitpAgent` plus initiator/responder session objects whose
7
- methods take and return JSON strings — the HTTP request/response bodies — so
8
- agent code never handles a Rust type across the FFI boundary. The API is the
9
- symmetric counterpart of the Python SDK (`buildManifest` ↔ `build_manifest`).
7
+ A thin SDK: an `AitpAgent` plus initiator/responder session objects. Their
8
+ methods take and return JSON strings (the HTTP request/response bodies) and
9
+ compact-JWS strings (TCTs, grant vouchers, delegation tokens). Agent code
10
+ never handles a Rust type across the FFI boundary. The API is the camelCase
11
+ counterpart of the Python SDK (`buildManifest` ↔ `build_manifest`); the two
12
+ differ in a few return shapes, listed in
13
+ [Python vs Node differences](https://github.com/agentidentitytrustprotocol/aitp-rs/blob/main/docs/sdk-python.md#python-vs-node-differences).
10
14
 
11
- ## Build
15
+ The feature-by-feature guide, with an example for every capability, is
16
+ [`docs/sdk-node.md`](https://github.com/agentidentitytrustprotocol/aitp-rs/blob/main/docs/sdk-node.md).
17
+
18
+ ## Install
19
+
20
+ ```bash
21
+ npm install @agentidentitytrustprotocol/aitp
22
+ ```
23
+
24
+ Prebuilt native binaries ship for macOS (x64, arm64) and Linux GNU (x64,
25
+ arm64).
26
+
27
+ ## Build from source
12
28
 
13
29
  This crate is **not** part of the `aitp-rs` Cargo workspace. Build it with
14
- the [NAPI-rs CLI](https://napi.rs):
30
+ the [NAPI-rs CLI](https://napi.rs) and a Rust toolchain:
15
31
 
16
32
  ```bash
17
33
  npm install
@@ -22,27 +38,30 @@ npm run build # full release (all capabilities)
22
38
  npm run build:minimal # minimal release (--no-default-features)
23
39
  ```
24
40
 
25
- This produces `aitp.node` and `index.js` in the package root. Generated
26
- TypeScript typings (`index.d.ts`) cover the full surface; a
27
- `--no-default-features` build narrows it accordingly.
41
+ The build produces the platform `.node` binary and regenerates `index.js`
42
+ and `index.d.ts`. The generated TypeScript typings in `index.d.ts` cover the
43
+ full surface; a `--no-default-features` build narrows it.
28
44
 
29
45
  ### Cargo features
30
46
 
31
- The published `.node` ships the **full** capability surface by default —
32
- handshake, TCT, delegation, manifest verify, revocation-list signing, OIDC
33
- identity, **plus** TCT renewal, session bundles, SPKI pinning, and multi-hop
34
- delegation. Each capability is a named feature (all on by default) so a
35
- minimal build can opt out with `--no-default-features`:
47
+ By default the published `.node` ships the **full** capability surface:
48
+
49
+ - handshake, TCT, delegation, manifest verification and OIDC identity
50
+ - revocation-list signing and verification
51
+ - TCT renewal, session bundles, SPKI pinning and multi-hop delegation
52
+
53
+ Each capability below is a named feature, all on by default. A minimal build
54
+ can opt out with `--no-default-features`:
36
55
 
37
56
  | Feature | Enables | RFC |
38
57
  |-----------------------|--------------------------------------------------------------------------|----------------------|
39
- | `renewal` | `AitpAgent.buildRenewalRequest` / `processRenewalRequest` | RFC-AITP-0013 |
40
- | `session-bundle` | `SessionBundleBuilder`, `verifySessionBundle` | RFC-AITP-0010 |
58
+ | `renewal` | `AitpAgent.buildRenewalRequest` / `processRenewalRequest` | RFC-AITP-0013 (Planned) |
59
+ | `session-bundle` | `SessionBundleBuilder`, `verifySessionBundle` | RFC-AITP-0010 (Draft) |
41
60
  | `spki-pinning` | `computeSpkiHash`, `SpkiPinVerifier` | HPKP (RFC 7469) |
42
- | `multihop-delegation` | `verifyDelegationMultihop` | RFC-AITP-0011 |
61
+ | `multihop-delegation` | `verifyDelegationMultihop` | RFC-AITP-0011 (Draft) |
43
62
 
44
- Capabilities whose underlying RFC has not yet graduated do not promise wire
45
- stability across binding versions.
63
+ Capabilities whose RFC has not graduated make no wire-stability promise
64
+ across binding versions.
46
65
 
47
66
  ## Usage
48
67
 
@@ -63,9 +82,12 @@ const respManifest = responder.buildManifest({
63
82
  offeredCaps: ['demo.write'],
64
83
  });
65
84
 
85
+ // Each side trusts the other's pinned key by AID. Without `pinnedKeys`
86
+ // every pinned_key peer is rejected (fail closed).
87
+ const sess = initiator.newSession(null, { pinnedKeys: [responder.aid] });
88
+ const rsess = responder.newResponder(null, { pinnedKeys: [initiator.aid] });
89
+
66
90
  // Four-message mutual handshake — each call's output is the next peer's input.
67
- const sess = initiator.newSession();
68
- const rsess = responder.newResponder();
69
91
 
70
92
  const hello = sess.buildHello(respManifest, ['demo.write']);
71
93
  const { ackJson: helloAck, sessionId } = rsess.processHello(hello);
@@ -83,98 +105,90 @@ console.log(ident.peerAid, ident.grants);
83
105
  // `buildDelegation(grantVoucher, delegateeAid, scope)` to delegate.
84
106
  ```
85
107
 
86
- In a real deployment each message moves over HTTP: `buildHello` returns the
87
- `POST /aitp/handshake/hello` body, `processHello` returns the response body
88
- plus the value for the `X-Aitp-Session-Id` header, and so on.
108
+ In a real deployment each message moves over HTTP. `buildHello` returns the
109
+ body for `POST /aitp/handshake/hello`. `processHello` returns the response
110
+ body plus the value for the `X-Aitp-Session-Id` header, and so on.
89
111
 
90
112
  ## API
91
113
 
92
- The full public surface is described in the generated `index.d.ts`; below
93
- is a summary. Manifests, revocation lists, and handshake envelopes cross
94
- the boundary as JSON strings; **TCTs, grant vouchers, and delegations are
95
- opaque compact-JWS token strings** (`header.payload.signature`).
96
-
97
- | Type | Default? | Notes |
98
- |---------------------------|:--------:|----------------------------------------------------------------------------------------------------------------|
99
- | `AitpAgent` | ✅ | `generate(opts?)` / `fromSeed(buffer, opts?)` (`opts.suite = "ed25519" \| "p256"`), `aid`, `buildManifest(opts)`, `newSession(jwks?, opts?)`, `newResponder(jwks?, opts?)`, `verifyTct(token, grant, expectedAudience?, revokedJtis?)`, `buildDelegation(voucherToken, delegateeAid, scope, ttlSecs?)`, `issueTctForDelegatee(...)`, `signRevocationList(...)` |
100
- | `InitiatorSession` | ✅ | `buildHello(peerManifest, grants, oidcMintJwt?)`, `processHelloAck(...)`, `complete(...)` → `{ tct, claims, grantVoucher? }` |
101
- | `ResponderSession` | ✅ | `processHello(hello, oidcMintJwt?)` → `{ ackJson, sessionId }`, `processCommit(commit)` → `{ ackJson, completed: { tct, claims, grantVoucher? } }` |
102
- | `TctIdentity` | ✅ | `peerAid` (issuer), `grants`, `expiresAt`, `jti` |
103
- | `DelegationVerified` | ✅ | `delegator`, `delegatee`, `issuedBy`, `grants`, `expiresAt`, `cnfJkt` |
104
- | `JwksProvider` | ✅ | OIDC JWKS map. `upsert(issuer, keys)`, `remove(issuer)`, `issuers()` |
105
- | `TctStore` / `verifyTctCached()` | ✅ | Hot-path verify cache: skips the signature check for a byte-identical, still-valid TCT (keyed by SHA-256 of the token bytes) |
106
- | `verifyDelegation()` | ✅ | RFC-AITP-0006 — strict single-hop; rejects any multi-hop `chain` |
107
- | `verifyManifestJson()` | ✅ | Control-plane manifest enrollment |
108
- | `buildRenewalRequest()` / `processRenewalRequest()` | `renewal` | RFC-AITP-0013 |
109
- | `SessionBundleBuilder`, `verifySessionBundle()` | `session-bundle` | RFC-AITP-0010 |
110
- | `computeSpkiHash()`, `SpkiPinVerifier` | `spki-pinning` | HPKP outbound pinning |
111
- | `verifyDelegationMultihop()` | `multihop-delegation` | RFC-AITP-0011 (draft) multi-hop opt-in |
114
+ The generated `index.d.ts` describes the full public surface; the table below
115
+ summarizes it. Manifests, revocation lists and handshake envelopes cross the
116
+ boundary as JSON strings. **TCTs, grant vouchers and delegations are opaque
117
+ compact-JWS token strings** (`header.payload.signature`).
118
+
119
+ | Export | Feature | Notes |
120
+ |---------------------------|:-------:|-------|
121
+ | `AitpAgent` | default | `generate(opts?)` / `fromSeed(buffer, opts?)` (`opts.suite = "ed25519" \| "p256"`), `aid`, `buildManifest(opts)`, `newSession(jwks?, opts?)`, `newResponder(jwks?, opts?)` (`opts.trustAnchors`, `opts.pinnedKeys`), `verifyTct(token, grant, expectedAudience?, revokedJtis?)`, `verifyTctCached(token, grant, store, expectedAudience?, revokedJtis?)`, `buildDelegation(voucherToken, delegateeAid, scope, ttlSecs?)`, `issueTctForDelegatee(verified, ttlSecs?)` → `{ tct, grantVoucher? }`, `signRevocationList(entries, expiresInSecs?)` |
122
+ | `JsInitiatorSession` | default | Returned by `newSession`. `buildHello(peerManifest, grants, oidcMintJwt?)`, `processHelloAck(...)`, `complete(...)` → `{ tct, claims, grantVoucher? }` |
123
+ | `JsResponderSession` | default | Returned by `newResponder`. `processHello(hello, oidcMintJwt?)` → `{ ackJson, sessionId }`, `processCommit(commit)` → `{ ackJson, completed: { tct, claims, grantVoucher? } }` |
124
+ | `TctStore` | default | Cache for `AitpAgent.verifyTctCached()`. A byte-identical, still-valid TCT skips the signature check; the key is the SHA-256 of the token bytes |
125
+ | `JwksProvider` | default | OIDC JWKS map. `upsert(issuer, keys)`, `remove(issuer)`, `issuers()` |
126
+ | `verifyDelegation(token, verifierAid, revokedJtis?)` | default | RFC-AITP-0006, strict single-hop; rejects any multi-hop `chain`. Returns `{ delegator, delegatee, issuedBy, grants, expiresAt, cnfJkt }` |
127
+ | `verifyManifestJson(json, nowUnixSecs?)` | default | Throws an `Error` with `code` (e.g. `signature_invalid`, `expired`, `unknown_field`, `malformed`) |
128
+ | `verifyRevocationList(json, expectedIssuerAid, nowUnixSecs?)` | default | Verifies a revocation snapshot against a pinned issuer. Throws an `Error` with `code` |
129
+ | `revocationSigningBytes(json)` | default | The exact bytes a revocation snapshot's signature covers |
130
+ | `computeAidJkt(aid)` | default | RFC 7638 thumbprint of an AID's key, for an OIDC JWT's `cnf.jkt` |
131
+ | `buildRenewalRequest()` / `processRenewalRequest()` | `renewal` | RFC-AITP-0013 (Planned). `processRenewalRequest` → `{ tct, grantVoucher? }` |
132
+ | `SessionBundleBuilder`, `verifySessionBundle(json, verifierAid, nowUnixSecs?, revocationCheck?)` | `session-bundle` | RFC-AITP-0010 |
133
+ | `computeSpkiHash()`, `SpkiPinVerifier` | `spki-pinning` | HPKP-style outbound pinning |
134
+ | `verifyDelegationMultihop(token, verifierAid, issuerManifests, maxDelegationHops?, revokedJtis?)` | `multihop-delegation` | RFC-AITP-0011 multi-hop opt-in |
135
+
136
+ `verifyTct` returns `{ peerAid, grants, expiresAt, jti }`, where `peerAid` is
137
+ the issuer.
112
138
 
113
139
  ### Revocation
114
140
 
115
- `verifyTct` / `verifyTctCached` accept an optional final `revokedJtis`
116
- argument — an array of revoked TCT `jti` strings. Any TCT whose `jti` is in
117
- the array is rejected even if its signature, audience, and expiry are
118
- otherwise valid:
141
+ `verifyTct` and `verifyTctCached` take an optional final `revokedJtis`
142
+ argument, an array of revoked TCT `jti` strings. A TCT whose `jti` is in the
143
+ array is rejected, even if its signature, audience and expiry are otherwise
144
+ valid:
119
145
 
120
146
  ```javascript
147
+ // not executed: fragment; see docs/sdk-node.md § TCT verification for the runnable flow
121
148
  const revoked = ['11111111-2222-3333-4444-555555555555'];
122
149
  agent.verifyTct(tctToken, 'demo.write', null, revoked); // throws if revoked
123
150
  ```
124
151
 
125
152
  **Obligation.** The SDK does **not** fetch or maintain the revoked set for
126
- you; supplying it is the caller's responsibility. Source it from a
127
- `RevocationList` you fetched and verified out-of-band (issue one with
128
- `signRevocationList`). The set is passed up-front (rather than via a JS
129
- callback invoked per-`jti`) to stay sound under napi threading constraints.
130
- Omitting the argument leaves the revocation gate **off** — an unexpired but
131
- revoked TCT will pass, so wire `revokedJtis` in wherever revocation matters.
153
+ you. Supplying it is the caller's responsibility: source it from a
154
+ revocation snapshot you fetched and checked with `verifyRevocationList`
155
+ (issue one with `signRevocationList`).
132
156
 
133
- ### OIDC identity (RFC-AITP-0002)
157
+ The set is passed up-front rather than through a JS callback invoked per
158
+ `jti`, so that it stays sound under napi threading constraints.
134
159
 
135
- ```javascript
136
- import { AitpAgent, JwksProvider } from '@agentidentitytrustprotocol/aitp';
160
+ If you omit the argument, the revocation gate is **off** and an unexpired but
161
+ revoked TCT will pass. Wire `revokedJtis` in wherever revocation matters.
137
162
 
138
- const jwks = new JwksProvider({
139
- 'https://idp.example/': [{ kty: 'OKP', crv: 'Ed25519', x: '...', kid: 'k1', alg: 'EdDSA' }],
140
- });
163
+ ### OIDC identity and P-256
141
164
 
142
- const agent = AitpAgent.generate();
143
- agent.buildManifest({
144
- displayName: 'alice',
145
- handshakeEndpoint: 'https://alice.example/aitp/handshake/',
146
- offeredCaps: ['demo.echo'],
147
- identityType: 'oidc',
148
- oidcIssuer: 'https://idp.example/',
149
- oidcSubject: 'alice',
150
- });
151
- const sess = agent.newSession(jwks);
165
+ See
166
+ [OIDC identity](https://github.com/agentidentitytrustprotocol/aitp-rs/blob/main/docs/sdk-node.md#oidc-identity-rfc-aitp-0002)
167
+ and
168
+ [P-256 signing suite](https://github.com/agentidentitytrustprotocol/aitp-rs/blob/main/docs/sdk-node.md#p-256-signing-suite-rfc-aitp-0001-543).
169
+ The `oidcMintJwt` callback is synchronous.
152
170
 
153
- const mintJwt = (nonce) => myIdp.mintJwtSync({ nonce, sub: 'alice', aud: peerAid });
154
- const hello = sess.buildHello(peerManifest, ['demo.echo'], mintJwt);
155
- ```
171
+ > **Breaking change in v0.2:** the P-256-specific factory methods were
172
+ > removed in favor of the parameterized `generate({ suite })` /
173
+ > `fromSeed(seed, { suite })` API, which matches the Python SDK's
174
+ > `AitpAgent.generate(suite="p256")`. To migrate, call
175
+ > `AitpAgent.generate({ suite: 'p256' })` or
176
+ > `AitpAgent.fromSeed(seed, { suite: 'p256' })`.
156
177
 
157
- ### P-256 signing (RFC-AITP-0001 §5.4.3)
178
+ `pinned_key` identities work with Ed25519 and P-256 keys. For P-256 the
179
+ manifest's `public_key` is the 33-byte SEC1 compressed point.
158
180
 
159
- ```javascript
160
- const agent = AitpAgent.generate({ suite: 'p256' }); // aid:pubkey:p256:<44>
161
- // Deterministic from a seed:
162
- const seeded = AitpAgent.fromSeed(seed, { suite: 'p256' });
163
- // All other methods identical; signatures emitted as `p256.<86b64u>`.
164
- ```
181
+ ### Pinned keys (`opts.pinnedKeys`)
165
182
 
166
- > **Breaking change in v0.2:** `AitpAgent.generateP256()` and
167
- > `AitpAgent.fromP256Seed(seed)` were removed in favor of the
168
- > parameterized `generate({ suite })` / `fromSeed(seed, { suite })`
169
- > API. This matches the Python SDK's
170
- > `AitpAgent.generate(suite="p256")` shape — CLAUDE.md mandates SDK
171
- > symmetry. Migration: replace `generateP256()` with
172
- > `generate({ suite: 'p256' })` and `fromP256Seed(seed)` with
173
- > `fromSeed(seed, { suite: 'p256' })`.
183
+ A session accepts a `pinned_key` peer only if the peer's AID is in the
184
+ `pinnedKeys` array passed to `newSession` / `newResponder`
185
+ (RFC-AITP-0002 §3.2: the key must be in the verifier's local trust store,
186
+ checked before the proof). Omitted or `[]` trusts no pinned key, so every
187
+ `pinned_key` peer is rejected. An entry that is not a valid AID throws.
174
188
 
175
- > **Note.** In v0.1 the `pinned_key` identity_hint embeds an Ed25519 raw
176
- > public key. P-256 agents must therefore use `identityType: 'oidc'` until
177
- > the manifest's identity_hint shape is extended.
189
+ > **Upgrading to 0.14:** possession-only pinned-key verification is gone.
190
+ > Pass the peer's AID, e.g. `agent.newSession(null, { pinnedKeys: [peer.aid] })`,
191
+ > or the handshake fails with `IDENTITY_FAILED`.
178
192
 
179
193
  ## Tests
180
194
 
@@ -184,5 +198,10 @@ npm run build:debug
184
198
  npm test # node --test tests/*.mjs
185
199
  ```
186
200
 
201
+ `tests/test_docs_samples.mjs` runs every JavaScript block in
202
+ [`docs/sdk-node.md`](https://github.com/agentidentitytrustprotocol/aitp-rs/blob/main/docs/sdk-node.md)
203
+ and the Usage block above.
204
+
187
205
  The cross-language interop suite (Python ↔ Node) lives in
188
- [`../interop`](../interop) — run it with `make interop` from the repo root.
206
+ [`bindings/interop`](https://github.com/agentidentitytrustprotocol/aitp-rs/tree/main/bindings/interop).
207
+ Run it with `make interop` from the repo root.
package/index.d.ts CHANGED
@@ -43,11 +43,14 @@ export declare class AitpAgent {
43
43
  * `jwks` is an optional `JwksProvider` used when the peer's
44
44
  * manifest advertises an OIDC identity. `opts.trustAnchors`
45
45
  * overrides the manifest's `accepted_trust_anchors`.
46
+ * `opts.pinnedKeys` lists the peer AIDs trusted for `pinned_key`
47
+ * identities; omitted ⇒ every `pinned_key` peer is rejected.
46
48
  */
47
49
  newSession(jwks?: JwksProvider | undefined | null, opts?: SessionOpts | undefined | null): JsInitiatorSession
48
50
  /**
49
51
  * Create a new inbound (responder) handshake session. Mirror of
50
- * `newSession`.
52
+ * `newSession`, including `opts.pinnedKeys`: omitted ⇒ every
53
+ * `pinned_key` initiator is rejected.
51
54
  */
52
55
  newResponder(jwks?: JwksProvider | undefined | null, opts?: SessionOpts | undefined | null): JsResponderSession
53
56
  /**
@@ -86,11 +89,13 @@ export declare class AitpAgent {
86
89
  */
87
90
  buildDelegation(voucherToken: string, delegateeAid: string, scope: Array<string>, ttlSecs?: number | undefined | null): string
88
91
  /**
89
- * Mint a fresh compact-JWS TCT for a delegatee after the verifier has
90
- * confirmed the delegation. The subject-key binding is derived from
91
- * the verified delegation's `delegatee` AID.
92
+ * Mint a fresh TCT for a delegatee after the verifier has confirmed
93
+ * the delegation. Returns `{ tct, grantVoucher }` — the compact-JWS
94
+ * TCT plus its companion grant voucher (`null` when none was minted).
95
+ * The subject-key binding is derived from the verified delegation's
96
+ * `delegatee` AID.
92
97
  */
93
- issueTctForDelegatee(verified: JsDelegationVerified, ttlSecs?: number | undefined | null): string
98
+ issueTctForDelegatee(verified: JsDelegationVerified, ttlSecs?: number | undefined | null): JsIssuedTct
94
99
  /**
95
100
  * Sign a `RevocationList` with this agent's key. `entries` carries
96
101
  * the revoked-TCT records; `expiresInSecs` defaults to 3600 s.
@@ -108,11 +113,17 @@ export declare class AitpAgent {
108
113
  buildRenewalRequest(currentTctToken: string): string
109
114
  /**
110
115
  * Issuer side: verify a `TctRenewalPayload` JSON request and mint a
111
- * fresh TCT, returned as a compact-JWS token string.
116
+ * fresh TCT. Returns `{ tct, grantVoucher }` — the compact-JWS TCT plus
117
+ * its companion grant voucher (`null` when none was minted).
118
+ *
119
+ * Renewal re-evaluates policy (RFC-AITP-0004 §8.1): grants this
120
+ * agent's Manifest (from `buildManifest()`, required) no longer
121
+ * offers are dropped, a TCT whose `jti` is in `revokedJtis` is
122
+ * refused, and a replayed request (same `pop_nonce`) is refused.
112
123
  *
113
124
  * Behind the `renewal` Cargo feature (on by default).
114
125
  */
115
- processRenewalRequest(requestPayloadJson: string, manifestExpUnixSecs: number, newTtlSecs: number): string
126
+ processRenewalRequest(requestPayloadJson: string, manifestExpUnixSecs: number, newTtlSecs: number, revokedJtis?: Array<string> | undefined | null): JsIssuedTct
116
127
  }
117
128
 
118
129
  /** Outbound handshake session — drives the initiator side. */
@@ -381,6 +392,25 @@ export interface JsHelloAckResult {
381
392
  sessionId: string
382
393
  }
383
394
 
395
+ /**
396
+ * A TCT this agent just minted for someone else — the return shape of
397
+ * `processRenewalRequest` and `issueTctForDelegatee`. Mirrors the Python
398
+ * SDK's `{"tct", "grant_voucher"}` JSON object.
399
+ */
400
+ export interface JsIssuedTct {
401
+ /**
402
+ * The fresh TCT as an opaque compact-JWS string. Deliver it to the
403
+ * holder verbatim.
404
+ */
405
+ tct: string
406
+ /**
407
+ * The companion grant voucher (compact JWS, RFC-AITP-0005 §8), or
408
+ * `null` when issuance policy declined to mint one — the holder then
409
+ * cannot delegate. Deliver it alongside `tct`.
410
+ */
411
+ grantVoucher?: string
412
+ }
413
+
384
414
  /** The verified peer identity carried by a TCT. */
385
415
  export interface JsTctIdentity {
386
416
  /** AID of the agent that issued (and is bound by) the TCT (`iss`). */
@@ -446,7 +476,8 @@ export interface RevocationEntryInput {
446
476
  export declare function revocationSigningBytes(envelopeJson: string): Buffer
447
477
 
448
478
  /**
449
- * Trust-anchor override for `newSession` / `newResponder`.
479
+ * Options for `newSession` / `newResponder`: trust-anchor override and
480
+ * the pinned-key trust store.
450
481
  *
451
482
  * JWKS provider is passed as a separate argument (napi-rs can't put a
452
483
  * class reference inside an `#[napi(object)]` struct).
@@ -457,6 +488,15 @@ export interface SessionOpts {
457
488
  * reuses the manifest's list.
458
489
  */
459
490
  trustAnchors?: Array<string>
491
+ /**
492
+ * Local pinned-key trust store (RFC-AITP-0002 §3.2): peer AID
493
+ * strings (`aid:pubkey:ed25519:...` or `aid:pubkey:p256:...`). A
494
+ * peer presenting a `pinned_key` identity is accepted only if its
495
+ * AID is listed; the check runs before the proof is verified.
496
+ * Omitted or `[]` trusts no pinned key, so every `pinned_key` peer
497
+ * is rejected (fail closed). An invalid AID entry throws.
498
+ */
499
+ pinnedKeys?: Array<string>
460
500
  }
461
501
 
462
502
  /**
@@ -503,8 +543,16 @@ export declare function verifyDelegation(token: string, verifierAid: string, rev
503
543
  * to every hop regardless of issuer. That can only reject more, never
504
544
  * accept a revoked hop, but it does mean a list aggregated across several
505
545
  * issuers lets any contributor revoke any hop.
546
+ *
547
+ * `issuerManifests` is the hop issuers' Manifests, each a
548
+ * `{"manifest": {...}}` envelope JSON string. RFC-AITP-0011 §3 step 1
549
+ * verifies every hop under the key resolved from its issuer's verified
550
+ * Manifest; a hop whose issuer has no valid Manifest here fails with
551
+ * `KEY_RESOLUTION_FAILED`. Each Manifest is verified (RFC-AITP-0003 §5)
552
+ * before use; when several designate one AID the newest `published_at`
553
+ * wins.
506
554
  */
507
- export declare function verifyDelegationMultihop(token: string, verifierAid: string, maxDelegationHops?: number | undefined | null, revokedJtis?: Array<string> | undefined | null): JsDelegationVerified
555
+ export declare function verifyDelegationMultihop(token: string, verifierAid: string, issuerManifests: Array<string>, maxDelegationHops?: number | undefined | null, revokedJtis?: Array<string> | undefined | null): JsDelegationVerified
508
556
 
509
557
  /**
510
558
  * Verify a `ManifestEnvelope` JSON string. Used by the AITP Control Plane
@@ -514,8 +562,13 @@ export declare function verifyDelegationMultihop(token: string, verifierAid: str
514
562
  * On failure throws an `Error` whose **`code`** property is one of
515
563
  * `signature_invalid`, `pop_failed`, `aid_mismatch`, `expired`,
516
564
  * `version_unknown`, `identity_hint_malformed`,
517
- * `incompatible_identity_type`, `malformed`. Branch on `error.code`, never
518
- * on `error.message`: the code is the contract, the wording is not.
565
+ * `incompatible_identity_type`, `unknown_field`, `malformed`. Branch on
566
+ * `error.code`, never on `error.message`: the code is the contract, the
567
+ * wording is not.
568
+ *
569
+ * The JSON goes through the hardened wire parser before verification: a
570
+ * duplicate key anywhere (RFC-AITP-0001 §5.4.5) is `malformed`, and a
571
+ * member outside the schema (RFC-AITP-0001 §7) is `unknown_field`.
519
572
  *
520
573
  * `nowUnixSecs` overrides the verification clock — omit it to use the
521
574
  * system clock, or pass a pinned value in tests. Matches
@@ -528,8 +581,10 @@ export declare function verifyManifestJson(manifestEnvelopeJson: string, nowUnix
528
581
  *
529
582
  * Resolves on success; on failure throws an `Error` whose **`code`** property
530
583
  * is one of `signature_invalid`, `issuer_mismatch`, `version_unknown`,
531
- * `expired`, `malformed`. Branch on `error.code`, never on `error.message`:
532
- * the code is the contract, the message wording is not.
584
+ * `expired`, `unknown_field`, `malformed`. Branch on `error.code`, never on
585
+ * `error.message`: the code is the contract, the message wording is not.
586
+ * A duplicate JSON key (RFC-AITP-0001 §5.4.5) is `malformed`; a member
587
+ * outside the schema (RFC-AITP-0001 §7) is `unknown_field`.
533
588
  *
534
589
  * Establishes **authenticity and non-expiry only** — that the snapshot was
535
590
  * signed by the holder of `expectedIssuerAid` and that its `expires_at` has
@@ -544,6 +599,10 @@ export declare function verifyRevocationList(envelopeJson: string, expectedIssue
544
599
  /**
545
600
  * Verify a `SessionBundleEnvelope` JSON. `nowUnixSecs` defaults to
546
601
  * the system clock. `revocationCheck` receives a JTI string and
547
- * returns true if revoked.
602
+ * returns true if revoked. `coordinatorManifestJson` is the
603
+ * coordinator's `ManifestEnvelope` JSON: when supplied it is verified
604
+ * and the coordinator key is resolved from it (RFC-AITP-0010 §5 step
605
+ * 5); when omitted the key is derived from the bundle's `coordinator`
606
+ * AID alone, which skips that step.
548
607
  */
549
- export declare function verifySessionBundle(bundleEnvelopeJson: string, verifierAid: string, nowUnixSecs?: number | undefined | null, revocationCheck?: ((arg: string) => boolean) | undefined | null): JsBundleOutcome
608
+ export declare function verifySessionBundle(bundleEnvelopeJson: string, verifierAid: string, nowUnixSecs?: number | undefined | null, revocationCheck?: ((arg: string) => boolean) | undefined | null, coordinatorManifestJson?: string | undefined | null): JsBundleOutcome
package/index.js CHANGED
@@ -77,8 +77,8 @@ function requireNative() {
77
77
  try {
78
78
  const binding = require('@agentidentitytrustprotocol/aitp-android-arm64')
79
79
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-android-arm64/package.json').version
80
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
81
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
80
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
81
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
82
82
  }
83
83
  return binding
84
84
  } catch (e) {
@@ -93,8 +93,8 @@ function requireNative() {
93
93
  try {
94
94
  const binding = require('@agentidentitytrustprotocol/aitp-android-arm-eabi')
95
95
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-android-arm-eabi/package.json').version
96
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
97
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
96
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
97
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
98
98
  }
99
99
  return binding
100
100
  } catch (e) {
@@ -114,8 +114,8 @@ function requireNative() {
114
114
  try {
115
115
  const binding = require('@agentidentitytrustprotocol/aitp-win32-x64-gnu')
116
116
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-win32-x64-gnu/package.json').version
117
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
118
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
117
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
118
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
119
119
  }
120
120
  return binding
121
121
  } catch (e) {
@@ -130,8 +130,8 @@ function requireNative() {
130
130
  try {
131
131
  const binding = require('@agentidentitytrustprotocol/aitp-win32-x64-msvc')
132
132
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-win32-x64-msvc/package.json').version
133
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
134
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
133
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
134
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
135
135
  }
136
136
  return binding
137
137
  } catch (e) {
@@ -147,8 +147,8 @@ function requireNative() {
147
147
  try {
148
148
  const binding = require('@agentidentitytrustprotocol/aitp-win32-ia32-msvc')
149
149
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-win32-ia32-msvc/package.json').version
150
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
151
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
150
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
151
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
152
152
  }
153
153
  return binding
154
154
  } catch (e) {
@@ -163,8 +163,8 @@ function requireNative() {
163
163
  try {
164
164
  const binding = require('@agentidentitytrustprotocol/aitp-win32-arm64-msvc')
165
165
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-win32-arm64-msvc/package.json').version
166
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
167
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
166
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
167
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
168
168
  }
169
169
  return binding
170
170
  } catch (e) {
@@ -182,8 +182,8 @@ function requireNative() {
182
182
  try {
183
183
  const binding = require('@agentidentitytrustprotocol/aitp-darwin-universal')
184
184
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-darwin-universal/package.json').version
185
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
186
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
185
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
186
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
187
187
  }
188
188
  return binding
189
189
  } catch (e) {
@@ -198,8 +198,8 @@ function requireNative() {
198
198
  try {
199
199
  const binding = require('@agentidentitytrustprotocol/aitp-darwin-x64')
200
200
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-darwin-x64/package.json').version
201
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
202
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
201
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
202
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
203
203
  }
204
204
  return binding
205
205
  } catch (e) {
@@ -214,8 +214,8 @@ function requireNative() {
214
214
  try {
215
215
  const binding = require('@agentidentitytrustprotocol/aitp-darwin-arm64')
216
216
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-darwin-arm64/package.json').version
217
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
218
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
217
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
218
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
219
219
  }
220
220
  return binding
221
221
  } catch (e) {
@@ -234,8 +234,8 @@ function requireNative() {
234
234
  try {
235
235
  const binding = require('@agentidentitytrustprotocol/aitp-freebsd-x64')
236
236
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-freebsd-x64/package.json').version
237
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
238
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
237
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
238
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
239
239
  }
240
240
  return binding
241
241
  } catch (e) {
@@ -250,8 +250,8 @@ function requireNative() {
250
250
  try {
251
251
  const binding = require('@agentidentitytrustprotocol/aitp-freebsd-arm64')
252
252
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-freebsd-arm64/package.json').version
253
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
254
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
253
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
254
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
255
255
  }
256
256
  return binding
257
257
  } catch (e) {
@@ -271,8 +271,8 @@ function requireNative() {
271
271
  try {
272
272
  const binding = require('@agentidentitytrustprotocol/aitp-linux-x64-musl')
273
273
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-x64-musl/package.json').version
274
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
275
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
274
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
275
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
276
276
  }
277
277
  return binding
278
278
  } catch (e) {
@@ -287,8 +287,8 @@ function requireNative() {
287
287
  try {
288
288
  const binding = require('@agentidentitytrustprotocol/aitp-linux-x64-gnu')
289
289
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-x64-gnu/package.json').version
290
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
291
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
290
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
291
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
292
292
  }
293
293
  return binding
294
294
  } catch (e) {
@@ -305,8 +305,8 @@ function requireNative() {
305
305
  try {
306
306
  const binding = require('@agentidentitytrustprotocol/aitp-linux-arm64-musl')
307
307
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-arm64-musl/package.json').version
308
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
309
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
308
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
309
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
310
310
  }
311
311
  return binding
312
312
  } catch (e) {
@@ -321,8 +321,8 @@ function requireNative() {
321
321
  try {
322
322
  const binding = require('@agentidentitytrustprotocol/aitp-linux-arm64-gnu')
323
323
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-arm64-gnu/package.json').version
324
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
325
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
324
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
325
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
326
326
  }
327
327
  return binding
328
328
  } catch (e) {
@@ -339,8 +339,8 @@ function requireNative() {
339
339
  try {
340
340
  const binding = require('@agentidentitytrustprotocol/aitp-linux-arm-musleabihf')
341
341
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-arm-musleabihf/package.json').version
342
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
343
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
342
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
343
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
344
344
  }
345
345
  return binding
346
346
  } catch (e) {
@@ -355,8 +355,8 @@ function requireNative() {
355
355
  try {
356
356
  const binding = require('@agentidentitytrustprotocol/aitp-linux-arm-gnueabihf')
357
357
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-arm-gnueabihf/package.json').version
358
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
359
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
358
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
359
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
360
360
  }
361
361
  return binding
362
362
  } catch (e) {
@@ -373,8 +373,8 @@ function requireNative() {
373
373
  try {
374
374
  const binding = require('@agentidentitytrustprotocol/aitp-linux-loong64-musl')
375
375
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-loong64-musl/package.json').version
376
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
377
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
376
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
377
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
378
378
  }
379
379
  return binding
380
380
  } catch (e) {
@@ -389,8 +389,8 @@ function requireNative() {
389
389
  try {
390
390
  const binding = require('@agentidentitytrustprotocol/aitp-linux-loong64-gnu')
391
391
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-loong64-gnu/package.json').version
392
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
393
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
392
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
393
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
394
394
  }
395
395
  return binding
396
396
  } catch (e) {
@@ -407,8 +407,8 @@ function requireNative() {
407
407
  try {
408
408
  const binding = require('@agentidentitytrustprotocol/aitp-linux-riscv64-musl')
409
409
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-riscv64-musl/package.json').version
410
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
411
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
410
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
411
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
412
412
  }
413
413
  return binding
414
414
  } catch (e) {
@@ -423,8 +423,8 @@ function requireNative() {
423
423
  try {
424
424
  const binding = require('@agentidentitytrustprotocol/aitp-linux-riscv64-gnu')
425
425
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-riscv64-gnu/package.json').version
426
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
427
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
426
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
427
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
428
428
  }
429
429
  return binding
430
430
  } catch (e) {
@@ -440,8 +440,8 @@ function requireNative() {
440
440
  try {
441
441
  const binding = require('@agentidentitytrustprotocol/aitp-linux-ppc64-gnu')
442
442
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-ppc64-gnu/package.json').version
443
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
444
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
443
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
444
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
445
445
  }
446
446
  return binding
447
447
  } catch (e) {
@@ -456,8 +456,8 @@ function requireNative() {
456
456
  try {
457
457
  const binding = require('@agentidentitytrustprotocol/aitp-linux-s390x-gnu')
458
458
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-linux-s390x-gnu/package.json').version
459
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
460
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
459
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
460
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
461
461
  }
462
462
  return binding
463
463
  } catch (e) {
@@ -476,8 +476,8 @@ function requireNative() {
476
476
  try {
477
477
  const binding = require('@agentidentitytrustprotocol/aitp-openharmony-arm64')
478
478
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-openharmony-arm64/package.json').version
479
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
480
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
479
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
480
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
481
481
  }
482
482
  return binding
483
483
  } catch (e) {
@@ -492,8 +492,8 @@ function requireNative() {
492
492
  try {
493
493
  const binding = require('@agentidentitytrustprotocol/aitp-openharmony-x64')
494
494
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-openharmony-x64/package.json').version
495
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
496
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
495
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
496
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
497
497
  }
498
498
  return binding
499
499
  } catch (e) {
@@ -508,8 +508,8 @@ function requireNative() {
508
508
  try {
509
509
  const binding = require('@agentidentitytrustprotocol/aitp-openharmony-arm')
510
510
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-openharmony-arm/package.json').version
511
- if (bindingPackageVersion !== '0.13.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
512
- throw new Error(`Native binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
511
+ if (bindingPackageVersion !== '0.15.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
512
+ throw new Error(`Native binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
513
513
  }
514
514
  return binding
515
515
  } catch (e) {
@@ -648,8 +648,8 @@ if (!nativeBinding || forceWasi) {
648
648
  if (!candidateFailed) {
649
649
  if (process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
650
650
  const bindingPackageVersion = require('@agentidentitytrustprotocol/aitp-wasm32-wasi/package.json').version
651
- if (bindingPackageVersion !== '0.13.2') {
652
- throw new Error(`WASI binding package version mismatch, expected 0.13.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
651
+ if (bindingPackageVersion !== '0.15.0') {
652
+ throw new Error(`WASI binding package version mismatch, expected 0.15.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
653
653
  }
654
654
  }
655
655
  wasiBinding = require('@agentidentitytrustprotocol/aitp-wasm32-wasi')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentidentitytrustprotocol/aitp",
3
- "version": "0.13.2",
3
+ "version": "0.15.0",
4
4
  "description": "Agent Identity Trust Protocol — Node.js SDK",
5
5
  "license": "MIT OR Apache-2.0",
6
6
  "repository": {
@@ -48,9 +48,9 @@
48
48
  "registry": "https://registry.npmjs.org/"
49
49
  },
50
50
  "optionalDependencies": {
51
- "@agentidentitytrustprotocol/aitp-darwin-x64": "0.13.2",
52
- "@agentidentitytrustprotocol/aitp-darwin-arm64": "0.13.2",
53
- "@agentidentitytrustprotocol/aitp-linux-x64-gnu": "0.13.2",
54
- "@agentidentitytrustprotocol/aitp-linux-arm64-gnu": "0.13.2"
51
+ "@agentidentitytrustprotocol/aitp-darwin-x64": "0.15.0",
52
+ "@agentidentitytrustprotocol/aitp-darwin-arm64": "0.15.0",
53
+ "@agentidentitytrustprotocol/aitp-linux-x64-gnu": "0.15.0",
54
+ "@agentidentitytrustprotocol/aitp-linux-arm64-gnu": "0.15.0"
55
55
  }
56
56
  }