@dxos/edge-client 0.8.0 → 0.8.1-main.013e445

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.
@@ -722,7 +722,7 @@ var EdgeHttpClient = class {
722
722
  url: this._baseUrl
723
723
  }, {
724
724
  F: __dxlog_file5,
725
- L: 49,
725
+ L: 51,
726
726
  S: this,
727
727
  C: (f, a) => f(...a)
728
728
  });
@@ -797,6 +797,13 @@ var EdgeHttpClient = class {
797
797
  method: "PUT"
798
798
  });
799
799
  }
800
+ async initiateOAuthFlow(body, args) {
801
+ return this._call("/oauth/initiate", {
802
+ ...args,
803
+ body,
804
+ method: "POST"
805
+ });
806
+ }
800
807
  async queryQueue(subspaceTag, spaceId, query, args) {
801
808
  const { queueId } = query;
802
809
  const queryParams = new URLSearchParams();
@@ -841,7 +848,7 @@ var EdgeHttpClient = class {
841
848
  async _call(path, args) {
842
849
  const requestContext = args.context ?? new Context2(void 0, {
843
850
  F: __dxlog_file5,
844
- L: 177
851
+ L: 186
845
852
  });
846
853
  const shouldRetry = createRetryHandler(args);
847
854
  let url = `${this._baseUrl}${path.startsWith("/") ? path.slice(1) : path}`;
@@ -858,7 +865,7 @@ var EdgeHttpClient = class {
858
865
  request: args.body
859
866
  }, {
860
867
  F: __dxlog_file5,
861
- L: 189,
868
+ L: 198,
862
869
  S: this,
863
870
  C: (f, a) => f(...a)
864
871
  });
@@ -881,7 +888,7 @@ var EdgeHttpClient = class {
881
888
  body
882
889
  }, {
883
890
  F: __dxlog_file5,
884
- L: 208,
891
+ L: 217,
885
892
  S: this,
886
893
  C: (f, a) => f(...a)
887
894
  });
@@ -906,7 +913,7 @@ var EdgeHttpClient = class {
906
913
  processingError
907
914
  }, {
908
915
  F: __dxlog_file5,
909
- L: 227,
916
+ L: 236,
910
917
  S: this,
911
918
  C: (f, a) => f(...a)
912
919
  });
@@ -919,7 +926,7 @@ var EdgeHttpClient = class {
919
926
  if (!this._edgeIdentity) {
920
927
  log3.warn("edge unauthorized response received before identity was set", void 0, {
921
928
  F: __dxlog_file5,
922
- L: 236,
929
+ L: 245,
923
930
  S: this,
924
931
  C: (f, a) => f(...a)
925
932
  });
@@ -929,7 +936,7 @@ var EdgeHttpClient = class {
929
936
  this._authHeader = encodeAuthHeader(challenge);
930
937
  log3("auth header updated", void 0, {
931
938
  F: __dxlog_file5,
932
- L: 241,
939
+ L: 250,
933
940
  S: this,
934
941
  C: (f, a) => f(...a)
935
942
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.ts", "../../../src/edge-client.ts", "../../../src/edge-identity.ts", "../../../src/edge-ws-connection.ts", "../../../src/errors.ts", "../../../src/utils.ts", "../../../src/auth.ts", "../../../src/edge-http-client.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport * from '@dxos/protocols/buf/dxos/edge/messenger_pb';\n\nexport * from './edge-client';\nexport * from './defs';\nexport * from './protocol';\nexport * from './errors';\nexport * from './auth';\nexport * from './edge-http-client';\nexport * from './edge-identity';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger, scheduleMicroTask, TriggerState, PersistentLifecycle } from '@dxos/async';\nimport { Resource, type Lifecycle } from '@dxos/context';\nimport { log, logInfo } from '@dxos/log';\nimport { type Message } from '@dxos/protocols/buf/dxos/edge/messenger_pb';\n\nimport { protocol } from './defs';\nimport { type EdgeIdentity, handleAuthChallenge } from './edge-identity';\nimport { EdgeWsConnection } from './edge-ws-connection';\nimport { EdgeConnectionClosedError, EdgeIdentityChangedError } from './errors';\nimport { type Protocol } from './protocol';\nimport { getEdgeUrlWithProtocol } from './utils';\n\nconst DEFAULT_TIMEOUT = 10_000;\n\nexport type MessageListener = (message: Message) => void;\nexport type ReconnectListener = () => void;\n\nexport interface EdgeConnection extends Required<Lifecycle> {\n get info(): any;\n get identityKey(): string;\n get peerKey(): string;\n get isOpen(): boolean;\n get isConnected(): boolean;\n setIdentity(identity: EdgeIdentity): void;\n onMessage(listener: MessageListener): () => void;\n onReconnected(listener: ReconnectListener): () => void;\n send(message: Message): Promise<void>;\n}\n\nexport type MessengerConfig = {\n socketEndpoint: string;\n timeout?: number;\n protocol?: Protocol;\n disableAuth?: boolean;\n};\n\n/**\n * Messenger client for EDGE:\n * - While open, uses PersistentLifecycle to keep an open EdgeWsConnection, reconnecting on failures.\n * - Manages identity and re-create EdgeWsConnection when identity changes.\n * - Dispatches connection state and message notifications.\n */\nexport class EdgeClient extends Resource implements EdgeConnection {\n private readonly _persistentLifecycle = new PersistentLifecycle<EdgeWsConnection>({\n start: async () => this._connect(),\n stop: async (state: EdgeWsConnection) => this._disconnect(state),\n });\n\n private readonly _messageListeners = new Set<MessageListener>();\n private readonly _reconnectListeners = new Set<ReconnectListener>();\n\n private readonly _baseWsUrl: string;\n private readonly _baseHttpUrl: string;\n\n private _currentConnection?: EdgeWsConnection = undefined;\n private _ready = new Trigger();\n\n constructor(\n private _identity: EdgeIdentity,\n private readonly _config: MessengerConfig,\n ) {\n super();\n this._baseWsUrl = getEdgeUrlWithProtocol(_config.socketEndpoint, 'ws');\n this._baseHttpUrl = getEdgeUrlWithProtocol(_config.socketEndpoint, 'http');\n }\n\n @logInfo\n public get info() {\n return {\n open: this.isOpen,\n identity: this._identity.identityKey,\n device: this._identity.peerKey,\n };\n }\n\n get isConnected() {\n return Boolean(this._currentConnection) && this._ready.state === TriggerState.RESOLVED;\n }\n\n get identityKey() {\n return this._identity.identityKey;\n }\n\n get peerKey() {\n return this._identity.peerKey;\n }\n\n setIdentity(identity: EdgeIdentity) {\n if (identity.identityKey !== this._identity.identityKey || identity.peerKey !== this._identity.peerKey) {\n log('Edge identity changed', { identity, oldIdentity: this._identity });\n this._identity = identity;\n this._closeCurrentConnection(new EdgeIdentityChangedError());\n this._persistentLifecycle.scheduleRestart();\n }\n }\n\n public onMessage(listener: MessageListener): () => void {\n this._messageListeners.add(listener);\n return () => this._messageListeners.delete(listener);\n }\n\n public onReconnected(listener: () => void): () => void {\n this._reconnectListeners.add(listener);\n if (this._ready.state === TriggerState.RESOLVED) {\n // Microtask so that listener is always called asynchronously, no matter the state of the ready trigger\n // at the moment of registration.\n scheduleMicroTask(this._ctx, () => {\n if (this._reconnectListeners.has(listener)) {\n try {\n listener();\n } catch (error) {\n log.catch(error);\n }\n }\n });\n }\n return () => this._reconnectListeners.delete(listener);\n }\n\n /**\n * Open connection to messaging service.\n */\n protected override async _open() {\n log('opening...', { info: this.info });\n this._persistentLifecycle.open().catch((err) => {\n log.warn('Error while opening connection', { err });\n });\n }\n\n /**\n * Close connection and free resources.\n */\n protected override async _close() {\n log('closing...', { peerKey: this._identity.peerKey });\n this._closeCurrentConnection();\n await this._persistentLifecycle.close();\n }\n\n private async _connect(): Promise<EdgeWsConnection | undefined> {\n if (this._ctx.disposed) {\n return undefined;\n }\n\n const identity = this._identity;\n const path = `/ws/${identity.identityKey}/${identity.peerKey}`;\n const protocolHeader = this._config.disableAuth ? undefined : await this._createAuthHeader(path);\n if (this._identity !== identity) {\n log('identity changed during auth header request');\n return undefined;\n }\n\n const restartRequired = new Trigger();\n const url = new URL(path, this._baseWsUrl);\n log('Opening websocket', { url: url.toString(), protocolHeader });\n const connection = new EdgeWsConnection(\n identity,\n { url, protocolHeader },\n {\n onConnected: () => {\n if (this._isActive(connection)) {\n this._ready.wake();\n this._notifyReconnected();\n } else {\n log.verbose('connected callback ignored, because connection is not active');\n }\n },\n onRestartRequired: () => {\n if (this._isActive(connection)) {\n this._closeCurrentConnection();\n this._persistentLifecycle.scheduleRestart();\n } else {\n log.verbose('restart requested by inactive connection');\n }\n restartRequired.wake();\n },\n onMessage: (message) => {\n if (this._isActive(connection)) {\n this._notifyMessageReceived(message);\n } else {\n log.verbose('ignored a message on inactive connection', {\n from: message.source,\n type: message.payload?.typeUrl,\n });\n }\n },\n },\n );\n this._currentConnection = connection;\n\n await connection.open();\n // Race with restartRequired so that restart is not blocked by _connect execution.\n // Wait on ready to attempt a reconnect if it times out.\n await Promise.race([this._ready.wait({ timeout: this._config.timeout ?? DEFAULT_TIMEOUT }), restartRequired]);\n\n return connection;\n }\n\n private async _disconnect(state: EdgeWsConnection) {\n await state.close();\n }\n\n private _closeCurrentConnection(error: Error = new EdgeConnectionClosedError()) {\n this._currentConnection = undefined;\n this._ready.throw(error);\n this._ready.reset();\n }\n\n private _notifyReconnected() {\n for (const listener of this._reconnectListeners) {\n try {\n listener();\n } catch (err) {\n log.error('ws reconnect listener failed', { err });\n }\n }\n }\n\n private _notifyMessageReceived(message: Message) {\n for (const listener of this._messageListeners) {\n try {\n listener(message);\n } catch (err) {\n log.error('ws incoming message processing failed', { err, payload: protocol.getPayloadType(message) });\n }\n }\n }\n\n /**\n * Send message.\n * NOTE: The message is guaranteed to be delivered but the service must respond with a message to confirm processing.\n */\n public async send(message: Message): Promise<void> {\n if (this._ready.state !== TriggerState.RESOLVED) {\n log('waiting for websocket to become ready');\n await this._ready.wait({ timeout: this._config.timeout ?? DEFAULT_TIMEOUT });\n }\n\n if (!this._currentConnection) {\n throw new EdgeConnectionClosedError();\n }\n\n if (\n message.source &&\n (message.source.peerKey !== this._identity.peerKey || message.source.identityKey !== this.identityKey)\n ) {\n throw new EdgeIdentityChangedError();\n }\n\n this._currentConnection.send(message);\n }\n\n private async _createAuthHeader(path: string): Promise<string | undefined> {\n const httpUrl = new URL(path, this._baseHttpUrl);\n httpUrl.protocol = getEdgeUrlWithProtocol(this._baseWsUrl.toString(), 'http');\n const response = await fetch(httpUrl, { method: 'GET' });\n if (response.status === 401) {\n return encodePresentationWsAuthHeader(await handleAuthChallenge(response, this._identity));\n } else {\n log.warn('no auth challenge from edge', { status: response.status, statusText: response.statusText });\n return undefined;\n }\n }\n\n private _isActive = (connection: EdgeWsConnection) => connection === this._currentConnection;\n}\n\nconst encodePresentationWsAuthHeader = (encodedPresentation: Uint8Array): string => {\n // = and / characters are not allowed in the WebSocket subprotocol header.\n const encodedToken = Buffer.from(encodedPresentation).toString('base64').replace(/=*$/, '').replaceAll('/', '|');\n return `base64url.bearer.authorization.dxos.org.${encodedToken}`;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { schema } from '@dxos/protocols/proto';\nimport { type Presentation } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nexport interface EdgeIdentity {\n peerKey: string;\n identityKey: string;\n /**\n * Returns credential presentation issued by the identity key.\n * Presentation must have the provided challenge.\n * Presentation may include ServiceAccess credentials.\n */\n presentCredentials({ challenge }: { challenge: Uint8Array }): Promise<Presentation>;\n}\n\nexport const handleAuthChallenge = async (failedResponse: Response, identity: EdgeIdentity): Promise<Uint8Array> => {\n invariant(failedResponse.status === 401);\n\n const headerValue = failedResponse.headers.get('Www-Authenticate');\n invariant(headerValue?.startsWith('VerifiablePresentation challenge='));\n\n const challenge = headerValue?.slice('VerifiablePresentation challenge='.length);\n invariant(challenge);\n\n const presentation = await identity.presentCredentials({ challenge: Buffer.from(challenge, 'base64') });\n return schema.getCodecForType('dxos.halo.credentials.Presentation').encode(presentation);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport WebSocket from 'isomorphic-ws';\n\nimport { scheduleTask, scheduleTaskInterval } from '@dxos/async';\nimport { Context, Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { buf } from '@dxos/protocols/buf';\nimport { MessageSchema, type Message } from '@dxos/protocols/buf/dxos/edge/messenger_pb';\n\nimport { protocol } from './defs';\nimport { type EdgeIdentity } from './edge-identity';\nimport { toUint8Array } from './protocol';\n\nconst SIGNAL_KEEPALIVE_INTERVAL = 4_000;\nconst SIGNAL_KEEPALIVE_TIMEOUT = 12_000;\n\n/**\n * 1MB websocket message limit: https://developers.cloudflare.com/durable-objects/platform/limits/\n */\nconst CLOUDFLARE_MESSAGE_LENGTH_LIMIT = 1024 * 1024;\n\nexport type EdgeWsConnectionCallbacks = {\n onConnected: () => void;\n onMessage: (message: Message) => void;\n onRestartRequired: () => void;\n};\n\nexport class EdgeWsConnection extends Resource {\n private _inactivityTimeoutCtx: Context | undefined;\n private _ws: WebSocket | undefined;\n\n constructor(\n private readonly _identity: EdgeIdentity,\n private readonly _connectionInfo: { url: URL; protocolHeader?: string },\n private readonly _callbacks: EdgeWsConnectionCallbacks,\n ) {\n super();\n }\n\n @logInfo\n public get info() {\n return {\n open: this.isOpen,\n identity: this._identity.identityKey,\n device: this._identity.peerKey,\n };\n }\n\n public send(message: Message) {\n invariant(this._ws);\n log('sending...', { peerKey: this._identity.peerKey, payload: protocol.getPayloadType(message) });\n const encoded = buf.toBinary(MessageSchema, message);\n if (encoded.byteLength >= CLOUDFLARE_MESSAGE_LENGTH_LIMIT) {\n log.error('edge message dropped due to websocket message limit', {\n byteLength: encoded.byteLength,\n serviceId: message.serviceId,\n payload: protocol.getPayloadType(message),\n });\n return;\n }\n this._ws.send(encoded);\n }\n\n protected override async _open() {\n this._ws = new WebSocket(\n this._connectionInfo.url.toString(),\n this._connectionInfo.protocolHeader ? [this._connectionInfo.protocolHeader] : [],\n );\n\n this._ws.onopen = () => {\n if (this.isOpen) {\n log('connected');\n this._callbacks.onConnected();\n this._scheduleHeartbeats();\n } else {\n log.verbose('connected after becoming inactive', { currentIdentity: this._identity });\n }\n };\n this._ws.onclose = (event) => {\n if (this.isOpen) {\n log.warn('disconnected while being open', { code: event.code, reason: event.reason });\n this._callbacks.onRestartRequired();\n }\n };\n this._ws.onerror = (event) => {\n if (this.isOpen) {\n log.warn('edge connection socket error', { error: event.error, info: event.message });\n this._callbacks.onRestartRequired();\n } else {\n log.verbose('error ignored on closed connection', { error: event.error });\n }\n };\n /**\n * https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent/data\n */\n this._ws.onmessage = async (event) => {\n if (!this.isOpen) {\n log.verbose('message ignored on closed connection', { event: event.type });\n return;\n }\n if (event.data === '__pong__') {\n this._rescheduleHeartbeatTimeout();\n return;\n }\n const data = await toUint8Array(event.data);\n if (this.isOpen) {\n const message = buf.fromBinary(MessageSchema, data);\n log('received', { from: message.source, payload: protocol.getPayloadType(message) });\n this._callbacks.onMessage(message);\n }\n };\n }\n\n protected override async _close() {\n void this._inactivityTimeoutCtx?.dispose().catch(() => {});\n\n try {\n this._ws?.close();\n this._ws = undefined;\n } catch (err) {\n if (err instanceof Error && err.message.includes('WebSocket is closed before the connection is established.')) {\n return;\n }\n log.warn('Error closing websocket', { err });\n }\n }\n\n private _scheduleHeartbeats() {\n invariant(this._ws);\n scheduleTaskInterval(\n this._ctx,\n async () => {\n // TODO(mykola): use RFC6455 ping/pong once implemented in the browser?\n // Cloudflare's worker responds to this `without interrupting hibernation`. https://developers.cloudflare.com/durable-objects/api/websockets/#setwebsocketautoresponse\n this._ws?.send('__ping__');\n },\n SIGNAL_KEEPALIVE_INTERVAL,\n );\n this._ws.send('__ping__');\n this._rescheduleHeartbeatTimeout();\n }\n\n private _rescheduleHeartbeatTimeout() {\n if (!this.isOpen) {\n return;\n }\n void this._inactivityTimeoutCtx?.dispose();\n this._inactivityTimeoutCtx = new Context();\n scheduleTask(\n this._inactivityTimeoutCtx,\n () => {\n if (this.isOpen) {\n log.warn('restart due to inactivity timeout');\n this._callbacks.onRestartRequired();\n }\n },\n SIGNAL_KEEPALIVE_TIMEOUT,\n );\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport class EdgeConnectionClosedError extends Error {\n constructor() {\n super('Edge connection closed.');\n }\n}\n\nexport class EdgeIdentityChangedError extends Error {\n constructor() {\n super('Edge identity changed.');\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const getEdgeUrlWithProtocol = (baseUrl: string, protocol: 'http' | 'ws') => {\n const isSecure = baseUrl.startsWith('https') || baseUrl.startsWith('wss');\n const url = new URL(baseUrl);\n url.protocol = protocol + (isSecure ? 's' : '');\n return url.toString();\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { createCredential, signPresentation } from '@dxos/credentials';\nimport { type Signer } from '@dxos/crypto';\nimport { invariant } from '@dxos/invariant';\nimport { Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { type Chain, type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport type { EdgeIdentity } from './edge-identity';\n\n/**\n * Edge identity backed by a device key without a credential chain.\n */\nexport const createDeviceEdgeIdentity = async (signer: Signer, key: PublicKey): Promise<EdgeIdentity> => {\n return {\n identityKey: key.toHex(),\n peerKey: key.toHex(),\n presentCredentials: async ({ challenge }) => {\n return signPresentation({\n presentation: {\n credentials: [\n // Verifier requires at least one credential in the presentation to establish the subject.\n await createCredential({\n assertion: {\n '@type': 'dxos.halo.credentials.Auth',\n },\n issuer: key,\n subject: key,\n signer,\n }),\n ],\n },\n signer,\n signerKey: key,\n nonce: challenge,\n });\n },\n };\n};\n\n/**\n * Edge identity backed by a chain of credentials.\n */\nexport const createChainEdgeIdentity = async (\n signer: Signer,\n identityKey: PublicKey,\n peerKey: PublicKey,\n chain: Chain | undefined,\n credentials: Credential[],\n): Promise<EdgeIdentity> => {\n const credentialsToSign =\n credentials.length > 0\n ? credentials\n : [\n await createCredential({\n assertion: {\n '@type': 'dxos.halo.credentials.Auth',\n },\n issuer: identityKey,\n subject: identityKey,\n signer,\n chain,\n signingKey: peerKey,\n }),\n ];\n\n return {\n identityKey: identityKey.toHex(),\n peerKey: peerKey.toHex(),\n presentCredentials: async ({ challenge }) => {\n // TODO: make chain required after device invitation flow update release\n invariant(chain);\n return signPresentation({\n presentation: {\n credentials: credentialsToSign,\n },\n signer,\n nonce: challenge,\n signerKey: peerKey,\n chain,\n });\n },\n };\n};\n\n/**\n * Edge identity backed by a random ephemeral key without HALO.\n */\nexport const createEphemeralEdgeIdentity = async (): Promise<EdgeIdentity> => {\n const keyring = new Keyring();\n const key = await keyring.createKey();\n return createDeviceEdgeIdentity(keyring, key);\n};\n\n/**\n * Creates a HALO chain of credentials to act as an edge identity.\n */\nexport const createTestHaloEdgeIdentity = async (\n signer: Signer,\n identityKey: PublicKey,\n deviceKey: PublicKey,\n): Promise<EdgeIdentity> => {\n const deviceAdmission = await createCredential({\n assertion: {\n '@type': 'dxos.halo.credentials.AuthorizedDevice',\n deviceKey,\n identityKey,\n },\n issuer: identityKey,\n subject: deviceKey,\n signer,\n });\n return createChainEdgeIdentity(signer, identityKey, deviceKey, { credential: deviceAdmission }, [\n await createCredential({\n assertion: {\n '@type': 'dxos.halo.credentials.Auth',\n },\n issuer: identityKey,\n subject: identityKey,\n signer,\n }),\n ]);\n};\n\nexport const createStubEdgeIdentity = (): EdgeIdentity => {\n const identityKey = PublicKey.random();\n const deviceKey = PublicKey.random();\n return {\n identityKey: identityKey.toHex(),\n peerKey: deviceKey.toHex(),\n presentCredentials: async () => {\n throw new Error('Stub identity does not support authentication.');\n },\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { sleep } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { type PublicKey, type SpaceId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport {\n EdgeCallFailedError,\n type EdgeHttpResponse,\n type GetNotarizationResponseBody,\n type PostNotarizationRequestBody,\n type JoinSpaceRequest,\n type JoinSpaceResponseBody,\n EdgeAuthChallengeError,\n type CreateAgentResponseBody,\n type CreateAgentRequestBody,\n type GetAgentStatusResponseBody,\n type RecoverIdentityRequest,\n type RecoverIdentityResponseBody,\n type UploadFunctionRequest,\n type UploadFunctionResponseBody,\n type ObjectId,\n type ExecuteWorkflowResponseBody,\n type QueueQuery,\n type QueryResult,\n} from '@dxos/protocols';\n\nimport { type EdgeIdentity, handleAuthChallenge } from './edge-identity';\nimport { getEdgeUrlWithProtocol } from './utils';\n\nconst DEFAULT_RETRY_TIMEOUT = 1500;\nconst DEFAULT_RETRY_JITTER = 500;\nconst DEFAULT_MAX_RETRIES_COUNT = 3;\n\nexport class EdgeHttpClient {\n private readonly _baseUrl: string;\n\n private _edgeIdentity: EdgeIdentity | undefined;\n\n /**\n * Auth header is cached until receiving the next 401 from EDGE, at which point it gets refreshed.\n */\n private _authHeader: string | undefined;\n\n constructor(baseUrl: string) {\n this._baseUrl = getEdgeUrlWithProtocol(baseUrl, 'http');\n log('created', { url: this._baseUrl });\n }\n\n get baseUrl() {\n return this._baseUrl;\n }\n\n setIdentity(identity: EdgeIdentity) {\n if (this._edgeIdentity?.identityKey !== identity.identityKey || this._edgeIdentity?.peerKey !== identity.peerKey) {\n this._edgeIdentity = identity;\n this._authHeader = undefined;\n }\n }\n\n public createAgent(body: CreateAgentRequestBody, args?: EdgeHttpGetArgs): Promise<CreateAgentResponseBody> {\n return this._call('/agents/create', { ...args, method: 'POST', body });\n }\n\n public getAgentStatus(\n request: { ownerIdentityKey: PublicKey },\n args?: EdgeHttpGetArgs,\n ): Promise<GetAgentStatusResponseBody> {\n return this._call(`/users/${request.ownerIdentityKey.toHex()}/agent/status`, { ...args, method: 'GET' });\n }\n\n public getCredentialsForNotarization(spaceId: SpaceId, args?: EdgeHttpGetArgs): Promise<GetNotarizationResponseBody> {\n return this._call(`/spaces/${spaceId}/notarization`, { ...args, method: 'GET' });\n }\n\n public async notarizeCredentials(\n spaceId: SpaceId,\n body: PostNotarizationRequestBody,\n args?: EdgeHttpGetArgs,\n ): Promise<void> {\n await this._call(`/spaces/${spaceId}/notarization`, { ...args, body, method: 'POST' });\n }\n\n public async joinSpaceByInvitation(\n spaceId: SpaceId,\n body: JoinSpaceRequest,\n args?: EdgeHttpGetArgs,\n ): Promise<JoinSpaceResponseBody> {\n return this._call(`/spaces/${spaceId}/join`, { ...args, body, method: 'POST' });\n }\n\n public async recoverIdentity(\n body: RecoverIdentityRequest,\n args?: EdgeHttpGetArgs,\n ): Promise<RecoverIdentityResponseBody> {\n return this._call('/identity/recover', { ...args, body, method: 'POST' });\n }\n\n public async executeWorkflow(\n spaceId: SpaceId,\n graphId: ObjectId,\n input: any,\n args?: EdgeHttpGetArgs,\n ): Promise<ExecuteWorkflowResponseBody> {\n return this._call(`/workflows/${spaceId}/${graphId}`, { ...args, body: input, method: 'POST' });\n }\n\n public async uploadFunction(\n pathParts: { spaceId: SpaceId; functionId?: string },\n body: UploadFunctionRequest,\n args?: EdgeHttpGetArgs,\n ): Promise<UploadFunctionResponseBody> {\n const path = ['functions', pathParts.spaceId, ...(pathParts.functionId ? [pathParts.functionId] : [])].join('/');\n return this._call(path, { ...args, body, method: 'PUT' });\n }\n\n public async queryQueue(\n subspaceTag: string,\n spaceId: SpaceId,\n query: QueueQuery,\n args?: EdgeHttpGetArgs,\n ): Promise<QueryResult> {\n const { queueId } = query;\n const queryParams = new URLSearchParams();\n if (query.after != null) {\n queryParams.set('after', query.after);\n }\n if (query.before != null) {\n queryParams.set('before', query.before);\n }\n if (query.limit != null) {\n queryParams.set('limit', query.limit.toString());\n }\n if (query.reverse != null) {\n queryParams.set('reverse', query.reverse.toString());\n }\n if (query.objectIds != null) {\n queryParams.set('objectIds', query.objectIds.join(','));\n }\n return this._call(`/spaces/${subspaceTag}/${spaceId}/queue/${queueId}/query?${queryParams.toString()}`, {\n ...args,\n method: 'GET',\n });\n }\n\n public async insertIntoQueue(\n subspaceTag: string,\n spaceId: SpaceId,\n queueId: ObjectId,\n objects: unknown[],\n args?: EdgeHttpGetArgs,\n ): Promise<void> {\n return this._call(`/spaces/${subspaceTag}/${spaceId}/queue/${queueId}`, {\n ...args,\n body: { objects },\n method: 'POST',\n });\n }\n\n async deleteFromQueue(\n subspaceTag: string,\n spaceId: SpaceId,\n queueId: ObjectId,\n objectIds: ObjectId[],\n args?: EdgeHttpGetArgs,\n ): Promise<void> {\n return this._call(`/spaces/${subspaceTag}/${spaceId}/queue/${queueId}`, {\n ...args,\n query: { ids: objectIds.join(',') },\n method: 'DELETE',\n });\n }\n\n private async _call<T>(path: string, args: EdgeHttpCallArgs): Promise<T> {\n const requestContext = args.context ?? new Context();\n const shouldRetry = createRetryHandler(args);\n let url = `${this._baseUrl}${path.startsWith('/') ? path.slice(1) : path}`;\n\n if (args.query) {\n const queryParams = new URLSearchParams();\n for (const [key, value] of Object.entries(args.query)) {\n queryParams.set(key, value.toString());\n }\n url += `?${queryParams.toString()}`;\n }\n\n log('call', { method: args.method, path, request: args.body });\n\n let handledAuth = false;\n let authHeader = this._authHeader;\n while (true) {\n let processingError: EdgeCallFailedError;\n let retryAfterHeaderValue: number = Number.NaN;\n try {\n const request = createRequest(args, authHeader);\n const response = await fetch(url, request);\n\n retryAfterHeaderValue = Number(response.headers.get('Retry-After'));\n\n if (response.ok) {\n const body = (await response.json()) as EdgeHttpResponse<T>;\n if (body.success) {\n return body.data;\n }\n\n log('unsuccessful edge response', { path, body });\n\n if (body.errorData?.type === 'auth_challenge' && typeof body.errorData?.challenge === 'string') {\n processingError = new EdgeAuthChallengeError(body.errorData.challenge, body.errorData);\n } else {\n processingError = EdgeCallFailedError.fromUnsuccessfulResponse(response, body);\n }\n } else if (response.status === 401 && !handledAuth) {\n authHeader = await this._handleUnauthorized(response);\n handledAuth = true;\n continue;\n } else {\n processingError = EdgeCallFailedError.fromHttpFailure(response);\n }\n } catch (error: any) {\n processingError = EdgeCallFailedError.fromProcessingFailureCause(error);\n }\n\n if (processingError.isRetryable && (await shouldRetry(requestContext, retryAfterHeaderValue))) {\n log('retrying edge request', { path, processingError });\n } else {\n throw processingError;\n }\n }\n }\n\n private async _handleUnauthorized(response: Response) {\n if (!this._edgeIdentity) {\n log.warn('edge unauthorized response received before identity was set');\n throw EdgeCallFailedError.fromHttpFailure(response);\n }\n const challenge = await handleAuthChallenge(response, this._edgeIdentity);\n this._authHeader = encodeAuthHeader(challenge);\n log('auth header updated');\n return this._authHeader;\n }\n}\n\nconst createRetryHandler = (args: EdgeHttpCallArgs) => {\n if (!args.retry || args.retry.count < 1) {\n return async () => false;\n }\n let retries = 0;\n const maxRetries = args.retry.count ?? DEFAULT_MAX_RETRIES_COUNT;\n const baseTimeout = args.retry.timeout ?? DEFAULT_RETRY_TIMEOUT;\n const jitter = args.retry.jitter ?? DEFAULT_RETRY_JITTER;\n return async (ctx: Context, retryAfter: number) => {\n if (++retries > maxRetries || ctx.disposed) {\n return false;\n }\n\n if (retryAfter) {\n await sleep(retryAfter);\n } else {\n const timeout = baseTimeout + Math.random() * jitter;\n await sleep(timeout);\n }\n\n return true;\n };\n};\n\nexport type RetryConfig = {\n /**\n * A number of call retries, not counting the initial request.\n */\n count: number;\n /**\n * Delay before retries in ms.\n */\n timeout?: number;\n /**\n * A random amount of time before retrying to help prevent large bursts of requests.\n */\n jitter?: number;\n};\n\nexport type EdgeHttpGetArgs = { context?: Context; retry?: RetryConfig };\n\nexport type EdgeHttpPostArgs = { context?: Context; body?: any; retry?: RetryConfig };\n\ntype EdgeHttpCallArgs = {\n method: string;\n body?: any;\n context?: Context;\n retry?: RetryConfig;\n query?: Record<string, string>;\n};\n\nconst createRequest = (args: EdgeHttpCallArgs, authHeader: string | undefined): RequestInit => {\n return {\n method: args.method,\n body: args.body && JSON.stringify(args.body),\n headers: authHeader ? { Authorization: authHeader } : undefined,\n };\n};\n\nconst encodeAuthHeader = (challenge: Uint8Array) => {\n const encodedChallenge = Buffer.from(challenge).toString('base64');\n return `VerifiablePresentation pb;base64,${encodedChallenge}`;\n};\n"],
5
- "mappings": "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",
6
- "names": ["Trigger", "scheduleMicroTask", "TriggerState", "PersistentLifecycle", "Resource", "log", "logInfo", "invariant", "schema", "handleAuthChallenge", "failedResponse", "identity", "status", "headerValue", "headers", "get", "startsWith", "challenge", "slice", "length", "presentation", "presentCredentials", "Buffer", "from", "getCodecForType", "encode", "WebSocket", "scheduleTask", "scheduleTaskInterval", "Context", "Resource", "invariant", "log", "logInfo", "buf", "MessageSchema", "SIGNAL_KEEPALIVE_INTERVAL", "SIGNAL_KEEPALIVE_TIMEOUT", "CLOUDFLARE_MESSAGE_LENGTH_LIMIT", "EdgeWsConnection", "Resource", "constructor", "_identity", "_connectionInfo", "_callbacks", "info", "open", "isOpen", "identity", "identityKey", "device", "peerKey", "send", "message", "invariant", "_ws", "log", "payload", "protocol", "getPayloadType", "encoded", "buf", "toBinary", "MessageSchema", "byteLength", "error", "serviceId", "_open", "WebSocket", "url", "toString", "protocolHeader", "onopen", "onConnected", "_scheduleHeartbeats", "verbose", "currentIdentity", "onclose", "event", "warn", "code", "reason", "onRestartRequired", "onerror", "onmessage", "type", "data", "_rescheduleHeartbeatTimeout", "toUint8Array", "fromBinary", "from", "source", "onMessage", "_close", "_inactivityTimeoutCtx", "dispose", "catch", "close", "undefined", "err", "Error", "includes", "scheduleTaskInterval", "_ctx", "Context", "scheduleTask", "logInfo", "EdgeConnectionClosedError", "Error", "constructor", "EdgeIdentityChangedError", "getEdgeUrlWithProtocol", "baseUrl", "protocol", "isSecure", "startsWith", "url", "URL", "toString", "DEFAULT_TIMEOUT", "EdgeClient", "Resource", "constructor", "_identity", "_config", "_persistentLifecycle", "PersistentLifecycle", "start", "_connect", "stop", "state", "_disconnect", "_messageListeners", "Set", "_reconnectListeners", "_currentConnection", "undefined", "_ready", "Trigger", "_isActive", "connection", "_baseWsUrl", "getEdgeUrlWithProtocol", "socketEndpoint", "_baseHttpUrl", "info", "open", "isOpen", "identity", "identityKey", "device", "peerKey", "isConnected", "Boolean", "TriggerState", "RESOLVED", "setIdentity", "log", "oldIdentity", "_closeCurrentConnection", "EdgeIdentityChangedError", "scheduleRestart", "onMessage", "listener", "add", "delete", "onReconnected", "scheduleMicroTask", "_ctx", "has", "error", "catch", "_open", "err", "warn", "_close", "close", "disposed", "path", "protocolHeader", "disableAuth", "_createAuthHeader", "restartRequired", "url", "URL", "toString", "EdgeWsConnection", "onConnected", "wake", "_notifyReconnected", "verbose", "onRestartRequired", "message", "_notifyMessageReceived", "from", "source", "type", "payload", "typeUrl", "Promise", "race", "wait", "timeout", "EdgeConnectionClosedError", "throw", "reset", "protocol", "getPayloadType", "send", "httpUrl", "response", "fetch", "method", "status", "encodePresentationWsAuthHeader", "handleAuthChallenge", "statusText", "logInfo", "encodedPresentation", "encodedToken", "Buffer", "replace", "replaceAll", "createCredential", "signPresentation", "invariant", "Keyring", "PublicKey", "createDeviceEdgeIdentity", "signer", "key", "identityKey", "toHex", "peerKey", "presentCredentials", "challenge", "presentation", "credentials", "assertion", "issuer", "subject", "signerKey", "nonce", "createChainEdgeIdentity", "chain", "credentialsToSign", "length", "signingKey", "createEphemeralEdgeIdentity", "keyring", "createKey", "createTestHaloEdgeIdentity", "deviceKey", "deviceAdmission", "credential", "createStubEdgeIdentity", "random", "Error", "sleep", "Context", "log", "EdgeCallFailedError", "EdgeAuthChallengeError", "DEFAULT_RETRY_TIMEOUT", "DEFAULT_RETRY_JITTER", "DEFAULT_MAX_RETRIES_COUNT", "EdgeHttpClient", "constructor", "baseUrl", "_baseUrl", "getEdgeUrlWithProtocol", "log", "url", "setIdentity", "identity", "_edgeIdentity", "identityKey", "peerKey", "_authHeader", "undefined", "createAgent", "body", "args", "_call", "method", "getAgentStatus", "request", "ownerIdentityKey", "toHex", "getCredentialsForNotarization", "spaceId", "notarizeCredentials", "joinSpaceByInvitation", "recoverIdentity", "executeWorkflow", "graphId", "input", "uploadFunction", "pathParts", "path", "functionId", "join", "queryQueue", "subspaceTag", "query", "queueId", "queryParams", "URLSearchParams", "after", "set", "before", "limit", "toString", "reverse", "objectIds", "insertIntoQueue", "objects", "deleteFromQueue", "ids", "requestContext", "context", "Context", "shouldRetry", "createRetryHandler", "startsWith", "slice", "key", "value", "Object", "entries", "handledAuth", "authHeader", "processingError", "retryAfterHeaderValue", "Number", "NaN", "createRequest", "response", "fetch", "headers", "get", "ok", "json", "success", "data", "errorData", "type", "challenge", "EdgeAuthChallengeError", "EdgeCallFailedError", "fromUnsuccessfulResponse", "status", "_handleUnauthorized", "fromHttpFailure", "error", "fromProcessingFailureCause", "isRetryable", "warn", "handleAuthChallenge", "encodeAuthHeader", "retry", "count", "retries", "maxRetries", "baseTimeout", "timeout", "jitter", "ctx", "retryAfter", "disposed", "sleep", "Math", "random", "JSON", "stringify", "Authorization", "encodedChallenge", "Buffer", "from"]
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport * from '@dxos/protocols/buf/dxos/edge/messenger_pb';\n\nexport * from './edge-client';\nexport * from './defs';\nexport * from './protocol';\nexport * from './errors';\nexport * from './auth';\nexport * from './edge-http-client';\nexport * from './edge-identity';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger, scheduleMicroTask, TriggerState, PersistentLifecycle } from '@dxos/async';\nimport { Resource, type Lifecycle } from '@dxos/context';\nimport { log, logInfo } from '@dxos/log';\nimport { type Message } from '@dxos/protocols/buf/dxos/edge/messenger_pb';\n\nimport { protocol } from './defs';\nimport { type EdgeIdentity, handleAuthChallenge } from './edge-identity';\nimport { EdgeWsConnection } from './edge-ws-connection';\nimport { EdgeConnectionClosedError, EdgeIdentityChangedError } from './errors';\nimport { type Protocol } from './protocol';\nimport { getEdgeUrlWithProtocol } from './utils';\n\nconst DEFAULT_TIMEOUT = 10_000;\n\nexport type MessageListener = (message: Message) => void;\nexport type ReconnectListener = () => void;\n\nexport interface EdgeConnection extends Required<Lifecycle> {\n get info(): any;\n get identityKey(): string;\n get peerKey(): string;\n get isOpen(): boolean;\n get isConnected(): boolean;\n setIdentity(identity: EdgeIdentity): void;\n onMessage(listener: MessageListener): () => void;\n onReconnected(listener: ReconnectListener): () => void;\n send(message: Message): Promise<void>;\n}\n\nexport type MessengerConfig = {\n socketEndpoint: string;\n timeout?: number;\n protocol?: Protocol;\n disableAuth?: boolean;\n};\n\n/**\n * Messenger client for EDGE:\n * - While open, uses PersistentLifecycle to keep an open EdgeWsConnection, reconnecting on failures.\n * - Manages identity and re-create EdgeWsConnection when identity changes.\n * - Dispatches connection state and message notifications.\n */\nexport class EdgeClient extends Resource implements EdgeConnection {\n private readonly _persistentLifecycle = new PersistentLifecycle<EdgeWsConnection>({\n start: async () => this._connect(),\n stop: async (state: EdgeWsConnection) => this._disconnect(state),\n });\n\n private readonly _messageListeners = new Set<MessageListener>();\n private readonly _reconnectListeners = new Set<ReconnectListener>();\n\n private readonly _baseWsUrl: string;\n private readonly _baseHttpUrl: string;\n\n private _currentConnection?: EdgeWsConnection = undefined;\n private _ready = new Trigger();\n\n constructor(\n private _identity: EdgeIdentity,\n private readonly _config: MessengerConfig,\n ) {\n super();\n this._baseWsUrl = getEdgeUrlWithProtocol(_config.socketEndpoint, 'ws');\n this._baseHttpUrl = getEdgeUrlWithProtocol(_config.socketEndpoint, 'http');\n }\n\n @logInfo\n public get info() {\n return {\n open: this.isOpen,\n identity: this._identity.identityKey,\n device: this._identity.peerKey,\n };\n }\n\n get isConnected() {\n return Boolean(this._currentConnection) && this._ready.state === TriggerState.RESOLVED;\n }\n\n get identityKey() {\n return this._identity.identityKey;\n }\n\n get peerKey() {\n return this._identity.peerKey;\n }\n\n setIdentity(identity: EdgeIdentity) {\n if (identity.identityKey !== this._identity.identityKey || identity.peerKey !== this._identity.peerKey) {\n log('Edge identity changed', { identity, oldIdentity: this._identity });\n this._identity = identity;\n this._closeCurrentConnection(new EdgeIdentityChangedError());\n this._persistentLifecycle.scheduleRestart();\n }\n }\n\n public onMessage(listener: MessageListener): () => void {\n this._messageListeners.add(listener);\n return () => this._messageListeners.delete(listener);\n }\n\n public onReconnected(listener: () => void): () => void {\n this._reconnectListeners.add(listener);\n if (this._ready.state === TriggerState.RESOLVED) {\n // Microtask so that listener is always called asynchronously, no matter the state of the ready trigger\n // at the moment of registration.\n scheduleMicroTask(this._ctx, () => {\n if (this._reconnectListeners.has(listener)) {\n try {\n listener();\n } catch (error) {\n log.catch(error);\n }\n }\n });\n }\n return () => this._reconnectListeners.delete(listener);\n }\n\n /**\n * Open connection to messaging service.\n */\n protected override async _open() {\n log('opening...', { info: this.info });\n this._persistentLifecycle.open().catch((err) => {\n log.warn('Error while opening connection', { err });\n });\n }\n\n /**\n * Close connection and free resources.\n */\n protected override async _close() {\n log('closing...', { peerKey: this._identity.peerKey });\n this._closeCurrentConnection();\n await this._persistentLifecycle.close();\n }\n\n private async _connect(): Promise<EdgeWsConnection | undefined> {\n if (this._ctx.disposed) {\n return undefined;\n }\n\n const identity = this._identity;\n const path = `/ws/${identity.identityKey}/${identity.peerKey}`;\n const protocolHeader = this._config.disableAuth ? undefined : await this._createAuthHeader(path);\n if (this._identity !== identity) {\n log('identity changed during auth header request');\n return undefined;\n }\n\n const restartRequired = new Trigger();\n const url = new URL(path, this._baseWsUrl);\n log('Opening websocket', { url: url.toString(), protocolHeader });\n const connection = new EdgeWsConnection(\n identity,\n { url, protocolHeader },\n {\n onConnected: () => {\n if (this._isActive(connection)) {\n this._ready.wake();\n this._notifyReconnected();\n } else {\n log.verbose('connected callback ignored, because connection is not active');\n }\n },\n onRestartRequired: () => {\n if (this._isActive(connection)) {\n this._closeCurrentConnection();\n this._persistentLifecycle.scheduleRestart();\n } else {\n log.verbose('restart requested by inactive connection');\n }\n restartRequired.wake();\n },\n onMessage: (message) => {\n if (this._isActive(connection)) {\n this._notifyMessageReceived(message);\n } else {\n log.verbose('ignored a message on inactive connection', {\n from: message.source,\n type: message.payload?.typeUrl,\n });\n }\n },\n },\n );\n this._currentConnection = connection;\n\n await connection.open();\n // Race with restartRequired so that restart is not blocked by _connect execution.\n // Wait on ready to attempt a reconnect if it times out.\n await Promise.race([this._ready.wait({ timeout: this._config.timeout ?? DEFAULT_TIMEOUT }), restartRequired]);\n\n return connection;\n }\n\n private async _disconnect(state: EdgeWsConnection) {\n await state.close();\n }\n\n private _closeCurrentConnection(error: Error = new EdgeConnectionClosedError()) {\n this._currentConnection = undefined;\n this._ready.throw(error);\n this._ready.reset();\n }\n\n private _notifyReconnected() {\n for (const listener of this._reconnectListeners) {\n try {\n listener();\n } catch (err) {\n log.error('ws reconnect listener failed', { err });\n }\n }\n }\n\n private _notifyMessageReceived(message: Message) {\n for (const listener of this._messageListeners) {\n try {\n listener(message);\n } catch (err) {\n log.error('ws incoming message processing failed', { err, payload: protocol.getPayloadType(message) });\n }\n }\n }\n\n /**\n * Send message.\n * NOTE: The message is guaranteed to be delivered but the service must respond with a message to confirm processing.\n */\n public async send(message: Message): Promise<void> {\n if (this._ready.state !== TriggerState.RESOLVED) {\n log('waiting for websocket to become ready');\n await this._ready.wait({ timeout: this._config.timeout ?? DEFAULT_TIMEOUT });\n }\n\n if (!this._currentConnection) {\n throw new EdgeConnectionClosedError();\n }\n\n if (\n message.source &&\n (message.source.peerKey !== this._identity.peerKey || message.source.identityKey !== this.identityKey)\n ) {\n throw new EdgeIdentityChangedError();\n }\n\n this._currentConnection.send(message);\n }\n\n private async _createAuthHeader(path: string): Promise<string | undefined> {\n const httpUrl = new URL(path, this._baseHttpUrl);\n httpUrl.protocol = getEdgeUrlWithProtocol(this._baseWsUrl.toString(), 'http');\n const response = await fetch(httpUrl, { method: 'GET' });\n if (response.status === 401) {\n return encodePresentationWsAuthHeader(await handleAuthChallenge(response, this._identity));\n } else {\n log.warn('no auth challenge from edge', { status: response.status, statusText: response.statusText });\n return undefined;\n }\n }\n\n private _isActive = (connection: EdgeWsConnection) => connection === this._currentConnection;\n}\n\nconst encodePresentationWsAuthHeader = (encodedPresentation: Uint8Array): string => {\n // = and / characters are not allowed in the WebSocket subprotocol header.\n const encodedToken = Buffer.from(encodedPresentation).toString('base64').replace(/=*$/, '').replaceAll('/', '|');\n return `base64url.bearer.authorization.dxos.org.${encodedToken}`;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { schema } from '@dxos/protocols/proto';\nimport { type Presentation } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nexport interface EdgeIdentity {\n peerKey: string;\n identityKey: string;\n /**\n * Returns credential presentation issued by the identity key.\n * Presentation must have the provided challenge.\n * Presentation may include ServiceAccess credentials.\n */\n presentCredentials({ challenge }: { challenge: Uint8Array }): Promise<Presentation>;\n}\n\nexport const handleAuthChallenge = async (failedResponse: Response, identity: EdgeIdentity): Promise<Uint8Array> => {\n invariant(failedResponse.status === 401);\n\n const headerValue = failedResponse.headers.get('Www-Authenticate');\n invariant(headerValue?.startsWith('VerifiablePresentation challenge='));\n\n const challenge = headerValue?.slice('VerifiablePresentation challenge='.length);\n invariant(challenge);\n\n const presentation = await identity.presentCredentials({ challenge: Buffer.from(challenge, 'base64') });\n return schema.getCodecForType('dxos.halo.credentials.Presentation').encode(presentation);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport WebSocket from 'isomorphic-ws';\n\nimport { scheduleTask, scheduleTaskInterval } from '@dxos/async';\nimport { Context, Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { buf } from '@dxos/protocols/buf';\nimport { MessageSchema, type Message } from '@dxos/protocols/buf/dxos/edge/messenger_pb';\n\nimport { protocol } from './defs';\nimport { type EdgeIdentity } from './edge-identity';\nimport { toUint8Array } from './protocol';\n\nconst SIGNAL_KEEPALIVE_INTERVAL = 4_000;\nconst SIGNAL_KEEPALIVE_TIMEOUT = 12_000;\n\n/**\n * 1MB websocket message limit: https://developers.cloudflare.com/durable-objects/platform/limits/\n */\nconst CLOUDFLARE_MESSAGE_LENGTH_LIMIT = 1024 * 1024;\n\nexport type EdgeWsConnectionCallbacks = {\n onConnected: () => void;\n onMessage: (message: Message) => void;\n onRestartRequired: () => void;\n};\n\nexport class EdgeWsConnection extends Resource {\n private _inactivityTimeoutCtx: Context | undefined;\n private _ws: WebSocket | undefined;\n\n constructor(\n private readonly _identity: EdgeIdentity,\n private readonly _connectionInfo: { url: URL; protocolHeader?: string },\n private readonly _callbacks: EdgeWsConnectionCallbacks,\n ) {\n super();\n }\n\n @logInfo\n public get info() {\n return {\n open: this.isOpen,\n identity: this._identity.identityKey,\n device: this._identity.peerKey,\n };\n }\n\n public send(message: Message) {\n invariant(this._ws);\n log('sending...', { peerKey: this._identity.peerKey, payload: protocol.getPayloadType(message) });\n const encoded = buf.toBinary(MessageSchema, message);\n if (encoded.byteLength >= CLOUDFLARE_MESSAGE_LENGTH_LIMIT) {\n log.error('edge message dropped due to websocket message limit', {\n byteLength: encoded.byteLength,\n serviceId: message.serviceId,\n payload: protocol.getPayloadType(message),\n });\n return;\n }\n this._ws.send(encoded);\n }\n\n protected override async _open() {\n this._ws = new WebSocket(\n this._connectionInfo.url.toString(),\n this._connectionInfo.protocolHeader ? [this._connectionInfo.protocolHeader] : [],\n );\n\n this._ws.onopen = () => {\n if (this.isOpen) {\n log('connected');\n this._callbacks.onConnected();\n this._scheduleHeartbeats();\n } else {\n log.verbose('connected after becoming inactive', { currentIdentity: this._identity });\n }\n };\n this._ws.onclose = (event) => {\n if (this.isOpen) {\n log.warn('disconnected while being open', { code: event.code, reason: event.reason });\n this._callbacks.onRestartRequired();\n }\n };\n this._ws.onerror = (event) => {\n if (this.isOpen) {\n log.warn('edge connection socket error', { error: event.error, info: event.message });\n this._callbacks.onRestartRequired();\n } else {\n log.verbose('error ignored on closed connection', { error: event.error });\n }\n };\n /**\n * https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent/data\n */\n this._ws.onmessage = async (event) => {\n if (!this.isOpen) {\n log.verbose('message ignored on closed connection', { event: event.type });\n return;\n }\n if (event.data === '__pong__') {\n this._rescheduleHeartbeatTimeout();\n return;\n }\n const data = await toUint8Array(event.data);\n if (this.isOpen) {\n const message = buf.fromBinary(MessageSchema, data);\n log('received', { from: message.source, payload: protocol.getPayloadType(message) });\n this._callbacks.onMessage(message);\n }\n };\n }\n\n protected override async _close() {\n void this._inactivityTimeoutCtx?.dispose().catch(() => {});\n\n try {\n this._ws?.close();\n this._ws = undefined;\n } catch (err) {\n if (err instanceof Error && err.message.includes('WebSocket is closed before the connection is established.')) {\n return;\n }\n log.warn('Error closing websocket', { err });\n }\n }\n\n private _scheduleHeartbeats() {\n invariant(this._ws);\n scheduleTaskInterval(\n this._ctx,\n async () => {\n // TODO(mykola): use RFC6455 ping/pong once implemented in the browser?\n // Cloudflare's worker responds to this `without interrupting hibernation`. https://developers.cloudflare.com/durable-objects/api/websockets/#setwebsocketautoresponse\n this._ws?.send('__ping__');\n },\n SIGNAL_KEEPALIVE_INTERVAL,\n );\n this._ws.send('__ping__');\n this._rescheduleHeartbeatTimeout();\n }\n\n private _rescheduleHeartbeatTimeout() {\n if (!this.isOpen) {\n return;\n }\n void this._inactivityTimeoutCtx?.dispose();\n this._inactivityTimeoutCtx = new Context();\n scheduleTask(\n this._inactivityTimeoutCtx,\n () => {\n if (this.isOpen) {\n log.warn('restart due to inactivity timeout');\n this._callbacks.onRestartRequired();\n }\n },\n SIGNAL_KEEPALIVE_TIMEOUT,\n );\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport class EdgeConnectionClosedError extends Error {\n constructor() {\n super('Edge connection closed.');\n }\n}\n\nexport class EdgeIdentityChangedError extends Error {\n constructor() {\n super('Edge identity changed.');\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const getEdgeUrlWithProtocol = (baseUrl: string, protocol: 'http' | 'ws') => {\n const isSecure = baseUrl.startsWith('https') || baseUrl.startsWith('wss');\n const url = new URL(baseUrl);\n url.protocol = protocol + (isSecure ? 's' : '');\n return url.toString();\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { createCredential, signPresentation } from '@dxos/credentials';\nimport { type Signer } from '@dxos/crypto';\nimport { invariant } from '@dxos/invariant';\nimport { Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { type Chain, type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport type { EdgeIdentity } from './edge-identity';\n\n/**\n * Edge identity backed by a device key without a credential chain.\n */\nexport const createDeviceEdgeIdentity = async (signer: Signer, key: PublicKey): Promise<EdgeIdentity> => {\n return {\n identityKey: key.toHex(),\n peerKey: key.toHex(),\n presentCredentials: async ({ challenge }) => {\n return signPresentation({\n presentation: {\n credentials: [\n // Verifier requires at least one credential in the presentation to establish the subject.\n await createCredential({\n assertion: {\n '@type': 'dxos.halo.credentials.Auth',\n },\n issuer: key,\n subject: key,\n signer,\n }),\n ],\n },\n signer,\n signerKey: key,\n nonce: challenge,\n });\n },\n };\n};\n\n/**\n * Edge identity backed by a chain of credentials.\n */\nexport const createChainEdgeIdentity = async (\n signer: Signer,\n identityKey: PublicKey,\n peerKey: PublicKey,\n chain: Chain | undefined,\n credentials: Credential[],\n): Promise<EdgeIdentity> => {\n const credentialsToSign =\n credentials.length > 0\n ? credentials\n : [\n await createCredential({\n assertion: {\n '@type': 'dxos.halo.credentials.Auth',\n },\n issuer: identityKey,\n subject: identityKey,\n signer,\n chain,\n signingKey: peerKey,\n }),\n ];\n\n return {\n identityKey: identityKey.toHex(),\n peerKey: peerKey.toHex(),\n presentCredentials: async ({ challenge }) => {\n // TODO: make chain required after device invitation flow update release\n invariant(chain);\n return signPresentation({\n presentation: {\n credentials: credentialsToSign,\n },\n signer,\n nonce: challenge,\n signerKey: peerKey,\n chain,\n });\n },\n };\n};\n\n/**\n * Edge identity backed by a random ephemeral key without HALO.\n */\nexport const createEphemeralEdgeIdentity = async (): Promise<EdgeIdentity> => {\n const keyring = new Keyring();\n const key = await keyring.createKey();\n return createDeviceEdgeIdentity(keyring, key);\n};\n\n/**\n * Creates a HALO chain of credentials to act as an edge identity.\n */\nexport const createTestHaloEdgeIdentity = async (\n signer: Signer,\n identityKey: PublicKey,\n deviceKey: PublicKey,\n): Promise<EdgeIdentity> => {\n const deviceAdmission = await createCredential({\n assertion: {\n '@type': 'dxos.halo.credentials.AuthorizedDevice',\n deviceKey,\n identityKey,\n },\n issuer: identityKey,\n subject: deviceKey,\n signer,\n });\n return createChainEdgeIdentity(signer, identityKey, deviceKey, { credential: deviceAdmission }, [\n await createCredential({\n assertion: {\n '@type': 'dxos.halo.credentials.Auth',\n },\n issuer: identityKey,\n subject: identityKey,\n signer,\n }),\n ]);\n};\n\nexport const createStubEdgeIdentity = (): EdgeIdentity => {\n const identityKey = PublicKey.random();\n const deviceKey = PublicKey.random();\n return {\n identityKey: identityKey.toHex(),\n peerKey: deviceKey.toHex(),\n presentCredentials: async () => {\n throw new Error('Stub identity does not support authentication.');\n },\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { sleep } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { type PublicKey, type SpaceId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport {\n EdgeCallFailedError,\n type EdgeHttpResponse,\n type GetNotarizationResponseBody,\n type PostNotarizationRequestBody,\n type JoinSpaceRequest,\n type JoinSpaceResponseBody,\n EdgeAuthChallengeError,\n type CreateAgentResponseBody,\n type CreateAgentRequestBody,\n type GetAgentStatusResponseBody,\n type RecoverIdentityRequest,\n type RecoverIdentityResponseBody,\n type UploadFunctionRequest,\n type UploadFunctionResponseBody,\n type ObjectId,\n type ExecuteWorkflowResponseBody,\n type QueueQuery,\n type QueryResult,\n type InitiateOAuthFlowRequest,\n type InitiateOAuthFlowResponse,\n} from '@dxos/protocols';\n\nimport { type EdgeIdentity, handleAuthChallenge } from './edge-identity';\nimport { getEdgeUrlWithProtocol } from './utils';\n\nconst DEFAULT_RETRY_TIMEOUT = 1500;\nconst DEFAULT_RETRY_JITTER = 500;\nconst DEFAULT_MAX_RETRIES_COUNT = 3;\n\nexport class EdgeHttpClient {\n private readonly _baseUrl: string;\n\n private _edgeIdentity: EdgeIdentity | undefined;\n\n /**\n * Auth header is cached until receiving the next 401 from EDGE, at which point it gets refreshed.\n */\n private _authHeader: string | undefined;\n\n constructor(baseUrl: string) {\n this._baseUrl = getEdgeUrlWithProtocol(baseUrl, 'http');\n log('created', { url: this._baseUrl });\n }\n\n get baseUrl() {\n return this._baseUrl;\n }\n\n setIdentity(identity: EdgeIdentity) {\n if (this._edgeIdentity?.identityKey !== identity.identityKey || this._edgeIdentity?.peerKey !== identity.peerKey) {\n this._edgeIdentity = identity;\n this._authHeader = undefined;\n }\n }\n\n public createAgent(body: CreateAgentRequestBody, args?: EdgeHttpGetArgs): Promise<CreateAgentResponseBody> {\n return this._call('/agents/create', { ...args, method: 'POST', body });\n }\n\n public getAgentStatus(\n request: { ownerIdentityKey: PublicKey },\n args?: EdgeHttpGetArgs,\n ): Promise<GetAgentStatusResponseBody> {\n return this._call(`/users/${request.ownerIdentityKey.toHex()}/agent/status`, { ...args, method: 'GET' });\n }\n\n public getCredentialsForNotarization(spaceId: SpaceId, args?: EdgeHttpGetArgs): Promise<GetNotarizationResponseBody> {\n return this._call(`/spaces/${spaceId}/notarization`, { ...args, method: 'GET' });\n }\n\n public async notarizeCredentials(\n spaceId: SpaceId,\n body: PostNotarizationRequestBody,\n args?: EdgeHttpGetArgs,\n ): Promise<void> {\n await this._call(`/spaces/${spaceId}/notarization`, { ...args, body, method: 'POST' });\n }\n\n public async joinSpaceByInvitation(\n spaceId: SpaceId,\n body: JoinSpaceRequest,\n args?: EdgeHttpGetArgs,\n ): Promise<JoinSpaceResponseBody> {\n return this._call(`/spaces/${spaceId}/join`, { ...args, body, method: 'POST' });\n }\n\n public async recoverIdentity(\n body: RecoverIdentityRequest,\n args?: EdgeHttpGetArgs,\n ): Promise<RecoverIdentityResponseBody> {\n return this._call('/identity/recover', { ...args, body, method: 'POST' });\n }\n\n public async executeWorkflow(\n spaceId: SpaceId,\n graphId: ObjectId,\n input: any,\n args?: EdgeHttpGetArgs,\n ): Promise<ExecuteWorkflowResponseBody> {\n return this._call(`/workflows/${spaceId}/${graphId}`, { ...args, body: input, method: 'POST' });\n }\n\n public async uploadFunction(\n pathParts: { spaceId: SpaceId; functionId?: string },\n body: UploadFunctionRequest,\n args?: EdgeHttpGetArgs,\n ): Promise<UploadFunctionResponseBody> {\n const path = ['functions', pathParts.spaceId, ...(pathParts.functionId ? [pathParts.functionId] : [])].join('/');\n return this._call(path, { ...args, body, method: 'PUT' });\n }\n\n public async initiateOAuthFlow(\n body: InitiateOAuthFlowRequest,\n args?: EdgeHttpGetArgs,\n ): Promise<InitiateOAuthFlowResponse> {\n return this._call('/oauth/initiate', { ...args, body, method: 'POST' });\n }\n\n public async queryQueue(\n subspaceTag: string,\n spaceId: SpaceId,\n query: QueueQuery,\n args?: EdgeHttpGetArgs,\n ): Promise<QueryResult> {\n const { queueId } = query;\n const queryParams = new URLSearchParams();\n if (query.after != null) {\n queryParams.set('after', query.after);\n }\n if (query.before != null) {\n queryParams.set('before', query.before);\n }\n if (query.limit != null) {\n queryParams.set('limit', query.limit.toString());\n }\n if (query.reverse != null) {\n queryParams.set('reverse', query.reverse.toString());\n }\n if (query.objectIds != null) {\n queryParams.set('objectIds', query.objectIds.join(','));\n }\n return this._call(`/spaces/${subspaceTag}/${spaceId}/queue/${queueId}/query?${queryParams.toString()}`, {\n ...args,\n method: 'GET',\n });\n }\n\n public async insertIntoQueue(\n subspaceTag: string,\n spaceId: SpaceId,\n queueId: ObjectId,\n objects: unknown[],\n args?: EdgeHttpGetArgs,\n ): Promise<void> {\n return this._call(`/spaces/${subspaceTag}/${spaceId}/queue/${queueId}`, {\n ...args,\n body: { objects },\n method: 'POST',\n });\n }\n\n async deleteFromQueue(\n subspaceTag: string,\n spaceId: SpaceId,\n queueId: ObjectId,\n objectIds: ObjectId[],\n args?: EdgeHttpGetArgs,\n ): Promise<void> {\n return this._call(`/spaces/${subspaceTag}/${spaceId}/queue/${queueId}`, {\n ...args,\n query: { ids: objectIds.join(',') },\n method: 'DELETE',\n });\n }\n\n private async _call<T>(path: string, args: EdgeHttpCallArgs): Promise<T> {\n const requestContext = args.context ?? new Context();\n const shouldRetry = createRetryHandler(args);\n let url = `${this._baseUrl}${path.startsWith('/') ? path.slice(1) : path}`;\n\n if (args.query) {\n const queryParams = new URLSearchParams();\n for (const [key, value] of Object.entries(args.query)) {\n queryParams.set(key, value.toString());\n }\n url += `?${queryParams.toString()}`;\n }\n\n log('call', { method: args.method, path, request: args.body });\n\n let handledAuth = false;\n let authHeader = this._authHeader;\n while (true) {\n let processingError: EdgeCallFailedError;\n let retryAfterHeaderValue: number = Number.NaN;\n try {\n const request = createRequest(args, authHeader);\n const response = await fetch(url, request);\n\n retryAfterHeaderValue = Number(response.headers.get('Retry-After'));\n\n if (response.ok) {\n const body = (await response.json()) as EdgeHttpResponse<T>;\n if (body.success) {\n return body.data;\n }\n\n log('unsuccessful edge response', { path, body });\n\n if (body.errorData?.type === 'auth_challenge' && typeof body.errorData?.challenge === 'string') {\n processingError = new EdgeAuthChallengeError(body.errorData.challenge, body.errorData);\n } else {\n processingError = EdgeCallFailedError.fromUnsuccessfulResponse(response, body);\n }\n } else if (response.status === 401 && !handledAuth) {\n authHeader = await this._handleUnauthorized(response);\n handledAuth = true;\n continue;\n } else {\n processingError = EdgeCallFailedError.fromHttpFailure(response);\n }\n } catch (error: any) {\n processingError = EdgeCallFailedError.fromProcessingFailureCause(error);\n }\n\n if (processingError.isRetryable && (await shouldRetry(requestContext, retryAfterHeaderValue))) {\n log('retrying edge request', { path, processingError });\n } else {\n throw processingError;\n }\n }\n }\n\n private async _handleUnauthorized(response: Response) {\n if (!this._edgeIdentity) {\n log.warn('edge unauthorized response received before identity was set');\n throw EdgeCallFailedError.fromHttpFailure(response);\n }\n const challenge = await handleAuthChallenge(response, this._edgeIdentity);\n this._authHeader = encodeAuthHeader(challenge);\n log('auth header updated');\n return this._authHeader;\n }\n}\n\nconst createRetryHandler = (args: EdgeHttpCallArgs) => {\n if (!args.retry || args.retry.count < 1) {\n return async () => false;\n }\n let retries = 0;\n const maxRetries = args.retry.count ?? DEFAULT_MAX_RETRIES_COUNT;\n const baseTimeout = args.retry.timeout ?? DEFAULT_RETRY_TIMEOUT;\n const jitter = args.retry.jitter ?? DEFAULT_RETRY_JITTER;\n return async (ctx: Context, retryAfter: number) => {\n if (++retries > maxRetries || ctx.disposed) {\n return false;\n }\n\n if (retryAfter) {\n await sleep(retryAfter);\n } else {\n const timeout = baseTimeout + Math.random() * jitter;\n await sleep(timeout);\n }\n\n return true;\n };\n};\n\nexport type RetryConfig = {\n /**\n * A number of call retries, not counting the initial request.\n */\n count: number;\n /**\n * Delay before retries in ms.\n */\n timeout?: number;\n /**\n * A random amount of time before retrying to help prevent large bursts of requests.\n */\n jitter?: number;\n};\n\nexport type EdgeHttpGetArgs = { context?: Context; retry?: RetryConfig };\n\nexport type EdgeHttpPostArgs = { context?: Context; body?: any; retry?: RetryConfig };\n\ntype EdgeHttpCallArgs = {\n method: string;\n body?: any;\n context?: Context;\n retry?: RetryConfig;\n query?: Record<string, string>;\n};\n\nconst createRequest = (args: EdgeHttpCallArgs, authHeader: string | undefined): RequestInit => {\n return {\n method: args.method,\n body: args.body && JSON.stringify(args.body),\n headers: authHeader ? { Authorization: authHeader } : undefined,\n };\n};\n\nconst encodeAuthHeader = (challenge: Uint8Array) => {\n const encodedChallenge = Buffer.from(challenge).toString('base64');\n return `VerifiablePresentation pb;base64,${encodedChallenge}`;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Trigger", "scheduleMicroTask", "TriggerState", "PersistentLifecycle", "Resource", "log", "logInfo", "invariant", "schema", "handleAuthChallenge", "failedResponse", "identity", "status", "headerValue", "headers", "get", "startsWith", "challenge", "slice", "length", "presentation", "presentCredentials", "Buffer", "from", "getCodecForType", "encode", "WebSocket", "scheduleTask", "scheduleTaskInterval", "Context", "Resource", "invariant", "log", "logInfo", "buf", "MessageSchema", "SIGNAL_KEEPALIVE_INTERVAL", "SIGNAL_KEEPALIVE_TIMEOUT", "CLOUDFLARE_MESSAGE_LENGTH_LIMIT", "EdgeWsConnection", "Resource", "constructor", "_identity", "_connectionInfo", "_callbacks", "info", "open", "isOpen", "identity", "identityKey", "device", "peerKey", "send", "message", "invariant", "_ws", "log", "payload", "protocol", "getPayloadType", "encoded", "buf", "toBinary", "MessageSchema", "byteLength", "error", "serviceId", "_open", "WebSocket", "url", "toString", "protocolHeader", "onopen", "onConnected", "_scheduleHeartbeats", "verbose", "currentIdentity", "onclose", "event", "warn", "code", "reason", "onRestartRequired", "onerror", "onmessage", "type", "data", "_rescheduleHeartbeatTimeout", "toUint8Array", "fromBinary", "from", "source", "onMessage", "_close", "_inactivityTimeoutCtx", "dispose", "catch", "close", "undefined", "err", "Error", "includes", "scheduleTaskInterval", "_ctx", "Context", "scheduleTask", "logInfo", "EdgeConnectionClosedError", "Error", "constructor", "EdgeIdentityChangedError", "getEdgeUrlWithProtocol", "baseUrl", "protocol", "isSecure", "startsWith", "url", "URL", "toString", "DEFAULT_TIMEOUT", "EdgeClient", "Resource", "constructor", "_identity", "_config", "_persistentLifecycle", "PersistentLifecycle", "start", "_connect", "stop", "state", "_disconnect", "_messageListeners", "Set", "_reconnectListeners", "_currentConnection", "undefined", "_ready", "Trigger", "_isActive", "connection", "_baseWsUrl", "getEdgeUrlWithProtocol", "socketEndpoint", "_baseHttpUrl", "info", "open", "isOpen", "identity", "identityKey", "device", "peerKey", "isConnected", "Boolean", "TriggerState", "RESOLVED", "setIdentity", "log", "oldIdentity", "_closeCurrentConnection", "EdgeIdentityChangedError", "scheduleRestart", "onMessage", "listener", "add", "delete", "onReconnected", "scheduleMicroTask", "_ctx", "has", "error", "catch", "_open", "err", "warn", "_close", "close", "disposed", "path", "protocolHeader", "disableAuth", "_createAuthHeader", "restartRequired", "url", "URL", "toString", "EdgeWsConnection", "onConnected", "wake", "_notifyReconnected", "verbose", "onRestartRequired", "message", "_notifyMessageReceived", "from", "source", "type", "payload", "typeUrl", "Promise", "race", "wait", "timeout", "EdgeConnectionClosedError", "throw", "reset", "protocol", "getPayloadType", "send", "httpUrl", "response", "fetch", "method", "status", "encodePresentationWsAuthHeader", "handleAuthChallenge", "statusText", "logInfo", "encodedPresentation", "encodedToken", "Buffer", "replace", "replaceAll", "createCredential", "signPresentation", "invariant", "Keyring", "PublicKey", "createDeviceEdgeIdentity", "signer", "key", "identityKey", "toHex", "peerKey", "presentCredentials", "challenge", "presentation", "credentials", "assertion", "issuer", "subject", "signerKey", "nonce", "createChainEdgeIdentity", "chain", "credentialsToSign", "length", "signingKey", "createEphemeralEdgeIdentity", "keyring", "createKey", "createTestHaloEdgeIdentity", "deviceKey", "deviceAdmission", "credential", "createStubEdgeIdentity", "random", "Error", "sleep", "Context", "log", "EdgeCallFailedError", "EdgeAuthChallengeError", "DEFAULT_RETRY_TIMEOUT", "DEFAULT_RETRY_JITTER", "DEFAULT_MAX_RETRIES_COUNT", "EdgeHttpClient", "constructor", "baseUrl", "_baseUrl", "getEdgeUrlWithProtocol", "log", "url", "setIdentity", "identity", "_edgeIdentity", "identityKey", "peerKey", "_authHeader", "undefined", "createAgent", "body", "args", "_call", "method", "getAgentStatus", "request", "ownerIdentityKey", "toHex", "getCredentialsForNotarization", "spaceId", "notarizeCredentials", "joinSpaceByInvitation", "recoverIdentity", "executeWorkflow", "graphId", "input", "uploadFunction", "pathParts", "path", "functionId", "join", "initiateOAuthFlow", "queryQueue", "subspaceTag", "query", "queueId", "queryParams", "URLSearchParams", "after", "set", "before", "limit", "toString", "reverse", "objectIds", "insertIntoQueue", "objects", "deleteFromQueue", "ids", "requestContext", "context", "Context", "shouldRetry", "createRetryHandler", "startsWith", "slice", "key", "value", "Object", "entries", "handledAuth", "authHeader", "processingError", "retryAfterHeaderValue", "Number", "NaN", "createRequest", "response", "fetch", "headers", "get", "ok", "json", "success", "data", "errorData", "type", "challenge", "EdgeAuthChallengeError", "EdgeCallFailedError", "fromUnsuccessfulResponse", "status", "_handleUnauthorized", "fromHttpFailure", "error", "fromProcessingFailureCause", "isRetryable", "warn", "handleAuthChallenge", "encodeAuthHeader", "retry", "count", "retries", "maxRetries", "baseTimeout", "timeout", "jitter", "ctx", "retryAfter", "disposed", "sleep", "Math", "random", "JSON", "stringify", "Authorization", "encodedChallenge", "Buffer", "from"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/core/mesh/edge-client/src/protocol.ts":{"bytes":10334,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/defs.ts":{"bytes":1607,"imports":[{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/edge-identity.ts":{"bytes":4069,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/edge-ws-connection.ts":{"bytes":21466,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/errors.ts":{"bytes":1265,"imports":[],"format":"esm"},"packages/core/mesh/edge-client/src/utils.ts":{"bytes":1451,"imports":[],"format":"esm"},"packages/core/mesh/edge-client/src/edge-client.ts":{"bytes":34174,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/core/mesh/edge-client/src/edge-identity.ts","kind":"import-statement","original":"./edge-identity"},{"path":"packages/core/mesh/edge-client/src/edge-ws-connection.ts","kind":"import-statement","original":"./edge-ws-connection"},{"path":"packages/core/mesh/edge-client/src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"packages/core/mesh/edge-client/src/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"packages/core/mesh/edge-client/src/auth.ts":{"bytes":12314,"imports":[{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/edge-http-client.ts":{"bytes":32953,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/edge-identity.ts","kind":"import-statement","original":"./edge-identity"},{"path":"packages/core/mesh/edge-client/src/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"packages/core/mesh/edge-client/src/index.ts":{"bytes":1228,"imports":[{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/edge-client.ts","kind":"import-statement","original":"./edge-client"},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"},{"path":"packages/core/mesh/edge-client/src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"packages/core/mesh/edge-client/src/auth.ts","kind":"import-statement","original":"./auth"},{"path":"packages/core/mesh/edge-client/src/edge-http-client.ts","kind":"import-statement","original":"./edge-http-client"},{"path":"packages/core/mesh/edge-client/src/edge-identity.ts","kind":"import-statement","original":"./edge-identity"}],"format":"esm"},"packages/core/mesh/edge-client/src/testing/test-utils.ts":{"bytes":13201,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"../defs"},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"../protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/testing/index.ts":{"bytes":516,"imports":[{"path":"packages/core/mesh/edge-client/src/testing/test-utils.ts","kind":"import-statement","original":"./test-utils"}],"format":"esm"}},"outputs":{"packages/core/mesh/edge-client/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":50696},"packages/core/mesh/edge-client/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs","kind":"import-statement"},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"exports":["EdgeClient","EdgeConnectionClosedError","EdgeHttpClient","EdgeIdentityChangedError","Protocol","createChainEdgeIdentity","createDeviceEdgeIdentity","createEphemeralEdgeIdentity","createStubEdgeIdentity","createTestHaloEdgeIdentity","getTypename","handleAuthChallenge","protocol","toUint8Array"],"entryPoint":"packages/core/mesh/edge-client/src/index.ts","inputs":{"packages/core/mesh/edge-client/src/index.ts":{"bytesInOutput":60},"packages/core/mesh/edge-client/src/edge-client.ts":{"bytesInOutput":9097},"packages/core/mesh/edge-client/src/edge-identity.ts":{"bytesInOutput":1150},"packages/core/mesh/edge-client/src/edge-ws-connection.ts":{"bytesInOutput":6334},"packages/core/mesh/edge-client/src/errors.ts":{"bytesInOutput":232},"packages/core/mesh/edge-client/src/utils.ts":{"bytesInOutput":244},"packages/core/mesh/edge-client/src/auth.ts":{"bytesInOutput":2993},"packages/core/mesh/edge-client/src/edge-http-client.ts":{"bytesInOutput":7742}},"bytes":28777},"packages/core/mesh/edge-client/dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6741},"packages/core/mesh/edge-client/dist/lib/browser/testing/index.mjs":{"imports":[{"path":"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs","kind":"import-statement"},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true}],"exports":["DEFAULT_PORT","createTestEdgeWsServer"],"entryPoint":"packages/core/mesh/edge-client/src/testing/index.ts","inputs":{"packages/core/mesh/edge-client/src/testing/test-utils.ts":{"bytesInOutput":3466},"packages/core/mesh/edge-client/src/testing/index.ts":{"bytesInOutput":0}},"bytes":3683},"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5676},"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs":{"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true}],"exports":["Protocol","getTypename","protocol","toUint8Array"],"inputs":{"packages/core/mesh/edge-client/src/protocol.ts":{"bytesInOutput":2600},"packages/core/mesh/edge-client/src/defs.ts":{"bytesInOutput":298}},"bytes":3106}}}
1
+ {"inputs":{"packages/core/mesh/edge-client/src/protocol.ts":{"bytes":10334,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/defs.ts":{"bytes":1607,"imports":[{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/edge-identity.ts":{"bytes":4069,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/edge-ws-connection.ts":{"bytes":21466,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/errors.ts":{"bytes":1265,"imports":[],"format":"esm"},"packages/core/mesh/edge-client/src/utils.ts":{"bytes":1451,"imports":[],"format":"esm"},"packages/core/mesh/edge-client/src/edge-client.ts":{"bytes":34174,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/core/mesh/edge-client/src/edge-identity.ts","kind":"import-statement","original":"./edge-identity"},{"path":"packages/core/mesh/edge-client/src/edge-ws-connection.ts","kind":"import-statement","original":"./edge-ws-connection"},{"path":"packages/core/mesh/edge-client/src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"packages/core/mesh/edge-client/src/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"packages/core/mesh/edge-client/src/auth.ts":{"bytes":12314,"imports":[{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/edge-http-client.ts":{"bytes":33738,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/edge-identity.ts","kind":"import-statement","original":"./edge-identity"},{"path":"packages/core/mesh/edge-client/src/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"packages/core/mesh/edge-client/src/index.ts":{"bytes":1228,"imports":[{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/edge-client.ts","kind":"import-statement","original":"./edge-client"},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"},{"path":"packages/core/mesh/edge-client/src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"packages/core/mesh/edge-client/src/auth.ts","kind":"import-statement","original":"./auth"},{"path":"packages/core/mesh/edge-client/src/edge-http-client.ts","kind":"import-statement","original":"./edge-http-client"},{"path":"packages/core/mesh/edge-client/src/edge-identity.ts","kind":"import-statement","original":"./edge-identity"}],"format":"esm"},"packages/core/mesh/edge-client/src/testing/test-utils.ts":{"bytes":13201,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"../defs"},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"../protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/testing/index.ts":{"bytes":516,"imports":[{"path":"packages/core/mesh/edge-client/src/testing/test-utils.ts","kind":"import-statement","original":"./test-utils"}],"format":"esm"}},"outputs":{"packages/core/mesh/edge-client/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":51125},"packages/core/mesh/edge-client/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs","kind":"import-statement"},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"exports":["EdgeClient","EdgeConnectionClosedError","EdgeHttpClient","EdgeIdentityChangedError","Protocol","createChainEdgeIdentity","createDeviceEdgeIdentity","createEphemeralEdgeIdentity","createStubEdgeIdentity","createTestHaloEdgeIdentity","getTypename","handleAuthChallenge","protocol","toUint8Array"],"entryPoint":"packages/core/mesh/edge-client/src/index.ts","inputs":{"packages/core/mesh/edge-client/src/index.ts":{"bytesInOutput":60},"packages/core/mesh/edge-client/src/edge-client.ts":{"bytesInOutput":9097},"packages/core/mesh/edge-client/src/edge-identity.ts":{"bytesInOutput":1150},"packages/core/mesh/edge-client/src/edge-ws-connection.ts":{"bytesInOutput":6334},"packages/core/mesh/edge-client/src/errors.ts":{"bytesInOutput":232},"packages/core/mesh/edge-client/src/utils.ts":{"bytesInOutput":244},"packages/core/mesh/edge-client/src/auth.ts":{"bytesInOutput":2993},"packages/core/mesh/edge-client/src/edge-http-client.ts":{"bytesInOutput":7885}},"bytes":28920},"packages/core/mesh/edge-client/dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6741},"packages/core/mesh/edge-client/dist/lib/browser/testing/index.mjs":{"imports":[{"path":"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs","kind":"import-statement"},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true}],"exports":["DEFAULT_PORT","createTestEdgeWsServer"],"entryPoint":"packages/core/mesh/edge-client/src/testing/index.ts","inputs":{"packages/core/mesh/edge-client/src/testing/test-utils.ts":{"bytesInOutput":3466},"packages/core/mesh/edge-client/src/testing/index.ts":{"bytesInOutput":0}},"bytes":3683},"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5676},"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs":{"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true}],"exports":["Protocol","getTypename","protocol","toUint8Array"],"inputs":{"packages/core/mesh/edge-client/src/protocol.ts":{"bytesInOutput":2600},"packages/core/mesh/edge-client/src/defs.ts":{"bytesInOutput":298}},"bytes":3106}}}
@@ -746,7 +746,7 @@ var EdgeHttpClient = class {
746
746
  url: this._baseUrl
747
747
  }, {
748
748
  F: __dxlog_file5,
749
- L: 49,
749
+ L: 51,
750
750
  S: this,
751
751
  C: (f, a) => f(...a)
752
752
  });
@@ -821,6 +821,13 @@ var EdgeHttpClient = class {
821
821
  method: "PUT"
822
822
  });
823
823
  }
824
+ async initiateOAuthFlow(body, args) {
825
+ return this._call("/oauth/initiate", {
826
+ ...args,
827
+ body,
828
+ method: "POST"
829
+ });
830
+ }
824
831
  async queryQueue(subspaceTag, spaceId, query, args) {
825
832
  const { queueId } = query;
826
833
  const queryParams = new URLSearchParams();
@@ -865,7 +872,7 @@ var EdgeHttpClient = class {
865
872
  async _call(path, args) {
866
873
  const requestContext = args.context ?? new import_context3.Context(void 0, {
867
874
  F: __dxlog_file5,
868
- L: 177
875
+ L: 186
869
876
  });
870
877
  const shouldRetry = createRetryHandler(args);
871
878
  let url = `${this._baseUrl}${path.startsWith("/") ? path.slice(1) : path}`;
@@ -882,7 +889,7 @@ var EdgeHttpClient = class {
882
889
  request: args.body
883
890
  }, {
884
891
  F: __dxlog_file5,
885
- L: 189,
892
+ L: 198,
886
893
  S: this,
887
894
  C: (f, a) => f(...a)
888
895
  });
@@ -905,7 +912,7 @@ var EdgeHttpClient = class {
905
912
  body
906
913
  }, {
907
914
  F: __dxlog_file5,
908
- L: 208,
915
+ L: 217,
909
916
  S: this,
910
917
  C: (f, a) => f(...a)
911
918
  });
@@ -930,7 +937,7 @@ var EdgeHttpClient = class {
930
937
  processingError
931
938
  }, {
932
939
  F: __dxlog_file5,
933
- L: 227,
940
+ L: 236,
934
941
  S: this,
935
942
  C: (f, a) => f(...a)
936
943
  });
@@ -943,7 +950,7 @@ var EdgeHttpClient = class {
943
950
  if (!this._edgeIdentity) {
944
951
  import_log3.log.warn("edge unauthorized response received before identity was set", void 0, {
945
952
  F: __dxlog_file5,
946
- L: 236,
953
+ L: 245,
947
954
  S: this,
948
955
  C: (f, a) => f(...a)
949
956
  });
@@ -953,7 +960,7 @@ var EdgeHttpClient = class {
953
960
  this._authHeader = encodeAuthHeader(challenge);
954
961
  (0, import_log3.log)("auth header updated", void 0, {
955
962
  F: __dxlog_file5,
956
- L: 241,
963
+ L: 250,
957
964
  S: this,
958
965
  C: (f, a) => f(...a)
959
966
  });