@invisible-labs/sdk 0.9.0-devnet → 0.11.0-devnet
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 +25 -5
- package/dist/.invisible-sdk-build-target.json +2 -2
- package/dist/{chunk-RWKG7N7I.js → chunk-A4R3DHKN.js} +2 -2
- package/dist/chunk-A4R3DHKN.js.map +1 -0
- package/dist/{chunk-6AKBRYKO.js → chunk-DOTYDYVB.js} +3 -3
- package/dist/{chunk-6AKBRYKO.js.map → chunk-DOTYDYVB.js.map} +1 -1
- package/dist/{chunk-EOPZVOVP.js → chunk-LVCDODTN.js} +582 -19
- package/dist/chunk-LVCDODTN.js.map +1 -0
- package/dist/{chunk-QF5TSUQE.js → chunk-M45APS7S.js} +405 -51
- package/dist/chunk-M45APS7S.js.map +1 -0
- package/dist/{chunk-ISIWWGSR.js → chunk-NOKBFHDP.js} +5 -5
- package/dist/{chunk-ISIWWGSR.js.map → chunk-NOKBFHDP.js.map} +1 -1
- package/dist/{chunk-HWRMSK7E.js → chunk-TNLSUQGJ.js} +4 -4
- package/dist/{chunk-HWRMSK7E.js.map → chunk-TNLSUQGJ.js.map} +1 -1
- package/dist/{chunk-EPWTRF5U.js → chunk-TYTVF3A4.js} +3 -3
- package/dist/{chunk-EPWTRF5U.js.map → chunk-TYTVF3A4.js.map} +1 -1
- package/dist/{chunk-AIKC2XQS.js → chunk-YYTRFM2F.js} +3 -3
- package/dist/{chunk-AIKC2XQS.js.map → chunk-YYTRFM2F.js.map} +1 -1
- package/dist/coordinator-EQEL23A3.js +4 -0
- package/dist/{coordinator-DHL3AP7V.js.map → coordinator-EQEL23A3.js.map} +1 -1
- package/dist/events.js +3 -3
- package/dist/index.d.ts +4 -4
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/lp.d.ts +46 -5
- package/dist/lp.js +675 -212
- package/dist/lp.js.map +1 -1
- package/dist/stats.js +1 -1
- package/dist/storage.js +2 -2
- package/dist/{types.generated-DrM2M4DZ.d.ts → types.generated-BpbFQlYB.d.ts} +75 -1
- package/dist/user.d.ts +9 -4
- package/dist/user.js +53 -22
- package/dist/user.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-EOPZVOVP.js.map +0 -1
- package/dist/chunk-QF5TSUQE.js.map +0 -1
- package/dist/chunk-RWKG7N7I.js.map +0 -1
- package/dist/coordinator-DHL3AP7V.js +0 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/version.ts","../src/core/session.ts","../src/transport/inMemoryTransport.ts","../src/presets/azure-prod-maa.generated.ts","../src/presets/productionRuntimeProfile.ts","../src/presets/production.ts","../src/presets/productionBinaryHash.ts","../src/presets/productionMrtd.ts","../src/session/publicReleasePolicy.ts","../src/session/publicSession.ts","../src/attestation/public.ts","../src/coordinator/public.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The API surface version this build implements. Bumped only on a breaking\n * surface change. See docs/sdk-specification.md section 12.\n */\nexport const apiVersion = \"v0\" as const;\n\n/** Literal type of {@link apiVersion}. */\nexport type ApiVersion = typeof apiVersion;\n","/**\n * The opaque session handle.\n *\n * A `Session` is the single stateful object the functional surface threads\n * through every call: `fn(session, args)`. It owns the transport, the\n * attestation state, and (later) the leader-epoch bookkeeping. Consumers treat\n * it as opaque - they read `session.attested` and pass it back to SDK\n * functions, but never reach inside. The internal state map and constructor\n * live alongside `createSession` (added in a later ticket); this module only\n * fixes the public shape so the rest of the surface can type against it.\n */\n\ndeclare const sessionBrand: unique symbol;\n\n/**\n * Opaque, attested session handle. Obtain one from `createSession`; pass it as\n * the first argument to every actor command. The only field consumers read is\n * {@link Session.attested}.\n */\nexport interface Session {\n /**\n * Whether the current Noise session has passed full TDX attestation. Sensitive\n * commands refuse to run until this is `true`. Re-handshake or failover resets\n * it to `false` until a fresh attestation completes.\n */\n readonly attested: boolean;\n /** @internal Opacity brand; not constructable by consumers. */\n readonly [sessionBrand]: true;\n}\n\n/** Convenience predicate mirroring {@link Session.attested}. */\nexport function isAttested(session: Session): boolean {\n return session.attested;\n}\n","/**\n * In-memory transport.\n *\n * A zero-network channel used by unit tests. It transitions straight to `open`\n * on connect. `send` delivers the raw frame bytes to an optional peer sink: the\n * WebSocket message boundary is the frame boundary, so there is no extra length\n * prefix (matching the production transport). Noise lives above this pure byte\n * channel, never inside it.\n *\n * With no peer wired in, `send` is a silent no-op (legacy stub behaviour for\n * tests that never exchange frames). A paired loopback coordinator supplies a\n * `peer` sink so a real Noise XX handshake can run in-process (see the\n * `testLoopback` fixture).\n */\n\nimport { TransportError } from \"../core/errors.js\";\nimport { createStateController } from \"./stateController.js\";\nimport type { Transport, Unsubscribe } from \"./types.js\";\n\n/** Options for {@link inMemoryTransport}. Test-only paired-loopback wiring. */\nexport interface InMemoryTransportOptions {\n /**\n * Sink for frames written via `send()`. A paired in-process coordinator sets\n * this so the client's raw bytes reach the responder. When omitted, `send`\n * is a no-op so legacy stub-only tests keep working.\n */\n readonly peer?: (frame: Uint8Array) => void;\n}\n\n/** In-memory transport with a hook to feed inbound frames into `onMessage`. */\nexport interface InMemoryTransportHandle extends Transport {\n /** Deliver a frame to this transport's `onMessage` listeners (peer -> client). */\n readonly deliver: (frame: Uint8Array) => void;\n}\n\nexport function inMemoryTransport(options: InMemoryTransportOptions = {}): InMemoryTransportHandle {\n const sc = createStateController(\"idle\");\n const messageListeners = new Set<(frame: Uint8Array) => void>();\n\n return {\n state: () => sc.get(),\n onStateChange: (listener) => sc.onChange(listener),\n onMessage(listener): Unsubscribe {\n messageListeners.add(listener);\n return () => messageListeners.delete(listener);\n },\n deliver(frame: Uint8Array): void {\n for (const listener of messageListeners) listener(frame);\n },\n async connect(signal) {\n if (signal?.aborted) {\n throw new TransportError(\"CONNECTION_LOST\", \"connect aborted before it started\");\n }\n if (sc.get() === \"open\") return;\n sc.set(\"connecting\");\n sc.set(\"open\");\n },\n send(frame: Uint8Array): void {\n if (sc.get() !== \"open\") {\n throw new TransportError(\"CONNECTION_LOST\", \"cannot send on a non-open transport\");\n }\n options.peer?.(frame);\n },\n close() {\n if (sc.get() === \"closed\") return;\n sc.set(\"closing\");\n sc.set(\"closed\");\n },\n };\n}\n","// Generated by npm run release:trust-policy:generate-sdk. Do not edit.\nexport const AZURE_PROD_MAA_TRUST = {\n issuer: \"https://sharedweu.weu.attest.azure.net\",\n jwksUrl: \"https://sharedweu.weu.attest.azure.net/certs\",\n policyHash: \"9NY0VnTQ-IiBriBplVUpFbczcDaEBUwsiFYAzHu_gco\",\n trustSetVersion: \"azure-prod-maa-v1\",\n} as const;\n","/** Build-time projection of the approved production runtime profile. */\n\nexport const DEFAULT_AZURE_PROD_RUNTIME_PROFILE = \"prod-devnet-simplified\" as const;\nexport const PROD_HARDENED_RUNTIME_PROFILE = \"prod-hardened\" as const;\nexport const PROD_DEVNET_SIMPLIFIED_RUNTIME_PROFILE = \"prod-devnet-simplified\" as const;\nexport const PROD_DEVNET_SIMPLIFIED_LOCKED_RUNTIME_PROFILE =\n \"prod-devnet-simplified-locked\" as const;\n\ndeclare const __INVISIBLE_SDK_PRODUCTION_RUNTIME_PROFILE__: string | undefined;\n\nconst configuredRuntimeProfile =\n typeof __INVISIBLE_SDK_PRODUCTION_RUNTIME_PROFILE__ === \"string\"\n ? __INVISIBLE_SDK_PRODUCTION_RUNTIME_PROFILE__\n : \"\";\n\nexport const APPROVED_PRODUCTION_RUNTIME_PROFILE =\n configuredRuntimeProfile === PROD_HARDENED_RUNTIME_PROFILE ||\n configuredRuntimeProfile === PROD_DEVNET_SIMPLIFIED_RUNTIME_PROFILE ||\n configuredRuntimeProfile === PROD_DEVNET_SIMPLIFIED_LOCKED_RUNTIME_PROFILE\n ? configuredRuntimeProfile\n : DEFAULT_AZURE_PROD_RUNTIME_PROFILE;\n","import { INTEL_SGX_ROOT_CA_FINGERPRINT_SHA256 } from \"../attestation/verifier.js\";\nimport type {\n AzureMaaPin,\n CoordinatorEndpoint,\n CoordinatorReleasePin,\n} from \"../schemas/types.generated.js\";\nimport { AZURE_PROD_MAA_TRUST } from \"./azure-prod-maa.generated.js\";\nimport { APPROVED_PRODUCTION_RUNTIME_PROFILE } from \"./productionRuntimeProfile.js\";\n\nexport const LOCAL_DEV_RELEASE_PIN_MRTD = \"local-dev-no-mrtd\";\n\nexport const PLACEHOLDER_RELEASE_PIN = {\n mrtd: \"\",\n intelRootFingerprint: \"\",\n} as const satisfies CoordinatorReleasePin;\n\nexport const AZURE_PROD_COORDINATOR_MRTD =\n \"a2e61f1316e9e367e9c1f7a0adc98c48eb13875c399c85d286cee5ea2b05e57f2df9f61d903b0ae7ac5607d843dfffc1\";\nexport const AZURE_PROD_RUNTIME_PROFILE = APPROVED_PRODUCTION_RUNTIME_PROFILE;\n\nconst BINARY_HASH_HEX = /^[0-9a-f]{64}$/i;\nconst MRTD_HEX = /^[0-9a-f]{96}$/i;\n\nconst AZURE_PROD_RELEASE_PIN = {\n mrtd: AZURE_PROD_COORDINATOR_MRTD,\n runtimeProfile: AZURE_PROD_RUNTIME_PROFILE,\n intelRootFingerprint: INTEL_SGX_ROOT_CA_FINGERPRINT_SHA256,\n azureMaa: {\n issuer: AZURE_PROD_MAA_TRUST.issuer,\n jwksUrl: AZURE_PROD_MAA_TRUST.jwksUrl,\n policyHash: AZURE_PROD_MAA_TRUST.policyHash,\n },\n} as const;\n\nexport function assertApprovedBinaryHash(value: string): string {\n const binaryHash = typeof value === \"string\" ? value.toLowerCase() : \"\";\n if (!BINARY_HASH_HEX.test(binaryHash)) {\n throw new Error(\"an approved 64-character binary SHA-256 hash is required\");\n }\n return binaryHash;\n}\n\nexport function assertApprovedMrtd(value: string): string {\n const mrtd = typeof value === \"string\" ? value.toLowerCase() : \"\";\n if (!MRTD_HEX.test(mrtd)) {\n throw new Error(\"an approved 96-character production MRTD is required\");\n }\n return mrtd;\n}\n\n/** Build the active Azure production policy for a concrete coordinator URL. */\nexport function createAzureProductionEndpoint({\n wsUrl,\n expectedHostname,\n approvedBinaryHash,\n approvedMrtd = AZURE_PROD_COORDINATOR_MRTD,\n}: {\n readonly wsUrl: string;\n readonly expectedHostname: string;\n readonly approvedBinaryHash: string;\n readonly approvedMrtd?: string;\n}): CoordinatorEndpoint {\n const binaryHash = assertApprovedBinaryHash(approvedBinaryHash);\n const mrtd = assertApprovedMrtd(approvedMrtd);\n return {\n wsUrl,\n expectedHostname,\n releasePin: { ...AZURE_PROD_RELEASE_PIN, mrtd, binaryHash },\n requiredMode: \"prod\",\n };\n}\n\n/** Build the explicit private dev/test policy. */\nexport function createDevelopmentEndpoint({\n wsUrl,\n expectedHostname,\n allowMissingDcapCollateral,\n includeAzureMaaTrust,\n}: {\n readonly wsUrl: string;\n readonly expectedHostname: string;\n readonly allowMissingDcapCollateral?: boolean;\n readonly includeAzureMaaTrust?: boolean;\n}): CoordinatorEndpoint {\n return {\n wsUrl,\n expectedHostname,\n releasePin: {\n ...PLACEHOLDER_RELEASE_PIN,\n ...(includeAzureMaaTrust === true\n ? {\n azureMaa: {\n issuer: AZURE_PROD_MAA_TRUST.issuer,\n jwksUrl: AZURE_PROD_MAA_TRUST.jwksUrl,\n policyHash: AZURE_PROD_MAA_TRUST.policyHash,\n } satisfies AzureMaaPin,\n }\n : {}),\n ...(allowMissingDcapCollateral === true ? { allowMissingDcapCollateral: true } : {}),\n },\n requiredMode: \"dev\",\n };\n}\n","/** Build-time projection of the approved coordinator binary hash. */\n\ndeclare const __INVISIBLE_SDK_PRODUCTION_BINARY_HASH__: string | undefined;\n\nexport const APPROVED_PRODUCTION_COORDINATOR_BINARY_HASH =\n typeof __INVISIBLE_SDK_PRODUCTION_BINARY_HASH__ === \"string\"\n ? __INVISIBLE_SDK_PRODUCTION_BINARY_HASH__.toLowerCase()\n : \"\";\n","/** Build-time projection of the approved production coordinator MRTD. */\n\ndeclare const __INVISIBLE_SDK_PRODUCTION_MRTD__: string | undefined;\n\nexport const APPROVED_PRODUCTION_COORDINATOR_MRTD =\n typeof __INVISIBLE_SDK_PRODUCTION_MRTD__ === \"string\"\n ? __INVISIBLE_SDK_PRODUCTION_MRTD__.toLowerCase()\n : \"\";\n","import { APPROVED_PRODUCTION_COORDINATOR_BINARY_HASH } from \"../presets/productionBinaryHash.js\";\nimport { APPROVED_PRODUCTION_COORDINATOR_MRTD } from \"../presets/productionMrtd.js\";\nimport { APPROVED_PRODUCTION_RUNTIME_PROFILE } from \"../presets/productionRuntimeProfile.js\";\nimport type { CoordinatorRuntimeProfile } from \"../attestation/verifier.js\";\n\nexport interface PublicProductionReleasePolicy {\n readonly expectedMrtd: string;\n readonly expectedBinaryHash: string;\n readonly expectedRuntimeProfile: CoordinatorRuntimeProfile;\n}\n\n/** The build-bound production tuple used by the public session constructor. */\nexport function publicProductionReleasePolicy(): PublicProductionReleasePolicy {\n return {\n expectedMrtd: APPROVED_PRODUCTION_COORDINATOR_MRTD,\n expectedBinaryHash: APPROVED_PRODUCTION_COORDINATOR_BINARY_HASH,\n expectedRuntimeProfile: APPROVED_PRODUCTION_RUNTIME_PROFILE,\n };\n}\n","import type { Session } from \"../core/session.js\";\nimport { createAzureProductionEndpoint } from \"../presets/production.js\";\nimport { isLoopbackUrl } from \"./secureChannel.js\";\nimport { publicProductionReleasePolicy } from \"./publicReleasePolicy.js\";\nimport {\n closeSession,\n createSessionInternal,\n type CreateSessionOptions as InternalCreateSessionOptions,\n} from \"./createSession.js\";\n\nconst PUBLIC_SESSION_OPTION_KEYS = new Set([\n \"coordinatorUrl\",\n \"storage\",\n \"wallet\",\n \"clientPersistence\",\n]);\nconst PUBLIC_COORDINATOR_URL_PROTOCOL = \"wss:\";\nconst PUBLIC_COORDINATOR_URL_ERROR =\n \"public SDK createSession requires a non-loopback wss:// coordinatorUrl\";\n\nexport interface PublicCreateSessionOptions {\n readonly coordinatorUrl: string;\n readonly storage?: unknown;\n readonly wallet?: unknown;\n /** Opt into SDK-owned normal-user transfer persistence. */\n readonly clientPersistence?: boolean;\n}\n\n/**\n * Open a production-only public SDK session.\n *\n * The caller supplies only the route and public adapters. The Azure\n * production release policy is embedded by the selected SDK build.\n */\nexport async function createSession(options: PublicCreateSessionOptions): Promise<Session> {\n assertPublicOptions(options);\n const parsedUrl = parsePublicCoordinatorUrl(options.coordinatorUrl);\n const releasePolicy = publicProductionReleasePolicy();\n const endpoint = createAzureProductionEndpoint({\n wsUrl: options.coordinatorUrl,\n expectedHostname: parsedUrl.hostname,\n approvedBinaryHash: releasePolicy.expectedBinaryHash,\n approvedMrtd: releasePolicy.expectedMrtd,\n });\n\n const internalOptions: InternalCreateSessionOptions = {\n coordinator: { endpoints: [endpoint] },\n ...(options.storage === undefined ? {} : { storage: options.storage }),\n ...(options.wallet === undefined ? {} : { wallet: options.wallet }),\n ...(options.clientPersistence === undefined\n ? {}\n : { clientPersistence: options.clientPersistence }),\n };\n return createSessionInternal(internalOptions);\n}\n\nexport { closeSession };\n\nfunction assertPublicOptions(options: unknown): asserts options is PublicCreateSessionOptions {\n if (typeof options !== \"object\" || options === null || Array.isArray(options)) {\n throw new TypeError(\"public SDK createSession options must be an object\");\n }\n for (const key of Object.keys(options)) {\n if (!PUBLIC_SESSION_OPTION_KEYS.has(key)) {\n throw new Error(`public SDK createSession does not accept option ${key}`);\n }\n }\n const coordinatorUrl = (options as { coordinatorUrl?: unknown }).coordinatorUrl;\n if (typeof coordinatorUrl !== \"string\") {\n throw new TypeError(\"public SDK createSession requires coordinatorUrl\");\n }\n const clientPersistence = (options as { clientPersistence?: unknown }).clientPersistence;\n if (clientPersistence !== undefined && typeof clientPersistence !== \"boolean\") {\n throw new TypeError(\"public SDK createSession clientPersistence must be a boolean\");\n }\n}\n\nfunction parsePublicCoordinatorUrl(value: string): URL {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch (cause) {\n const error = new Error(PUBLIC_COORDINATOR_URL_ERROR);\n (error as { cause?: unknown }).cause = cause;\n throw error;\n }\n if (parsed.protocol !== PUBLIC_COORDINATOR_URL_PROTOCOL || isLoopbackUrl(value)) {\n throw new Error(PUBLIC_COORDINATOR_URL_ERROR);\n }\n return parsed;\n}\n","import type { Session } from \"../core/session.js\";\nimport type { AttestationResult } from \"../transport/handshake.js\";\nimport type { Unsubscribe } from \"../transport/types.js\";\nimport { reattestSerialized } from \"./reattest.js\";\nimport { failSessionClosed, getSessionState } from \"../session/state.js\";\nimport {\n publicProductionReleasePolicy,\n type PublicProductionReleasePolicy,\n} from \"../session/publicReleasePolicy.js\";\n\nexport type { AttestationResult } from \"../transport/handshake.js\";\n\nexport interface PublicAttestationPolicy {\n readonly expectedMrtd: string;\n readonly expectedBinaryHash?: string;\n readonly expectedRuntimeProfile?:\n | \"prod-hardened\"\n | \"prod-devnet-simplified\"\n | \"prod-devnet-simplified-locked\"\n | \"azure-tdx-v0-agentless\";\n readonly expectedRuntimeMeasurements?: {\n readonly rtmr0: string;\n readonly rtmr1: string;\n readonly rtmr2: string;\n readonly rtmr3: string;\n };\n readonly intelRootFingerprint?: string;\n readonly azureMaa?: {\n readonly expectedIssuer: string;\n readonly expectedJwksUrl: string;\n readonly expectedPolicyHash: string;\n };\n}\n\n/** Public attestation read controls. Policy construction remains internal. */\nexport const attestation = {\n productionPolicy(): PublicProductionReleasePolicy {\n return publicProductionReleasePolicy();\n },\n\n async assertValid(session: Session): Promise<AttestationResult> {\n const state = getSessionState(session);\n const endpoint = state.pool.endpoints[0]!;\n try {\n const result = await reattestSerialized(state, endpoint, state.pool.noiseTransportTimeoutMs);\n state.attestation = result;\n state.attested = true;\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n failSessionClosed(state, error);\n throw error;\n }\n },\n\n current(session: Session): AttestationResult | null {\n return getSessionState(session).attestation;\n },\n\n policy(session: Session): PublicAttestationPolicy {\n const pin = getSessionState(session).pool.endpoints[0]!.releasePin;\n return {\n expectedMrtd: pin.mrtd,\n ...(pin.binaryHash === undefined ? {} : { expectedBinaryHash: pin.binaryHash }),\n ...(pin.runtimeProfile === undefined ? {} : { expectedRuntimeProfile: pin.runtimeProfile }),\n ...(pin.runtimeMeasurements === undefined\n ? {}\n : { expectedRuntimeMeasurements: pin.runtimeMeasurements }),\n ...(pin.intelRootFingerprint === undefined\n ? {}\n : { intelRootFingerprint: pin.intelRootFingerprint }),\n ...(pin.azureMaa === undefined\n ? {}\n : {\n azureMaa: {\n expectedIssuer: pin.azureMaa.issuer,\n expectedJwksUrl: pin.azureMaa.jwksUrl,\n expectedPolicyHash: pin.azureMaa.policyHash,\n },\n }),\n };\n },\n\n onPolicyViolation(session: Session, handler: (error: Error) => void): Unsubscribe {\n const handlers = getSessionState(session).policyViolationHandlers;\n handlers.add(handler);\n return () => handlers.delete(handler);\n },\n};\n","import { NotImplementedError } from \"../core/errors.js\";\nimport type { Session } from \"../core/session.js\";\nimport { getSessionState } from \"../session/state.js\";\n\nexport interface PublicCoordinatorEndpoint {\n readonly coordinatorUrl: string;\n readonly roleHint?: \"leader\" | \"watcher\";\n readonly weight?: number;\n}\n\nexport interface CoordinatorVersion {\n readonly mode: \"prod\" | \"dev\";\n readonly protocolVersion: string;\n readonly schemaVersion: string;\n readonly hostname: string;\n readonly leaderEpoch: number;\n}\n\nexport const coordinator = {\n endpoints(session: Session): readonly PublicCoordinatorEndpoint[] {\n return getSessionState(session).pool.endpoints.map((endpoint) => ({\n coordinatorUrl: endpoint.wsUrl,\n ...(endpoint.roleHint === undefined ? {} : { roleHint: endpoint.roleHint }),\n ...(endpoint.weight === undefined ? {} : { weight: endpoint.weight }),\n }));\n },\n\n currentLeader(_session: Session): Promise<PublicCoordinatorEndpoint | null> {\n return Promise.reject(new NotImplementedError(\"coordinator.currentLeader\"));\n },\n\n version(_session: Session): Promise<CoordinatorVersion> {\n return Promise.reject(new NotImplementedError(\"coordinator.version\"));\n },\n\n forceFailover(_session: Session): Promise<void> {\n return Promise.reject(new NotImplementedError(\"coordinator.forceFailover\"));\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/version.ts","../src/core/session.ts","../src/transport/inMemoryTransport.ts","../src/presets/azure-prod-maa.generated.ts","../src/presets/productionRuntimeProfile.ts","../src/presets/production.ts","../src/presets/productionBinaryHash.ts","../src/presets/productionMrtd.ts","../src/session/publicReleasePolicy.ts","../src/session/publicSession.ts","../src/attestation/public.ts","../src/coordinator/public.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The API surface version this build implements. Bumped only on a breaking\n * surface change. See docs/sdk-specification.md section 12.\n */\nexport const apiVersion = \"v0\" as const;\n\n/** Literal type of {@link apiVersion}. */\nexport type ApiVersion = typeof apiVersion;\n","/**\n * The opaque session handle.\n *\n * A `Session` is the single stateful object the functional surface threads\n * through every call: `fn(session, args)`. It owns the transport, the\n * attestation state, and (later) the leader-epoch bookkeeping. Consumers treat\n * it as opaque - they read `session.attested` and pass it back to SDK\n * functions, but never reach inside. The internal state map and constructor\n * live alongside `createSession` (added in a later ticket); this module only\n * fixes the public shape so the rest of the surface can type against it.\n */\n\ndeclare const sessionBrand: unique symbol;\n\n/**\n * Opaque, attested session handle. Obtain one from `createSession`; pass it as\n * the first argument to every actor command. The only field consumers read is\n * {@link Session.attested}.\n */\nexport interface Session {\n /**\n * Whether the current Noise session has passed full TDX attestation. Sensitive\n * commands refuse to run until this is `true`. Re-handshake or failover resets\n * it to `false` until a fresh attestation completes.\n */\n readonly attested: boolean;\n /** @internal Opacity brand; not constructable by consumers. */\n readonly [sessionBrand]: true;\n}\n\n/** Convenience predicate mirroring {@link Session.attested}. */\nexport function isAttested(session: Session): boolean {\n return session.attested;\n}\n","/**\n * In-memory transport.\n *\n * A zero-network channel used by unit tests. It transitions straight to `open`\n * on connect. `send` delivers the raw frame bytes to an optional peer sink: the\n * WebSocket message boundary is the frame boundary, so there is no extra length\n * prefix (matching the production transport). Noise lives above this pure byte\n * channel, never inside it.\n *\n * With no peer wired in, `send` is a silent no-op (legacy stub behaviour for\n * tests that never exchange frames). A paired loopback coordinator supplies a\n * `peer` sink so a real Noise XX handshake can run in-process (see the\n * `testLoopback` fixture).\n */\n\nimport { TransportError } from \"../core/errors.js\";\nimport { createStateController } from \"./stateController.js\";\nimport type { Transport, Unsubscribe } from \"./types.js\";\n\n/** Options for {@link inMemoryTransport}. Test-only paired-loopback wiring. */\nexport interface InMemoryTransportOptions {\n /**\n * Sink for frames written via `send()`. A paired in-process coordinator sets\n * this so the client's raw bytes reach the responder. When omitted, `send`\n * is a no-op so legacy stub-only tests keep working.\n */\n readonly peer?: (frame: Uint8Array) => void;\n}\n\n/** In-memory transport with a hook to feed inbound frames into `onMessage`. */\nexport interface InMemoryTransportHandle extends Transport {\n /** Deliver a frame to this transport's `onMessage` listeners (peer -> client). */\n readonly deliver: (frame: Uint8Array) => void;\n}\n\nexport function inMemoryTransport(options: InMemoryTransportOptions = {}): InMemoryTransportHandle {\n const sc = createStateController(\"idle\");\n const messageListeners = new Set<(frame: Uint8Array) => void>();\n\n return {\n state: () => sc.get(),\n onStateChange: (listener) => sc.onChange(listener),\n onMessage(listener): Unsubscribe {\n messageListeners.add(listener);\n return () => messageListeners.delete(listener);\n },\n deliver(frame: Uint8Array): void {\n for (const listener of messageListeners) listener(frame);\n },\n async connect(signal) {\n if (signal?.aborted) {\n throw new TransportError(\"CONNECTION_LOST\", \"connect aborted before it started\");\n }\n if (sc.get() === \"open\") return;\n sc.set(\"connecting\");\n sc.set(\"open\");\n },\n send(frame: Uint8Array): void {\n if (sc.get() !== \"open\") {\n throw new TransportError(\"CONNECTION_LOST\", \"cannot send on a non-open transport\");\n }\n options.peer?.(frame);\n },\n close() {\n if (sc.get() === \"closed\") return;\n sc.set(\"closing\");\n sc.set(\"closed\");\n },\n };\n}\n","// Generated by npm run release:trust-policy:generate-sdk. Do not edit.\nexport const AZURE_PROD_MAA_TRUST = {\n issuer: \"https://sharedweu.weu.attest.azure.net\",\n jwksUrl: \"https://sharedweu.weu.attest.azure.net/certs\",\n policyHash: \"9NY0VnTQ-IiBriBplVUpFbczcDaEBUwsiFYAzHu_gco\",\n trustSetVersion: \"azure-prod-maa-v1\",\n} as const;\n","/** Build-time projection of the approved production runtime profile. */\n\nexport const DEFAULT_AZURE_PROD_RUNTIME_PROFILE = \"prod-devnet-simplified\" as const;\nexport const PROD_HARDENED_RUNTIME_PROFILE = \"prod-hardened\" as const;\nexport const PROD_DEVNET_SIMPLIFIED_RUNTIME_PROFILE = \"prod-devnet-simplified\" as const;\nexport const PROD_DEVNET_SIMPLIFIED_LOCKED_RUNTIME_PROFILE =\n \"prod-devnet-simplified-locked\" as const;\n\nexport const PROD_DEVNET_PREMIUM_LOCKED_RUNTIME_PROFILE = \"prod-devnet-premium-locked\" as const;\n\ndeclare const __INVISIBLE_SDK_PRODUCTION_RUNTIME_PROFILE__: string | undefined;\n\nconst configuredRuntimeProfile =\n typeof __INVISIBLE_SDK_PRODUCTION_RUNTIME_PROFILE__ === \"string\"\n ? __INVISIBLE_SDK_PRODUCTION_RUNTIME_PROFILE__\n : \"\";\n\nexport const APPROVED_PRODUCTION_RUNTIME_PROFILE =\n configuredRuntimeProfile === PROD_HARDENED_RUNTIME_PROFILE ||\n configuredRuntimeProfile === PROD_DEVNET_SIMPLIFIED_RUNTIME_PROFILE ||\n configuredRuntimeProfile === PROD_DEVNET_SIMPLIFIED_LOCKED_RUNTIME_PROFILE ||\n configuredRuntimeProfile === PROD_DEVNET_PREMIUM_LOCKED_RUNTIME_PROFILE\n ? configuredRuntimeProfile\n : DEFAULT_AZURE_PROD_RUNTIME_PROFILE;\n","import { INTEL_SGX_ROOT_CA_FINGERPRINT_SHA256 } from \"../attestation/verifier.js\";\nimport type {\n AzureMaaPin,\n CoordinatorEndpoint,\n CoordinatorReleasePin,\n} from \"../schemas/types.generated.js\";\nimport { AZURE_PROD_MAA_TRUST } from \"./azure-prod-maa.generated.js\";\nimport { APPROVED_PRODUCTION_RUNTIME_PROFILE } from \"./productionRuntimeProfile.js\";\n\nexport const LOCAL_DEV_RELEASE_PIN_MRTD = \"local-dev-no-mrtd\";\n\nexport const PLACEHOLDER_RELEASE_PIN = {\n mrtd: \"\",\n intelRootFingerprint: \"\",\n} as const satisfies CoordinatorReleasePin;\n\nexport const AZURE_PROD_COORDINATOR_MRTD =\n \"a2e61f1316e9e367e9c1f7a0adc98c48eb13875c399c85d286cee5ea2b05e57f2df9f61d903b0ae7ac5607d843dfffc1\";\nexport const AZURE_PROD_RUNTIME_PROFILE = APPROVED_PRODUCTION_RUNTIME_PROFILE;\n\nconst BINARY_HASH_HEX = /^[0-9a-f]{64}$/i;\nconst MRTD_HEX = /^[0-9a-f]{96}$/i;\n\nconst AZURE_PROD_RELEASE_PIN = {\n mrtd: AZURE_PROD_COORDINATOR_MRTD,\n runtimeProfile: AZURE_PROD_RUNTIME_PROFILE,\n intelRootFingerprint: INTEL_SGX_ROOT_CA_FINGERPRINT_SHA256,\n azureMaa: {\n issuer: AZURE_PROD_MAA_TRUST.issuer,\n jwksUrl: AZURE_PROD_MAA_TRUST.jwksUrl,\n policyHash: AZURE_PROD_MAA_TRUST.policyHash,\n },\n} as const;\n\nexport function assertApprovedBinaryHash(value: string): string {\n const binaryHash = typeof value === \"string\" ? value.toLowerCase() : \"\";\n if (!BINARY_HASH_HEX.test(binaryHash)) {\n throw new Error(\"an approved 64-character binary SHA-256 hash is required\");\n }\n return binaryHash;\n}\n\nexport function assertApprovedMrtd(value: string): string {\n const mrtd = typeof value === \"string\" ? value.toLowerCase() : \"\";\n if (!MRTD_HEX.test(mrtd)) {\n throw new Error(\"an approved 96-character production MRTD is required\");\n }\n return mrtd;\n}\n\n/** Build the active Azure production policy for a concrete coordinator URL. */\nexport function createAzureProductionEndpoint({\n wsUrl,\n expectedHostname,\n approvedBinaryHash,\n approvedMrtd = AZURE_PROD_COORDINATOR_MRTD,\n}: {\n readonly wsUrl: string;\n readonly expectedHostname: string;\n readonly approvedBinaryHash: string;\n readonly approvedMrtd?: string;\n}): CoordinatorEndpoint {\n const binaryHash = assertApprovedBinaryHash(approvedBinaryHash);\n const mrtd = assertApprovedMrtd(approvedMrtd);\n return {\n wsUrl,\n expectedHostname,\n releasePin: { ...AZURE_PROD_RELEASE_PIN, mrtd, binaryHash },\n requiredMode: \"prod\",\n };\n}\n\n/** Build the explicit private dev/test policy. */\nexport function createDevelopmentEndpoint({\n wsUrl,\n expectedHostname,\n allowMissingDcapCollateral,\n includeAzureMaaTrust,\n}: {\n readonly wsUrl: string;\n readonly expectedHostname: string;\n readonly allowMissingDcapCollateral?: boolean;\n readonly includeAzureMaaTrust?: boolean;\n}): CoordinatorEndpoint {\n return {\n wsUrl,\n expectedHostname,\n releasePin: {\n ...PLACEHOLDER_RELEASE_PIN,\n ...(includeAzureMaaTrust === true\n ? {\n azureMaa: {\n issuer: AZURE_PROD_MAA_TRUST.issuer,\n jwksUrl: AZURE_PROD_MAA_TRUST.jwksUrl,\n policyHash: AZURE_PROD_MAA_TRUST.policyHash,\n } satisfies AzureMaaPin,\n }\n : {}),\n ...(allowMissingDcapCollateral === true ? { allowMissingDcapCollateral: true } : {}),\n },\n requiredMode: \"dev\",\n };\n}\n","/** Build-time projection of the approved coordinator binary hash. */\n\ndeclare const __INVISIBLE_SDK_PRODUCTION_BINARY_HASH__: string | undefined;\n\nexport const APPROVED_PRODUCTION_COORDINATOR_BINARY_HASH =\n typeof __INVISIBLE_SDK_PRODUCTION_BINARY_HASH__ === \"string\"\n ? __INVISIBLE_SDK_PRODUCTION_BINARY_HASH__.toLowerCase()\n : \"\";\n","/** Build-time projection of the approved production coordinator MRTD. */\n\ndeclare const __INVISIBLE_SDK_PRODUCTION_MRTD__: string | undefined;\n\nexport const APPROVED_PRODUCTION_COORDINATOR_MRTD =\n typeof __INVISIBLE_SDK_PRODUCTION_MRTD__ === \"string\"\n ? __INVISIBLE_SDK_PRODUCTION_MRTD__.toLowerCase()\n : \"\";\n","import { APPROVED_PRODUCTION_COORDINATOR_BINARY_HASH } from \"../presets/productionBinaryHash.js\";\nimport { APPROVED_PRODUCTION_COORDINATOR_MRTD } from \"../presets/productionMrtd.js\";\nimport { APPROVED_PRODUCTION_RUNTIME_PROFILE } from \"../presets/productionRuntimeProfile.js\";\nimport type { CoordinatorRuntimeProfile } from \"../attestation/verifier.js\";\n\nexport interface PublicProductionReleasePolicy {\n readonly expectedMrtd: string;\n readonly expectedBinaryHash: string;\n readonly expectedRuntimeProfile: CoordinatorRuntimeProfile;\n}\n\n/** The build-bound production tuple used by the public session constructor. */\nexport function publicProductionReleasePolicy(): PublicProductionReleasePolicy {\n return {\n expectedMrtd: APPROVED_PRODUCTION_COORDINATOR_MRTD,\n expectedBinaryHash: APPROVED_PRODUCTION_COORDINATOR_BINARY_HASH,\n expectedRuntimeProfile: APPROVED_PRODUCTION_RUNTIME_PROFILE,\n };\n}\n","import type { Session } from \"../core/session.js\";\nimport { createAzureProductionEndpoint } from \"../presets/production.js\";\nimport { isLoopbackUrl } from \"./secureChannel.js\";\nimport { publicProductionReleasePolicy } from \"./publicReleasePolicy.js\";\nimport {\n closeSession,\n createSessionInternal,\n type CreateSessionOptions as InternalCreateSessionOptions,\n} from \"./createSession.js\";\n\nconst PUBLIC_SESSION_OPTION_KEYS = new Set([\n \"coordinatorUrl\",\n \"storage\",\n \"wallet\",\n \"clientPersistence\",\n]);\nconst PUBLIC_COORDINATOR_URL_PROTOCOL = \"wss:\";\nconst PUBLIC_COORDINATOR_URL_ERROR =\n \"public SDK createSession requires a non-loopback wss:// coordinatorUrl\";\n\nexport interface PublicCreateSessionOptions {\n readonly coordinatorUrl: string;\n readonly storage?: unknown;\n readonly wallet?: unknown;\n /** Opt into SDK-owned normal-user transfer persistence. */\n readonly clientPersistence?: boolean;\n}\n\n/**\n * Open a production-only public SDK session.\n *\n * The caller supplies only the route and public adapters. The Azure\n * production release policy is embedded by the selected SDK build.\n */\nexport async function createSession(options: PublicCreateSessionOptions): Promise<Session> {\n assertPublicOptions(options);\n const parsedUrl = parsePublicCoordinatorUrl(options.coordinatorUrl);\n const releasePolicy = publicProductionReleasePolicy();\n const endpoint = createAzureProductionEndpoint({\n wsUrl: options.coordinatorUrl,\n expectedHostname: parsedUrl.hostname,\n approvedBinaryHash: releasePolicy.expectedBinaryHash,\n approvedMrtd: releasePolicy.expectedMrtd,\n });\n\n const internalOptions: InternalCreateSessionOptions = {\n coordinator: { endpoints: [endpoint] },\n ...(options.storage === undefined ? {} : { storage: options.storage }),\n ...(options.wallet === undefined ? {} : { wallet: options.wallet }),\n ...(options.clientPersistence === undefined\n ? {}\n : { clientPersistence: options.clientPersistence }),\n };\n return createSessionInternal(internalOptions);\n}\n\nexport { closeSession };\n\nfunction assertPublicOptions(options: unknown): asserts options is PublicCreateSessionOptions {\n if (typeof options !== \"object\" || options === null || Array.isArray(options)) {\n throw new TypeError(\"public SDK createSession options must be an object\");\n }\n for (const key of Object.keys(options)) {\n if (!PUBLIC_SESSION_OPTION_KEYS.has(key)) {\n throw new Error(`public SDK createSession does not accept option ${key}`);\n }\n }\n const coordinatorUrl = (options as { coordinatorUrl?: unknown }).coordinatorUrl;\n if (typeof coordinatorUrl !== \"string\") {\n throw new TypeError(\"public SDK createSession requires coordinatorUrl\");\n }\n const clientPersistence = (options as { clientPersistence?: unknown }).clientPersistence;\n if (clientPersistence !== undefined && typeof clientPersistence !== \"boolean\") {\n throw new TypeError(\"public SDK createSession clientPersistence must be a boolean\");\n }\n}\n\nfunction parsePublicCoordinatorUrl(value: string): URL {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch (cause) {\n const error = new Error(PUBLIC_COORDINATOR_URL_ERROR);\n (error as { cause?: unknown }).cause = cause;\n throw error;\n }\n if (parsed.protocol !== PUBLIC_COORDINATOR_URL_PROTOCOL || isLoopbackUrl(value)) {\n throw new Error(PUBLIC_COORDINATOR_URL_ERROR);\n }\n return parsed;\n}\n","import type { Session } from \"../core/session.js\";\nimport type { AttestationResult } from \"../transport/handshake.js\";\nimport type { Unsubscribe } from \"../transport/types.js\";\nimport { reattestSerialized } from \"./reattest.js\";\nimport { failSessionClosed, getSessionState } from \"../session/state.js\";\nimport {\n publicProductionReleasePolicy,\n type PublicProductionReleasePolicy,\n} from \"../session/publicReleasePolicy.js\";\n\nexport type { AttestationResult } from \"../transport/handshake.js\";\n\nexport interface PublicAttestationPolicy {\n readonly expectedMrtd: string;\n readonly expectedBinaryHash?: string;\n readonly expectedRuntimeProfile?:\n | \"prod-hardened\"\n | \"prod-devnet-simplified\"\n | \"prod-devnet-simplified-locked\"\n | \"prod-devnet-premium-locked\"\n | \"azure-tdx-v0-agentless\";\n readonly expectedRuntimeMeasurements?: {\n readonly rtmr0: string;\n readonly rtmr1: string;\n readonly rtmr2: string;\n readonly rtmr3: string;\n };\n readonly intelRootFingerprint?: string;\n readonly azureMaa?: {\n readonly expectedIssuer: string;\n readonly expectedJwksUrl: string;\n readonly expectedPolicyHash: string;\n };\n}\n\n/** Public attestation read controls. Policy construction remains internal. */\nexport const attestation = {\n productionPolicy(): PublicProductionReleasePolicy {\n return publicProductionReleasePolicy();\n },\n\n async assertValid(session: Session): Promise<AttestationResult> {\n const state = getSessionState(session);\n const endpoint = state.pool.endpoints[0]!;\n try {\n const result = await reattestSerialized(state, endpoint, state.pool.noiseTransportTimeoutMs);\n state.attestation = result;\n state.attested = true;\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n failSessionClosed(state, error);\n throw error;\n }\n },\n\n current(session: Session): AttestationResult | null {\n return getSessionState(session).attestation;\n },\n\n policy(session: Session): PublicAttestationPolicy {\n const pin = getSessionState(session).pool.endpoints[0]!.releasePin;\n return {\n expectedMrtd: pin.mrtd,\n ...(pin.binaryHash === undefined ? {} : { expectedBinaryHash: pin.binaryHash }),\n ...(pin.runtimeProfile === undefined ? {} : { expectedRuntimeProfile: pin.runtimeProfile }),\n ...(pin.runtimeMeasurements === undefined\n ? {}\n : { expectedRuntimeMeasurements: pin.runtimeMeasurements }),\n ...(pin.intelRootFingerprint === undefined\n ? {}\n : { intelRootFingerprint: pin.intelRootFingerprint }),\n ...(pin.azureMaa === undefined\n ? {}\n : {\n azureMaa: {\n expectedIssuer: pin.azureMaa.issuer,\n expectedJwksUrl: pin.azureMaa.jwksUrl,\n expectedPolicyHash: pin.azureMaa.policyHash,\n },\n }),\n };\n },\n\n onPolicyViolation(session: Session, handler: (error: Error) => void): Unsubscribe {\n const handlers = getSessionState(session).policyViolationHandlers;\n handlers.add(handler);\n return () => handlers.delete(handler);\n },\n};\n","import { NotImplementedError } from \"../core/errors.js\";\nimport type { Session } from \"../core/session.js\";\nimport { getSessionState } from \"../session/state.js\";\n\nexport interface PublicCoordinatorEndpoint {\n readonly coordinatorUrl: string;\n readonly roleHint?: \"leader\" | \"watcher\";\n readonly weight?: number;\n}\n\nexport interface CoordinatorVersion {\n readonly mode: \"prod\" | \"dev\";\n readonly protocolVersion: string;\n readonly schemaVersion: string;\n readonly hostname: string;\n readonly leaderEpoch: number;\n}\n\nexport const coordinator = {\n endpoints(session: Session): readonly PublicCoordinatorEndpoint[] {\n return getSessionState(session).pool.endpoints.map((endpoint) => ({\n coordinatorUrl: endpoint.wsUrl,\n ...(endpoint.roleHint === undefined ? {} : { roleHint: endpoint.roleHint }),\n ...(endpoint.weight === undefined ? {} : { weight: endpoint.weight }),\n }));\n },\n\n currentLeader(_session: Session): Promise<PublicCoordinatorEndpoint | null> {\n return Promise.reject(new NotImplementedError(\"coordinator.currentLeader\"));\n },\n\n version(_session: Session): Promise<CoordinatorVersion> {\n return Promise.reject(new NotImplementedError(\"coordinator.version\"));\n },\n\n forceFailover(_session: Session): Promise<void> {\n return Promise.reject(new NotImplementedError(\"coordinator.forceFailover\"));\n },\n};\n"]}
|
package/dist/lp.d.ts
CHANGED
|
@@ -19,6 +19,12 @@ declare function bytesToHex(bytes: Uint8Array): string;
|
|
|
19
19
|
declare function signLpCommandBytes(auth: LpPositionCodeAuth, bytes: Uint8Array): Promise<Uint8Array>;
|
|
20
20
|
|
|
21
21
|
type SourceLiquidityUse = "not_materialized" | "available" | "locked_for_payout" | "pending_finality" | "spent" | "released";
|
|
22
|
+
type LpFeePolicy = {
|
|
23
|
+
readonly version: 1;
|
|
24
|
+
readonly profile: "internal" | "partner";
|
|
25
|
+
readonly commission_bps: 0 | 6000;
|
|
26
|
+
readonly policy_hash: string;
|
|
27
|
+
};
|
|
22
28
|
type LpWithdrawalMode = "exact" | "max_available";
|
|
23
29
|
type LpInventoryShard = {
|
|
24
30
|
kind: "lp";
|
|
@@ -34,6 +40,8 @@ type LpInventoryShard = {
|
|
|
34
40
|
coolingUntilMs?: number;
|
|
35
41
|
};
|
|
36
42
|
type LpPositionView = {
|
|
43
|
+
feePolicy?: LpFeePolicy;
|
|
44
|
+
lpFeePolicyVersion?: 1;
|
|
37
45
|
id: string;
|
|
38
46
|
status: "dkg_pending" | "active" | "withdrawing" | "closed";
|
|
39
47
|
targetShardCount: number;
|
|
@@ -41,6 +49,7 @@ type LpPositionView = {
|
|
|
41
49
|
refillPublicKey: string;
|
|
42
50
|
withdrawalCommitment: string;
|
|
43
51
|
committedLamports: number;
|
|
52
|
+
/** Historical gross fees. With feePolicy, use actorSync.lifetimeEarnedLamports for the LP net entitlement. */
|
|
44
53
|
earnedLamports: number;
|
|
45
54
|
refillThreshold: number;
|
|
46
55
|
shards: LpInventoryShard[];
|
|
@@ -57,15 +66,25 @@ type LpEconomicReturnSummary = {
|
|
|
57
66
|
providerRewardLamports: string;
|
|
58
67
|
sourceExpenseCompensationLamports: string;
|
|
59
68
|
chargedReimbursementLossLamports: string;
|
|
60
|
-
/** Provider reward minus charged losses; nominal
|
|
69
|
+
/** Provider reward minus charged losses and policy commission; nominal expense repayments are excluded. */
|
|
61
70
|
netEconomicReturnLamports: string;
|
|
62
71
|
};
|
|
63
72
|
type LpActorSyncView = {
|
|
73
|
+
feePolicy?: LpFeePolicy;
|
|
74
|
+
feeBasisRevision?: number;
|
|
75
|
+
/** Cumulative assessed plus unassessed surviving confirmed provider-fee basis. */
|
|
76
|
+
grossFeeLamports?: number;
|
|
77
|
+
/** Cumulative assessed commission plus the projected commission on unassessed fees. */
|
|
78
|
+
protocolCommissionLamports?: number;
|
|
79
|
+
/** Cumulative sub-rent commission paid to this LP on full drains instead of the protocol. */
|
|
80
|
+
waivedProtocolCommissionLamports?: number;
|
|
64
81
|
economicReturn?: LpEconomicReturnSummary;
|
|
65
82
|
lpPositionId: string;
|
|
66
83
|
status: "idle" | "settling" | "reimbursement_due";
|
|
67
84
|
sourceLiquidityUse: SourceLiquidityUse;
|
|
68
85
|
redeemableProjectionAvailable: boolean;
|
|
86
|
+
/** Net LP-owned principal and confirmed fees, including temporarily engaged capital. */
|
|
87
|
+
totalNetFundsLamports?: number;
|
|
69
88
|
redeemablePrincipalLamports: number;
|
|
70
89
|
redeemableFeeLamports: number;
|
|
71
90
|
lifetimeEarnedLamports: number;
|
|
@@ -93,6 +112,8 @@ type LpActorSyncView = {
|
|
|
93
112
|
updatedAtMs: number;
|
|
94
113
|
};
|
|
95
114
|
type LpRedemptionHistoryView = {
|
|
115
|
+
feePolicyHash?: string;
|
|
116
|
+
feeBasisRevision?: number;
|
|
96
117
|
redemptionId: string;
|
|
97
118
|
state: "requested" | "match_requested" | "reserved" | "pending" | "confirmed" | "rejected";
|
|
98
119
|
withdrawalMode?: LpWithdrawalMode;
|
|
@@ -130,10 +151,12 @@ type LpPositionCreationIntent = {
|
|
|
130
151
|
};
|
|
131
152
|
type LpCreationAuthorization = {
|
|
132
153
|
readonly authorizationId: string;
|
|
154
|
+
readonly feePolicy?: LpFeePolicy;
|
|
133
155
|
};
|
|
134
156
|
type OpenLpPositionInput = {
|
|
135
157
|
lpPositionId: string;
|
|
136
158
|
creationAuthorizationId: string;
|
|
159
|
+
feePolicy?: LpFeePolicy;
|
|
137
160
|
authPublicKey: number[];
|
|
138
161
|
refillPublicKey: number[];
|
|
139
162
|
withdrawalCommitment: number[];
|
|
@@ -171,6 +194,8 @@ type FinalizeLpDkgBatchInput = {
|
|
|
171
194
|
finalizedAtMs: number;
|
|
172
195
|
};
|
|
173
196
|
type LpWithdrawalExecutionView = {
|
|
197
|
+
feePolicyHash?: string;
|
|
198
|
+
feeBasisRevision?: number;
|
|
174
199
|
withdrawalId: string;
|
|
175
200
|
txSignatures: string[];
|
|
176
201
|
acceptedLamports: number;
|
|
@@ -181,7 +206,7 @@ type LpDkgClient = {
|
|
|
181
206
|
initDkg(input: {
|
|
182
207
|
lpPositionId: string;
|
|
183
208
|
index: number;
|
|
184
|
-
}, auth: LpPositionCodeAuth): Promise<{
|
|
209
|
+
}, auth: LpPositionCodeAuth, options?: Pick<LpPositionRequestOptions, "signal">): Promise<{
|
|
185
210
|
sessionId: string;
|
|
186
211
|
}>;
|
|
187
212
|
abortDkgSessions(lpPositionId: string, auth: LpPositionCodeAuth): Promise<{
|
|
@@ -190,7 +215,7 @@ type LpDkgClient = {
|
|
|
190
215
|
dkgRound1(input: {
|
|
191
216
|
sessionId: string;
|
|
192
217
|
package: number[];
|
|
193
|
-
}, auth: LpPositionCodeAuth): Promise<{
|
|
218
|
+
}, auth: LpPositionCodeAuth, options?: Pick<LpPositionRequestOptions, "signal">): Promise<{
|
|
194
219
|
package: Uint8Array;
|
|
195
220
|
round2ForLp: Uint8Array;
|
|
196
221
|
}>;
|
|
@@ -198,7 +223,7 @@ type LpDkgClient = {
|
|
|
198
223
|
sessionId: string;
|
|
199
224
|
package: number[];
|
|
200
225
|
delegatedShare: number[];
|
|
201
|
-
}, auth: LpPositionCodeAuth): Promise<{
|
|
226
|
+
}, auth: LpPositionCodeAuth, options?: Pick<LpPositionRequestOptions, "signal">): Promise<{
|
|
202
227
|
address: string;
|
|
203
228
|
jointPubkey: Uint8Array;
|
|
204
229
|
shardId: string;
|
|
@@ -234,6 +259,8 @@ type LpCoordinatorClient = LpDkgClient & {
|
|
|
234
259
|
earnedFeeLamports: number;
|
|
235
260
|
withdrawalMode: LpWithdrawalMode;
|
|
236
261
|
requestedAtMs: number;
|
|
262
|
+
feePolicyHash?: string;
|
|
263
|
+
feeBasisRevision?: number;
|
|
237
264
|
allowManyToOne?: boolean;
|
|
238
265
|
}, auth: LpPositionCodeAuth): Promise<LpWithdrawalExecutionView>;
|
|
239
266
|
};
|
|
@@ -243,6 +270,11 @@ interface LpPositionRequestOptions {
|
|
|
243
270
|
readonly timeoutMs?: number;
|
|
244
271
|
}
|
|
245
272
|
|
|
273
|
+
/** Invalid optional totals must not discard the position or its authorities. */
|
|
274
|
+
declare function normalizeLpActorSync(sync: LpActorSyncView): LpActorSyncView;
|
|
275
|
+
/** Keep one coherent actor projection when concurrent reads arrive out of order. */
|
|
276
|
+
declare function mergeLpActorSync(previous: LpActorSyncView | undefined, next: LpActorSyncView | undefined): LpActorSyncView | undefined;
|
|
277
|
+
|
|
246
278
|
declare const LP_REDEMPTION_RECONCILING_MESSAGE = "LP redemption is still settling on the coordinator; it will reconcile from sync";
|
|
247
279
|
declare const LP_MISSING_POSITION_CODE_MESSAGE = "Save or recover the LP Position Code before using LP funds";
|
|
248
280
|
declare const LP_FEE_SOURCE_COUNT_UNAVAILABLE_MESSAGE = "LP earned-fee source count is not available; pass allowManyToOne: true to acknowledge many-to-one withdrawal risk";
|
|
@@ -310,6 +342,8 @@ interface RefillArgs {
|
|
|
310
342
|
readonly workerFactory?: () => Worker;
|
|
311
343
|
}
|
|
312
344
|
interface WithdrawalExecution {
|
|
345
|
+
readonly feePolicyHash?: string;
|
|
346
|
+
readonly feeBasisRevision?: number;
|
|
313
347
|
readonly withdrawalId: string;
|
|
314
348
|
readonly txSignatures: string[];
|
|
315
349
|
readonly acceptedLamports?: number;
|
|
@@ -317,6 +351,8 @@ interface WithdrawalExecution {
|
|
|
317
351
|
readonly acceptedEarnedFeeLamports?: number;
|
|
318
352
|
}
|
|
319
353
|
interface LpWithdrawalRecord {
|
|
354
|
+
readonly feePolicyHash?: string;
|
|
355
|
+
readonly feeBasisRevision?: number;
|
|
320
356
|
readonly redemptionId: string;
|
|
321
357
|
readonly lpPositionId: string;
|
|
322
358
|
readonly requestedAt: number;
|
|
@@ -414,6 +450,8 @@ declare const LP_COMMAND_REQUEST_TIMEOUT_MS = 30000;
|
|
|
414
450
|
declare const LP_DKG_ABORT_REQUEST_TIMEOUT_MS = 10000;
|
|
415
451
|
type LpCoordinatorClientOptions = {
|
|
416
452
|
readonly reconnectSession?: () => Promise<Session>;
|
|
453
|
+
/** Cancels this client's work, never its shared Session or position-scoped DKG cleanup. */
|
|
454
|
+
readonly signal?: AbortSignal;
|
|
417
455
|
};
|
|
418
456
|
declare function createLpCoordinatorClient(session: Session, options?: LpCoordinatorClientOptions): LpCoordinatorClient;
|
|
419
457
|
|
|
@@ -432,12 +470,15 @@ type CreateLpDkgBatchInput = {
|
|
|
432
470
|
workerFactory?: () => Worker;
|
|
433
471
|
useDeterministicTestAddresses?: boolean;
|
|
434
472
|
onProgress?: (progress: LpDkgProgress) => void;
|
|
473
|
+
signal?: AbortSignal;
|
|
435
474
|
};
|
|
436
475
|
declare const LP_DKG_WORKER_REQUEST_TIMEOUT_MS = 30000;
|
|
437
476
|
declare const LP_DKG_WORKER_REQUEST_TIMEOUT_MESSAGE = "LP DKG worker request timed out";
|
|
438
477
|
declare const LP_DKG_ABORT_CLEANUP_TIMEOUT_MS = 10000;
|
|
439
478
|
declare function createLpDkgBatch(input: CreateLpDkgBatchInput): Promise<string[]>;
|
|
440
479
|
|
|
480
|
+
declare function validateLpPositionFeePolicy(position: LpPositionView, previous?: LpPositionView): void;
|
|
481
|
+
|
|
441
482
|
declare function createPosition(session: Session, args: CreatePositionArgs): Promise<CreatePositionResult>;
|
|
442
483
|
declare function recoverPosition(session: Session, args: RecoverPositionArgs): Promise<LpPositionView>;
|
|
443
484
|
declare function confirmPositionCodeSaved(session: Session, positionId: string): void;
|
|
@@ -459,4 +500,4 @@ declare function withdrawFees(session: Session, positionId: string, args: {
|
|
|
459
500
|
}): Promise<never>;
|
|
460
501
|
declare function listPositions(session: Session): Promise<LpPositionView[]>;
|
|
461
502
|
|
|
462
|
-
export { type CompleteDkgBatchOptions, type CreateLpDkgBatchInput, type CreatePositionArgs, type CreatePositionResult, type FinalizeLpDkgBatchInput, type FundingConfirmationInput, type InitialFundingPlan, LP_COMMAND_REQUEST_TIMEOUT_MS, LP_DKG_ABORT_CLEANUP_TIMEOUT_MS, LP_DKG_ABORT_REQUEST_TIMEOUT_MS, LP_DKG_WORKER_REQUEST_TIMEOUT_MESSAGE, LP_DKG_WORKER_REQUEST_TIMEOUT_MS, LP_FEE_SOURCE_COUNT_UNAVAILABLE_MESSAGE, LP_MISSING_POSITION_CODE_MESSAGE, LP_REDEMPTION_RECONCILING_MESSAGE, type LpActorSyncView, type LpCoordinatorClient, type LpCoordinatorClientOptions, type LpCreationAuthorization, type LpCreationSigner, type LpDkgClient, type LpDkgProgress, type LpEconomicReturnSummary, type LpInventoryShard, type LpLifecycleClient, type LpLifecycleDkgProgress, type LpLifecycleRuntime, type LpPositionCode, type LpPositionCodeAuth, type LpPositionCreationIntent, type LpPositionRequestOptions, type LpPositionView, type LpRedemptionHistoryView, type LpRedemptionPermission, type LpTopUpRequest, type LpWithdrawalExecutionView, type LpWithdrawalMode, type LpWithdrawalPlanPreview, type LpWithdrawalPlanPreviewArgs, type LpWithdrawalRecord, type OpenLpPositionInput, type RecoverPositionArgs, type RefillArgs, type RefillLpPositionInput, type SourceLiquidityUse, type WaitForTopUpOptions, type WaitForWithdrawalConfirmationOptions, type WithdrawPositionArgs, type WithdrawPositionResult, type WithdrawalConfirmation, type WithdrawalExecution, bytesToHex, completeDkgBatch, confirmPositionCodeSaved, createLpCoordinatorClient, createLpDkgBatch, createLpLifecycleClient, createPosition, defaultLpLifecycleClient, deriveLpPositionCodeAuth, generateLpPositionCode, isLpPositionAuthMissingError, isLpRedemptionReconcilingError, listPositions, normalizeLpPositionCode, prepareInitialFunding, prepareTopUp, previewLpWithdrawalPlan, reconcileFunding, recoverPosition, refill, refreshPosition, signLpCommandBytes, waitForTopUp, waitForWithdrawalConfirmation, withdrawFees, withdrawPosition };
|
|
503
|
+
export { type CompleteDkgBatchOptions, type CreateLpDkgBatchInput, type CreatePositionArgs, type CreatePositionResult, type FinalizeLpDkgBatchInput, type FundingConfirmationInput, type InitialFundingPlan, LP_COMMAND_REQUEST_TIMEOUT_MS, LP_DKG_ABORT_CLEANUP_TIMEOUT_MS, LP_DKG_ABORT_REQUEST_TIMEOUT_MS, LP_DKG_WORKER_REQUEST_TIMEOUT_MESSAGE, LP_DKG_WORKER_REQUEST_TIMEOUT_MS, LP_FEE_SOURCE_COUNT_UNAVAILABLE_MESSAGE, LP_MISSING_POSITION_CODE_MESSAGE, LP_REDEMPTION_RECONCILING_MESSAGE, type LpActorSyncView, type LpCoordinatorClient, type LpCoordinatorClientOptions, type LpCreationAuthorization, type LpCreationSigner, type LpDkgClient, type LpDkgProgress, type LpEconomicReturnSummary, type LpFeePolicy, type LpInventoryShard, type LpLifecycleClient, type LpLifecycleDkgProgress, type LpLifecycleRuntime, type LpPositionCode, type LpPositionCodeAuth, type LpPositionCreationIntent, type LpPositionRequestOptions, type LpPositionView, type LpRedemptionHistoryView, type LpRedemptionPermission, type LpTopUpRequest, type LpWithdrawalExecutionView, type LpWithdrawalMode, type LpWithdrawalPlanPreview, type LpWithdrawalPlanPreviewArgs, type LpWithdrawalRecord, type OpenLpPositionInput, type RecoverPositionArgs, type RefillArgs, type RefillLpPositionInput, type SourceLiquidityUse, type WaitForTopUpOptions, type WaitForWithdrawalConfirmationOptions, type WithdrawPositionArgs, type WithdrawPositionResult, type WithdrawalConfirmation, type WithdrawalExecution, bytesToHex, completeDkgBatch, confirmPositionCodeSaved, createLpCoordinatorClient, createLpDkgBatch, createLpLifecycleClient, createPosition, defaultLpLifecycleClient, deriveLpPositionCodeAuth, generateLpPositionCode, isLpPositionAuthMissingError, isLpRedemptionReconcilingError, listPositions, mergeLpActorSync, normalizeLpActorSync, normalizeLpPositionCode, prepareInitialFunding, prepareTopUp, previewLpWithdrawalPlan, reconcileFunding, recoverPosition, refill, refreshPosition, signLpCommandBytes, validateLpPositionFeePolicy, waitForTopUp, waitForWithdrawalConfirmation, withdrawFees, withdrawPosition };
|