@portel/photon 1.28.2 → 1.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/README.md +42 -11
  2. package/dist/asset-resolver.d.ts +44 -0
  3. package/dist/asset-resolver.d.ts.map +1 -0
  4. package/dist/asset-resolver.js +105 -0
  5. package/dist/asset-resolver.js.map +1 -0
  6. package/dist/auto-ui/beam/external-mcp-manager.d.ts +73 -0
  7. package/dist/auto-ui/beam/external-mcp-manager.d.ts.map +1 -0
  8. package/dist/auto-ui/beam/external-mcp-manager.js +65 -0
  9. package/dist/auto-ui/beam/external-mcp-manager.js.map +1 -0
  10. package/dist/auto-ui/beam/external-mcp.d.ts.map +1 -1
  11. package/dist/auto-ui/beam/external-mcp.js +25 -1
  12. package/dist/auto-ui/beam/external-mcp.js.map +1 -1
  13. package/dist/auto-ui/beam/photon-management.d.ts.map +1 -1
  14. package/dist/auto-ui/beam/photon-management.js +11 -8
  15. package/dist/auto-ui/beam/photon-management.js.map +1 -1
  16. package/dist/auto-ui/beam/routes/api-browse.d.ts.map +1 -1
  17. package/dist/auto-ui/beam/routes/api-browse.js +7 -4
  18. package/dist/auto-ui/beam/routes/api-browse.js.map +1 -1
  19. package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -1
  20. package/dist/auto-ui/beam/routes/api-config.js +3 -2
  21. package/dist/auto-ui/beam/routes/api-config.js.map +1 -1
  22. package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -1
  23. package/dist/auto-ui/beam/routes/api-marketplace.js +6 -2
  24. package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -1
  25. package/dist/auto-ui/beam/startup.js.map +1 -1
  26. package/dist/auto-ui/beam/types.d.ts +5 -2
  27. package/dist/auto-ui/beam/types.d.ts.map +1 -1
  28. package/dist/auto-ui/beam.d.ts.map +1 -1
  29. package/dist/auto-ui/beam.js +239 -88
  30. package/dist/auto-ui/beam.js.map +1 -1
  31. package/dist/auto-ui/bridge/index.d.ts.map +1 -1
  32. package/dist/auto-ui/bridge/index.js +11 -0
  33. package/dist/auto-ui/bridge/index.js.map +1 -1
  34. package/dist/auto-ui/bridge/types.d.ts +2 -0
  35. package/dist/auto-ui/bridge/types.d.ts.map +1 -1
  36. package/dist/auto-ui/openapi-generator.js +1 -4
  37. package/dist/auto-ui/openapi-generator.js.map +1 -1
  38. package/dist/auto-ui/photon-bridge.d.ts +4 -0
  39. package/dist/auto-ui/photon-bridge.d.ts.map +1 -1
  40. package/dist/auto-ui/photon-bridge.js.map +1 -1
  41. package/dist/auto-ui/photon-host.js.map +1 -1
  42. package/dist/auto-ui/streamable-http-transport.d.ts +7 -0
  43. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  44. package/dist/auto-ui/streamable-http-transport.js +252 -43
  45. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  46. package/dist/auto-ui/types.d.ts +24 -2
  47. package/dist/auto-ui/types.d.ts.map +1 -1
  48. package/dist/auto-ui/types.js.map +1 -1
  49. package/dist/beam.bundle.js +202 -24
  50. package/dist/beam.bundle.js.map +3 -3
  51. package/dist/capability-negotiator.d.ts +39 -1
  52. package/dist/capability-negotiator.d.ts.map +1 -1
  53. package/dist/capability-negotiator.js +5 -0
  54. package/dist/capability-negotiator.js.map +1 -1
  55. package/dist/cf-bindings-parser.d.ts +15 -0
  56. package/dist/cf-bindings-parser.d.ts.map +1 -0
  57. package/dist/cf-bindings-parser.js +98 -0
  58. package/dist/cf-bindings-parser.js.map +1 -0
  59. package/dist/cf-usage-scanner.d.ts +76 -0
  60. package/dist/cf-usage-scanner.d.ts.map +1 -0
  61. package/dist/cf-usage-scanner.js +179 -0
  62. package/dist/cf-usage-scanner.js.map +1 -0
  63. package/dist/cli/commands/build.d.ts.map +1 -1
  64. package/dist/cli/commands/build.js +124 -16
  65. package/dist/cli/commands/build.js.map +1 -1
  66. package/dist/cli/commands/cf.d.ts +18 -0
  67. package/dist/cli/commands/cf.d.ts.map +1 -0
  68. package/dist/cli/commands/cf.js +207 -0
  69. package/dist/cli/commands/cf.js.map +1 -0
  70. package/dist/cli/commands/info.js +1 -1
  71. package/dist/cli/commands/info.js.map +1 -1
  72. package/dist/cli/commands/init.d.ts.map +1 -1
  73. package/dist/cli/commands/init.js +59 -46
  74. package/dist/cli/commands/init.js.map +1 -1
  75. package/dist/cli/commands/run.d.ts.map +1 -1
  76. package/dist/cli/commands/run.js +3 -0
  77. package/dist/cli/commands/run.js.map +1 -1
  78. package/dist/cli/index.d.ts.map +1 -1
  79. package/dist/cli/index.js +43 -6
  80. package/dist/cli/index.js.map +1 -1
  81. package/dist/daemon/client.d.ts.map +1 -1
  82. package/dist/daemon/client.js +40 -33
  83. package/dist/daemon/client.js.map +1 -1
  84. package/dist/daemon/manager.d.ts +6 -2
  85. package/dist/daemon/manager.d.ts.map +1 -1
  86. package/dist/daemon/manager.js +75 -20
  87. package/dist/daemon/manager.js.map +1 -1
  88. package/dist/daemon/server.js +69 -11
  89. package/dist/daemon/server.js.map +1 -1
  90. package/dist/daemon/worker-host.js.map +1 -1
  91. package/dist/deploy/cloudflare.d.ts +27 -0
  92. package/dist/deploy/cloudflare.d.ts.map +1 -1
  93. package/dist/deploy/cloudflare.js +210 -3
  94. package/dist/deploy/cloudflare.js.map +1 -1
  95. package/dist/editor-support/docblock-tag-catalog.d.ts.map +1 -1
  96. package/dist/editor-support/docblock-tag-catalog.js +32 -2
  97. package/dist/editor-support/docblock-tag-catalog.js.map +1 -1
  98. package/dist/embedded-runtime.js.map +1 -1
  99. package/dist/format/registry.d.ts +83 -0
  100. package/dist/format/registry.d.ts.map +1 -0
  101. package/dist/format/registry.js +139 -0
  102. package/dist/format/registry.js.map +1 -0
  103. package/dist/format/seed.d.ts +18 -0
  104. package/dist/format/seed.d.ts.map +1 -0
  105. package/dist/format/seed.js +246 -0
  106. package/dist/format/seed.js.map +1 -0
  107. package/dist/loader.d.ts +61 -66
  108. package/dist/loader.d.ts.map +1 -1
  109. package/dist/loader.js +315 -327
  110. package/dist/loader.js.map +1 -1
  111. package/dist/photon-cli-runner.d.ts.map +1 -1
  112. package/dist/photon-cli-runner.js +20 -11
  113. package/dist/photon-cli-runner.js.map +1 -1
  114. package/dist/photons/maker.photon.d.ts +2 -2
  115. package/dist/photons/maker.photon.d.ts.map +1 -1
  116. package/dist/photons/maker.photon.js +5 -6
  117. package/dist/photons/maker.photon.js.map +1 -1
  118. package/dist/photons/maker.photon.ts +5 -6
  119. package/dist/resource-server.d.ts +55 -15
  120. package/dist/resource-server.d.ts.map +1 -1
  121. package/dist/resource-server.js +205 -50
  122. package/dist/resource-server.js.map +1 -1
  123. package/dist/runtime/cf-local.d.ts +157 -0
  124. package/dist/runtime/cf-local.d.ts.map +1 -0
  125. package/dist/runtime/cf-local.js +406 -0
  126. package/dist/runtime/cf-local.js.map +1 -0
  127. package/dist/server.d.ts +117 -2
  128. package/dist/server.d.ts.map +1 -1
  129. package/dist/server.js +681 -67
  130. package/dist/server.js.map +1 -1
  131. package/dist/settings-persistence.d.ts +50 -0
  132. package/dist/settings-persistence.d.ts.map +1 -0
  133. package/dist/settings-persistence.js +188 -0
  134. package/dist/settings-persistence.js.map +1 -0
  135. package/dist/shared/asset-encoding.d.ts +30 -0
  136. package/dist/shared/asset-encoding.d.ts.map +1 -0
  137. package/dist/shared/asset-encoding.js +0 -0
  138. package/dist/shared/asset-encoding.js.map +1 -0
  139. package/dist/shared/audit-sqlite.d.ts.map +1 -1
  140. package/dist/shared/audit-sqlite.js +0 -1
  141. package/dist/shared/audit-sqlite.js.map +1 -1
  142. package/dist/shared/cross-origin-headers.d.ts +47 -0
  143. package/dist/shared/cross-origin-headers.d.ts.map +1 -0
  144. package/dist/shared/cross-origin-headers.js +61 -0
  145. package/dist/shared/cross-origin-headers.js.map +1 -0
  146. package/dist/shared/error-handler.d.ts.map +1 -1
  147. package/dist/shared/error-handler.js +3 -1
  148. package/dist/shared/error-handler.js.map +1 -1
  149. package/dist/shared/expose-route-extractor.d.ts +36 -0
  150. package/dist/shared/expose-route-extractor.d.ts.map +1 -0
  151. package/dist/shared/expose-route-extractor.js +64 -0
  152. package/dist/shared/expose-route-extractor.js.map +1 -0
  153. package/dist/shared/extract-claims.d.ts +33 -0
  154. package/dist/shared/extract-claims.d.ts.map +1 -0
  155. package/dist/shared/extract-claims.js +60 -0
  156. package/dist/shared/extract-claims.js.map +1 -0
  157. package/dist/shared/http-route-extractor.d.ts +6 -0
  158. package/dist/shared/http-route-extractor.d.ts.map +1 -1
  159. package/dist/shared/http-route-extractor.js +29 -5
  160. package/dist/shared/http-route-extractor.js.map +1 -1
  161. package/dist/shared/instance-binding.d.ts +53 -0
  162. package/dist/shared/instance-binding.d.ts.map +1 -0
  163. package/dist/shared/instance-binding.js +85 -0
  164. package/dist/shared/instance-binding.js.map +1 -0
  165. package/dist/shared/io.d.ts.map +1 -1
  166. package/dist/shared/io.js +5 -2
  167. package/dist/shared/io.js.map +1 -1
  168. package/dist/shared/logger.js.map +1 -1
  169. package/dist/shared/sqlite-runtime.d.ts.map +1 -1
  170. package/dist/shared/sqlite-runtime.js +0 -1
  171. package/dist/shared/sqlite-runtime.js.map +1 -1
  172. package/dist/task-executor.js.map +1 -1
  173. package/dist/telemetry/sdk.d.ts.map +1 -1
  174. package/dist/telemetry/sdk.js +0 -1
  175. package/dist/telemetry/sdk.js.map +1 -1
  176. package/dist/test-runner.d.ts.map +1 -1
  177. package/dist/test-runner.js.map +1 -1
  178. package/dist/types/server-types.d.ts +16 -7
  179. package/dist/types/server-types.d.ts.map +1 -1
  180. package/package.json +14 -4
  181. package/templates/cloudflare/worker.ts.template +428 -14
  182. package/templates/cloudflare/wrangler.toml.template +2 -7
  183. package/templates/photon.template.ts +13 -0
@@ -24,6 +24,58 @@ export interface ResourceServerOptions {
24
24
  bundleJs: string;
25
25
  };
26
26
  embeddedUITemplates?: Record<string, Record<string, string>>;
27
+ /**
28
+ * Embedded `<photon>/<name>/assets/**` tree for v1.29 directory-style
29
+ * serving in standalone binaries. Populated by `photon build` when the
30
+ * companion `assets/` folder exists. Consumed by the directory-style
31
+ * GET handler so SPA chunks resolve without filesystem access.
32
+ * Shape: photonName → { relativePath → utf-8 content }.
33
+ */
34
+ embeddedAssetTree?: Record<string, Record<string, string>>;
35
+ }
36
+ /**
37
+ * Check if a URI contains template parameters, e.g. `person://{slug}`.
38
+ * Exported so both STDIO (ResourceServer) and the streamable-HTTP
39
+ * transport can split static vs templated URIs the same way.
40
+ */
41
+ export declare function isUriTemplate(uri: string): boolean;
42
+ /**
43
+ * Test whether `uri` matches the template `pattern`.
44
+ * Example: `matchUriTemplate('person://{slug}', 'person://alice')` → true.
45
+ */
46
+ export declare function matchUriTemplate(pattern: string, uri: string): boolean;
47
+ /**
48
+ * Extract template parameter values from a URI given its template pattern.
49
+ * Example: `parseUriTemplateParams('person://{slug}', 'person://alice')`
50
+ * → `{ slug: 'alice' }`. Returns an empty object on mismatch.
51
+ */
52
+ export declare function parseUriTemplateParams(pattern: string, uri: string): Record<string, string>;
53
+ /**
54
+ * Sink that delivers a `notifications/resources/updated` event to a single
55
+ * client (one MCP server connection — STDIO or one SSE session).
56
+ */
57
+ export type ResourceUpdateSink = (uri: string) => void | Promise<void>;
58
+ /**
59
+ * Server-wide registry of `resources/subscribe` state. One instance lives on
60
+ * `PhotonServer`; both the STDIO server and every SSE session register their
61
+ * sinks with it.
62
+ *
63
+ * - Subscriptions are keyed by *exact* URI (per MCP spec — clients subscribe
64
+ * to `person://alice`, never to the template `person://{slug}`).
65
+ * - On session disconnect, call `disconnect(sink)` to purge all that session's
66
+ * subscriptions in one go.
67
+ * - `notify(uri)` fans out to every subscribed sink, isolating delivery
68
+ * failures so one dead transport does not block others.
69
+ */
70
+ export declare class SubscriptionRegistry {
71
+ private bySink;
72
+ private byUri;
73
+ subscribe(sink: ResourceUpdateSink, uri: string): void;
74
+ unsubscribe(sink: ResourceUpdateSink, uri: string): void;
75
+ disconnect(sink: ResourceUpdateSink): void;
76
+ notify(uri: string): Promise<void>;
77
+ /** True if any sink is subscribed to `uri`. Used by tests. */
78
+ hasSubscribers(uri: string): boolean;
27
79
  }
28
80
  export declare class ResourceServer {
29
81
  private toolExecutor;
@@ -58,21 +110,9 @@ export declare class ResourceServer {
58
110
  sizes?: string;
59
111
  theme?: string;
60
112
  }>;
61
- /**
62
- * Check if a URI is a template (contains {parameters})
63
- */
64
113
  isUriTemplate(uri: string): boolean;
65
- /**
66
- * Match URI pattern with actual URI
67
- * Example: github://repos/{owner}/{repo} matches github://repos/foo/bar
68
- */
69
- private matchUriPattern;
70
- /**
71
- * Parse parameters from URI based on pattern
72
- * Example: pattern="github://repos/{owner}/{repo}", uri="github://repos/foo/bar"
73
- * Returns: { owner: "foo", repo: "bar" }
74
- */
75
- private parseUriParams;
114
+ matchUriPattern(pattern: string, uri: string): boolean;
115
+ parseUriParams(pattern: string, uri: string): Record<string, string>;
76
116
  handleListResources(mcp: PhotonClassExtended | null): {
77
117
  resources: any[];
78
118
  };
@@ -95,7 +135,7 @@ export declare class ResourceServer {
95
135
  /**
96
136
  * Format static result to MCP resource response
97
137
  */
98
- private formatStaticResult;
138
+ formatStaticResult(result: any, mimeType?: string): any;
99
139
  /**
100
140
  * Generate minimal MCP Apps bridge script for Claude Desktop compatibility
101
141
  * This handles the ui/initialize handshake and tool result delivery
@@ -1 +1 @@
1
- {"version":3,"file":"resource-server.d.ts","sourceRoot":"","sources":["../src/resource-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,WAAW,CACT,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,GAAG,CAAC,CAAC;IAChB,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACtD;AAED,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9D;AAED,qBAAa,cAAc;IAkBvB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IAlBjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAQrC;IAEF,0CAA0C;IAC1C,OAAO,CAAC,kBAAkB,CAGtB;gBAGM,YAAY,EAAE,oBAAoB,EAClC,OAAO,EAAE,qBAAqB;IAKxC;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAI5D;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK1E;;OAEG;IACH,aAAa,IAAI,MAAM;IAMvB;;;OAGG;IACH,iBAAiB,CACf,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAClE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAoC5E;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAInC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAMvB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAyBtB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,GAAG;QAAE,SAAS,EAAE,GAAG,EAAE,CAAA;KAAE;IA2E1E,2BAA2B,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,GAAG;QAAE,iBAAiB,EAAE,GAAG,EAAE,CAAA;KAAE;IAiBpF,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IA2CrF;;OAEG;YACW,iBAAiB;IAqD/B;;OAEG;YACW,eAAe;IA+C7B;;OAEG;YACW,gBAAgB;IAW9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;;OAGG;IACH,qBAAqB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,GAAG,MAAM;CA4W/D"}
1
+ {"version":3,"file":"resource-server.d.ts","sourceRoot":"","sources":["../src/resource-server.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,120 @@
13
13
  import { readFileSync } from 'node:fs';
14
14
  import * as path from 'node:path';
15
15
  import { readText } from './shared/io.js';
16
+ /**
17
+ * Check if a URI contains template parameters, e.g. `person://{slug}`.
18
+ * Exported so both STDIO (ResourceServer) and the streamable-HTTP
19
+ * transport can split static vs templated URIs the same way.
20
+ */
21
+ export function isUriTemplate(uri) {
22
+ return /\{[^}]+\}/.test(uri);
23
+ }
24
+ /**
25
+ * Test whether `uri` matches the template `pattern`.
26
+ * Example: `matchUriTemplate('person://{slug}', 'person://alice')` → true.
27
+ */
28
+ export function matchUriTemplate(pattern, uri) {
29
+ const regexPattern = pattern.replace(/\{[^}]+\}/g, '([^/]+)');
30
+ return new RegExp(`^${regexPattern}$`).test(uri);
31
+ }
32
+ /**
33
+ * Extract template parameter values from a URI given its template pattern.
34
+ * Example: `parseUriTemplateParams('person://{slug}', 'person://alice')`
35
+ * → `{ slug: 'alice' }`. Returns an empty object on mismatch.
36
+ */
37
+ export function parseUriTemplateParams(pattern, uri) {
38
+ const paramNames = [];
39
+ const paramRegex = /\{([^}]+)\}/g;
40
+ let match;
41
+ while ((match = paramRegex.exec(pattern)) !== null) {
42
+ paramNames.push(match[1]);
43
+ }
44
+ const regexPattern = pattern.replace(/\{[^}]+\}/g, '([^/]+)');
45
+ const values = uri.match(new RegExp(`^${regexPattern}$`));
46
+ if (!values)
47
+ return {};
48
+ const params = {};
49
+ for (let i = 0; i < paramNames.length; i++) {
50
+ params[paramNames[i]] = values[i + 1];
51
+ }
52
+ return params;
53
+ }
54
+ /**
55
+ * Server-wide registry of `resources/subscribe` state. One instance lives on
56
+ * `PhotonServer`; both the STDIO server and every SSE session register their
57
+ * sinks with it.
58
+ *
59
+ * - Subscriptions are keyed by *exact* URI (per MCP spec — clients subscribe
60
+ * to `person://alice`, never to the template `person://{slug}`).
61
+ * - On session disconnect, call `disconnect(sink)` to purge all that session's
62
+ * subscriptions in one go.
63
+ * - `notify(uri)` fans out to every subscribed sink, isolating delivery
64
+ * failures so one dead transport does not block others.
65
+ */
66
+ export class SubscriptionRegistry {
67
+ bySink = new Map();
68
+ byUri = new Map();
69
+ subscribe(sink, uri) {
70
+ let uris = this.bySink.get(sink);
71
+ if (!uris) {
72
+ uris = new Set();
73
+ this.bySink.set(sink, uris);
74
+ }
75
+ uris.add(uri);
76
+ let sinks = this.byUri.get(uri);
77
+ if (!sinks) {
78
+ sinks = new Set();
79
+ this.byUri.set(uri, sinks);
80
+ }
81
+ sinks.add(sink);
82
+ }
83
+ unsubscribe(sink, uri) {
84
+ const uris = this.bySink.get(sink);
85
+ if (uris) {
86
+ uris.delete(uri);
87
+ if (uris.size === 0)
88
+ this.bySink.delete(sink);
89
+ }
90
+ const sinks = this.byUri.get(uri);
91
+ if (sinks) {
92
+ sinks.delete(sink);
93
+ if (sinks.size === 0)
94
+ this.byUri.delete(uri);
95
+ }
96
+ }
97
+ disconnect(sink) {
98
+ const uris = this.bySink.get(sink);
99
+ if (!uris)
100
+ return;
101
+ for (const uri of uris) {
102
+ const sinks = this.byUri.get(uri);
103
+ if (sinks) {
104
+ sinks.delete(sink);
105
+ if (sinks.size === 0)
106
+ this.byUri.delete(uri);
107
+ }
108
+ }
109
+ this.bySink.delete(sink);
110
+ }
111
+ async notify(uri) {
112
+ const sinks = this.byUri.get(uri);
113
+ if (!sinks || sinks.size === 0)
114
+ return;
115
+ await Promise.all(Array.from(sinks).map(async (sink) => {
116
+ try {
117
+ await sink(uri);
118
+ }
119
+ catch {
120
+ // Failed delivery on one transport must not block others.
121
+ }
122
+ }));
123
+ }
124
+ /** True if any sink is subscribed to `uri`. Used by tests. */
125
+ hasSubscribers(uri) {
126
+ const sinks = this.byUri.get(uri);
127
+ return !!sinks && sinks.size > 0;
128
+ }
129
+ }
16
130
  export class ResourceServer {
17
131
  toolExecutor;
18
132
  options;
@@ -89,44 +203,15 @@ export class ResourceServer {
89
203
  this.resolvedIconsCache.set(cacheKey, icons);
90
204
  return icons;
91
205
  }
92
- // ─── URI template helpers ───────────────────────────────────────────
93
- /**
94
- * Check if a URI is a template (contains {parameters})
95
- */
206
+ // ─── URI template helpers (delegate to module-level functions) ──────
96
207
  isUriTemplate(uri) {
97
- return /\{[^}]+\}/.test(uri);
208
+ return isUriTemplate(uri);
98
209
  }
99
- /**
100
- * Match URI pattern with actual URI
101
- * Example: github://repos/{owner}/{repo} matches github://repos/foo/bar
102
- */
103
210
  matchUriPattern(pattern, uri) {
104
- const regexPattern = pattern.replace(/\{[^}]+\}/g, '([^/]+)');
105
- const regex = new RegExp(`^${regexPattern}$`);
106
- return regex.test(uri);
211
+ return matchUriTemplate(pattern, uri);
107
212
  }
108
- /**
109
- * Parse parameters from URI based on pattern
110
- * Example: pattern="github://repos/{owner}/{repo}", uri="github://repos/foo/bar"
111
- * Returns: { owner: "foo", repo: "bar" }
112
- */
113
213
  parseUriParams(pattern, uri) {
114
- const params = {};
115
- const paramNames = [];
116
- const paramRegex = /\{([^}]+)\}/g;
117
- let match;
118
- while ((match = paramRegex.exec(pattern)) !== null) {
119
- paramNames.push(match[1]);
120
- }
121
- const regexPattern = pattern.replace(/\{[^}]+\}/g, '([^/]+)');
122
- const regex = new RegExp(`^${regexPattern}$`);
123
- const values = uri.match(regex);
124
- if (values) {
125
- for (let i = 0; i < paramNames.length; i++) {
126
- params[paramNames[i]] = values[i + 1];
127
- }
128
- }
129
- return params;
214
+ return parseUriTemplateParams(pattern, uri);
130
215
  }
131
216
  // ─── MCP request handlers ──────────────────────────────────────────
132
217
  handleListResources(mcp) {
@@ -380,19 +465,81 @@ export class ResourceServer {
380
465
  var currentTheme = 'dark';
381
466
  var injectedPhotons = ${JSON.stringify(injectedPhotons)};
382
467
 
468
+ // Transport discriminator (Track D1). The bridge runs in three contexts:
469
+ // 1. Inside a host iframe that speaks postMessage (Beam, Claude Apps).
470
+ // 2. Standalone browser tab (no host) — needs to use fetch.
471
+ // 3. Iframe inside a host that ignores us — also fetch.
472
+ // window.parent === window only catches the second case; (1) and (3) both
473
+ // have a parent, so we ping it with a hello and wait 200ms for an ack
474
+ // before committing to fetch. Hosts that want postMessage must reply
475
+ // with { type: 'photon:ack', id } within that window.
476
+ var transport = 'pending';
477
+ var resolveTransport;
478
+ var transportReady = new Promise(function(resolve) { resolveTransport = resolve; });
479
+ function settleTransport(t) {
480
+ if (transport === 'pending') {
481
+ transport = t;
482
+ resolveTransport(t);
483
+ }
484
+ }
485
+
383
486
  function generateCallId() {
384
487
  return 'call_' + (++callIdCounter) + '_' + Math.random().toString(36).slice(2);
385
488
  }
386
489
 
387
490
  function postToHost(msg) {
388
- window.parent.postMessage(msg, '*');
491
+ try { window.parent.postMessage(msg, '*'); } catch (e) { /* hostless */ }
389
492
  }
390
493
 
494
+ function methodToKebab(s) {
495
+ return s
496
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
497
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')
498
+ .toLowerCase();
499
+ }
500
+
501
+ function fetchToolCall(name, args, opts) {
502
+ var a = args || {};
503
+ if (opts && opts.instance !== undefined) {
504
+ a = Object.assign({}, a, { _targetInstance: opts.instance });
505
+ }
506
+ return fetch('/api/' + methodToKebab(name), {
507
+ method: 'POST',
508
+ credentials: 'same-origin',
509
+ headers: {
510
+ 'Content-Type': 'application/json',
511
+ 'Accept': 'application/json'
512
+ },
513
+ body: JSON.stringify(a)
514
+ }).then(function(r) {
515
+ if (!r.ok) {
516
+ return r.text().then(function(text) {
517
+ throw new Error(text || ('HTTP ' + r.status));
518
+ });
519
+ }
520
+ var ct = r.headers.get('content-type') || '';
521
+ return ct.indexOf('application/json') >= 0 ? r.json() : r.text();
522
+ });
523
+ }
524
+
525
+ // Hello handshake. Standalone tabs (no host) silently drop the message;
526
+ // the timeout below guarantees we still flip to fetch.
527
+ postToHost({ type: 'photon:hello', id: 'init-' + Math.random().toString(36).slice(2) });
528
+ setTimeout(function() { settleTransport('fetch'); }, 200);
529
+
391
530
  // Listen for messages from host
392
531
  window.addEventListener('message', function(e) {
393
532
  var m = e.data;
394
533
  if (!m || typeof m !== 'object') return;
395
534
 
535
+ // Track D1 ack — host confirms postMessage transport. Accept the
536
+ // signal at any time (even after the 200ms window) so a slow but
537
+ // present host still wins over fetch on subsequent calls.
538
+ if (m.type === 'photon:ack') {
539
+ settleTransport('postmessage');
540
+ return;
541
+ }
542
+
396
543
  // Handle JSON-RPC messages
397
544
  if (m.jsonrpc === '2.0') {
398
545
  // Response to our request (has id, no method)
@@ -510,23 +657,31 @@ export class ResourceServer {
510
657
  };
511
658
  },
512
659
  callTool: function(name, args, opts) {
513
- var callId = generateCallId();
514
- return new Promise(function(resolve, reject) {
515
- pendingCalls[callId] = { resolve: resolve, reject: reject };
516
- var a = args || {};
517
- if (opts && opts.instance !== undefined) { a = Object.assign({}, a, { _targetInstance: opts.instance }); }
518
- postToHost({
519
- jsonrpc: '2.0',
520
- id: callId,
521
- method: 'tools/call',
522
- params: { name: name, arguments: a }
523
- });
524
- setTimeout(function() {
525
- if (pendingCalls[callId]) {
526
- delete pendingCalls[callId];
527
- reject(new Error('Tool call timeout'));
660
+ // Wait for the handshake to settle so the very first call routes
661
+ // correctly. Subsequent calls hit the resolved transport without
662
+ // an extra microtask.
663
+ return transportReady.then(function(t) {
664
+ if (t === 'fetch') return fetchToolCall(name, args, opts);
665
+ var callId = generateCallId();
666
+ return new Promise(function(resolve, reject) {
667
+ pendingCalls[callId] = { resolve: resolve, reject: reject };
668
+ var a = args || {};
669
+ if (opts && opts.instance !== undefined) {
670
+ a = Object.assign({}, a, { _targetInstance: opts.instance });
528
671
  }
529
- }, 30000);
672
+ postToHost({
673
+ jsonrpc: '2.0',
674
+ id: callId,
675
+ method: 'tools/call',
676
+ params: { name: name, arguments: a }
677
+ });
678
+ setTimeout(function() {
679
+ if (pendingCalls[callId]) {
680
+ delete pendingCalls[callId];
681
+ reject(new Error('Tool call timeout'));
682
+ }
683
+ }, 30000);
684
+ });
530
685
  });
531
686
  },
532
687
  invoke: function(name, args, opts) { return window.photon.callTool(name, args, opts); },
@@ -1 +1 @@
1
- {"version":3,"file":"resource-server.js","sourceRoot":"","sources":["../src/resource-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-server.js","sourceRoot":"","sources":["../src/resource-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Local Cloudflare runtime adapter for the new `Cloudflare` injection
3
+ * surface. Backs `private cf: Cloudflare` constructor params (and the
4
+ * forgiving auto-inject path for plain classes that reference
5
+ * `this.cf.*`) with a miniflare sandbox when a photon runs outside a
6
+ * deployed Worker.
7
+ *
8
+ * Auto-naming rule (single source of truth — `bindingNameFor`):
9
+ * cf.kv() → <photon>_kv
10
+ * cf.kv('x') → <photon>_x_kv
11
+ * cf.ai → AI (shared, single per Worker)
12
+ * cf.images → IMAGES (shared)
13
+ * cf.browser → BROWSER (shared)
14
+ *
15
+ * Photons no longer pick global binding names. The framework derives
16
+ * them from the photon name plus an optional qualifier so per-photon
17
+ * resources never collide.
18
+ *
19
+ * Boot is keyed off the `cf-usage-scanner` output: every literal
20
+ * qualifier the photon uses is configured in miniflare up front, so
21
+ * the first call to a binding doesn't pay a reconfigure cost. Dynamic
22
+ * qualifiers (`cf.kv(this.tenantId)`) only get the default binding
23
+ * unless the author lists overrides in `protected cfBindings`.
24
+ *
25
+ * Storage persists under `<baseDir>/.data/cf-sandbox/<photon>/` so
26
+ * state survives process restarts and matches the Phase A2 layout.
27
+ */
28
+ import { type Cloudflare, type ScopedBindingCategory, type R2BucketLike, type KVNamespaceLike, type D1DatabaseLike, type QueueLike, type VectorizeIndexLike, type AiLike, type ImagesBindingLike, type FetcherLike } from '@portel/photon-core';
29
+ import { type CfUsage } from '../cf-usage-scanner.js';
30
+ /**
31
+ * Optional override layer. Most photons leave this empty — the
32
+ * auto-naming convention covers the common case. Authors set it when
33
+ * they need a binding to point at a pre-existing CF resource owned
34
+ * outside the photon (typically only matters at deploy time, not for
35
+ * the local sandbox).
36
+ *
37
+ * Schema mirrors the deploy-side override JSON (~/.photon/state/...).
38
+ * For local boot, we accept the same shape so a single
39
+ * `protected cfBindings` block round-trips through both layers.
40
+ */
41
+ export interface CfOverrides {
42
+ /** Per-qualifier override of the resource name a binding points at. */
43
+ kv?: Record<string, string>;
44
+ r2?: Record<string, string>;
45
+ d1?: Record<string, string | {
46
+ name: string;
47
+ id: string;
48
+ }>;
49
+ queue?: Record<string, string>;
50
+ vectorize?: Record<string, string>;
51
+ }
52
+ export interface CFLocalRuntimeOptions {
53
+ photonName: string;
54
+ baseDir: string;
55
+ /**
56
+ * Static-analysis output from cf-usage-scanner. Determines which
57
+ * binding names miniflare boots with. When absent, only the
58
+ * default per-category binding is configured (callers that hit a
59
+ * qualified binding without source-scanning will get a clear miss
60
+ * error from miniflare).
61
+ */
62
+ usage?: CfUsage;
63
+ /** Optional `protected cfBindings` override layer, see CfOverrides. */
64
+ overrides?: CfOverrides;
65
+ }
66
+ /**
67
+ * Legacy override schema. The Phase A2 release shipped `cfBindings`
68
+ * as a `Record<bindingName, resourceId>` declaration that doubled as
69
+ * a binding declaration. Under the new auto-naming model
70
+ * (bindingNameFor) the same shape becomes a pure override layer —
71
+ * authors who want to repoint a default binding at a pre-existing
72
+ * resource still write the same JSON. Kept exported so deploy code
73
+ * and the photon-cf CLI keep building during the migration.
74
+ */
75
+ export type CfBindingsConfig = CfOverrides & {
76
+ ai?: boolean;
77
+ images?: boolean;
78
+ browser?: boolean;
79
+ };
80
+ /**
81
+ * Merge two CfBindingsConfig blobs. Used by the deploy pipeline to
82
+ * stack a per-photon override JSON on top of in-source declarations.
83
+ * Boolean shared flags are last-write-wins; per-binding records merge
84
+ * key-by-key.
85
+ */
86
+ export declare function mergeBindings(base: CfBindingsConfig | null | undefined, override: CfBindingsConfig | null | undefined): CfBindingsConfig;
87
+ export declare class CFLocalRuntime implements Cloudflare {
88
+ private mfPromise;
89
+ private readonly photonName;
90
+ private readonly baseDir;
91
+ private readonly usage;
92
+ private readonly overrides;
93
+ /**
94
+ * Legacy mode means the photon was constructed via the Phase-A2
95
+ * positional `(name, cfBindings, baseDir)` form. In that mode the
96
+ * `qualifier` arg passed to `cf.kv(...)` etc. is treated as a
97
+ * literal binding name (not run through `bindingNameFor`), and
98
+ * miniflare seeds the names declared in `overrides.<category>`.
99
+ * The new options-form constructor flips this to false and the
100
+ * auto-naming convention takes over.
101
+ */
102
+ private readonly legacyMode;
103
+ private readonly legacyBooleanFlags;
104
+ /**
105
+ * New options-object form (preferred). Hosts that source-scan the
106
+ * photon for `Cloudflare` usage pass the scanner output as `usage`
107
+ * so miniflare seeds every literal-qualified binding upfront.
108
+ */
109
+ constructor(opts: CFLocalRuntimeOptions);
110
+ /**
111
+ * Legacy positional form retained for the classic loader and
112
+ * existing CF-runtime tests. Translates the Phase-A2 `cfBindings`
113
+ * declaration to the new override schema; auto-naming is disabled
114
+ * (no usage scan) so explicit binding names take precedence over
115
+ * `<photon>_<category>` defaults. Callers should migrate to the
116
+ * options form when the demolition commit lands.
117
+ *
118
+ * @deprecated use the options-object constructor.
119
+ */
120
+ constructor(photonName: string, bindings: CfBindingsConfig, baseDir: string);
121
+ /** Legacy alias retained for callers that built against the Phase-A2 API. */
122
+ getBindings(): CfBindingsConfig;
123
+ /** Inspector for tools/CLI: lists every binding miniflare seeded. */
124
+ getSeededBindings(): Record<ScopedBindingCategory, string[]>;
125
+ /**
126
+ * Resolve the miniflare binding name for a `cf.<cat>(qualifier?)`
127
+ * call. In auto-naming mode runs through `bindingNameFor`; in
128
+ * legacy mode treats the arg as a literal binding name (matching
129
+ * the Phase-A2 `cf.kv(name)` semantics).
130
+ */
131
+ private resolveBindingName;
132
+ dispose(): Promise<void>;
133
+ kv(qualifier?: string): KVNamespaceLike;
134
+ r2(qualifier?: string): R2BucketLike;
135
+ d1(qualifier?: string): D1DatabaseLike;
136
+ queue<Body = unknown>(qualifier?: string): QueueLike<Body>;
137
+ vectorize(qualifier?: string): VectorizeIndexLike;
138
+ get ai(): AiLike;
139
+ get images(): ImagesBindingLike;
140
+ get browser(): FetcherLike;
141
+ fetch(_input: string, _init?: unknown): Promise<unknown>;
142
+ /** Lazily boot a Miniflare instance scoped to this photon. */
143
+ private getMiniflare;
144
+ /**
145
+ * Build a thin proxy whose methods defer to a binding fetched via
146
+ * `mf.getKVNamespace(name)` / `mf.getR2Bucket(name)` / etc on first
147
+ * invocation. Avoids paying the boot cost on cold paths.
148
+ */
149
+ private scopedBinding;
150
+ /**
151
+ * Pull a binding off the miniflare-built env (for AI, Vectorize,
152
+ * Images — categories that surface as env props rather than via a
153
+ * dedicated `mf.getXxx(name)` accessor).
154
+ */
155
+ private envBindingProxy;
156
+ }
157
+ //# sourceMappingURL=cf-local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cf-local.d.ts","sourceRoot":"","sources":["../../src/runtime/cf-local.ts"],"names":[],"mappings":"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"}