@undefineds.co/xpod 0.3.53 → 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.
Files changed (117) hide show
  1. package/config/cli.json +72 -0
  2. package/config/components-ignore.json +21 -0
  3. package/config/extensions.local.initializer.json +77 -8
  4. package/config/resolver.json +72 -4
  5. package/dist/api/ApiServer.d.ts +12 -0
  6. package/dist/api/ApiServer.js +14 -3
  7. package/dist/api/ApiServer.js.map +1 -1
  8. package/dist/api/auth/NodeTokenAuthenticator.d.ts +0 -8
  9. package/dist/api/auth/NodeTokenAuthenticator.js +3 -46
  10. package/dist/api/auth/NodeTokenAuthenticator.js.map +1 -1
  11. package/dist/api/container/local.js +5 -36
  12. package/dist/api/container/local.js.map +1 -1
  13. package/dist/api/container/routes.js +6 -0
  14. package/dist/api/container/routes.js.map +1 -1
  15. package/dist/api/handlers/EdgeNodeSignalHandler.js +25 -3
  16. package/dist/api/handlers/EdgeNodeSignalHandler.js.map +1 -1
  17. package/dist/api/handlers/ReachabilityHandler.d.ts +13 -0
  18. package/dist/api/handlers/ReachabilityHandler.js +388 -0
  19. package/dist/api/handlers/ReachabilityHandler.js.map +1 -0
  20. package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
  21. package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
  22. package/dist/components/components.jsonld +14 -2
  23. package/dist/components/context.jsonld +439 -3
  24. package/dist/edge/EdgeNodeAgent.d.ts +43 -0
  25. package/dist/edge/EdgeNodeAgent.js +208 -1
  26. package/dist/edge/EdgeNodeAgent.js.map +1 -1
  27. package/dist/edge/EdgeNodeAgent.jsonld +166 -0
  28. package/dist/edge/EdgeNodeAgentInitializer.d.ts +20 -2
  29. package/dist/edge/EdgeNodeAgentInitializer.js +53 -2
  30. package/dist/edge/EdgeNodeAgentInitializer.js.map +1 -1
  31. package/dist/edge/EdgeNodeAgentInitializer.jsonld +409 -0
  32. package/dist/edge/reachability/CanonicalFetch.d.ts +7 -0
  33. package/dist/edge/reachability/CanonicalFetch.js +49 -0
  34. package/dist/edge/reachability/CanonicalFetch.js.map +1 -0
  35. package/dist/edge/reachability/CanonicalFetch.jsonld +25 -0
  36. package/dist/edge/reachability/ManagedClientFetch.d.ts +26 -0
  37. package/dist/edge/reachability/ManagedClientFetch.js +155 -0
  38. package/dist/edge/reachability/ManagedClientFetch.js.map +1 -0
  39. package/dist/edge/reachability/ManagedClientFetch.jsonld +83 -0
  40. package/dist/edge/reachability/ManagedClientP2PSmoke.d.ts +16 -0
  41. package/dist/edge/reachability/ManagedClientP2PSmoke.js +31 -0
  42. package/dist/edge/reachability/ManagedClientP2PSmoke.js.map +1 -0
  43. package/dist/edge/reachability/ManagedClientP2PSmoke.jsonld +65 -0
  44. package/dist/edge/reachability/ManagedRouteSelector.d.ts +7 -0
  45. package/dist/edge/reachability/ManagedRouteSelector.js +43 -0
  46. package/dist/edge/reachability/ManagedRouteSelector.js.map +1 -0
  47. package/dist/edge/reachability/ManagedRouteSelector.jsonld +29 -0
  48. package/dist/edge/reachability/P2PDataPlane.d.ts +37 -0
  49. package/dist/edge/reachability/P2PDataPlane.js +160 -0
  50. package/dist/edge/reachability/P2PDataPlane.js.map +1 -0
  51. package/dist/edge/reachability/P2PDataPlane.jsonld +134 -0
  52. package/dist/edge/reachability/P2PRealnetAcceptance.d.ts +74 -0
  53. package/dist/edge/reachability/P2PRealnetAcceptance.js +240 -0
  54. package/dist/edge/reachability/P2PRealnetAcceptance.js.map +1 -0
  55. package/dist/edge/reachability/P2PRealnetAcceptance.jsonld +283 -0
  56. package/dist/edge/reachability/P2PSignalingClient.d.ts +24 -0
  57. package/dist/edge/reachability/P2PSignalingClient.js +138 -0
  58. package/dist/edge/reachability/P2PSignalingClient.js.map +1 -0
  59. package/dist/edge/reachability/P2PSignalingClient.jsonld +79 -0
  60. package/dist/edge/reachability/ReachabilitySessionService.d.ts +55 -0
  61. package/dist/edge/reachability/ReachabilitySessionService.js +439 -0
  62. package/dist/edge/reachability/ReachabilitySessionService.js.map +1 -0
  63. package/dist/edge/reachability/ReachabilitySessionService.jsonld +196 -0
  64. package/dist/edge/reachability/RouteSetBuilder.d.ts +2 -0
  65. package/dist/edge/reachability/RouteSetBuilder.js +205 -0
  66. package/dist/edge/reachability/RouteSetBuilder.js.map +1 -0
  67. package/dist/edge/reachability/TcpP2PDataPlaneTransport.d.ts +47 -0
  68. package/dist/edge/reachability/TcpP2PDataPlaneTransport.js +281 -0
  69. package/dist/edge/reachability/TcpP2PDataPlaneTransport.js.map +1 -0
  70. package/dist/edge/reachability/TcpP2PDataPlaneTransport.jsonld +183 -0
  71. package/dist/edge/reachability/TcpP2PSignalingSession.d.ts +149 -0
  72. package/dist/edge/reachability/TcpP2PSignalingSession.js +699 -0
  73. package/dist/edge/reachability/TcpP2PSignalingSession.js.map +1 -0
  74. package/dist/edge/reachability/TcpP2PSignalingSession.jsonld +474 -0
  75. package/dist/edge/reachability/index.d.ts +12 -0
  76. package/dist/edge/reachability/index.js +29 -0
  77. package/dist/edge/reachability/index.js.map +1 -0
  78. package/dist/edge/reachability/types.d.ts +114 -0
  79. package/dist/edge/reachability/types.js +3 -0
  80. package/dist/edge/reachability/types.js.map +1 -0
  81. package/dist/edge/reachability/types.jsonld +457 -0
  82. package/dist/http/EdgeNodeProxyHttpHandler.d.ts +2 -0
  83. package/dist/http/EdgeNodeProxyHttpHandler.js +19 -1
  84. package/dist/http/EdgeNodeProxyHttpHandler.js.map +1 -1
  85. package/dist/http/EdgeNodeProxyHttpHandler.jsonld +8 -0
  86. package/dist/identity/drizzle/EdgeNodeRepository.js +1 -1
  87. package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
  88. package/dist/index.d.ts +4 -1
  89. package/dist/index.js +5 -2
  90. package/dist/index.js.map +1 -1
  91. package/dist/runtime/bootstrap.js +8 -0
  92. package/dist/runtime/bootstrap.js.map +1 -1
  93. package/dist/service/EdgeNodeSignalClient.js +5 -1
  94. package/dist/service/EdgeNodeSignalClient.js.map +1 -1
  95. package/dist/storage/rdf/PostgresRdfEngine.d.ts +1 -0
  96. package/dist/storage/rdf/PostgresRdfEngine.js +53 -37
  97. package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
  98. package/dist/storage/rdf/PostgresRdfEngine.jsonld +4 -0
  99. package/dist/test-utils/index.d.ts +2 -0
  100. package/dist/test-utils/index.js +3 -1
  101. package/dist/test-utils/index.js.map +1 -1
  102. package/dist/test-utils/local-managed-client-p2p-e2e-smoke.d.ts +63 -0
  103. package/dist/test-utils/local-managed-client-p2p-e2e-smoke.js +478 -0
  104. package/dist/test-utils/local-managed-client-p2p-e2e-smoke.js.map +1 -0
  105. package/package.json +11 -4
  106. package/static/app/assets/_commonjsHelpers-B-UnjaXt.js +1 -0
  107. package/static/app/assets/index-AaQ1qxhy.js +171 -0
  108. package/static/app/assets/inrupt-smoke.js +131 -0
  109. package/static/app/assets/main.css +1 -0
  110. package/static/app/assets/main.js +6 -6
  111. package/static/app/index.html +2 -1
  112. package/static/app/inrupt-smoke.html +14 -0
  113. package/static/app/reachability.html +221 -0
  114. package/static/app/reachability.svg +7 -0
  115. package/static/app/reachability.webmanifest +18 -0
  116. package/static/app/signal-pod.html +293 -0
  117. package/static/app/assets/index.css +0 -1
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./RouteSetBuilder"), exports);
19
+ __exportStar(require("./ReachabilitySessionService"), exports);
20
+ __exportStar(require("./ManagedRouteSelector"), exports);
21
+ __exportStar(require("./CanonicalFetch"), exports);
22
+ __exportStar(require("./P2PDataPlane"), exports);
23
+ __exportStar(require("./P2PSignalingClient"), exports);
24
+ __exportStar(require("./TcpP2PDataPlaneTransport"), exports);
25
+ __exportStar(require("./TcpP2PSignalingSession"), exports);
26
+ __exportStar(require("./ManagedClientFetch"), exports);
27
+ __exportStar(require("./ManagedClientP2PSmoke"), exports);
28
+ __exportStar(require("./P2PRealnetAcceptance"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/edge/reachability/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,oDAAkC;AAClC,+DAA6C;AAC7C,yDAAuC;AACvC,mDAAiC;AACjC,iDAA+B;AAC/B,uDAAqC;AACrC,6DAA2C;AAC3C,2DAAyC;AACzC,uDAAqC;AACrC,0DAAwC;AACxC,yDAAuC","sourcesContent":["export * from './types';\nexport * from './RouteSetBuilder';\nexport * from './ReachabilitySessionService';\nexport * from './ManagedRouteSelector';\nexport * from './CanonicalFetch';\nexport * from './P2PDataPlane';\nexport * from './P2PSignalingClient';\nexport * from './TcpP2PDataPlaneTransport';\nexport * from './TcpP2PSignalingSession';\nexport * from './ManagedClientFetch';\nexport * from './ManagedClientP2PSmoke';\nexport * from './P2PRealnetAcceptance';\n"]}
@@ -0,0 +1,114 @@
1
+ export type AccessRouteKind = 'loopback' | 'lan' | 'public-direct' | 'p2p' | 'user-tunnel' | 'xpod-relay';
2
+ export type AccessRouteVisibility = 'local-only' | 'same-account' | 'authorized-client' | 'public';
3
+ export type AccessRouteHealth = 'unknown' | 'healthy' | 'degraded' | 'unreachable';
4
+ export interface AccessRoute {
5
+ id: string;
6
+ nodeId: string;
7
+ canonicalUrl: string;
8
+ kind: AccessRouteKind;
9
+ targetUrl: string;
10
+ priority: number;
11
+ requiresManagedClient: boolean;
12
+ visibility: AccessRouteVisibility;
13
+ health: AccessRouteHealth;
14
+ lastCheckedAt?: string;
15
+ expiresAt?: string;
16
+ metadata?: Record<string, unknown>;
17
+ }
18
+ export interface RouteSet {
19
+ nodeId: string;
20
+ canonicalUrl: string;
21
+ generatedAt: string;
22
+ routes: AccessRoute[];
23
+ }
24
+ export type RouteAudience = 'public' | 'managed';
25
+ export interface BuildRouteSetSource {
26
+ nodeId: string;
27
+ canonicalUrl?: string;
28
+ publicUrl?: string;
29
+ subdomain?: string;
30
+ baseStorageDomain?: string;
31
+ ipv4?: string;
32
+ ipv6?: string;
33
+ publicPort?: number;
34
+ connectivityStatus?: string;
35
+ metadata?: Record<string, unknown> | null;
36
+ }
37
+ export interface BuildRouteSetOptions {
38
+ audience?: RouteAudience;
39
+ now?: Date;
40
+ baseStorageDomain?: string;
41
+ }
42
+ export interface P2PSessionRequest {
43
+ kind?: 'p2p';
44
+ clientId: string;
45
+ owner?: P2PSessionOwner;
46
+ capabilities?: string[];
47
+ candidates?: unknown[];
48
+ }
49
+ export interface P2PSessionOwner {
50
+ type: 'solid';
51
+ webId: string;
52
+ }
53
+ export type P2PCandidateRole = 'client' | 'node';
54
+ export interface P2PTransportCandidate {
55
+ id: string;
56
+ role: P2PCandidateRole;
57
+ sourceId: string;
58
+ createdAt: string;
59
+ protocol?: string;
60
+ transport?: string;
61
+ host?: string;
62
+ address?: string;
63
+ port?: number;
64
+ url?: string;
65
+ priority?: number;
66
+ metadata?: Record<string, unknown>;
67
+ }
68
+ export interface P2PCandidateUpdateRequest {
69
+ role: P2PCandidateRole;
70
+ sourceId: string;
71
+ candidates: unknown[];
72
+ }
73
+ export interface P2PSessionLimits {
74
+ maxCandidatesPerUpdate: number;
75
+ maxCandidatesTotal: number;
76
+ }
77
+ export interface P2PSession {
78
+ sessionId: string;
79
+ kind: 'p2p';
80
+ nodeId: string;
81
+ clientId: string;
82
+ owner?: P2PSessionOwner;
83
+ auditId?: string;
84
+ createdAt: string;
85
+ expiresAt: string;
86
+ nodeCandidates: AccessRoute[];
87
+ signalingUrl: string;
88
+ capabilities: string[];
89
+ candidates: P2PTransportCandidate[];
90
+ limits?: P2PSessionLimits;
91
+ }
92
+ export interface P2PSessionList {
93
+ kind: 'p2p';
94
+ sessions: P2PSession[];
95
+ }
96
+ export interface RelaySessionRequest {
97
+ kind?: 'relay';
98
+ reason: string;
99
+ ttlSeconds?: number;
100
+ bandwidthLimitBytes?: number;
101
+ bandwidthLimitBps?: number;
102
+ }
103
+ export interface RelaySession {
104
+ sessionId: string;
105
+ kind: 'relay';
106
+ auditId: string;
107
+ nodeId: string;
108
+ createdAt: string;
109
+ expiresAt: string;
110
+ reason: string;
111
+ bandwidthLimitBytes: number;
112
+ bandwidthLimitBps?: number;
113
+ route: AccessRoute;
114
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/edge/reachability/types.ts"],"names":[],"mappings":"","sourcesContent":["export type AccessRouteKind =\n | 'loopback'\n | 'lan'\n | 'public-direct'\n | 'p2p'\n | 'user-tunnel'\n | 'xpod-relay';\n\nexport type AccessRouteVisibility = 'local-only' | 'same-account' | 'authorized-client' | 'public';\n\nexport type AccessRouteHealth = 'unknown' | 'healthy' | 'degraded' | 'unreachable';\n\nexport interface AccessRoute {\n id: string;\n nodeId: string;\n canonicalUrl: string;\n kind: AccessRouteKind;\n targetUrl: string;\n priority: number;\n requiresManagedClient: boolean;\n visibility: AccessRouteVisibility;\n health: AccessRouteHealth;\n lastCheckedAt?: string;\n expiresAt?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RouteSet {\n nodeId: string;\n canonicalUrl: string;\n generatedAt: string;\n routes: AccessRoute[];\n}\n\nexport type RouteAudience = 'public' | 'managed';\n\nexport interface BuildRouteSetSource {\n nodeId: string;\n canonicalUrl?: string;\n publicUrl?: string;\n subdomain?: string;\n baseStorageDomain?: string;\n ipv4?: string;\n ipv6?: string;\n publicPort?: number;\n connectivityStatus?: string;\n metadata?: Record<string, unknown> | null;\n}\n\nexport interface BuildRouteSetOptions {\n audience?: RouteAudience;\n now?: Date;\n baseStorageDomain?: string;\n}\n\nexport interface P2PSessionRequest {\n kind?: 'p2p';\n clientId: string;\n owner?: P2PSessionOwner;\n capabilities?: string[];\n candidates?: unknown[];\n}\n\nexport interface P2PSessionOwner {\n type: 'solid';\n webId: string;\n}\n\nexport type P2PCandidateRole = 'client' | 'node';\n\nexport interface P2PTransportCandidate {\n id: string;\n role: P2PCandidateRole;\n sourceId: string;\n createdAt: string;\n protocol?: string;\n transport?: string;\n host?: string;\n address?: string;\n port?: number;\n url?: string;\n priority?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface P2PCandidateUpdateRequest {\n role: P2PCandidateRole;\n sourceId: string;\n candidates: unknown[];\n}\n\nexport interface P2PSessionLimits {\n maxCandidatesPerUpdate: number;\n maxCandidatesTotal: number;\n}\n\nexport interface P2PSession {\n sessionId: string;\n kind: 'p2p';\n nodeId: string;\n clientId: string;\n owner?: P2PSessionOwner;\n auditId?: string;\n createdAt: string;\n expiresAt: string;\n nodeCandidates: AccessRoute[];\n signalingUrl: string;\n capabilities: string[];\n candidates: P2PTransportCandidate[];\n limits?: P2PSessionLimits;\n}\n\nexport interface P2PSessionList {\n kind: 'p2p';\n sessions: P2PSession[];\n}\n\nexport interface RelaySessionRequest {\n kind?: 'relay';\n reason: string;\n ttlSeconds?: number;\n bandwidthLimitBytes?: number;\n bandwidthLimitBps?: number;\n}\n\nexport interface RelaySession {\n sessionId: string;\n kind: 'relay';\n auditId: string;\n nodeId: string;\n createdAt: string;\n expiresAt: string;\n reason: string;\n bandwidthLimitBytes: number;\n bandwidthLimitBps?: number;\n route: AccessRoute;\n}\n"]}
@@ -0,0 +1,457 @@
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/types.jsonld#AccessRoute",
9
+ "@type": "AbstractClass",
10
+ "requireElement": "AccessRoute",
11
+ "parameters": [],
12
+ "memberFields": [
13
+ {
14
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_id",
15
+ "memberFieldName": "id"
16
+ },
17
+ {
18
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_nodeId",
19
+ "memberFieldName": "nodeId"
20
+ },
21
+ {
22
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_canonicalUrl",
23
+ "memberFieldName": "canonicalUrl"
24
+ },
25
+ {
26
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_kind",
27
+ "memberFieldName": "kind"
28
+ },
29
+ {
30
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_targetUrl",
31
+ "memberFieldName": "targetUrl"
32
+ },
33
+ {
34
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_priority",
35
+ "memberFieldName": "priority"
36
+ },
37
+ {
38
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_requiresManagedClient",
39
+ "memberFieldName": "requiresManagedClient"
40
+ },
41
+ {
42
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_visibility",
43
+ "memberFieldName": "visibility"
44
+ },
45
+ {
46
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_health",
47
+ "memberFieldName": "health"
48
+ },
49
+ {
50
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_lastCheckedAt",
51
+ "memberFieldName": "lastCheckedAt"
52
+ },
53
+ {
54
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_expiresAt",
55
+ "memberFieldName": "expiresAt"
56
+ },
57
+ {
58
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#AccessRoute__member_metadata",
59
+ "memberFieldName": "metadata"
60
+ }
61
+ ],
62
+ "constructorArguments": []
63
+ },
64
+ {
65
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RouteSet",
66
+ "@type": "AbstractClass",
67
+ "requireElement": "RouteSet",
68
+ "parameters": [],
69
+ "memberFields": [
70
+ {
71
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RouteSet__member_nodeId",
72
+ "memberFieldName": "nodeId"
73
+ },
74
+ {
75
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RouteSet__member_canonicalUrl",
76
+ "memberFieldName": "canonicalUrl"
77
+ },
78
+ {
79
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RouteSet__member_generatedAt",
80
+ "memberFieldName": "generatedAt"
81
+ },
82
+ {
83
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RouteSet__member_routes",
84
+ "memberFieldName": "routes"
85
+ }
86
+ ],
87
+ "constructorArguments": []
88
+ },
89
+ {
90
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource",
91
+ "@type": "AbstractClass",
92
+ "requireElement": "BuildRouteSetSource",
93
+ "parameters": [],
94
+ "memberFields": [
95
+ {
96
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_nodeId",
97
+ "memberFieldName": "nodeId"
98
+ },
99
+ {
100
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_canonicalUrl",
101
+ "memberFieldName": "canonicalUrl"
102
+ },
103
+ {
104
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_publicUrl",
105
+ "memberFieldName": "publicUrl"
106
+ },
107
+ {
108
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_subdomain",
109
+ "memberFieldName": "subdomain"
110
+ },
111
+ {
112
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_baseStorageDomain",
113
+ "memberFieldName": "baseStorageDomain"
114
+ },
115
+ {
116
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_ipv4",
117
+ "memberFieldName": "ipv4"
118
+ },
119
+ {
120
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_ipv6",
121
+ "memberFieldName": "ipv6"
122
+ },
123
+ {
124
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_publicPort",
125
+ "memberFieldName": "publicPort"
126
+ },
127
+ {
128
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_connectivityStatus",
129
+ "memberFieldName": "connectivityStatus"
130
+ },
131
+ {
132
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetSource__member_metadata",
133
+ "memberFieldName": "metadata"
134
+ }
135
+ ],
136
+ "constructorArguments": []
137
+ },
138
+ {
139
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetOptions",
140
+ "@type": "AbstractClass",
141
+ "requireElement": "BuildRouteSetOptions",
142
+ "parameters": [],
143
+ "memberFields": [
144
+ {
145
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetOptions__member_audience",
146
+ "memberFieldName": "audience"
147
+ },
148
+ {
149
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetOptions__member_now",
150
+ "memberFieldName": "now"
151
+ },
152
+ {
153
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#BuildRouteSetOptions__member_baseStorageDomain",
154
+ "memberFieldName": "baseStorageDomain"
155
+ }
156
+ ],
157
+ "constructorArguments": []
158
+ },
159
+ {
160
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionRequest",
161
+ "@type": "AbstractClass",
162
+ "requireElement": "P2PSessionRequest",
163
+ "parameters": [],
164
+ "memberFields": [
165
+ {
166
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionRequest__member_kind",
167
+ "memberFieldName": "kind"
168
+ },
169
+ {
170
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionRequest__member_clientId",
171
+ "memberFieldName": "clientId"
172
+ },
173
+ {
174
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionRequest__member_owner",
175
+ "memberFieldName": "owner"
176
+ },
177
+ {
178
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionRequest__member_capabilities",
179
+ "memberFieldName": "capabilities"
180
+ },
181
+ {
182
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionRequest__member_candidates",
183
+ "memberFieldName": "candidates"
184
+ }
185
+ ],
186
+ "constructorArguments": []
187
+ },
188
+ {
189
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionOwner",
190
+ "@type": "AbstractClass",
191
+ "requireElement": "P2PSessionOwner",
192
+ "parameters": [],
193
+ "memberFields": [
194
+ {
195
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionOwner__member_type",
196
+ "memberFieldName": "type"
197
+ },
198
+ {
199
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionOwner__member_webId",
200
+ "memberFieldName": "webId"
201
+ }
202
+ ],
203
+ "constructorArguments": []
204
+ },
205
+ {
206
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate",
207
+ "@type": "AbstractClass",
208
+ "requireElement": "P2PTransportCandidate",
209
+ "parameters": [],
210
+ "memberFields": [
211
+ {
212
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_id",
213
+ "memberFieldName": "id"
214
+ },
215
+ {
216
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_role",
217
+ "memberFieldName": "role"
218
+ },
219
+ {
220
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_sourceId",
221
+ "memberFieldName": "sourceId"
222
+ },
223
+ {
224
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_createdAt",
225
+ "memberFieldName": "createdAt"
226
+ },
227
+ {
228
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_protocol",
229
+ "memberFieldName": "protocol"
230
+ },
231
+ {
232
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_transport",
233
+ "memberFieldName": "transport"
234
+ },
235
+ {
236
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_host",
237
+ "memberFieldName": "host"
238
+ },
239
+ {
240
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_address",
241
+ "memberFieldName": "address"
242
+ },
243
+ {
244
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_port",
245
+ "memberFieldName": "port"
246
+ },
247
+ {
248
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_url",
249
+ "memberFieldName": "url"
250
+ },
251
+ {
252
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_priority",
253
+ "memberFieldName": "priority"
254
+ },
255
+ {
256
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PTransportCandidate__member_metadata",
257
+ "memberFieldName": "metadata"
258
+ }
259
+ ],
260
+ "constructorArguments": []
261
+ },
262
+ {
263
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PCandidateUpdateRequest",
264
+ "@type": "AbstractClass",
265
+ "requireElement": "P2PCandidateUpdateRequest",
266
+ "parameters": [],
267
+ "memberFields": [
268
+ {
269
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PCandidateUpdateRequest__member_role",
270
+ "memberFieldName": "role"
271
+ },
272
+ {
273
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PCandidateUpdateRequest__member_sourceId",
274
+ "memberFieldName": "sourceId"
275
+ },
276
+ {
277
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PCandidateUpdateRequest__member_candidates",
278
+ "memberFieldName": "candidates"
279
+ }
280
+ ],
281
+ "constructorArguments": []
282
+ },
283
+ {
284
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionLimits",
285
+ "@type": "AbstractClass",
286
+ "requireElement": "P2PSessionLimits",
287
+ "parameters": [],
288
+ "memberFields": [
289
+ {
290
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionLimits__member_maxCandidatesPerUpdate",
291
+ "memberFieldName": "maxCandidatesPerUpdate"
292
+ },
293
+ {
294
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionLimits__member_maxCandidatesTotal",
295
+ "memberFieldName": "maxCandidatesTotal"
296
+ }
297
+ ],
298
+ "constructorArguments": []
299
+ },
300
+ {
301
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession",
302
+ "@type": "AbstractClass",
303
+ "requireElement": "P2PSession",
304
+ "parameters": [],
305
+ "memberFields": [
306
+ {
307
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_sessionId",
308
+ "memberFieldName": "sessionId"
309
+ },
310
+ {
311
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_kind",
312
+ "memberFieldName": "kind"
313
+ },
314
+ {
315
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_nodeId",
316
+ "memberFieldName": "nodeId"
317
+ },
318
+ {
319
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_clientId",
320
+ "memberFieldName": "clientId"
321
+ },
322
+ {
323
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_owner",
324
+ "memberFieldName": "owner"
325
+ },
326
+ {
327
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_auditId",
328
+ "memberFieldName": "auditId"
329
+ },
330
+ {
331
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_createdAt",
332
+ "memberFieldName": "createdAt"
333
+ },
334
+ {
335
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_expiresAt",
336
+ "memberFieldName": "expiresAt"
337
+ },
338
+ {
339
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_nodeCandidates",
340
+ "memberFieldName": "nodeCandidates"
341
+ },
342
+ {
343
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_signalingUrl",
344
+ "memberFieldName": "signalingUrl"
345
+ },
346
+ {
347
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_capabilities",
348
+ "memberFieldName": "capabilities"
349
+ },
350
+ {
351
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_candidates",
352
+ "memberFieldName": "candidates"
353
+ },
354
+ {
355
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSession__member_limits",
356
+ "memberFieldName": "limits"
357
+ }
358
+ ],
359
+ "constructorArguments": []
360
+ },
361
+ {
362
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionList",
363
+ "@type": "AbstractClass",
364
+ "requireElement": "P2PSessionList",
365
+ "parameters": [],
366
+ "memberFields": [
367
+ {
368
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionList__member_kind",
369
+ "memberFieldName": "kind"
370
+ },
371
+ {
372
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#P2PSessionList__member_sessions",
373
+ "memberFieldName": "sessions"
374
+ }
375
+ ],
376
+ "constructorArguments": []
377
+ },
378
+ {
379
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySessionRequest",
380
+ "@type": "AbstractClass",
381
+ "requireElement": "RelaySessionRequest",
382
+ "parameters": [],
383
+ "memberFields": [
384
+ {
385
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySessionRequest__member_kind",
386
+ "memberFieldName": "kind"
387
+ },
388
+ {
389
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySessionRequest__member_reason",
390
+ "memberFieldName": "reason"
391
+ },
392
+ {
393
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySessionRequest__member_ttlSeconds",
394
+ "memberFieldName": "ttlSeconds"
395
+ },
396
+ {
397
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySessionRequest__member_bandwidthLimitBytes",
398
+ "memberFieldName": "bandwidthLimitBytes"
399
+ },
400
+ {
401
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySessionRequest__member_bandwidthLimitBps",
402
+ "memberFieldName": "bandwidthLimitBps"
403
+ }
404
+ ],
405
+ "constructorArguments": []
406
+ },
407
+ {
408
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession",
409
+ "@type": "AbstractClass",
410
+ "requireElement": "RelaySession",
411
+ "parameters": [],
412
+ "memberFields": [
413
+ {
414
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_sessionId",
415
+ "memberFieldName": "sessionId"
416
+ },
417
+ {
418
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_kind",
419
+ "memberFieldName": "kind"
420
+ },
421
+ {
422
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_auditId",
423
+ "memberFieldName": "auditId"
424
+ },
425
+ {
426
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_nodeId",
427
+ "memberFieldName": "nodeId"
428
+ },
429
+ {
430
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_createdAt",
431
+ "memberFieldName": "createdAt"
432
+ },
433
+ {
434
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_expiresAt",
435
+ "memberFieldName": "expiresAt"
436
+ },
437
+ {
438
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_reason",
439
+ "memberFieldName": "reason"
440
+ },
441
+ {
442
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_bandwidthLimitBytes",
443
+ "memberFieldName": "bandwidthLimitBytes"
444
+ },
445
+ {
446
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_bandwidthLimitBps",
447
+ "memberFieldName": "bandwidthLimitBps"
448
+ },
449
+ {
450
+ "@id": "undefineds:dist/edge/reachability/types.jsonld#RelaySession__member_route",
451
+ "memberFieldName": "route"
452
+ }
453
+ ],
454
+ "constructorArguments": []
455
+ }
456
+ ]
457
+ }
@@ -17,6 +17,8 @@ export declare class EdgeNodeProxyHttpHandler extends HttpHandler {
17
17
  handle({ request, response }: HttpHandlerInput): Promise<void>;
18
18
  private forwardRequest;
19
19
  private resolveUpstream;
20
+ private normalizeMetadata;
21
+ private isRecord;
20
22
  private buildHeaders;
21
23
  private readBody;
22
24
  private extractHostname;
@@ -49,7 +49,7 @@ class EdgeNodeProxyHttpHandler extends community_server_1.HttpHandler {
49
49
  await this.forwardRequest(node, request, response);
50
50
  }
51
51
  async forwardRequest(node, request, response) {
52
- const metadata = node.metadata ?? undefined;
52
+ const metadata = this.normalizeMetadata(node.metadata);
53
53
  const upstream = this.resolveUpstream(metadata);
54
54
  if (!upstream) {
55
55
  throw new community_server_2.InternalServerError('Edge node tunnel is not ready.');
@@ -108,6 +108,24 @@ class EdgeNodeProxyHttpHandler extends community_server_1.HttpHandler {
108
108
  }
109
109
  return undefined;
110
110
  }
111
+ normalizeMetadata(value) {
112
+ if (!value) {
113
+ return undefined;
114
+ }
115
+ if (typeof value === 'string') {
116
+ try {
117
+ const parsed = JSON.parse(value);
118
+ return this.isRecord(parsed) ? parsed : undefined;
119
+ }
120
+ catch {
121
+ return undefined;
122
+ }
123
+ }
124
+ return this.isRecord(value) ? value : undefined;
125
+ }
126
+ isRecord(value) {
127
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
128
+ }
111
129
  buildHeaders(request, original, upstream) {
112
130
  const headers = new Headers();
113
131
  for (const [name, value] of Object.entries(request.headers)) {