@undefineds.co/xpod 0.3.52 → 0.3.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/cli.json +72 -0
- package/config/components-ignore.json +21 -0
- package/config/extensions.local.initializer.json +77 -8
- package/config/resolver.json +72 -4
- package/dist/api/ApiServer.d.ts +12 -0
- package/dist/api/ApiServer.js +14 -3
- package/dist/api/ApiServer.js.map +1 -1
- package/dist/api/auth/NodeTokenAuthenticator.d.ts +0 -8
- package/dist/api/auth/NodeTokenAuthenticator.js +3 -46
- package/dist/api/auth/NodeTokenAuthenticator.js.map +1 -1
- package/dist/api/container/local.js +5 -36
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +6 -0
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/handlers/EdgeNodeSignalHandler.js +25 -3
- package/dist/api/handlers/EdgeNodeSignalHandler.js.map +1 -1
- package/dist/api/handlers/ReachabilityHandler.d.ts +13 -0
- package/dist/api/handlers/ReachabilityHandler.js +388 -0
- package/dist/api/handlers/ReachabilityHandler.js.map +1 -0
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/cli/lib/oidc-auth.js +27 -3
- package/dist/cli/lib/oidc-auth.js.map +1 -1
- package/dist/components/components.jsonld +14 -2
- package/dist/components/context.jsonld +439 -3
- package/dist/edge/EdgeNodeAgent.d.ts +43 -0
- package/dist/edge/EdgeNodeAgent.js +208 -1
- package/dist/edge/EdgeNodeAgent.js.map +1 -1
- package/dist/edge/EdgeNodeAgent.jsonld +166 -0
- package/dist/edge/EdgeNodeAgentInitializer.d.ts +20 -2
- package/dist/edge/EdgeNodeAgentInitializer.js +53 -2
- package/dist/edge/EdgeNodeAgentInitializer.js.map +1 -1
- package/dist/edge/EdgeNodeAgentInitializer.jsonld +409 -0
- package/dist/edge/reachability/CanonicalFetch.d.ts +7 -0
- package/dist/edge/reachability/CanonicalFetch.js +49 -0
- package/dist/edge/reachability/CanonicalFetch.js.map +1 -0
- package/dist/edge/reachability/CanonicalFetch.jsonld +25 -0
- package/dist/edge/reachability/ManagedClientFetch.d.ts +26 -0
- package/dist/edge/reachability/ManagedClientFetch.js +155 -0
- package/dist/edge/reachability/ManagedClientFetch.js.map +1 -0
- package/dist/edge/reachability/ManagedClientFetch.jsonld +83 -0
- package/dist/edge/reachability/ManagedClientP2PSmoke.d.ts +16 -0
- package/dist/edge/reachability/ManagedClientP2PSmoke.js +31 -0
- package/dist/edge/reachability/ManagedClientP2PSmoke.js.map +1 -0
- package/dist/edge/reachability/ManagedClientP2PSmoke.jsonld +65 -0
- package/dist/edge/reachability/ManagedRouteSelector.d.ts +7 -0
- package/dist/edge/reachability/ManagedRouteSelector.js +43 -0
- package/dist/edge/reachability/ManagedRouteSelector.js.map +1 -0
- package/dist/edge/reachability/ManagedRouteSelector.jsonld +29 -0
- package/dist/edge/reachability/P2PDataPlane.d.ts +37 -0
- package/dist/edge/reachability/P2PDataPlane.js +160 -0
- package/dist/edge/reachability/P2PDataPlane.js.map +1 -0
- package/dist/edge/reachability/P2PDataPlane.jsonld +134 -0
- package/dist/edge/reachability/P2PRealnetAcceptance.d.ts +74 -0
- package/dist/edge/reachability/P2PRealnetAcceptance.js +240 -0
- package/dist/edge/reachability/P2PRealnetAcceptance.js.map +1 -0
- package/dist/edge/reachability/P2PRealnetAcceptance.jsonld +283 -0
- package/dist/edge/reachability/P2PSignalingClient.d.ts +24 -0
- package/dist/edge/reachability/P2PSignalingClient.js +138 -0
- package/dist/edge/reachability/P2PSignalingClient.js.map +1 -0
- package/dist/edge/reachability/P2PSignalingClient.jsonld +79 -0
- package/dist/edge/reachability/ReachabilitySessionService.d.ts +55 -0
- package/dist/edge/reachability/ReachabilitySessionService.js +439 -0
- package/dist/edge/reachability/ReachabilitySessionService.js.map +1 -0
- package/dist/edge/reachability/ReachabilitySessionService.jsonld +196 -0
- package/dist/edge/reachability/RouteSetBuilder.d.ts +2 -0
- package/dist/edge/reachability/RouteSetBuilder.js +205 -0
- package/dist/edge/reachability/RouteSetBuilder.js.map +1 -0
- package/dist/edge/reachability/TcpP2PDataPlaneTransport.d.ts +47 -0
- package/dist/edge/reachability/TcpP2PDataPlaneTransport.js +281 -0
- package/dist/edge/reachability/TcpP2PDataPlaneTransport.js.map +1 -0
- package/dist/edge/reachability/TcpP2PDataPlaneTransport.jsonld +183 -0
- package/dist/edge/reachability/TcpP2PSignalingSession.d.ts +149 -0
- package/dist/edge/reachability/TcpP2PSignalingSession.js +699 -0
- package/dist/edge/reachability/TcpP2PSignalingSession.js.map +1 -0
- package/dist/edge/reachability/TcpP2PSignalingSession.jsonld +474 -0
- package/dist/edge/reachability/index.d.ts +12 -0
- package/dist/edge/reachability/index.js +29 -0
- package/dist/edge/reachability/index.js.map +1 -0
- package/dist/edge/reachability/types.d.ts +114 -0
- package/dist/edge/reachability/types.js +3 -0
- package/dist/edge/reachability/types.js.map +1 -0
- package/dist/edge/reachability/types.jsonld +457 -0
- package/dist/http/EdgeNodeProxyHttpHandler.d.ts +2 -0
- package/dist/http/EdgeNodeProxyHttpHandler.js +19 -1
- package/dist/http/EdgeNodeProxyHttpHandler.js.map +1 -1
- package/dist/http/EdgeNodeProxyHttpHandler.jsonld +8 -0
- package/dist/identity/drizzle/EdgeNodeRepository.js +1 -1
- package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/runtime/bootstrap.js +8 -0
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/service/EdgeNodeSignalClient.js +5 -1
- package/dist/service/EdgeNodeSignalClient.js.map +1 -1
- package/dist/storage/rdf/PostgresRdfEngine.d.ts +1 -0
- package/dist/storage/rdf/PostgresRdfEngine.js +53 -37
- package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
- package/dist/storage/rdf/PostgresRdfEngine.jsonld +4 -0
- package/dist/test-utils/index.d.ts +2 -0
- package/dist/test-utils/index.js +3 -1
- package/dist/test-utils/index.js.map +1 -1
- package/dist/test-utils/local-managed-client-p2p-e2e-smoke.d.ts +63 -0
- package/dist/test-utils/local-managed-client-p2p-e2e-smoke.js +478 -0
- package/dist/test-utils/local-managed-client-p2p-e2e-smoke.js.map +1 -0
- package/package.json +11 -4
- package/static/app/assets/_commonjsHelpers-B-UnjaXt.js +1 -0
- package/static/app/assets/index-AaQ1qxhy.js +171 -0
- package/static/app/assets/inrupt-smoke.js +131 -0
- package/static/app/assets/main.css +1 -0
- package/static/app/assets/main.js +6 -6
- package/static/app/index.html +2 -1
- package/static/app/inrupt-smoke.html +14 -0
- package/static/app/reachability.html +221 -0
- package/static/app/reachability.svg +7 -0
- package/static/app/reachability.webmanifest +18 -0
- package/static/app/signal-pod.html +293 -0
- package/static/app/assets/index.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"P2PRealnetAcceptance.js","sourceRoot":"","sources":["../../../src/edge/reachability/P2PRealnetAcceptance.ts"],"names":[],"mappings":"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","sourcesContent":["export interface P2PRealnetAcceptancePlanOptions {\n apiBaseUrl: string;\n nodeId: string;\n nodeToken: string;\n baseUrl: string;\n targetBaseUrl: string;\n nodeHost?: string;\n nodeAddress?: string;\n nodeLocalAddress?: string;\n clientHost?: string;\n clientAddress?: string;\n clientLocalAddress?: string;\n clientId: string;\n token?: string;\n resourceUrl: string;\n runTimeoutMs?: number;\n connectTimeoutMs?: number;\n waitTimeoutMs?: number;\n requestTimeoutMs?: number;\n pollIntervalMs?: number;\n winnerSelectionWindowMs?: number;\n windowSeconds?: number;\n maxClockErrorSeconds?: number;\n minRunWindowSeconds?: number;\n numPorts?: number;\n basePort?: number;\n portRange?: number;\n}\n\nexport interface P2PRealnetAcceptanceCommand {\n role: 'node' | 'client';\n command: string[];\n shell: string;\n description: string;\n}\n\nexport interface P2PRealnetAcceptanceMobilePlan {\n appLabel: 'LinX P2P Smoke';\n packageName: 'com.linxmobile.p2psmoke';\n fields: {\n idpUrl: string;\n storageUrl: string;\n clientId: string;\n resourcePath: string;\n };\n description: string;\n}\n\nexport interface P2PRealnetAcceptancePlan {\n kind: 'raw-tcp-p2p-realnet-acceptance';\n node: P2PRealnetAcceptanceCommand;\n client: P2PRealnetAcceptanceCommand;\n mobile: P2PRealnetAcceptanceMobilePlan;\n successCriteria: string[];\n routeFallbacksPreserved: string[];\n caveats: string[];\n}\n\nexport interface P2PRealnetAcceptanceVerifyOptions {\n clientId: string;\n expectedStatus?: number;\n expectedPutStatus?: number;\n requirePutStatus2xx?: boolean;\n nodeResult: unknown;\n clientResult: unknown;\n}\n\nexport interface P2PRealnetAcceptanceCheck {\n name: string;\n ok: boolean;\n detail: string;\n}\n\nexport interface P2PRealnetAcceptanceVerification {\n smokeOk: boolean;\n checks: P2PRealnetAcceptanceCheck[];\n routeFallbacksPreserved: string[];\n}\n\nconst FALLBACKS = ['Cloudflare Tunnel', 'FRP/SakuraFRP'] as const;\n\nexport function createP2PRealnetAcceptancePlan(\n options: P2PRealnetAcceptancePlanOptions,\n): P2PRealnetAcceptancePlan {\n const apiBaseUrl = ensureTrailingSlash(options.apiBaseUrl);\n const signalEndpoint = new URL('/v1/signal', apiBaseUrl).toString();\n const nodeCommand = compactCommand([\n 'bun',\n 'run',\n 'smoke:p2p:node-accept',\n '--signal-endpoint',\n signalEndpoint,\n '--node-id',\n options.nodeId,\n '--node-token',\n options.nodeToken,\n '--base-url',\n options.baseUrl,\n '--target-base-url',\n options.targetBaseUrl,\n ...optionalPair('--host', options.nodeHost),\n ...optionalPair('--address', options.nodeAddress),\n ...optionalPair('--local-address', options.nodeLocalAddress),\n ...optionalNumberPair('--connect-timeout-ms', options.connectTimeoutMs),\n ...optionalNumberPair('--winner-selection-window-ms', options.winnerSelectionWindowMs),\n ...optionalNumberPair('--run-timeout-ms', options.runTimeoutMs),\n '--require-accept',\n ]);\n const clientCommand = compactCommand([\n 'bun',\n 'run',\n 'smoke:p2p:managed',\n '--api-base-url',\n apiBaseUrl,\n '--node-id',\n options.nodeId,\n '--client-id',\n options.clientId,\n ...optionalPair('--token', options.token),\n ...optionalPair('--host', options.clientHost),\n ...optionalPair('--address', options.clientAddress),\n ...optionalPair('--local-address', options.clientLocalAddress),\n '--resource-url',\n options.resourceUrl,\n ...optionalNumberPair('--connect-timeout-ms', options.connectTimeoutMs),\n ...optionalNumberPair('--winner-selection-window-ms', options.winnerSelectionWindowMs),\n ...optionalNumberPair('--wait-timeout-ms', options.waitTimeoutMs),\n ...optionalNumberPair('--poll-interval-ms', options.pollIntervalMs),\n ...optionalNumberPair('--request-timeout-ms', options.requestTimeoutMs),\n ...optionalNumberPair('--window-seconds', options.windowSeconds),\n ...optionalNumberPair('--max-clock-error-seconds', options.maxClockErrorSeconds),\n ...optionalNumberPair('--min-run-window-seconds', options.minRunWindowSeconds),\n ...optionalNumberPair('--num-ports', options.numPorts),\n ...optionalNumberPair('--base-port', options.basePort),\n ...optionalNumberPair('--port-range', options.portRange),\n '--require-p2p',\n ]);\n\n return {\n kind: 'raw-tcp-p2p-realnet-acceptance',\n node: {\n role: 'node',\n command: nodeCommand,\n shell: shellQuoteCommand(nodeCommand),\n description: 'Run this on the local node/SP machine that can reach the local CSS/SP target base URL.',\n },\n client: {\n role: 'client',\n command: clientCommand,\n shell: shellQuoteCommand(clientCommand),\n description: 'Run this from a second non-browser runtime on another network/device.',\n },\n mobile: createMobilePlan(options),\n successCriteria: [\n `node accepted at least one raw TCP P2P session for client ${options.clientId}`,\n 'client selected route.kind=p2p and route.id=p2p-raw-tcp',\n 'client emitted a raw TCP connector success event',\n 'client evidence reports clientAddress=signal-observed',\n 'node accepted evidence for the same client reports nodeAddress=signal-observed',\n 'canonical Solid HTTP request returned the expected status over xpod-p2p-http/1',\n 'mobile write/read validation may require both putStatus and status to match expected 2xx values',\n 'both peers may omit host/address and rely on signal-observed address enrichment for port-only candidates',\n 'Cloudflare Tunnel and FRP/SakuraFRP remain available as independent user-tunnel fallback routes',\n ],\n routeFallbacksPreserved: [...FALLBACKS],\n caveats: [\n 'This is for non-browser runtimes only; it does not prove browser P2P because browsers cannot open raw TCP sockets.',\n 'A successful loopback/local smoke is not enough; run the node and client commands from separate network contexts for cross-NAT evidence.',\n 'When host/address is omitted, signal injects the observed address for port-only candidates; observed address discovery does not guarantee NAT reachability.',\n 'Mobile smoke evidence must still be verified with the same realnet verifier; phone USB is only for install/log collection, not the data plane.',\n 'Cloudflare Tunnel and FRP/SakuraFRP remain fallback routes and are not replaced by raw TCP P2P.',\n ],\n };\n}\n\nexport function verifyP2PRealnetAcceptance(\n options: P2PRealnetAcceptanceVerifyOptions,\n): P2PRealnetAcceptanceVerification {\n const node = asRecord(options.nodeResult);\n const client = asRecord(options.clientResult);\n const accepted = Array.isArray(node.accepted) ? node.accepted.filter(asRecord) : [];\n const route = asRecord(client.route);\n const connectorEvents = Array.isArray(client.connectorEvents) ? client.connectorEvents.filter(asRecord) : [];\n const routeFallbacksPreserved = fallbackEvidence(node);\n\n const checks: P2PRealnetAcceptanceCheck[] = [\n {\n name: 'node smoke ok',\n ok: node.smokeOk === true,\n detail: node.smokeOk === true ? 'node runner reported smokeOk=true' : 'node runner did not report smokeOk=true',\n },\n {\n name: 'node accepted client',\n ok: accepted.some((event) => event.clientId === options.clientId),\n detail: accepted.length > 0\n ? `accepted clients: ${accepted.map((event) => String(event.clientId ?? '<unknown>')).join(', ')}`\n : 'node runner accepted no sessions',\n },\n {\n name: 'client smoke ok',\n ok: client.smokeOk === true,\n detail: client.smokeOk === true ? 'client runner reported smokeOk=true' : 'client runner did not report smokeOk=true',\n },\n {\n name: 'client selected p2p route',\n ok: route.kind === 'p2p',\n detail: `client route.kind=${String(route.kind ?? '<missing>')}`,\n },\n {\n name: 'raw tcp connector succeeded',\n ok: connectorEvents.some((event) => event.type === 'success'),\n detail: connectorEvents.length > 0\n ? `connector events: ${connectorEvents.map((event) => String(event.type ?? '<unknown>')).join(', ')}`\n : 'client runner emitted no connector events',\n },\n {\n name: 'client address came from signal',\n ok: client.clientAddress === 'signal-observed',\n detail: `clientAddress=${String(client.clientAddress ?? '<missing>')}`,\n },\n {\n name: 'node address came from signal',\n ok: accepted.some((event) => event.clientId === options.clientId && event.nodeAddress === 'signal-observed'),\n detail: accepted.length > 0\n ? `accepted nodeAddress evidence: ${accepted.map((event) => `${String(event.clientId ?? '<unknown>')}=${String(event.nodeAddress ?? '<missing>')}`).join(', ')}`\n : 'node runner accepted no sessions',\n },\n {\n name: 'expected http status',\n ok: options.expectedStatus === undefined || client.status === options.expectedStatus,\n detail: options.expectedStatus === undefined\n ? 'no expected HTTP status was configured'\n : `client status=${String(client.status ?? '<missing>')}, expected=${options.expectedStatus}`,\n },\n {\n name: 'expected write http status',\n ok: options.expectedPutStatus === undefined || client.putStatus === options.expectedPutStatus,\n detail: options.expectedPutStatus === undefined\n ? 'no expected write HTTP status was configured'\n : `client putStatus=${String(client.putStatus ?? '<missing>')}, expected=${options.expectedPutStatus}`,\n },\n {\n name: 'write http status is 2xx',\n ok: options.requirePutStatus2xx !== true || is2xxStatus(client.putStatus),\n detail: options.requirePutStatus2xx !== true\n ? '2xx write HTTP status was not required'\n : `client putStatus=${String(client.putStatus ?? '<missing>')}`,\n },\n {\n name: 'tunnel fallbacks preserved',\n ok: FALLBACKS.every((fallback) => routeFallbacksPreserved.includes(fallback)),\n detail: `fallback evidence: ${routeFallbacksPreserved.join(', ') || '<none>'}`,\n },\n ];\n\n return {\n smokeOk: checks.every((check) => check.ok),\n checks,\n routeFallbacksPreserved,\n };\n}\n\n\nfunction createMobilePlan(options: P2PRealnetAcceptancePlanOptions): P2PRealnetAcceptanceMobilePlan {\n const resource = new URL(options.resourceUrl);\n const storageUrl = `${resource.origin}/`;\n return {\n appLabel: 'LinX P2P Smoke',\n packageName: 'com.linxmobile.p2psmoke',\n fields: {\n idpUrl: deriveIdpBaseUrlFromApiBaseUrl(options.apiBaseUrl),\n storageUrl,\n clientId: options.clientId,\n resourcePath: resource.pathname,\n },\n description: 'Install/run the mobile smoke package over USB/ADB/HDB/Xcode, log in on-device, and use the same clientId as the node acceptance command. The app obtains auth from its own client session; no signal token is a human input.',\n };\n}\n\nfunction deriveIdpBaseUrlFromApiBaseUrl(apiBaseUrl: string): string {\n const api = new URL(ensureTrailingSlash(apiBaseUrl));\n const labels = api.hostname.split('.');\n if (labels[0] === 'api' && labels.length > 1) {\n labels[0] = 'id';\n }\n return `${api.protocol}//${labels.join('.')}/`;\n}\n\nfunction optionalPair(name: string, value: string | undefined): string[] {\n return value === undefined || value.length === 0 ? [] : [name, value];\n}\n\nfunction optionalNumberPair(name: string, value: number | undefined): string[] {\n return value === undefined ? [] : [name, String(value)];\n}\n\nfunction compactCommand(parts: string[]): string[] {\n return parts.filter((part) => part.length > 0);\n}\n\nfunction shellQuoteCommand(command: string[]): string {\n return command.map(shellQuote).join(' ');\n}\n\nfunction shellQuote(value: string): string {\n if (/^[A-Za-z0-9_./:=@+-]+$/u.test(value)) {\n return value;\n }\n return `'${value.replace(/'/gu, `'\\\\''`)}'`;\n}\n\nfunction ensureTrailingSlash(value: string): string {\n return value.endsWith('/') ? value : `${value}/`;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {};\n}\n\nfunction is2xxStatus(value: unknown): boolean {\n return typeof value === 'number' && Number.isInteger(value) && value >= 200 && value <= 299;\n}\n\nfunction fallbackEvidence(node: Record<string, unknown>): string[] {\n const explicit = Array.isArray(node.routeFallbacksPreserved)\n ? node.routeFallbacksPreserved.filter((value): value is string => typeof value === 'string')\n : [];\n const caveats = Array.isArray(node.caveats)\n ? node.caveats.filter((value): value is string => typeof value === 'string').join('\\n')\n : '';\n return [...new Set([\n ...explicit,\n ...FALLBACKS.filter((fallback) => caveats.includes(fallback)),\n ])];\n}\n"]}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": [
|
|
3
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/components/context.jsonld"
|
|
4
|
+
],
|
|
5
|
+
"@id": "npmd:@undefineds.co/xpod",
|
|
6
|
+
"components": [
|
|
7
|
+
{
|
|
8
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions",
|
|
9
|
+
"@type": "AbstractClass",
|
|
10
|
+
"requireElement": "P2PRealnetAcceptancePlanOptions",
|
|
11
|
+
"parameters": [],
|
|
12
|
+
"memberFields": [
|
|
13
|
+
{
|
|
14
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_apiBaseUrl",
|
|
15
|
+
"memberFieldName": "apiBaseUrl"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_nodeId",
|
|
19
|
+
"memberFieldName": "nodeId"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_nodeToken",
|
|
23
|
+
"memberFieldName": "nodeToken"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_baseUrl",
|
|
27
|
+
"memberFieldName": "baseUrl"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_targetBaseUrl",
|
|
31
|
+
"memberFieldName": "targetBaseUrl"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_nodeHost",
|
|
35
|
+
"memberFieldName": "nodeHost"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_nodeAddress",
|
|
39
|
+
"memberFieldName": "nodeAddress"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_nodeLocalAddress",
|
|
43
|
+
"memberFieldName": "nodeLocalAddress"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_clientHost",
|
|
47
|
+
"memberFieldName": "clientHost"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_clientAddress",
|
|
51
|
+
"memberFieldName": "clientAddress"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_clientLocalAddress",
|
|
55
|
+
"memberFieldName": "clientLocalAddress"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_clientId",
|
|
59
|
+
"memberFieldName": "clientId"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_token",
|
|
63
|
+
"memberFieldName": "token"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_resourceUrl",
|
|
67
|
+
"memberFieldName": "resourceUrl"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_runTimeoutMs",
|
|
71
|
+
"memberFieldName": "runTimeoutMs"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_connectTimeoutMs",
|
|
75
|
+
"memberFieldName": "connectTimeoutMs"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_waitTimeoutMs",
|
|
79
|
+
"memberFieldName": "waitTimeoutMs"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_requestTimeoutMs",
|
|
83
|
+
"memberFieldName": "requestTimeoutMs"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_pollIntervalMs",
|
|
87
|
+
"memberFieldName": "pollIntervalMs"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_winnerSelectionWindowMs",
|
|
91
|
+
"memberFieldName": "winnerSelectionWindowMs"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_windowSeconds",
|
|
95
|
+
"memberFieldName": "windowSeconds"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_maxClockErrorSeconds",
|
|
99
|
+
"memberFieldName": "maxClockErrorSeconds"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_minRunWindowSeconds",
|
|
103
|
+
"memberFieldName": "minRunWindowSeconds"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_numPorts",
|
|
107
|
+
"memberFieldName": "numPorts"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_basePort",
|
|
111
|
+
"memberFieldName": "basePort"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlanOptions__member_portRange",
|
|
115
|
+
"memberFieldName": "portRange"
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"constructorArguments": []
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceCommand",
|
|
122
|
+
"@type": "AbstractClass",
|
|
123
|
+
"requireElement": "P2PRealnetAcceptanceCommand",
|
|
124
|
+
"parameters": [],
|
|
125
|
+
"memberFields": [
|
|
126
|
+
{
|
|
127
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceCommand__member_role",
|
|
128
|
+
"memberFieldName": "role"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceCommand__member_command",
|
|
132
|
+
"memberFieldName": "command"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceCommand__member_shell",
|
|
136
|
+
"memberFieldName": "shell"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceCommand__member_description",
|
|
140
|
+
"memberFieldName": "description"
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
"constructorArguments": []
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceMobilePlan",
|
|
147
|
+
"@type": "AbstractClass",
|
|
148
|
+
"requireElement": "P2PRealnetAcceptanceMobilePlan",
|
|
149
|
+
"parameters": [],
|
|
150
|
+
"memberFields": [
|
|
151
|
+
{
|
|
152
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceMobilePlan__member_appLabel",
|
|
153
|
+
"memberFieldName": "appLabel"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceMobilePlan__member_packageName",
|
|
157
|
+
"memberFieldName": "packageName"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceMobilePlan__member_fields",
|
|
161
|
+
"memberFieldName": "fields"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceMobilePlan__member_description",
|
|
165
|
+
"memberFieldName": "description"
|
|
166
|
+
}
|
|
167
|
+
],
|
|
168
|
+
"constructorArguments": []
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlan",
|
|
172
|
+
"@type": "AbstractClass",
|
|
173
|
+
"requireElement": "P2PRealnetAcceptancePlan",
|
|
174
|
+
"parameters": [],
|
|
175
|
+
"memberFields": [
|
|
176
|
+
{
|
|
177
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlan__member_kind",
|
|
178
|
+
"memberFieldName": "kind"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlan__member_node",
|
|
182
|
+
"memberFieldName": "node"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlan__member_client",
|
|
186
|
+
"memberFieldName": "client"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlan__member_mobile",
|
|
190
|
+
"memberFieldName": "mobile"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlan__member_successCriteria",
|
|
194
|
+
"memberFieldName": "successCriteria"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlan__member_routeFallbacksPreserved",
|
|
198
|
+
"memberFieldName": "routeFallbacksPreserved"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptancePlan__member_caveats",
|
|
202
|
+
"memberFieldName": "caveats"
|
|
203
|
+
}
|
|
204
|
+
],
|
|
205
|
+
"constructorArguments": []
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerifyOptions",
|
|
209
|
+
"@type": "AbstractClass",
|
|
210
|
+
"requireElement": "P2PRealnetAcceptanceVerifyOptions",
|
|
211
|
+
"parameters": [],
|
|
212
|
+
"memberFields": [
|
|
213
|
+
{
|
|
214
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerifyOptions__member_clientId",
|
|
215
|
+
"memberFieldName": "clientId"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerifyOptions__member_expectedStatus",
|
|
219
|
+
"memberFieldName": "expectedStatus"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerifyOptions__member_expectedPutStatus",
|
|
223
|
+
"memberFieldName": "expectedPutStatus"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerifyOptions__member_requirePutStatus2xx",
|
|
227
|
+
"memberFieldName": "requirePutStatus2xx"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerifyOptions__member_nodeResult",
|
|
231
|
+
"memberFieldName": "nodeResult"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerifyOptions__member_clientResult",
|
|
235
|
+
"memberFieldName": "clientResult"
|
|
236
|
+
}
|
|
237
|
+
],
|
|
238
|
+
"constructorArguments": []
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceCheck",
|
|
242
|
+
"@type": "AbstractClass",
|
|
243
|
+
"requireElement": "P2PRealnetAcceptanceCheck",
|
|
244
|
+
"parameters": [],
|
|
245
|
+
"memberFields": [
|
|
246
|
+
{
|
|
247
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceCheck__member_name",
|
|
248
|
+
"memberFieldName": "name"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceCheck__member_ok",
|
|
252
|
+
"memberFieldName": "ok"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceCheck__member_detail",
|
|
256
|
+
"memberFieldName": "detail"
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
"constructorArguments": []
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerification",
|
|
263
|
+
"@type": "AbstractClass",
|
|
264
|
+
"requireElement": "P2PRealnetAcceptanceVerification",
|
|
265
|
+
"parameters": [],
|
|
266
|
+
"memberFields": [
|
|
267
|
+
{
|
|
268
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerification__member_smokeOk",
|
|
269
|
+
"memberFieldName": "smokeOk"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerification__member_checks",
|
|
273
|
+
"memberFieldName": "checks"
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"@id": "undefineds:dist/edge/reachability/P2PRealnetAcceptance.jsonld#P2PRealnetAcceptanceVerification__member_routeFallbacksPreserved",
|
|
277
|
+
"memberFieldName": "routeFallbacksPreserved"
|
|
278
|
+
}
|
|
279
|
+
],
|
|
280
|
+
"constructorArguments": []
|
|
281
|
+
}
|
|
282
|
+
]
|
|
283
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { P2PCandidateUpdateRequest, P2PSession, P2PTransportCandidate } from './types';
|
|
2
|
+
export interface P2PSignalingClientOptions {
|
|
3
|
+
apiBaseUrl: string;
|
|
4
|
+
nodeId: string;
|
|
5
|
+
token?: string;
|
|
6
|
+
fetchImpl?: typeof fetch;
|
|
7
|
+
}
|
|
8
|
+
export interface CreateP2PSessionInput {
|
|
9
|
+
clientId: string;
|
|
10
|
+
capabilities?: string[];
|
|
11
|
+
candidates?: P2PTransportCandidate[];
|
|
12
|
+
}
|
|
13
|
+
export interface P2PSignalingClient {
|
|
14
|
+
createP2PSession(request: CreateP2PSessionInput): Promise<P2PSession>;
|
|
15
|
+
listP2PSessions(): Promise<P2PSession[]>;
|
|
16
|
+
getP2PSession(sessionIdOrUrl: string): Promise<P2PSession>;
|
|
17
|
+
addP2PCandidates(sessionIdOrUrl: string, request: P2PCandidateUpdateRequest): Promise<P2PSession>;
|
|
18
|
+
}
|
|
19
|
+
export declare class P2PSignalingRequestError extends Error {
|
|
20
|
+
readonly status: number;
|
|
21
|
+
readonly responseText: string;
|
|
22
|
+
constructor(message: string, status: number, responseText: string);
|
|
23
|
+
}
|
|
24
|
+
export declare function createP2PSignalingClient(options: P2PSignalingClientOptions): P2PSignalingClient;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.P2PSignalingRequestError = void 0;
|
|
4
|
+
exports.createP2PSignalingClient = createP2PSignalingClient;
|
|
5
|
+
class P2PSignalingRequestError extends Error {
|
|
6
|
+
constructor(message, status, responseText) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.status = status;
|
|
9
|
+
this.responseText = responseText;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.P2PSignalingRequestError = P2PSignalingRequestError;
|
|
13
|
+
function createP2PSignalingClient(options) {
|
|
14
|
+
return new HttpP2PSignalingClient(options);
|
|
15
|
+
}
|
|
16
|
+
class HttpP2PSignalingClient {
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
20
|
+
}
|
|
21
|
+
async createP2PSession(request) {
|
|
22
|
+
return this.requestSession(this.sessionsUrl(), {
|
|
23
|
+
method: 'POST',
|
|
24
|
+
body: {
|
|
25
|
+
kind: 'p2p',
|
|
26
|
+
clientId: request.clientId,
|
|
27
|
+
capabilities: request.capabilities ?? [],
|
|
28
|
+
candidates: request.candidates ?? [],
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async getP2PSession(sessionIdOrUrl) {
|
|
33
|
+
return this.requestSession(this.sessionUrl(sessionIdOrUrl), { method: 'GET' });
|
|
34
|
+
}
|
|
35
|
+
async listP2PSessions() {
|
|
36
|
+
const list = await this.requestSessionList(this.sessionsUrl(), { method: 'GET' });
|
|
37
|
+
return list.sessions;
|
|
38
|
+
}
|
|
39
|
+
async addP2PCandidates(sessionIdOrUrl, request) {
|
|
40
|
+
return this.requestSession(new URL('candidates', ensureTrailingSlash(this.sessionUrl(sessionIdOrUrl))).toString(), {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
body: request,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
sessionsUrl() {
|
|
46
|
+
return new URL(`/v1/signal/nodes/${encodeURIComponent(this.options.nodeId)}/sessions`, this.options.apiBaseUrl).toString();
|
|
47
|
+
}
|
|
48
|
+
sessionUrl(sessionIdOrUrl) {
|
|
49
|
+
if (/^https?:\/\//u.test(sessionIdOrUrl)) {
|
|
50
|
+
return sessionIdOrUrl;
|
|
51
|
+
}
|
|
52
|
+
return new URL(`${ensureTrailingSlash(this.sessionsUrl())}${encodeURIComponent(sessionIdOrUrl)}`).toString();
|
|
53
|
+
}
|
|
54
|
+
async requestSession(url, request) {
|
|
55
|
+
const headers = this.requestHeaders();
|
|
56
|
+
const response = await this.fetchImpl(url, {
|
|
57
|
+
method: request.method,
|
|
58
|
+
headers,
|
|
59
|
+
body: request.body === undefined ? undefined : JSON.stringify(request.body),
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
const responseText = await safeReadText(response);
|
|
63
|
+
throw new P2PSignalingRequestError(`P2P signaling request ${request.method} ${url} failed with ${response.status}`, response.status, responseText);
|
|
64
|
+
}
|
|
65
|
+
const body = await response.json();
|
|
66
|
+
return assertP2PSession(body);
|
|
67
|
+
}
|
|
68
|
+
async requestSessionList(url, request) {
|
|
69
|
+
const headers = this.requestHeaders();
|
|
70
|
+
const response = await this.fetchImpl(url, {
|
|
71
|
+
method: request.method,
|
|
72
|
+
headers,
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
const responseText = await safeReadText(response);
|
|
76
|
+
throw new P2PSignalingRequestError(`P2P signaling request ${request.method} ${url} failed with ${response.status}`, response.status, responseText);
|
|
77
|
+
}
|
|
78
|
+
const body = await response.json();
|
|
79
|
+
return assertP2PSessionList(body);
|
|
80
|
+
}
|
|
81
|
+
requestHeaders() {
|
|
82
|
+
const headers = new Headers({
|
|
83
|
+
accept: 'application/json',
|
|
84
|
+
'content-type': 'application/json',
|
|
85
|
+
'x-node-id': this.options.nodeId,
|
|
86
|
+
});
|
|
87
|
+
if (this.options.token) {
|
|
88
|
+
headers.set('authorization', `Bearer ${this.options.token}`);
|
|
89
|
+
}
|
|
90
|
+
return headers;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function assertP2PSession(value) {
|
|
94
|
+
if (!isP2PSession(value)) {
|
|
95
|
+
throw new Error('P2P signaling response is not a p2p session');
|
|
96
|
+
}
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
99
|
+
function assertP2PSessionList(value) {
|
|
100
|
+
if (!isP2PSessionList(value)) {
|
|
101
|
+
throw new Error('P2P signaling response is not a p2p session list');
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
function isP2PSessionList(value) {
|
|
106
|
+
return isRecord(value)
|
|
107
|
+
&& value.kind === 'p2p'
|
|
108
|
+
&& Array.isArray(value.sessions)
|
|
109
|
+
&& value.sessions.every(isP2PSession);
|
|
110
|
+
}
|
|
111
|
+
function isP2PSession(value) {
|
|
112
|
+
return isRecord(value)
|
|
113
|
+
&& value.kind === 'p2p'
|
|
114
|
+
&& typeof value.sessionId === 'string'
|
|
115
|
+
&& typeof value.nodeId === 'string'
|
|
116
|
+
&& typeof value.clientId === 'string'
|
|
117
|
+
&& typeof value.createdAt === 'string'
|
|
118
|
+
&& typeof value.expiresAt === 'string'
|
|
119
|
+
&& Array.isArray(value.nodeCandidates)
|
|
120
|
+
&& typeof value.signalingUrl === 'string'
|
|
121
|
+
&& Array.isArray(value.capabilities)
|
|
122
|
+
&& Array.isArray(value.candidates);
|
|
123
|
+
}
|
|
124
|
+
function ensureTrailingSlash(value) {
|
|
125
|
+
return value.endsWith('/') ? value : `${value}/`;
|
|
126
|
+
}
|
|
127
|
+
async function safeReadText(response) {
|
|
128
|
+
try {
|
|
129
|
+
return await response.text();
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return '';
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function isRecord(value) {
|
|
136
|
+
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=P2PSignalingClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"P2PSignalingClient.js","sourceRoot":"","sources":["../../../src/edge/reachability/P2PSignalingClient.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n P2PCandidateUpdateRequest,\n P2PSession,\n P2PSessionList,\n P2PSessionRequest,\n P2PTransportCandidate,\n} from './types';\n\nexport interface P2PSignalingClientOptions {\n apiBaseUrl: string;\n nodeId: string;\n token?: string;\n fetchImpl?: typeof fetch;\n}\n\nexport interface CreateP2PSessionInput {\n clientId: string;\n capabilities?: string[];\n candidates?: P2PTransportCandidate[];\n}\n\nexport interface P2PSignalingClient {\n createP2PSession(request: CreateP2PSessionInput): Promise<P2PSession>;\n listP2PSessions(): Promise<P2PSession[]>;\n getP2PSession(sessionIdOrUrl: string): Promise<P2PSession>;\n addP2PCandidates(sessionIdOrUrl: string, request: P2PCandidateUpdateRequest): Promise<P2PSession>;\n}\n\nexport class P2PSignalingRequestError extends Error {\n public constructor(\n message: string,\n public readonly status: number,\n public readonly responseText: string,\n ) {\n super(message);\n }\n}\n\nexport function createP2PSignalingClient(options: P2PSignalingClientOptions): P2PSignalingClient {\n return new HttpP2PSignalingClient(options);\n}\n\nclass HttpP2PSignalingClient implements P2PSignalingClient {\n private readonly fetchImpl: typeof fetch;\n\n public constructor(private readonly options: P2PSignalingClientOptions) {\n this.fetchImpl = options.fetchImpl ?? fetch;\n }\n\n public async createP2PSession(request: CreateP2PSessionInput): Promise<P2PSession> {\n return this.requestSession(this.sessionsUrl(), {\n method: 'POST',\n body: {\n kind: 'p2p',\n clientId: request.clientId,\n capabilities: request.capabilities ?? [],\n candidates: request.candidates ?? [],\n } satisfies P2PSessionRequest,\n });\n }\n\n public async getP2PSession(sessionIdOrUrl: string): Promise<P2PSession> {\n return this.requestSession(this.sessionUrl(sessionIdOrUrl), { method: 'GET' });\n }\n\n public async listP2PSessions(): Promise<P2PSession[]> {\n const list = await this.requestSessionList(this.sessionsUrl(), { method: 'GET' });\n return list.sessions;\n }\n\n public async addP2PCandidates(\n sessionIdOrUrl: string,\n request: P2PCandidateUpdateRequest,\n ): Promise<P2PSession> {\n return this.requestSession(new URL('candidates', ensureTrailingSlash(this.sessionUrl(sessionIdOrUrl))).toString(), {\n method: 'POST',\n body: request,\n });\n }\n\n private sessionsUrl(): string {\n return new URL(`/v1/signal/nodes/${encodeURIComponent(this.options.nodeId)}/sessions`, this.options.apiBaseUrl).toString();\n }\n\n private sessionUrl(sessionIdOrUrl: string): string {\n if (/^https?:\\/\\//u.test(sessionIdOrUrl)) {\n return sessionIdOrUrl;\n }\n return new URL(`${ensureTrailingSlash(this.sessionsUrl())}${encodeURIComponent(sessionIdOrUrl)}`).toString();\n }\n\n private async requestSession(url: string, request: {\n method: 'GET' | 'POST';\n body?: unknown;\n }): Promise<P2PSession> {\n const headers = this.requestHeaders();\n const response = await this.fetchImpl(url, {\n method: request.method,\n headers,\n body: request.body === undefined ? undefined : JSON.stringify(request.body),\n });\n if (!response.ok) {\n const responseText = await safeReadText(response);\n throw new P2PSignalingRequestError(\n `P2P signaling request ${request.method} ${url} failed with ${response.status}`,\n response.status,\n responseText,\n );\n }\n const body = await response.json() as unknown;\n return assertP2PSession(body);\n }\n\n private async requestSessionList(url: string, request: {\n method: 'GET';\n }): Promise<P2PSessionList> {\n const headers = this.requestHeaders();\n const response = await this.fetchImpl(url, {\n method: request.method,\n headers,\n });\n if (!response.ok) {\n const responseText = await safeReadText(response);\n throw new P2PSignalingRequestError(\n `P2P signaling request ${request.method} ${url} failed with ${response.status}`,\n response.status,\n responseText,\n );\n }\n const body = await response.json() as unknown;\n return assertP2PSessionList(body);\n }\n\n private requestHeaders(): Headers {\n const headers = new Headers({\n accept: 'application/json',\n 'content-type': 'application/json',\n 'x-node-id': this.options.nodeId,\n });\n if (this.options.token) {\n headers.set('authorization', `Bearer ${this.options.token}`);\n }\n return headers;\n }\n}\n\nfunction assertP2PSession(value: unknown): P2PSession {\n if (!isP2PSession(value)) {\n throw new Error('P2P signaling response is not a p2p session');\n }\n return value;\n}\n\nfunction assertP2PSessionList(value: unknown): P2PSessionList {\n if (!isP2PSessionList(value)) {\n throw new Error('P2P signaling response is not a p2p session list');\n }\n return value;\n}\n\nfunction isP2PSessionList(value: unknown): value is P2PSessionList {\n return isRecord(value)\n && value.kind === 'p2p'\n && Array.isArray(value.sessions)\n && value.sessions.every(isP2PSession);\n}\n\nfunction isP2PSession(value: unknown): value is P2PSession {\n return isRecord(value)\n && value.kind === 'p2p'\n && typeof value.sessionId === 'string'\n && typeof value.nodeId === 'string'\n && typeof value.clientId === 'string'\n && typeof value.createdAt === 'string'\n && typeof value.expiresAt === 'string'\n && Array.isArray(value.nodeCandidates)\n && typeof value.signalingUrl === 'string'\n && Array.isArray(value.capabilities)\n && Array.isArray(value.candidates);\n}\n\nfunction ensureTrailingSlash(value: string): string {\n return value.endsWith('/') ? value : `${value}/`;\n}\n\nasync function safeReadText(response: Response): Promise<string> {\n try {\n return await response.text();\n } catch {\n return '';\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": [
|
|
3
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/components/context.jsonld"
|
|
4
|
+
],
|
|
5
|
+
"@id": "npmd:@undefineds.co/xpod",
|
|
6
|
+
"components": [
|
|
7
|
+
{
|
|
8
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClientOptions",
|
|
9
|
+
"@type": "AbstractClass",
|
|
10
|
+
"requireElement": "P2PSignalingClientOptions",
|
|
11
|
+
"parameters": [],
|
|
12
|
+
"memberFields": [
|
|
13
|
+
{
|
|
14
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClientOptions__member_apiBaseUrl",
|
|
15
|
+
"memberFieldName": "apiBaseUrl"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClientOptions__member_nodeId",
|
|
19
|
+
"memberFieldName": "nodeId"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClientOptions__member_token",
|
|
23
|
+
"memberFieldName": "token"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClientOptions__member_fetchImpl",
|
|
27
|
+
"memberFieldName": "fetchImpl"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"constructorArguments": []
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#CreateP2PSessionInput",
|
|
34
|
+
"@type": "AbstractClass",
|
|
35
|
+
"requireElement": "CreateP2PSessionInput",
|
|
36
|
+
"parameters": [],
|
|
37
|
+
"memberFields": [
|
|
38
|
+
{
|
|
39
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#CreateP2PSessionInput__member_clientId",
|
|
40
|
+
"memberFieldName": "clientId"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#CreateP2PSessionInput__member_capabilities",
|
|
44
|
+
"memberFieldName": "capabilities"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#CreateP2PSessionInput__member_candidates",
|
|
48
|
+
"memberFieldName": "candidates"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"constructorArguments": []
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClient",
|
|
55
|
+
"@type": "AbstractClass",
|
|
56
|
+
"requireElement": "P2PSignalingClient",
|
|
57
|
+
"parameters": [],
|
|
58
|
+
"memberFields": [
|
|
59
|
+
{
|
|
60
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClient__member_createP2PSession",
|
|
61
|
+
"memberFieldName": "createP2PSession"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClient__member_listP2PSessions",
|
|
65
|
+
"memberFieldName": "listP2PSessions"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClient__member_getP2PSession",
|
|
69
|
+
"memberFieldName": "getP2PSession"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"@id": "undefineds:dist/edge/reachability/P2PSignalingClient.jsonld#P2PSignalingClient__member_addP2PCandidates",
|
|
73
|
+
"memberFieldName": "addP2PCandidates"
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"constructorArguments": []
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|