@aep-foundation/agent 0.1.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/CHANGELOG.md +17 -0
- package/LICENSE +21 -0
- package/README.md +104 -0
- package/dist/index.cjs +1024 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +276 -0
- package/dist/index.d.ts +276 -0
- package/dist/index.js +997 -0
- package/dist/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n AEP_AUTH_SCHEME,\n AEP_AUTHENTICATED_COMMANDS,\n AEP_BUILT_IN_GRANT_TYPES,\n AEP_MEDIA_TYPE,\n AEP_SIGNING_ALGORITHMS,\n AEP_WELL_KNOWN_PATH,\n commandPathFromInspect,\n parseBuiltInGrantResponse,\n parseClientAssertionClaims,\n parseEnrollResponse,\n parseGrantRequest,\n parseInspectDocument,\n parseProblemDetails,\n parseRevokeRequest,\n parseRevokeResponse,\n parseStatusResponse,\n signClientAssertionJwt\n} from \"@aep-foundation/core\";\nimport {\n createPlatformProvisionRequest,\n createPlatformSignRequest\n} from \"@aep-foundation/platform\";\nimport type {\n AepBuiltInGrantResponse,\n AepAuthenticatedCommand,\n AepClientAssertionClaims,\n AepHttpCommand,\n AepGrantType,\n AepProblemDetails,\n AepSigningAlgorithm,\n AepImportableJoseKey,\n ApiKeyGrantResponse,\n BasicGrantResponse,\n EnrollResponse,\n InspectDocument,\n OAuthBearerGrantResponse,\n RevokeRequest,\n RevokeResponse,\n StatusResponse\n} from \"@aep-foundation/core\";\nimport type {\n PlatformAgentIdentity,\n PlatformDiscoveryDocument,\n PlatformSignResponse\n} from \"@aep-foundation/platform\";\n\nexport type Awaitable<T> = T | Promise<T>;\n\nexport interface AepClientAssertionSignerContext {\n command: AepAuthenticatedCommand;\n serviceDid: string;\n signingAlgorithms: AepSigningAlgorithm[];\n}\n\nexport type AepClientAssertionSigner = (\n claims: AepClientAssertionClaims,\n context: AepClientAssertionSignerContext\n) => Awaitable<string>;\n\nexport interface AepAgentOptions {\n assertionClock?: () => Date;\n assertionJti?: () => string;\n assertionTtlSeconds?: number;\n credentialStore?: AgentCredentialStore;\n identityProvider: AgentIdentityProvider;\n identityStore?: AgentIdentityStore;\n idempotencyKeys?: AgentIdempotencyKeyProvider;\n inspectCache?: AgentInspectCache;\n}\n\nexport interface InspectServiceOptions {\n serviceUrl: string | URL;\n}\n\nexport interface InspectServiceResult {\n document: InspectDocument;\n inspectUrl: URL;\n commandUrl(command: AepHttpCommand): URL;\n cacheControl?: string;\n etag?: string;\n}\n\nexport interface DiscoverPlatformOptions {\n platformUrl: string | URL;\n}\n\nexport interface DiscoverPlatformResult {\n document: PlatformDiscoveryDocument;\n discoveryUrl: URL;\n endpointUrl(endpoint: keyof PlatformDiscoveryDocument[\"endpoints\"]): URL;\n}\n\nexport interface ProvisionPlatformIdentityOptions {\n authorization?: string;\n discovery?: DiscoverPlatformResult;\n idempotencyKey: string;\n platformUrl: string | URL;\n serviceDid: string;\n}\n\nexport type ProvisionPlatformIdentityResult = AepCommandResult<PlatformAgentIdentity>;\n\nexport interface PlatformDelegatedSignerOptions {\n authorization?: string;\n discovery?: DiscoverPlatformResult;\n identity: PlatformAgentIdentity;\n platformUrl: string | URL;\n}\n\nexport interface AepCommandResult<TBody> {\n body: TBody;\n commandUrl: URL;\n status: number;\n}\n\nexport interface AepCommandOptions {\n agentDid?: string;\n assertionClock?: () => Date;\n assertionJti?: () => string;\n assertionTtlSeconds?: number;\n clientAssertion?: string;\n clientAssertionSigner?: AepClientAssertionSigner;\n inspect?: InspectServiceResult;\n serviceUrl: string | URL;\n}\n\nexport interface EnrollServiceOptions extends AepCommandOptions {\n agentDid: string;\n claims?: Record<string, unknown>;\n idempotencyKey: string;\n}\n\nexport type EnrollServiceResult = AepCommandResult<EnrollResponse>;\n\nexport interface GrantServiceOptions extends AepCommandOptions {\n grantType: AepGrantType;\n idempotencyKey: string;\n parameters?: Record<string, unknown>;\n requestedScopes?: string[];\n}\n\nexport type GrantServiceResult = AepCommandResult<\n AepBuiltInGrantResponse | Record<string, unknown>\n>;\n\ntype RevokeServiceSelector =\n | {\n allGrantTypes: true;\n credentialId?: never;\n grantType?: never;\n }\n | {\n allGrantTypes?: never;\n credentialId: string;\n grantType?: never;\n }\n | {\n allGrantTypes?: never;\n credentialId?: never;\n grantType: AepGrantType;\n };\n\nexport type RevokeServiceOptions = AepCommandOptions &\n RevokeServiceSelector & {\n idempotencyKey: string;\n parameters?: Record<string, unknown>;\n };\n\nexport type RevokeServiceResult = AepCommandResult<RevokeResponse>;\nexport type AgentRevokeServiceOptions = RevokeServiceOptions;\n\nexport type StatusServiceOptions = AepCommandOptions;\nexport type StatusServiceResult = AepCommandResult<StatusResponse>;\n\nexport interface BuildClientAssertionClaimsOptions {\n agentDid: string;\n command: AepAuthenticatedCommand;\n clock?: () => Date;\n jti?: string | (() => string);\n serviceDid: string;\n ttlSeconds?: number;\n}\n\nexport interface SignClientAssertionOptions extends BuildClientAssertionClaimsOptions {\n signer: AepClientAssertionSigner;\n signingAlgorithms?: AepSigningAlgorithm[];\n}\n\nexport interface JwtClientAssertionSignerOptions {\n alg?: AepSigningAlgorithm;\n key: AepImportableJoseKey;\n kid?: string;\n typ?: string;\n}\n\nexport interface ClientAssertionAuthenticationHeadersOptions extends Omit<\n SignClientAssertionOptions,\n \"command\" | \"serviceDid\" | \"signingAlgorithms\"\n> {\n command?: AepAuthenticatedCommand;\n inspect?: InspectDocument | InspectServiceResult;\n serviceDid?: string;\n signingAlgorithms?: AepSigningAlgorithm[];\n}\n\nexport type ProtectedResourceAuthenticationHeadersOptions =\n | {\n credential: AepBuiltInGrantResponse;\n }\n | ClientAssertionAuthenticationHeadersOptions;\n\nexport interface SelectGrantTypeOptions {\n preferredGrantTypes?: AepGrantType[];\n}\n\nexport interface AepSessionCredentialRecord {\n credential: AepBuiltInGrantResponse | Record<string, unknown>;\n credentialId: string;\n expiresAt?: string;\n grantType: AepGrantType;\n issuedAt: string;\n serviceDid: string;\n serviceUrl?: string;\n}\n\nexport type AgentCredentialRecord = AepSessionCredentialRecord;\n\nexport interface AgentCredentialStore {\n deleteCredential(serviceDid: string, credentialId: string): Awaitable<void>;\n findCredential(\n serviceDid: string,\n credentialId: string\n ): Awaitable<AgentCredentialRecord | undefined>;\n findUsableCredential(\n serviceDid: string,\n now?: Date\n ): Awaitable<AgentCredentialRecord | undefined>;\n listCredentials(serviceDid: string): Awaitable<AgentCredentialRecord[]>;\n saveCredential(record: AgentCredentialRecord): Awaitable<AgentCredentialRecord>;\n}\n\nexport type AepSessionCredentialStore = AgentCredentialStore;\n\nexport interface AgentServiceIdentity {\n agentDid: string;\n identityKind: \"platform-hosted\" | \"sovereign\";\n metadata?: Record<string, unknown>;\n serviceDid: string;\n signingAlgorithms: AepSigningAlgorithm[];\n}\n\nexport interface AgentIdentityProviderGetOrCreateInput {\n inspect: InspectDocument;\n serviceDid: string;\n serviceUrl: string;\n}\n\nexport interface AgentIdentityProvider {\n getOrCreateIdentity(\n input: AgentIdentityProviderGetOrCreateInput\n ): Awaitable<AgentServiceIdentity>;\n signerFor(identity: AgentServiceIdentity): Awaitable<AepClientAssertionSigner>;\n}\n\nexport interface AgentIdentityStore {\n findByServiceDid(serviceDid: string): Awaitable<AgentServiceIdentity | undefined>;\n saveIdentity(identity: AgentServiceIdentity): Awaitable<AgentServiceIdentity>;\n}\n\nexport interface AgentOperationKey {\n command: AepAuthenticatedCommand;\n credentialId?: string;\n grantType?: AepGrantType;\n serviceDid: string;\n serviceUrl: string;\n}\n\nexport interface AgentIdempotencyKeyProvider {\n createKey(operation: AgentOperationKey): Awaitable<string>;\n}\n\nexport interface CachedInspectServiceResult extends InspectServiceResult {\n cachedAt: string;\n}\n\nexport interface AgentInspectCache {\n get(serviceUrl: string): Awaitable<CachedInspectServiceResult | undefined>;\n set(serviceUrl: string, result: CachedInspectServiceResult): Awaitable<void>;\n}\n\nexport interface CreatePlatformIdentityProviderOptions {\n authorization?: string;\n idempotencyKey?: string | ((input: AgentIdentityProviderGetOrCreateInput) => string);\n platformUrl: string | URL;\n}\n\nexport interface AgentServiceSessionOptions {\n serviceUrl: string | URL;\n}\n\nexport interface AgentEnrollSessionOptions {\n claims?: Record<string, unknown>;\n idempotencyKey?: string;\n}\n\nexport interface AgentGrantSessionOptions {\n grantType?: AepGrantType;\n idempotencyKey?: string;\n parameters?: Record<string, unknown>;\n preferredGrantTypes?: AepGrantType[];\n requestedScopes?: string[];\n}\n\nexport type AgentRevokeSessionOptions = RevokeServiceSelector & {\n idempotencyKey?: string;\n parameters?: Record<string, unknown>;\n};\n\nexport interface AgentAuthenticationHeadersOptions {\n preferCredential?: boolean;\n}\n\nexport interface AepServiceSession {\n authenticationHeaders(\n options?: AgentAuthenticationHeadersOptions\n ): Promise<Record<string, string>>;\n enroll(options?: AgentEnrollSessionOptions): Promise<EnrollServiceResult>;\n grant(options?: AgentGrantSessionOptions): Promise<GrantServiceResult>;\n identity(): Promise<AgentServiceIdentity>;\n inspect(): Promise<InspectServiceResult>;\n revoke(options: AgentRevokeSessionOptions): Promise<RevokeServiceResult>;\n status(): Promise<StatusServiceResult>;\n}\n\nexport type FetchLike = (input: URL | string, init?: RequestInit) => Promise<ResponseLike>;\n\nexport interface ResponseLike {\n ok: boolean;\n status: number;\n statusText?: string;\n headers: HeadersLike;\n json(): Promise<unknown>;\n}\n\nexport interface HeadersLike {\n get(name: string): string | null;\n}\n\nexport class AepInspectError extends Error {\n readonly status?: number;\n\n constructor(message: string, status?: number) {\n super(message);\n this.name = \"AepInspectError\";\n\n if (status !== undefined) {\n this.status = status;\n }\n }\n}\n\nexport class AepCommandError extends Error {\n readonly problem?: AepProblemDetails;\n readonly status: number;\n\n constructor(message: string, status: number, problem?: AepProblemDetails) {\n super(message);\n this.name = \"AepCommandError\";\n this.status = status;\n\n if (problem !== undefined) {\n this.problem = problem;\n }\n }\n}\n\nexport interface AepAgent {\n serviceSession(options: AgentServiceSessionOptions): AepServiceSession;\n}\n\nexport function createAepAgent(options: AepAgentOptions): AepAgent {\n const identityStore = options.identityStore ?? createInMemoryAgentIdentityStore();\n const credentialStore = options.credentialStore ?? createInMemorySessionCredentialStore();\n const idempotencyKeys = options.idempotencyKeys ?? createRandomIdempotencyKeyProvider();\n const inspectCache = options.inspectCache ?? createInMemoryInspectCache();\n const assertionOptions = assertionOptionsWithDefinedValues(options);\n\n return {\n serviceSession: (sessionOptions) =>\n createAepServiceSession({\n ...assertionOptions,\n credentialStore,\n idempotencyKeys,\n identityProvider: options.identityProvider,\n identityStore,\n inspectCache,\n serviceUrl: sessionOptions.serviceUrl\n })\n };\n}\n\ninterface AepServiceSessionState {\n assertionClock?: () => Date;\n assertionJti?: () => string;\n assertionTtlSeconds?: number;\n credentialStore: AgentCredentialStore;\n idempotencyKeys: AgentIdempotencyKeyProvider;\n identityProvider: AgentIdentityProvider;\n identityStore: AgentIdentityStore;\n inspectCache: AgentInspectCache;\n serviceUrl: string | URL;\n}\n\nfunction createAepServiceSession(state: AepServiceSessionState): AepServiceSession {\n const serviceUrl = normalizeServiceUrl(state.serviceUrl);\n const serviceUrlString = String(serviceUrl);\n let inspectPromise: Promise<InspectServiceResult> | undefined;\n let identityPromise: Promise<AgentServiceIdentity> | undefined;\n let signerPromise: Promise<AepClientAssertionSigner> | undefined;\n\n const inspectOnce = async (): Promise<InspectServiceResult> => {\n if (inspectPromise !== undefined) {\n return inspectPromise;\n }\n\n inspectPromise = (async () => {\n const cached = await state.inspectCache.get(serviceUrlString);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const inspected = await inspectService({ serviceUrl });\n const cachedResult: CachedInspectServiceResult = {\n ...inspected,\n cachedAt: new Date().toISOString()\n };\n\n await state.inspectCache.set(serviceUrlString, cachedResult);\n return inspected;\n })();\n\n return inspectPromise;\n };\n\n const identityOnce = async (): Promise<AgentServiceIdentity> => {\n if (identityPromise !== undefined) {\n return identityPromise;\n }\n\n identityPromise = (async () => {\n const inspected = await inspectOnce();\n const serviceDid = inspected.document.service.did;\n const existing = await state.identityStore.findByServiceDid(serviceDid);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const created = await state.identityProvider.getOrCreateIdentity({\n inspect: inspected.document,\n serviceDid,\n serviceUrl: serviceUrlString\n });\n\n return state.identityStore.saveIdentity(created);\n })();\n\n return identityPromise;\n };\n\n const signerOnce = async (): Promise<AepClientAssertionSigner> => {\n if (signerPromise !== undefined) {\n return signerPromise;\n }\n\n signerPromise = Promise.resolve(state.identityProvider.signerFor(await identityOnce()));\n return signerPromise;\n };\n\n const commandOptions = async (): Promise<\n Pick<EnrollServiceOptions, \"agentDid\" | \"clientAssertionSigner\" | \"inspect\" | \"serviceUrl\">\n > => {\n const inspected = await inspectOnce();\n const identity = await identityOnce();\n const signer = await signerOnce();\n\n return {\n agentDid: identity.agentDid,\n clientAssertionSigner: signer,\n inspect: inspected,\n serviceUrl\n };\n };\n\n const assertionOptions = (): Pick<\n AepCommandOptions,\n \"assertionClock\" | \"assertionJti\" | \"assertionTtlSeconds\"\n > => ({\n ...(state.assertionClock === undefined ? {} : { assertionClock: state.assertionClock }),\n ...(state.assertionJti === undefined ? {} : { assertionJti: state.assertionJti }),\n ...(state.assertionTtlSeconds === undefined\n ? {}\n : { assertionTtlSeconds: state.assertionTtlSeconds })\n });\n\n const idempotencyKey = async (\n operation: Omit<AgentOperationKey, \"serviceDid\" | \"serviceUrl\">\n ): Promise<string> => {\n const inspected = await inspectOnce();\n\n return state.idempotencyKeys.createKey({\n ...operation,\n serviceDid: inspected.document.service.did,\n serviceUrl: serviceUrlString\n });\n };\n\n return {\n async authenticationHeaders(options = {}) {\n const inspected = await inspectOnce();\n\n if (options.preferCredential !== false) {\n const credential = await state.credentialStore.findUsableCredential(\n inspected.document.service.did\n );\n\n if (credential !== undefined) {\n return protectedResourceAuthenticationHeaders({\n credential: parseBuiltInGrantResponse(credential.grantType, credential.credential)\n });\n }\n }\n\n const identity = await identityOnce();\n const signer = await signerOnce();\n\n return protectedResourceAuthenticationHeaders({\n agentDid: identity.agentDid,\n inspect: inspected,\n ...(state.assertionClock === undefined ? {} : { clock: state.assertionClock }),\n ...(state.assertionJti === undefined ? {} : { jti: state.assertionJti }),\n signer,\n ...(state.assertionTtlSeconds === undefined\n ? {}\n : { ttlSeconds: state.assertionTtlSeconds })\n });\n },\n async enroll(options = {}) {\n return enrollService({\n ...(await commandOptions()),\n ...assertionOptions(),\n ...(options.claims === undefined ? {} : { claims: options.claims }),\n idempotencyKey: options.idempotencyKey ?? (await idempotencyKey({ command: \"enroll\" }))\n });\n },\n async grant(options = {}) {\n const inspected = await inspectOnce();\n const grantType =\n options.grantType ??\n selectGrantType(inspected, {\n ...(options.preferredGrantTypes === undefined\n ? {}\n : { preferredGrantTypes: options.preferredGrantTypes })\n });\n const result = await grantService({\n ...(await commandOptions()),\n ...assertionOptions(),\n grantType,\n idempotencyKey:\n options.idempotencyKey ?? (await idempotencyKey({ command: \"grant\", grantType })),\n ...(options.parameters === undefined ? {} : { parameters: options.parameters }),\n ...(options.requestedScopes === undefined\n ? {}\n : { requestedScopes: options.requestedScopes })\n });\n\n await state.credentialStore.saveCredential(\n sessionCredentialRecordFromGrantResult(result, {\n grantType,\n inspect: inspected,\n serviceUrl\n })\n );\n\n return result;\n },\n identity: identityOnce,\n inspect: inspectOnce,\n async revoke(options) {\n const selector = revokeSessionSelector(options);\n const result = await revokeService({\n ...(await commandOptions()),\n ...assertionOptions(),\n ...selector,\n idempotencyKey:\n options.idempotencyKey ??\n (await idempotencyKey({\n command: \"revoke\",\n ...(\"credentialId\" in selector ? { credentialId: selector.credentialId } : {}),\n ...(\"grantType\" in selector ? { grantType: selector.grantType } : {})\n })),\n ...(options.parameters === undefined ? {} : { parameters: options.parameters })\n });\n const inspected = await inspectOnce();\n\n if (\"credentialId\" in selector) {\n await state.credentialStore.deleteCredential(\n inspected.document.service.did,\n selector.credentialId\n );\n }\n\n return result;\n },\n async status() {\n return statusService({\n ...(await commandOptions()),\n ...assertionOptions()\n });\n }\n };\n}\n\nfunction revokeSessionSelector(options: AgentRevokeSessionOptions): RevokeServiceSelector {\n if (options.allGrantTypes === true) {\n return { allGrantTypes: true };\n }\n\n if (options.credentialId !== undefined) {\n return { credentialId: options.credentialId };\n }\n\n return { grantType: options.grantType };\n}\n\nexport function buildClientAssertionClaims(\n options: BuildClientAssertionClaimsOptions\n): AepClientAssertionClaims {\n if (!AEP_AUTHENTICATED_COMMANDS.includes(options.command)) {\n throw new TypeError(`Unsupported authenticated command: ${options.command}.`);\n }\n\n const now = Math.floor((options.clock ?? (() => new Date()))().getTime() / 1000);\n const ttlSeconds = options.ttlSeconds ?? 300;\n const jti = typeof options.jti === \"function\" ? options.jti() : (options.jti ?? randomJti());\n\n return parseClientAssertionClaims({\n aud: options.serviceDid,\n exp: now + ttlSeconds,\n iat: now,\n iss: options.agentDid,\n jti,\n op: options.command,\n sub: options.agentDid\n });\n}\n\nexport async function signClientAssertion(options: SignClientAssertionOptions): Promise<string> {\n const claims = buildClientAssertionClaims(options);\n\n return options.signer(claims, {\n command: options.command,\n serviceDid: options.serviceDid,\n signingAlgorithms: [...(options.signingAlgorithms ?? AEP_SIGNING_ALGORITHMS)]\n });\n}\n\nexport function createJwtClientAssertionSigner(\n options: JwtClientAssertionSignerOptions\n): AepClientAssertionSigner {\n return (claims, context) =>\n signClientAssertionJwt(claims, {\n alg: options.alg ?? preferredSigningAlgorithm(context.signingAlgorithms),\n key: options.key,\n ...(options.kid === undefined ? {} : { kid: options.kid }),\n ...(options.typ === undefined ? {} : { typ: options.typ })\n });\n}\n\nexport async function discoverPlatform(\n options: DiscoverPlatformOptions\n): Promise<DiscoverPlatformResult> {\n const fetchImpl = requireFetch();\n const platformUrl = normalizePlatformUrl(options.platformUrl);\n const discoveryUrl = new URL(\"/.well-known/aep-platform\", platformUrl);\n const response = await fetchImpl(discoveryUrl, {\n headers: {\n Accept: AEP_MEDIA_TYPE\n }\n });\n\n await throwCommandError(response, \"Platform discovery\");\n\n const document = parsePlatformDiscoveryDocument(await response.json());\n\n return {\n document,\n discoveryUrl,\n endpointUrl: (endpoint) => new URL(requireEndpointPath(document, endpoint), platformUrl)\n };\n}\n\nexport async function provisionPlatformIdentity(\n options: ProvisionPlatformIdentityOptions\n): Promise<ProvisionPlatformIdentityResult> {\n const fetchImpl = requireFetch();\n const discovery =\n options.discovery ??\n (await discoverPlatform({\n platformUrl: options.platformUrl\n }));\n const commandUrl = discovery.endpointUrl(\"provision\");\n const body = createPlatformProvisionRequest({\n idempotencyKey: options.idempotencyKey,\n serviceDid: options.serviceDid\n });\n const response = await fetchImpl(commandUrl, {\n body: JSON.stringify(body),\n headers: {\n Accept: AEP_MEDIA_TYPE,\n ...(options.authorization === undefined ? {} : { Authorization: options.authorization }),\n \"Content-Type\": AEP_MEDIA_TYPE,\n \"Idempotency-Key\": options.idempotencyKey\n },\n method: \"POST\"\n });\n\n await throwCommandError(response, \"Platform provision\");\n\n return {\n body: parsePlatformAgentIdentity(await response.json()),\n commandUrl,\n status: response.status\n };\n}\n\nexport function createPlatformDelegatedSigner(\n options: PlatformDelegatedSignerOptions\n): AepClientAssertionSigner {\n return async (claims) => {\n const fetchImpl = requireFetch();\n const discovery =\n options.discovery ??\n (await discoverPlatform({\n platformUrl: options.platformUrl\n }));\n const commandUrl = endpointUrlWithIdentity(\n discovery,\n \"sign\",\n options.identity.agent_identity_id\n );\n const lifetimeSeconds = claims.exp - claims.iat;\n const request = createPlatformSignRequest({\n command: claims.op,\n jti: claims.jti,\n lifetimeSeconds,\n serviceDid: claims.aud\n });\n const response = await fetchImpl(commandUrl, {\n body: JSON.stringify(request),\n headers: {\n Accept: AEP_MEDIA_TYPE,\n ...(options.authorization === undefined ? {} : { Authorization: options.authorization }),\n \"Content-Type\": AEP_MEDIA_TYPE\n },\n method: \"POST\"\n });\n\n await throwCommandError(response, \"Platform sign\");\n\n return parsePlatformSignResponse(await response.json()).client_assertion;\n };\n}\n\nexport function createPlatformIdentityProvider(\n options: CreatePlatformIdentityProviderOptions\n): AgentIdentityProvider {\n let discoveryPromise: Promise<DiscoverPlatformResult> | undefined;\n\n const discovery = (): Promise<DiscoverPlatformResult> => {\n discoveryPromise ??= discoverPlatform({ platformUrl: options.platformUrl });\n return discoveryPromise;\n };\n\n return {\n async getOrCreateIdentity(input) {\n const platformDiscovery = await discovery();\n const idempotencyKey =\n typeof options.idempotencyKey === \"function\"\n ? options.idempotencyKey(input)\n : (options.idempotencyKey ?? randomJti());\n const result = await provisionPlatformIdentity({\n ...(options.authorization === undefined ? {} : { authorization: options.authorization }),\n discovery: platformDiscovery,\n idempotencyKey,\n platformUrl: options.platformUrl,\n serviceDid: input.serviceDid\n });\n\n return agentServiceIdentityFromPlatform(result.body, options.platformUrl);\n },\n async signerFor(identity) {\n if (identity.identityKind !== \"platform-hosted\") {\n throw new TypeError(\"Platform identity provider cannot sign for a sovereign identity.\");\n }\n\n const platformDiscovery = await discovery();\n\n return createPlatformDelegatedSigner({\n ...(options.authorization === undefined ? {} : { authorization: options.authorization }),\n discovery: platformDiscovery,\n identity: platformAgentIdentityFromAgentIdentity(identity),\n platformUrl: options.platformUrl\n });\n }\n };\n}\n\nfunction agentServiceIdentityFromPlatform(\n identity: PlatformAgentIdentity,\n platformUrl: string | URL\n): AgentServiceIdentity {\n return {\n agentDid: identity.agent_did,\n identityKind: \"platform-hosted\",\n metadata: {\n agentIdentityId: identity.agent_identity_id,\n createdAt: identity.created_at,\n didDocumentUrl: identity.did_document_url,\n keyId: identity.key_id,\n platformUrl: String(platformUrl),\n status: identity.status,\n updatedAt: identity.updated_at\n },\n serviceDid: identity.service_did,\n signingAlgorithms: [...identity.signing_algorithms]\n };\n}\n\nfunction platformAgentIdentityFromAgentIdentity(\n identity: AgentServiceIdentity\n): PlatformAgentIdentity {\n const metadata = identity.metadata ?? {};\n\n return {\n agent_did: identity.agentDid,\n agent_identity_id: metadataString(metadata, \"agentIdentityId\"),\n created_at: metadataString(metadata, \"createdAt\"),\n did_document_url: metadataString(metadata, \"didDocumentUrl\"),\n key_id: metadataString(metadata, \"keyId\"),\n service_did: identity.serviceDid,\n signing_algorithms: [...identity.signingAlgorithms],\n status: parseManagedAgentStatus(metadataString(metadata, \"status\")),\n updated_at: metadataString(metadata, \"updatedAt\")\n };\n}\n\nexport function selectGrantType(\n inspect: InspectDocument | InspectServiceResult,\n options: SelectGrantTypeOptions = {}\n): AepGrantType {\n const document = isInspectServiceResult(inspect) ? inspect.document : inspect;\n const advertised = document.commands.grant_types ?? [];\n const preferred = options.preferredGrantTypes ?? advertised;\n\n for (const grantType of preferred) {\n if (advertised.includes(grantType)) {\n return grantType;\n }\n }\n\n throw new TypeError(\"AEP Service does not advertise a compatible grant type.\");\n}\n\nexport function createInMemorySessionCredentialStore(\n records: AepSessionCredentialRecord[] = []\n): AepSessionCredentialStore {\n const credentials = new Map<string, AepSessionCredentialRecord>();\n\n records.forEach((record) =>\n credentials.set(sessionCredentialKey(record), cloneCredential(record))\n );\n\n return {\n deleteCredential(serviceDid, credentialId) {\n for (const [key, record] of credentials) {\n if (record.serviceDid === serviceDid && record.credentialId === credentialId) {\n credentials.delete(key);\n }\n }\n },\n findCredential(serviceDid, credentialId) {\n for (const record of credentials.values()) {\n if (record.serviceDid === serviceDid && record.credentialId === credentialId) {\n return cloneCredential(record);\n }\n }\n\n return undefined;\n },\n findUsableCredential(serviceDid, now = new Date()) {\n const nowMs = now.getTime();\n\n for (const record of credentials.values()) {\n if (record.serviceDid !== serviceDid) {\n continue;\n }\n\n if (record.expiresAt !== undefined && Date.parse(record.expiresAt) <= nowMs) {\n continue;\n }\n\n return cloneCredential(record);\n }\n\n return undefined;\n },\n listCredentials(serviceDid) {\n return [...credentials.values()]\n .filter((record) => record.serviceDid === serviceDid)\n .map(cloneCredential);\n },\n saveCredential(record) {\n const cloned = cloneCredential(record);\n credentials.set(sessionCredentialKey(cloned), cloned);\n return cloneCredential(cloned);\n }\n };\n}\n\nexport function createInMemoryAgentIdentityStore(\n records: AgentServiceIdentity[] = []\n): AgentIdentityStore {\n const identities = new Map<string, AgentServiceIdentity>();\n\n records.forEach((record) => identities.set(record.serviceDid, cloneAgentIdentity(record)));\n\n return {\n findByServiceDid(serviceDid) {\n const identity = identities.get(serviceDid);\n\n return identity === undefined ? undefined : cloneAgentIdentity(identity);\n },\n saveIdentity(identity) {\n const cloned = cloneAgentIdentity(identity);\n identities.set(cloned.serviceDid, cloned);\n return cloneAgentIdentity(cloned);\n }\n };\n}\n\nexport function createRandomIdempotencyKeyProvider(\n generator: () => string = randomJti\n): AgentIdempotencyKeyProvider {\n return {\n createKey: () => generator()\n };\n}\n\nexport function createInMemoryInspectCache(\n records: Array<{ result: CachedInspectServiceResult; serviceUrl: string }> = []\n): AgentInspectCache {\n const cache = new Map<string, CachedInspectServiceResult>();\n\n records.forEach((record) => cache.set(record.serviceUrl, cloneCachedInspect(record.result)));\n\n return {\n get(serviceUrl) {\n const cached = cache.get(serviceUrl);\n\n return cached === undefined ? undefined : cloneCachedInspect(cached);\n },\n set(serviceUrl, result) {\n cache.set(serviceUrl, cloneCachedInspect(result));\n }\n };\n}\n\nexport function sessionCredentialRecordFromGrantResult(\n result: GrantServiceResult,\n options: {\n clock?: () => Date;\n grantType: AepGrantType;\n inspect: InspectDocument | InspectServiceResult;\n serviceUrl?: string | URL;\n }\n): AepSessionCredentialRecord {\n const credentialId = credentialIdFromGrantResult(result.body);\n const document = isInspectServiceResult(options.inspect)\n ? options.inspect.document\n : options.inspect;\n const expiresAt = expiresAtFromGrantResult(result.body);\n\n return {\n credential: structuredClone(result.body),\n credentialId,\n grantType: options.grantType,\n issuedAt: (options.clock ?? (() => new Date()))().toISOString(),\n serviceDid: document.service.did,\n ...(expiresAt === undefined ? {} : { expiresAt }),\n ...(options.serviceUrl === undefined ? {} : { serviceUrl: String(options.serviceUrl) })\n };\n}\n\nexport function credentialPresentationHeaders(\n credential: AepBuiltInGrantResponse\n): Record<string, string> {\n if (isOAuthBearerGrantResponse(credential)) {\n return {\n Authorization: `Bearer ${credential.access_token}`\n };\n }\n\n if (isApiKeyGrantResponse(credential)) {\n return {\n [credential.header]: credential.api_key\n };\n }\n\n if (isBasicGrantResponse(credential)) {\n return {\n Authorization: `Basic ${base64(`${credential.username}:${credential.password}`)}`\n };\n }\n\n throw new TypeError(\"Unsupported AEP built-in credential.\");\n}\n\nexport async function clientAssertionAuthenticationHeaders(\n options: ClientAssertionAuthenticationHeadersOptions\n): Promise<Record<string, string>> {\n const document = options.inspect === undefined ? undefined : inspectDocument(options.inspect);\n const serviceDid = options.serviceDid ?? document?.service.did;\n\n if (serviceDid === undefined) {\n throw new TypeError(\"AEP client assertion authentication headers require a service DID.\");\n }\n\n const signingAlgorithms = options.signingAlgorithms ?? document?.core.signing_algorithms;\n const clientAssertion = await signClientAssertion({\n agentDid: options.agentDid,\n command: options.command ?? \"status\",\n ...(options.clock === undefined ? {} : { clock: options.clock }),\n ...(options.jti === undefined ? {} : { jti: options.jti }),\n serviceDid,\n signer: options.signer,\n ...(signingAlgorithms === undefined ? {} : { signingAlgorithms }),\n ...(options.ttlSeconds === undefined ? {} : { ttlSeconds: options.ttlSeconds })\n });\n\n return {\n Authorization: `${AEP_AUTH_SCHEME} ${clientAssertion}`\n };\n}\n\nexport async function protectedResourceAuthenticationHeaders(\n options: ProtectedResourceAuthenticationHeadersOptions\n): Promise<Record<string, string>> {\n if (\"credential\" in options) {\n return credentialPresentationHeaders(options.credential);\n }\n\n return clientAssertionAuthenticationHeaders(options);\n}\n\nexport async function inspectService(\n options: InspectServiceOptions\n): Promise<InspectServiceResult> {\n const fetchImpl = requireFetch();\n\n const serviceUrl = normalizeServiceUrl(options.serviceUrl);\n const inspectUrl = new URL(AEP_WELL_KNOWN_PATH, serviceUrl);\n const response = await fetchImpl(inspectUrl, {\n headers: {\n Accept: AEP_MEDIA_TYPE\n }\n });\n\n if (!response.ok) {\n throw new AepInspectError(\n `AEP Inspect failed with HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}.`,\n response.status\n );\n }\n\n const document = parseInspectDocument(await response.json());\n\n const cacheControl = response.headers.get(\"cache-control\") ?? undefined;\n const etag = response.headers.get(\"etag\") ?? undefined;\n\n return {\n document,\n inspectUrl,\n commandUrl: (command) => new URL(commandPathFromInspect(document, command), serviceUrl),\n ...(cacheControl === undefined ? {} : { cacheControl }),\n ...(etag === undefined ? {} : { etag })\n };\n}\n\nexport async function enrollService(options: EnrollServiceOptions): Promise<EnrollServiceResult> {\n const fetchImpl = requireFetch();\n const inspect = await resolveInspect(options);\n const commandUrl = commandUrlFromInspect(options.serviceUrl, inspect, \"enroll\");\n const clientAssertion = await resolveClientAssertion(options, inspect, \"enroll\");\n const body = {\n agent_did: options.agentDid,\n ...(options.claims === undefined ? {} : { claims: structuredClone(options.claims) }),\n idempotency_key: options.idempotencyKey\n };\n const response = await fetchImpl(commandUrl, {\n body: JSON.stringify(body),\n headers: {\n Accept: AEP_MEDIA_TYPE,\n Authorization: `${AEP_AUTH_SCHEME} ${clientAssertion}`,\n \"Content-Type\": AEP_MEDIA_TYPE,\n \"Idempotency-Key\": options.idempotencyKey\n },\n method: \"POST\"\n });\n\n await throwCommandError(response, \"Enroll\");\n\n return {\n body: parseEnrollResponse(await response.json()),\n commandUrl,\n status: response.status\n };\n}\n\nexport async function grantService(options: GrantServiceOptions): Promise<GrantServiceResult> {\n const fetchImpl = requireFetch();\n const inspect = await resolveInspect(options);\n const commandUrl = commandUrlFromInspect(options.serviceUrl, inspect, \"grant\");\n const clientAssertion = await resolveClientAssertion(options, inspect, \"grant\");\n const body = parseGrantRequest({\n ...(options.parameters ?? {}),\n grant_type: options.grantType,\n ...(options.requestedScopes === undefined\n ? {}\n : { requested_scopes: [...options.requestedScopes] })\n });\n const response = await fetchImpl(commandUrl, {\n body: JSON.stringify(body),\n headers: {\n Accept: AEP_MEDIA_TYPE,\n Authorization: `${AEP_AUTH_SCHEME} ${clientAssertion}`,\n \"Content-Type\": AEP_MEDIA_TYPE,\n \"Idempotency-Key\": options.idempotencyKey\n },\n method: \"POST\"\n });\n\n await throwCommandError(response, \"Grant\");\n\n return {\n body: parseGrantResponse(body.grant_type, await response.json()),\n commandUrl,\n status: response.status\n };\n}\n\nexport async function revokeService(options: RevokeServiceOptions): Promise<RevokeServiceResult> {\n const fetchImpl = requireFetch();\n const inspect = await resolveInspect(options);\n const commandUrl = commandUrlFromInspect(options.serviceUrl, inspect, \"revoke\");\n const clientAssertion = await resolveClientAssertion(options, inspect, \"revoke\");\n const body = parseRevokeRequest({\n ...(options.parameters ?? {}),\n ...revokeSelectorBody(options)\n });\n const response = await fetchImpl(commandUrl, {\n body: JSON.stringify(body),\n headers: {\n Accept: AEP_MEDIA_TYPE,\n Authorization: `${AEP_AUTH_SCHEME} ${clientAssertion}`,\n \"Content-Type\": AEP_MEDIA_TYPE,\n \"Idempotency-Key\": options.idempotencyKey\n },\n method: \"POST\"\n });\n\n await throwCommandError(response, \"Revoke\");\n\n return {\n body: parseRevokeResponse(await response.json()),\n commandUrl,\n status: response.status\n };\n}\n\nexport async function statusService(options: StatusServiceOptions): Promise<StatusServiceResult> {\n const fetchImpl = requireFetch();\n const inspect = await resolveInspect(options);\n const commandUrl = commandUrlFromInspect(options.serviceUrl, inspect, \"status\");\n const clientAssertion = await resolveClientAssertion(options, inspect, \"status\");\n const response = await fetchImpl(commandUrl, {\n headers: {\n Accept: AEP_MEDIA_TYPE,\n Authorization: `${AEP_AUTH_SCHEME} ${clientAssertion}`\n },\n method: \"GET\"\n });\n\n await throwCommandError(response, \"Status\");\n\n return {\n body: parseStatusResponse(await response.json()),\n commandUrl,\n status: response.status\n };\n}\n\nfunction normalizePlatformUrl(platformUrl: string | URL): URL {\n const url = platformUrl instanceof URL ? new URL(platformUrl) : new URL(platformUrl);\n\n if (url.pathname !== \"/\" || url.search || url.hash) {\n url.pathname = \"/\";\n url.search = \"\";\n url.hash = \"\";\n }\n\n return url;\n}\n\nfunction normalizeServiceUrl(serviceUrl: string | URL): URL {\n const url = serviceUrl instanceof URL ? new URL(serviceUrl) : new URL(serviceUrl);\n\n if (url.pathname !== \"/\" || url.search || url.hash) {\n url.pathname = \"/\";\n url.search = \"\";\n url.hash = \"\";\n }\n\n return url;\n}\n\nfunction parsePlatformDiscoveryDocument(value: unknown): PlatformDiscoveryDocument {\n const document = requireRecord(value, \"Platform discovery document\");\n const endpoints = requireRecord(document[\"endpoints\"], \"Platform discovery endpoints\");\n const http = requireRecord(document[\"http\"], \"Platform discovery HTTP metadata\");\n const identity = requireRecord(document[\"identity\"], \"Platform discovery identity metadata\");\n const platform = requireRecord(document[\"platform\"], \"Platform discovery platform metadata\");\n const signing = requireRecord(document[\"signing\"], \"Platform discovery signing metadata\");\n const algorithms = requireStringArray(signing, \"algorithms\");\n const didMethods = requireStringArray(identity, \"did_methods\");\n\n return {\n ...document,\n aep_version: requireString(document, \"aep_version\"),\n endpoints: {\n ...endpoints,\n ...(endpoints[\"hosted_verification\"] === undefined\n ? {}\n : { hosted_verification: requireString(endpoints, \"hosted_verification\") }),\n lifecycle: requireString(endpoints, \"lifecycle\"),\n list: requireString(endpoints, \"list\"),\n provision: requireString(endpoints, \"provision\"),\n sign: requireString(endpoints, \"sign\")\n },\n http: {\n ...http,\n endpoint_base: requireString(http, \"endpoint_base\")\n },\n identity: {\n ...identity,\n did_methods: didMethods,\n did_url_template: requireString(identity, \"did_url_template\")\n },\n platform: {\n ...platform,\n ...(platform[\"did\"] === undefined ? {} : { did: requireString(platform, \"did\") }),\n hosted_verification: requireBoolean(platform, \"hosted_verification\"),\n name: requireString(platform, \"name\")\n },\n signing: {\n ...signing,\n algorithms,\n default_lifetime_seconds: requireString(signing, \"default_lifetime_seconds\")\n }\n };\n}\n\nfunction parsePlatformAgentIdentity(value: unknown): PlatformAgentIdentity {\n const body = requireRecord(value, \"Platform Agent identity\");\n\n return {\n agent_did: requireString(body, \"agent_did\"),\n agent_identity_id: requireString(body, \"agent_identity_id\"),\n created_at: requireString(body, \"created_at\"),\n did_document_url: requireString(body, \"did_document_url\"),\n key_id: requireString(body, \"key_id\"),\n service_did: requireString(body, \"service_did\"),\n signing_algorithms: requireStringArray(body, \"signing_algorithms\"),\n status: parseManagedAgentStatus(requireString(body, \"status\")),\n updated_at: requireString(body, \"updated_at\")\n };\n}\n\nfunction parsePlatformSignResponse(value: unknown): PlatformSignResponse {\n const body = requireRecord(value, \"Platform sign response\");\n\n return {\n agent_did: requireString(body, \"agent_did\"),\n client_assertion: requireString(body, \"client_assertion\"),\n expires_at: requireString(body, \"expires_at\"),\n issued_at: requireString(body, \"issued_at\"),\n jti: requireString(body, \"jti\"),\n service_did: requireString(body, \"service_did\")\n };\n}\n\nfunction endpointUrlWithIdentity(\n discovery: DiscoverPlatformResult,\n endpoint: keyof PlatformDiscoveryDocument[\"endpoints\"],\n agentIdentityId: string\n): URL {\n const endpointUrl = discovery.endpointUrl(endpoint);\n const encodedAgentIdentityTemplate = \"%7Bagent_identity_id%7D\";\n\n endpointUrl.pathname = endpointUrl.pathname\n .replace(\"{agent_identity_id}\", encodeURIComponent(agentIdentityId))\n .replace(encodedAgentIdentityTemplate, encodeURIComponent(agentIdentityId));\n\n return endpointUrl;\n}\n\nfunction requireEndpointPath(\n document: PlatformDiscoveryDocument,\n endpoint: keyof PlatformDiscoveryDocument[\"endpoints\"]\n): string {\n const value = document.endpoints[endpoint];\n\n if (typeof value !== \"string\" || value.length === 0) {\n throw new TypeError(`Platform discovery does not advertise ${String(endpoint)}.`);\n }\n\n return value;\n}\n\nfunction inspectDocument(inspect: InspectDocument | InspectServiceResult): InspectDocument {\n return isInspectServiceResult(inspect) ? inspect.document : inspect;\n}\n\nfunction requireFetch(): FetchLike {\n const resolved: unknown = globalThis.fetch;\n\n if (typeof resolved !== \"function\") {\n throw new TypeError(\"AEP agent requires a fetch implementation.\");\n }\n\n return resolved as FetchLike;\n}\n\nasync function resolveInspect(options: AepCommandOptions): Promise<InspectServiceResult> {\n return (\n options.inspect ??\n (await inspectService({\n serviceUrl: options.serviceUrl\n }))\n );\n}\n\nfunction commandUrlFromInspect(\n serviceUrl: string | URL,\n inspect: InspectServiceResult,\n command: AepHttpCommand\n): URL {\n if (!inspect.document.commands.supported.includes(command)) {\n throw new TypeError(`AEP Service does not advertise ${command}.`);\n }\n\n return new URL(\n commandPathFromInspect(inspect.document, command),\n normalizeServiceUrl(serviceUrl)\n );\n}\n\nasync function resolveClientAssertion(\n options: AepCommandOptions,\n inspect: InspectServiceResult,\n command: AepAuthenticatedCommand\n): Promise<string> {\n if (options.clientAssertion !== undefined) {\n return options.clientAssertion;\n }\n\n if (options.clientAssertionSigner === undefined) {\n throw new TypeError(\"AEP command requires clientAssertion or clientAssertionSigner.\");\n }\n\n if (options.agentDid === undefined) {\n throw new TypeError(\"AEP command signing requires agentDid.\");\n }\n\n return signClientAssertion({\n agentDid: options.agentDid,\n command,\n serviceDid: inspect.document.service.did,\n signer: options.clientAssertionSigner,\n ...(options.assertionClock === undefined ? {} : { clock: options.assertionClock }),\n ...(options.assertionJti === undefined ? {} : { jti: options.assertionJti }),\n ...(inspect.document.core.signing_algorithms === undefined\n ? {}\n : { signingAlgorithms: inspect.document.core.signing_algorithms }),\n ...(options.assertionTtlSeconds === undefined\n ? {}\n : { ttlSeconds: options.assertionTtlSeconds })\n });\n}\n\nfunction assertionOptionsWithDefinedValues(\n options: Pick<AepAgentOptions, \"assertionClock\" | \"assertionJti\" | \"assertionTtlSeconds\">\n): Pick<AepAgentOptions, \"assertionClock\" | \"assertionJti\" | \"assertionTtlSeconds\"> {\n return {\n ...(options.assertionClock === undefined ? {} : { assertionClock: options.assertionClock }),\n ...(options.assertionJti === undefined ? {} : { assertionJti: options.assertionJti }),\n ...(options.assertionTtlSeconds === undefined\n ? {}\n : { assertionTtlSeconds: options.assertionTtlSeconds })\n };\n}\n\nfunction revokeSelectorBody(options: RevokeServiceOptions): RevokeRequest {\n if (options.allGrantTypes === true) {\n return {\n all_grant_types: \"true\"\n };\n }\n\n if (options.credentialId !== undefined) {\n return {\n credential_id: options.credentialId\n };\n }\n\n return {\n grant_type: options.grantType\n };\n}\n\nfunction parseGrantResponse(\n grantType: AepGrantType,\n value: unknown\n): AepBuiltInGrantResponse | Record<string, unknown> {\n if ((AEP_BUILT_IN_GRANT_TYPES as readonly string[]).includes(grantType)) {\n return parseBuiltInGrantResponse(grantType, value);\n }\n\n if (isRecord(value)) {\n return value;\n }\n\n throw new TypeError(\"Invalid AEP Grant response.\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction requireRecord(value: unknown, label: string): Record<string, unknown> {\n if (!isRecord(value)) {\n throw new TypeError(`${label} must be an object.`);\n }\n\n return value;\n}\n\nfunction requireString(record: Record<string, unknown>, key: string): string {\n const value = record[key];\n\n if (typeof value !== \"string\" || value.length === 0) {\n throw new TypeError(`${key} must be a non-empty string.`);\n }\n\n return value;\n}\n\nfunction requireBoolean(record: Record<string, unknown>, key: string): boolean {\n const value = record[key];\n\n if (typeof value !== \"boolean\") {\n throw new TypeError(`${key} must be a boolean.`);\n }\n\n return value;\n}\n\nfunction requireStringArray(record: Record<string, unknown>, key: string): string[] {\n const value = record[key];\n\n if (!Array.isArray(value) || !value.every((item) => typeof item === \"string\")) {\n throw new TypeError(`${key} must be a string array.`);\n }\n\n return [...value];\n}\n\nfunction parseManagedAgentStatus(value: string): PlatformAgentIdentity[\"status\"] {\n if (\n value !== \"active\" &&\n value !== \"revoked\" &&\n value !== \"suspended\" &&\n value !== \"terminated\"\n ) {\n throw new TypeError(\"status must be a supported managed Agent status.\");\n }\n\n return value;\n}\n\nfunction isInspectServiceResult(\n value: InspectDocument | InspectServiceResult\n): value is InspectServiceResult {\n return (\n isRecord(value) &&\n isRecord(value[\"document\"]) &&\n value[\"inspectUrl\"] instanceof URL &&\n typeof value[\"commandUrl\"] === \"function\"\n );\n}\n\nfunction randomJti(): string {\n return `jti_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;\n}\n\nfunction credentialIdFromGrantResult(\n credential: AepBuiltInGrantResponse | Record<string, unknown>\n): string {\n if (typeof credential.credential_id !== \"string\" || credential.credential_id.length === 0) {\n throw new TypeError(\"AEP Grant response does not include credential_id.\");\n }\n\n return credential.credential_id;\n}\n\nfunction expiresAtFromGrantResult(\n credential: AepBuiltInGrantResponse | Record<string, unknown>\n): string | undefined {\n return typeof credential.expires_at === \"string\" ? credential.expires_at : undefined;\n}\n\nfunction sessionCredentialKey(record: AepSessionCredentialRecord): string {\n return `${record.serviceDid}\\u0000${record.credentialId}`;\n}\n\nfunction cloneCredential(record: AepSessionCredentialRecord): AepSessionCredentialRecord {\n return {\n ...record,\n credential: structuredClone(record.credential)\n };\n}\n\nfunction cloneAgentIdentity(identity: AgentServiceIdentity): AgentServiceIdentity {\n return {\n ...identity,\n ...(identity.metadata === undefined ? {} : { metadata: structuredClone(identity.metadata) }),\n signingAlgorithms: [...identity.signingAlgorithms]\n };\n}\n\nfunction cloneCachedInspect(result: CachedInspectServiceResult): CachedInspectServiceResult {\n return {\n ...result,\n document: structuredClone(result.document)\n };\n}\n\nfunction metadataString(metadata: Record<string, unknown>, key: string): string {\n const value = metadata[key];\n\n if (typeof value !== \"string\" || value.length === 0) {\n throw new TypeError(`Platform-hosted Agent identity metadata is missing ${key}.`);\n }\n\n return value;\n}\n\nfunction isOAuthBearerGrantResponse(\n credential: AepBuiltInGrantResponse\n): credential is OAuthBearerGrantResponse {\n return \"access_token\" in credential && credential.token_type === \"Bearer\";\n}\n\nfunction isApiKeyGrantResponse(\n credential: AepBuiltInGrantResponse\n): credential is ApiKeyGrantResponse {\n return \"api_key\" in credential && \"header\" in credential;\n}\n\nfunction isBasicGrantResponse(\n credential: AepBuiltInGrantResponse\n): credential is BasicGrantResponse {\n return \"username\" in credential && \"password\" in credential;\n}\n\nfunction base64(value: string): string {\n return Buffer.from(value, \"utf8\").toString(\"base64\");\n}\n\nfunction preferredSigningAlgorithm(algorithms: AepSigningAlgorithm[]): AepSigningAlgorithm {\n const algorithm = algorithms.find((candidate) => candidate === \"ES256\" || candidate === \"EdDSA\");\n\n if (algorithm === undefined) {\n throw new TypeError(\"AEP Service does not advertise a supported JOSE signing algorithm.\");\n }\n\n return algorithm;\n}\n\nasync function throwCommandError(response: ResponseLike, command: string): Promise<void> {\n if (response.ok) {\n return;\n }\n\n const problem = await readProblemDetails(response);\n\n throw new AepCommandError(\n `AEP ${command} failed with HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}.`,\n response.status,\n problem\n );\n}\n\nasync function readProblemDetails(response: ResponseLike): Promise<AepProblemDetails | undefined> {\n try {\n return parseProblemDetails(await response.json());\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aep-foundation/agent",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Agent-side workflows for the Agent Enrollment Protocol.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"sideEffects": false,
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"node": {
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"require": "./dist/index.cjs"
|
|
16
|
+
},
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./package.json": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"CHANGELOG.md",
|
|
24
|
+
"README.md",
|
|
25
|
+
"LICENSE"
|
|
26
|
+
],
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=22.0.0"
|
|
29
|
+
},
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@aep-foundation/core": "^0.1.0",
|
|
33
|
+
"@aep-foundation/platform": "^0.1.0"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public",
|
|
37
|
+
"provenance": true
|
|
38
|
+
},
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "git+https://github.com/aep-foundation/aep-node.git",
|
|
42
|
+
"directory": "packages/agent"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsup",
|
|
46
|
+
"dev": "tsup --watch",
|
|
47
|
+
"test": "vitest run --coverage",
|
|
48
|
+
"test:watch": "vitest",
|
|
49
|
+
"lint": "eslint src test --max-warnings 0",
|
|
50
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.test.json",
|
|
51
|
+
"clean": "rm -rf dist .turbo coverage"
|
|
52
|
+
}
|
|
53
|
+
}
|