@terminal3/t3n-sdk 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1263,6 +1263,7 @@ declare class HttpTransport implements Transport {
1263
1263
  * mockTransport.mockResponse("auth.handshake", { result: "..." });
1264
1264
  *
1265
1265
  * const client = new T3nClient({
1266
+ * trustAnchor: { unsafe_trust_server: true },
1266
1267
  * transport: mockTransport,
1267
1268
  * wasmComponent: mockWasm,
1268
1269
  * });
@@ -1317,6 +1318,112 @@ declare class MockTransport implements Transport {
1317
1318
  send(request: JsonRpcRequest, headers: Record<string, string>): Promise<JsonRpcResponse>;
1318
1319
  }
1319
1320
 
1321
+ /**
1322
+ * TDX quote verifier backed by the Rust `signature` crate compiled to
1323
+ * WASM. Full cryptographic verification: ECDSA P-256 attestation-key
1324
+ * signature, PCK certificate chain walk to Intel's root CA, and
1325
+ * report_data + RTMR comparison.
1326
+ *
1327
+ * The WASM bytes are inlined as base64 (see quote_verifier_bytes.ts)
1328
+ * so the SDK works without bundler WASM plugins and without runtime
1329
+ * asset URL resolution.
1330
+ */
1331
+ interface QuoteVerifyResult {
1332
+ valid: boolean;
1333
+ error?: string;
1334
+ rtmr3?: string;
1335
+ report_data?: string;
1336
+ }
1337
+ interface PeerQuoteResult {
1338
+ peer_id: string;
1339
+ valid: boolean;
1340
+ error?: string;
1341
+ rtmr3?: string;
1342
+ }
1343
+ interface DkgVerifyResult {
1344
+ valid: boolean;
1345
+ results: PeerQuoteResult[];
1346
+ valid_count: number;
1347
+ expected_count: number;
1348
+ error?: string;
1349
+ }
1350
+ /**
1351
+ * Client-pinned anchor the DKG attestation bundle is verified against.
1352
+ *
1353
+ * Without it, "the server proved it runs in a TEE" only means "*some*
1354
+ * TDX box somewhere" — any attacker with their own TDX cloud VM can
1355
+ * forge a complete, cryptographically-valid bundle for their own key
1356
+ * (SP-003). The anchor is the independent ground truth that closes it:
1357
+ * the bundle must describe *our* cluster (`expected_peer_ids`) running
1358
+ * *our* image (`rtmr3_allowlist`).
1359
+ */
1360
+ interface TrustAnchor {
1361
+ /**
1362
+ * Base58 peer IDs the client expects in the cluster. The bundle's
1363
+ * `peer_ids` must equal this set exactly (order-insensitive) — a MITM
1364
+ * cannot substitute its own single-node participant set.
1365
+ */
1366
+ expected_peer_ids: string[];
1367
+ /**
1368
+ * Base64-encoded 48-byte RTMR3 measurements of the expected node
1369
+ * image. Every quote's RTMR3 must be a member. **Must be non-empty.**
1370
+ * An array (not a singleton) so a rolling deploy's two in-flight
1371
+ * image measurements both verify.
1372
+ */
1373
+ rtmr3_allowlist: string[];
1374
+ }
1375
+ /**
1376
+ * Escape hatch for local dev / tests against a node whose attestation
1377
+ * can't be anchored (e.g. a mock signer that publishes no bundle).
1378
+ *
1379
+ * The name is deliberately alarming so it stands out in code review and
1380
+ * grep — it is the *only* way to skip DKG attestation verification on
1381
+ * the handshake path.
1382
+ */
1383
+ interface UnsafeTrustServer {
1384
+ unsafe_trust_server: true;
1385
+ }
1386
+ type TrustAnchorOrUnsafe = TrustAnchor | UnsafeTrustServer;
1387
+ /** Narrow a {@link TrustAnchorOrUnsafe} to the explicit opt-out arm. */
1388
+ declare function isUnsafeTrustServer(anchor: TrustAnchorOrUnsafe): anchor is UnsafeTrustServer;
1389
+ /**
1390
+ * Verify a single TDX attestation quote with full cryptographic verification.
1391
+ *
1392
+ * @param quoteB64 - Base64-encoded raw TDX v4 quote
1393
+ * @param attestationMsgB64 - Base64-encoded attestation message
1394
+ * (for DKG: encaps_key || sorted_peer_id_bytes)
1395
+ * @param expectedRtmr3B64 - Optional base64-encoded 48-byte RTMR3
1396
+ * @returns Verification result with extracted measurements
1397
+ */
1398
+ declare function verifyTdxQuote(quoteB64: string, attestationMsgB64: string, expectedRtmr3B64?: string): Promise<QuoteVerifyResult>;
1399
+ /**
1400
+ * Verify a full DKG attestation bundle against a client-pinned
1401
+ * {@link TrustAnchor}: multiple TDX quotes from all participating
1402
+ * nodes, plus the binding between the quotes and the ML-KEM
1403
+ * encapsulation key. Checks:
1404
+ * 1. `expected_peer_ids` / `rtmr3_allowlist` are both non-empty
1405
+ * 2. the bundle's `peer_ids` equal the pinned set exactly
1406
+ * 3. attestationMsg starts with encapsKey (server can't swap the key)
1407
+ * 4. every quote's ECDSA signature chains to Intel's SGX root CA
1408
+ * 5. every quote's report_data == keccak512(attestationMsg)
1409
+ * 6. every quote's RTMR3 is a member of `rtmr3_allowlist`
1410
+ *
1411
+ * The anchor is **required**: there is no unauthenticated mode. Callers
1412
+ * that genuinely want to trust the server must not call this at all —
1413
+ * see `unsafe_trust_server` on the client config, which branches around
1414
+ * the whole verify path.
1415
+ *
1416
+ * @param encapsKeyB64 - Base64-encoded ML-KEM encapsulation key
1417
+ * (from `/status.encaps_key`)
1418
+ * @param attestationMsgB64 - Base64-encoded raw attestation message
1419
+ * (from `/status.dkg_attestation.attestation_msg`)
1420
+ * @param peerIds - Base58 peer IDs as reported by the bundle
1421
+ * @param quotes - Map of peer_id → base64-encoded TDX quote
1422
+ * @param anchor - Client-pinned expected peer IDs + RTMR3 allowlist
1423
+ * @returns Per-peer verification results and overall validity
1424
+ */
1425
+ declare function verifyDkgAttestation(encapsKeyB64: string, attestationMsgB64: string, peerIds: string[], quotes: Record<string, string>, anchor: TrustAnchor): Promise<DkgVerifyResult>;
1426
+
1320
1427
  /**
1321
1428
  * Configuration types for T3n Client
1322
1429
  */
@@ -1346,6 +1453,20 @@ interface T3nClientConfig {
1346
1453
  logger?: Logger;
1347
1454
  /** Optional guest-to-host request handlers - provides custom behavior for WASM requests */
1348
1455
  handlers?: GuestToHostHandlers;
1456
+ /**
1457
+ * **Required.** Client-pinned trust anchor the node's DKG attestation
1458
+ * is verified against before the handshake trusts its ML-KEM key
1459
+ * (SP-003). Either a {@link TrustAnchor} (`expected_peer_ids` +
1460
+ * `rtmr3_allowlist`) or the explicit `{ unsafe_trust_server: true }`
1461
+ * opt-out for local dev / mock-signer nodes.
1462
+ *
1463
+ * Without this, a network attacker with their own TDX VM can hand the
1464
+ * SDK a forged-but-valid attestation for a key it controls and read
1465
+ * every session. It is a required field precisely so no caller can
1466
+ * omit it by accident — bypassing verification must be a visible,
1467
+ * grep-able choice.
1468
+ */
1469
+ trustAnchor: TrustAnchorOrUnsafe;
1349
1470
  }
1350
1471
 
1351
1472
  /**
@@ -2398,8 +2519,9 @@ declare function metamask_get_address(): Promise<string>;
2398
2519
  declare function eth_get_address(privateKey: string): string;
2399
2520
  /**
2400
2521
  * Create an MlKemPublicKey handler that lazily fetches the root public key
2401
- * from `${baseUrl}/status` on first invocation and caches the encoded
2402
- * response for subsequent calls.
2522
+ * from `${baseUrl}/status` on first invocation, verifies it against the
2523
+ * DKG attestation trust anchor (SP-003), and caches the encoded response
2524
+ * for subsequent calls.
2403
2525
  *
2404
2526
  * @param baseUrl - **Required**. The node URL whose `/status` endpoint should
2405
2527
  * serve the ML-KEM public key. Must be the same URL the
@@ -2411,8 +2533,12 @@ declare function eth_get_address(privateKey: string): string;
2411
2533
  * hit the wrong node. Three downstream consumers (demo.ts,
2412
2534
  * t3-apps dev wallet hooks, t3n-mcp session manager) all
2413
2535
  * hit this trap before we tightened the type.
2536
+ * @param trustAnchor - **Required**. Client-pinned expected peer IDs +
2537
+ * RTMR3 allowlist the DKG bundle is verified against, or
2538
+ * `{ unsafe_trust_server: true }` to skip verification.
2539
+ * The key is only cached/returned once verification passes.
2414
2540
  */
2415
- declare function createMlKemPublicKeyHandler(baseUrl: string): GuestToHostHandler;
2541
+ declare function createMlKemPublicKeyHandler(baseUrl: string, trustAnchor: TrustAnchorOrUnsafe): GuestToHostHandler;
2416
2542
  /**
2417
2543
  * Create Random handler backed by crypto.getRandomValues
2418
2544
  * Note: The Rust Vec<u8> type serializes as an array of bytes, not a base64 string
@@ -2423,8 +2549,11 @@ declare function createRandomHandler(): GuestToHostHandler;
2423
2549
  *
2424
2550
  * @param baseUrl - **Required**. Forwarded to `createMlKemPublicKeyHandler`
2425
2551
  * so the lazy /status fetch hits the right node.
2552
+ * @param trustAnchor - **Required**. Forwarded to the ML-KEM handler so the
2553
+ * fetched key is verified against the DKG attestation
2554
+ * (SP-003) before the handshake trusts it.
2426
2555
  */
2427
- declare function createDefaultHandlers(baseUrl: string): GuestToHostHandlers;
2556
+ declare function createDefaultHandlers(baseUrl: string, trustAnchor: TrustAnchorOrUnsafe): GuestToHostHandlers;
2428
2557
 
2429
2558
  /**
2430
2559
  * Payroll request shapes + shared encoding utilities.
@@ -2650,6 +2779,17 @@ interface OrgDataClientOptions extends ExecuteOrgDataActionOptions {
2650
2779
  * header (e.g. the staging Cloud Armor bypass token).
2651
2780
  */
2652
2781
  headers?: Record<string, string>;
2782
+ /**
2783
+ * **Required.** Trust anchor for the internal `T3nClient`'s DKG
2784
+ * attestation check (SP-003). Mirrors `T3nClientConfig.trustAnchor`:
2785
+ * either a pinned {@link TrustAnchor} or the explicit
2786
+ * `{ unsafe_trust_server: true }` opt-out. Required (no silent default)
2787
+ * so bypassing verification is always a visible, grep-able choice —
2788
+ * an authenticated ETH-key caller is still MITM-able on the ML-KEM key.
2789
+ * Signed trust-anchor manifests are not published yet, so most callers
2790
+ * pass `{ unsafe_trust_server: true }` today.
2791
+ */
2792
+ trustAnchor: TrustAnchorOrUnsafe;
2653
2793
  }
2654
2794
  /**
2655
2795
  * Client for session-authenticated org-data contract execution.
@@ -2666,7 +2806,7 @@ declare class OrgDataClient {
2666
2806
  private readonly userDid;
2667
2807
  private readonly opts;
2668
2808
  private clientPromise;
2669
- constructor(baseUrl: string, ethSecret: Uint8Array, userDid: string, opts?: OrgDataClientOptions);
2809
+ constructor(baseUrl: string, ethSecret: Uint8Array, userDid: string, opts: OrgDataClientOptions);
2670
2810
  private getAuthenticatedClient;
2671
2811
  private initialiseClient;
2672
2812
  private call;
@@ -2991,65 +3131,6 @@ interface ConfigValidationResult {
2991
3131
  errors: string[];
2992
3132
  }
2993
3133
 
2994
- /**
2995
- * TDX quote verifier backed by the Rust `signature` crate compiled to
2996
- * WASM. Full cryptographic verification: ECDSA P-256 attestation-key
2997
- * signature, PCK certificate chain walk to Intel's root CA, and
2998
- * report_data + RTMR comparison.
2999
- *
3000
- * The WASM bytes are inlined as base64 (see quote_verifier_bytes.ts)
3001
- * so the SDK works without bundler WASM plugins and without runtime
3002
- * asset URL resolution.
3003
- */
3004
- interface QuoteVerifyResult {
3005
- valid: boolean;
3006
- error?: string;
3007
- rtmr3?: string;
3008
- report_data?: string;
3009
- }
3010
- interface PeerQuoteResult {
3011
- peer_id: string;
3012
- valid: boolean;
3013
- error?: string;
3014
- rtmr3?: string;
3015
- }
3016
- interface DkgVerifyResult {
3017
- valid: boolean;
3018
- results: PeerQuoteResult[];
3019
- valid_count: number;
3020
- expected_count: number;
3021
- error?: string;
3022
- }
3023
- /**
3024
- * Verify a single TDX attestation quote with full cryptographic verification.
3025
- *
3026
- * @param quoteB64 - Base64-encoded raw TDX v4 quote
3027
- * @param attestationMsgB64 - Base64-encoded attestation message
3028
- * (for DKG: encaps_key || sorted_peer_id_bytes)
3029
- * @param expectedRtmr3B64 - Optional base64-encoded 48-byte RTMR3
3030
- * @returns Verification result with extracted measurements
3031
- */
3032
- declare function verifyTdxQuote(quoteB64: string, attestationMsgB64: string, expectedRtmr3B64?: string): Promise<QuoteVerifyResult>;
3033
- /**
3034
- * Verify a full DKG attestation bundle: multiple TDX quotes from all
3035
- * participating nodes, plus the binding between the quotes and the
3036
- * ML-KEM encapsulation key. Checks:
3037
- * 1. attestationMsg starts with encapsKey (server can't swap the key)
3038
- * 2. Every quote's ECDSA signature chains to Intel's SGX root CA
3039
- * 3. Every quote's report_data == keccak512(attestationMsg)
3040
- * 4. Optional RTMR3 pinning per quote
3041
- *
3042
- * @param encapsKeyB64 - Base64-encoded ML-KEM encapsulation key
3043
- * (from `/status.encaps_key`)
3044
- * @param attestationMsgB64 - Base64-encoded raw attestation message
3045
- * (from `/status.dkg_attestation.attestation_msg`)
3046
- * @param peerIds - Sorted array of base58 peer IDs
3047
- * @param quotes - Map of peer_id → base64-encoded TDX quote
3048
- * @param expectedRtmr3B64 - Optional base64-encoded 48-byte RTMR3
3049
- * @returns Per-peer verification results and overall validity
3050
- */
3051
- declare function verifyDkgAttestation(encapsKeyB64: string, attestationMsgB64: string, peerIds: string[], quotes: Record<string, string>, expectedRtmr3B64?: string): Promise<DkgVerifyResult>;
3052
-
3053
3134
  /**
3054
3135
  * Configuration validation for T3n SDK
3055
3136
  */
@@ -3459,5 +3540,5 @@ declare function tenantDidHex(tenantDid: string): string;
3459
3540
  declare function validateTail(tail: string): string;
3460
3541
  declare function canonicalTenantName(tenantDid: string, tail: string): string;
3461
3542
 
3462
- export { AuthMethod, AuthenticationError, BASE_UNITS_PER_TOKEN, ContractResponseError, DEFAULT_ENVIRONMENT, DEFAULT_INDIVIDUAL_THRESHOLD_CENTS, DEFAULT_KYC_POLL_CADENCE, HandshakeError, HttpTransport, KycStatusTimeoutError, LogLevel, MockTransport, NODE_URLS, OrgDataClient, OtpRateLimitedError, RpcError, SessionExpiredError, SessionOrgDataClient, SessionStateError, SessionStatus, T3nClient, T3nError, TERMINAL_KYC_STATUSES, TOKEN_DECIMALS, TenantClient, TenantContractsNamespace, TenantMapsNamespace, TenantNamespace, TenantSdkValidationError, TenantTokenNamespace, UnsupportedTenantSdkOperationError, UserUpsertError, WasmError, Z_PAYROLL_AUDIT_READ_FUNCTIONS, Z_PAYROLL_RUN_FUNCTIONS, _b64uEncode, assertShape, b64uDecodeStrict, b64uEncodeBytes, bytesToString, canonicalTenantName, clearKeyCache, compactDidFromBytes, createDefaultHandlers, createEmailOtpAuthInput, createEthAuthInput, createLogger, createMlKemPublicKeyHandler, createOidcAuthInput, createOrgDataClientFromSession, createRandomHandler, createWorkloadAuthInput, decodeWasmErrorMessage, eth_get_address, extractWasmError, fetchDkgAttestation, fetchMlKemPublicKey, formatTokens, generateRandomString, generateUUID, getEnvironment, getEnvironmentName, getGlobalLogLevel, getLogger, getNodeUrl, getScriptVersion, isDataGetResponse, isDataListResponse, isMutationResponse, isObject, isOrgContractGrants, isOrgPolicyMeta, isOrgPolicyView, isOrgWriters, loadConfig, loadWasmComponent, maskKeyMaterial, mergeAgentAuthEntries, metamask_get_address, metamask_sign, parseAgentAuthGet, parseContractResponse, redactSecrets, redactSecretsFromJson, setEnvironment, setGlobalLogLevel, setNodeUrl, stringToBytes, tenantDidHex, toAgentAuthUpdateWire, toBaseUnits, validateConfig, validateTail, verifyDkgAttestation, verifyTdxQuote };
3463
- export type { AdmitForOrgOptions, AgentAuthEntry, AgentAuthMergeResult, AgentAuthScriptGrant, AgentAuthUpdateInput, AuthInput, BalanceRow, ChargeReason, ClientAuth, ClientHandshake, ConfigValidationResult, ContractExecuteInput, ContractPublishInput, ContractRegisterResult, ContractResponseSchema, CreatePolicyInput, DataGetInput, DataGetResponse, DataListInput, DataListResponse, DeleteDataInput, DeleteGrantsInput, DeleteScopeInput, Did, Direction, DkgAttestation, DkgVerifyResult, EmailOtpAuthInput, EmailOtpCredentials, Environment, EthAuthInput, ExecuteBusinessContractOptions, ExecuteOrgDataActionOptions, GetUsageOptions, GrantsGetInput, GuestToHostHandler, GuestToHostHandlers, HandshakeResult, JsonRpcRequest, JsonRpcResponse, KycPollCadence, KycPollOptions, KycStatus, KycStatusKind, Logger, MapCreateInput, MapResponse, MapUpdateInput, MapVisibility, MutationResponse, OidcAuthInput, OidcCredentials, OrgContractGrants, OrgDataActionWire, OrgDataClientOptions, OrgPolicyMeta, OrgPolicyView, OrgWriters, OtpChannel, OtpMergeSuggestion, OtpRequestInput, OtpRequestResult, OtpVerifyInput, OtpVerifyResult, PayrollRunRequest, PeerQuoteResult, PolicyGetInput, QuoteVerifyResult, ReaderSet, SdkConfig, SessionCrypto, SessionId, SetGrantsInput, SetWritersInput, SubmitUserInputArgs, SubmitUserInputResult, T3nClientConfig, TenantAdmitProjection, TenantAdmitStatus, TenantBaseClient, TenantClientConfig, TenantContractExecuteInput, TenantContractPublishInput, TenantExecutionSession, TenantMapCreateInput, TenantMapUpdatePatch, TenantMeResponse, TenantSdkEnvironment, TenantSelfAdmitResult, TenantStatus, TenantTargetOptions, TokenTxKind, Transport, UpdateMetaInput, UsageEntry, UsagePage, UserGrant, UserInputProfile, UserUpsertErrorKind, WasmComponent, WasmNextResult, WorkloadAuthInput, WriteDataInput, WriterSet, WritersGetInput };
3543
+ export { AuthMethod, AuthenticationError, BASE_UNITS_PER_TOKEN, ContractResponseError, DEFAULT_ENVIRONMENT, DEFAULT_INDIVIDUAL_THRESHOLD_CENTS, DEFAULT_KYC_POLL_CADENCE, HandshakeError, HttpTransport, KycStatusTimeoutError, LogLevel, MockTransport, NODE_URLS, OrgDataClient, OtpRateLimitedError, RpcError, SessionExpiredError, SessionOrgDataClient, SessionStateError, SessionStatus, T3nClient, T3nError, TERMINAL_KYC_STATUSES, TOKEN_DECIMALS, TenantClient, TenantContractsNamespace, TenantMapsNamespace, TenantNamespace, TenantSdkValidationError, TenantTokenNamespace, UnsupportedTenantSdkOperationError, UserUpsertError, WasmError, Z_PAYROLL_AUDIT_READ_FUNCTIONS, Z_PAYROLL_RUN_FUNCTIONS, _b64uEncode, assertShape, b64uDecodeStrict, b64uEncodeBytes, bytesToString, canonicalTenantName, clearKeyCache, compactDidFromBytes, createDefaultHandlers, createEmailOtpAuthInput, createEthAuthInput, createLogger, createMlKemPublicKeyHandler, createOidcAuthInput, createOrgDataClientFromSession, createRandomHandler, createWorkloadAuthInput, decodeWasmErrorMessage, eth_get_address, extractWasmError, fetchDkgAttestation, fetchMlKemPublicKey, formatTokens, generateRandomString, generateUUID, getEnvironment, getEnvironmentName, getGlobalLogLevel, getLogger, getNodeUrl, getScriptVersion, isDataGetResponse, isDataListResponse, isMutationResponse, isObject, isOrgContractGrants, isOrgPolicyMeta, isOrgPolicyView, isOrgWriters, isUnsafeTrustServer, loadConfig, loadWasmComponent, maskKeyMaterial, mergeAgentAuthEntries, metamask_get_address, metamask_sign, parseAgentAuthGet, parseContractResponse, redactSecrets, redactSecretsFromJson, setEnvironment, setGlobalLogLevel, setNodeUrl, stringToBytes, tenantDidHex, toAgentAuthUpdateWire, toBaseUnits, validateConfig, validateTail, verifyDkgAttestation, verifyTdxQuote };
3544
+ export type { AdmitForOrgOptions, AgentAuthEntry, AgentAuthMergeResult, AgentAuthScriptGrant, AgentAuthUpdateInput, AuthInput, BalanceRow, ChargeReason, ClientAuth, ClientHandshake, ConfigValidationResult, ContractExecuteInput, ContractPublishInput, ContractRegisterResult, ContractResponseSchema, CreatePolicyInput, DataGetInput, DataGetResponse, DataListInput, DataListResponse, DeleteDataInput, DeleteGrantsInput, DeleteScopeInput, Did, Direction, DkgAttestation, DkgVerifyResult, EmailOtpAuthInput, EmailOtpCredentials, Environment, EthAuthInput, ExecuteBusinessContractOptions, ExecuteOrgDataActionOptions, GetUsageOptions, GrantsGetInput, GuestToHostHandler, GuestToHostHandlers, HandshakeResult, JsonRpcRequest, JsonRpcResponse, KycPollCadence, KycPollOptions, KycStatus, KycStatusKind, Logger, MapCreateInput, MapResponse, MapUpdateInput, MapVisibility, MutationResponse, OidcAuthInput, OidcCredentials, OrgContractGrants, OrgDataActionWire, OrgDataClientOptions, OrgPolicyMeta, OrgPolicyView, OrgWriters, OtpChannel, OtpMergeSuggestion, OtpRequestInput, OtpRequestResult, OtpVerifyInput, OtpVerifyResult, PayrollRunRequest, PeerQuoteResult, PolicyGetInput, QuoteVerifyResult, ReaderSet, SdkConfig, SessionCrypto, SessionId, SetGrantsInput, SetWritersInput, SubmitUserInputArgs, SubmitUserInputResult, T3nClientConfig, TenantAdmitProjection, TenantAdmitStatus, TenantBaseClient, TenantClientConfig, TenantContractExecuteInput, TenantContractPublishInput, TenantExecutionSession, TenantMapCreateInput, TenantMapUpdatePatch, TenantMeResponse, TenantSdkEnvironment, TenantSelfAdmitResult, TenantStatus, TenantTargetOptions, TokenTxKind, Transport, TrustAnchor, TrustAnchorOrUnsafe, UnsafeTrustServer, UpdateMetaInput, UsageEntry, UsagePage, UserGrant, UserInputProfile, UserUpsertErrorKind, WasmComponent, WasmNextResult, WorkloadAuthInput, WriteDataInput, WriterSet, WritersGetInput };