@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.
- package/README.md +42 -11
- package/dist/asset-resolver.d.ts +44 -0
- package/dist/asset-resolver.d.ts.map +1 -0
- package/dist/asset-resolver.js +105 -0
- package/dist/asset-resolver.js.map +1 -0
- package/dist/auto-ui/beam/external-mcp-manager.d.ts +73 -0
- package/dist/auto-ui/beam/external-mcp-manager.d.ts.map +1 -0
- package/dist/auto-ui/beam/external-mcp-manager.js +65 -0
- package/dist/auto-ui/beam/external-mcp-manager.js.map +1 -0
- package/dist/auto-ui/beam/external-mcp.d.ts.map +1 -1
- package/dist/auto-ui/beam/external-mcp.js +25 -1
- package/dist/auto-ui/beam/external-mcp.js.map +1 -1
- package/dist/auto-ui/beam/photon-management.d.ts.map +1 -1
- package/dist/auto-ui/beam/photon-management.js +11 -8
- package/dist/auto-ui/beam/photon-management.js.map +1 -1
- package/dist/auto-ui/beam/routes/api-browse.d.ts.map +1 -1
- package/dist/auto-ui/beam/routes/api-browse.js +7 -4
- package/dist/auto-ui/beam/routes/api-browse.js.map +1 -1
- package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -1
- package/dist/auto-ui/beam/routes/api-config.js +3 -2
- package/dist/auto-ui/beam/routes/api-config.js.map +1 -1
- package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -1
- package/dist/auto-ui/beam/routes/api-marketplace.js +6 -2
- package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -1
- package/dist/auto-ui/beam/startup.js.map +1 -1
- package/dist/auto-ui/beam/types.d.ts +5 -2
- package/dist/auto-ui/beam/types.d.ts.map +1 -1
- package/dist/auto-ui/beam.d.ts.map +1 -1
- package/dist/auto-ui/beam.js +239 -88
- package/dist/auto-ui/beam.js.map +1 -1
- package/dist/auto-ui/bridge/index.d.ts.map +1 -1
- package/dist/auto-ui/bridge/index.js +11 -0
- package/dist/auto-ui/bridge/index.js.map +1 -1
- package/dist/auto-ui/bridge/types.d.ts +2 -0
- package/dist/auto-ui/bridge/types.d.ts.map +1 -1
- package/dist/auto-ui/openapi-generator.js +1 -4
- package/dist/auto-ui/openapi-generator.js.map +1 -1
- package/dist/auto-ui/photon-bridge.d.ts +4 -0
- package/dist/auto-ui/photon-bridge.d.ts.map +1 -1
- package/dist/auto-ui/photon-bridge.js.map +1 -1
- package/dist/auto-ui/photon-host.js.map +1 -1
- package/dist/auto-ui/streamable-http-transport.d.ts +7 -0
- package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
- package/dist/auto-ui/streamable-http-transport.js +252 -43
- package/dist/auto-ui/streamable-http-transport.js.map +1 -1
- package/dist/auto-ui/types.d.ts +24 -2
- package/dist/auto-ui/types.d.ts.map +1 -1
- package/dist/auto-ui/types.js.map +1 -1
- package/dist/beam.bundle.js +202 -24
- package/dist/beam.bundle.js.map +3 -3
- package/dist/capability-negotiator.d.ts +39 -1
- package/dist/capability-negotiator.d.ts.map +1 -1
- package/dist/capability-negotiator.js +5 -0
- package/dist/capability-negotiator.js.map +1 -1
- package/dist/cf-bindings-parser.d.ts +15 -0
- package/dist/cf-bindings-parser.d.ts.map +1 -0
- package/dist/cf-bindings-parser.js +98 -0
- package/dist/cf-bindings-parser.js.map +1 -0
- package/dist/cf-usage-scanner.d.ts +76 -0
- package/dist/cf-usage-scanner.d.ts.map +1 -0
- package/dist/cf-usage-scanner.js +179 -0
- package/dist/cf-usage-scanner.js.map +1 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +124 -16
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/cf.d.ts +18 -0
- package/dist/cli/commands/cf.d.ts.map +1 -0
- package/dist/cli/commands/cf.js +207 -0
- package/dist/cli/commands/cf.js.map +1 -0
- package/dist/cli/commands/info.js +1 -1
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +59 -46
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +3 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +43 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +40 -33
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/manager.d.ts +6 -2
- package/dist/daemon/manager.d.ts.map +1 -1
- package/dist/daemon/manager.js +75 -20
- package/dist/daemon/manager.js.map +1 -1
- package/dist/daemon/server.js +69 -11
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/worker-host.js.map +1 -1
- package/dist/deploy/cloudflare.d.ts +27 -0
- package/dist/deploy/cloudflare.d.ts.map +1 -1
- package/dist/deploy/cloudflare.js +210 -3
- package/dist/deploy/cloudflare.js.map +1 -1
- package/dist/editor-support/docblock-tag-catalog.d.ts.map +1 -1
- package/dist/editor-support/docblock-tag-catalog.js +32 -2
- package/dist/editor-support/docblock-tag-catalog.js.map +1 -1
- package/dist/embedded-runtime.js.map +1 -1
- package/dist/format/registry.d.ts +83 -0
- package/dist/format/registry.d.ts.map +1 -0
- package/dist/format/registry.js +139 -0
- package/dist/format/registry.js.map +1 -0
- package/dist/format/seed.d.ts +18 -0
- package/dist/format/seed.d.ts.map +1 -0
- package/dist/format/seed.js +246 -0
- package/dist/format/seed.js.map +1 -0
- package/dist/loader.d.ts +61 -66
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +315 -327
- package/dist/loader.js.map +1 -1
- package/dist/photon-cli-runner.d.ts.map +1 -1
- package/dist/photon-cli-runner.js +20 -11
- package/dist/photon-cli-runner.js.map +1 -1
- package/dist/photons/maker.photon.d.ts +2 -2
- package/dist/photons/maker.photon.d.ts.map +1 -1
- package/dist/photons/maker.photon.js +5 -6
- package/dist/photons/maker.photon.js.map +1 -1
- package/dist/photons/maker.photon.ts +5 -6
- package/dist/resource-server.d.ts +55 -15
- package/dist/resource-server.d.ts.map +1 -1
- package/dist/resource-server.js +205 -50
- package/dist/resource-server.js.map +1 -1
- package/dist/runtime/cf-local.d.ts +157 -0
- package/dist/runtime/cf-local.d.ts.map +1 -0
- package/dist/runtime/cf-local.js +406 -0
- package/dist/runtime/cf-local.js.map +1 -0
- package/dist/server.d.ts +117 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +681 -67
- package/dist/server.js.map +1 -1
- package/dist/settings-persistence.d.ts +50 -0
- package/dist/settings-persistence.d.ts.map +1 -0
- package/dist/settings-persistence.js +188 -0
- package/dist/settings-persistence.js.map +1 -0
- package/dist/shared/asset-encoding.d.ts +30 -0
- package/dist/shared/asset-encoding.d.ts.map +1 -0
- package/dist/shared/asset-encoding.js +0 -0
- package/dist/shared/asset-encoding.js.map +1 -0
- package/dist/shared/audit-sqlite.d.ts.map +1 -1
- package/dist/shared/audit-sqlite.js +0 -1
- package/dist/shared/audit-sqlite.js.map +1 -1
- package/dist/shared/cross-origin-headers.d.ts +47 -0
- package/dist/shared/cross-origin-headers.d.ts.map +1 -0
- package/dist/shared/cross-origin-headers.js +61 -0
- package/dist/shared/cross-origin-headers.js.map +1 -0
- package/dist/shared/error-handler.d.ts.map +1 -1
- package/dist/shared/error-handler.js +3 -1
- package/dist/shared/error-handler.js.map +1 -1
- package/dist/shared/expose-route-extractor.d.ts +36 -0
- package/dist/shared/expose-route-extractor.d.ts.map +1 -0
- package/dist/shared/expose-route-extractor.js +64 -0
- package/dist/shared/expose-route-extractor.js.map +1 -0
- package/dist/shared/extract-claims.d.ts +33 -0
- package/dist/shared/extract-claims.d.ts.map +1 -0
- package/dist/shared/extract-claims.js +60 -0
- package/dist/shared/extract-claims.js.map +1 -0
- package/dist/shared/http-route-extractor.d.ts +6 -0
- package/dist/shared/http-route-extractor.d.ts.map +1 -1
- package/dist/shared/http-route-extractor.js +29 -5
- package/dist/shared/http-route-extractor.js.map +1 -1
- package/dist/shared/instance-binding.d.ts +53 -0
- package/dist/shared/instance-binding.d.ts.map +1 -0
- package/dist/shared/instance-binding.js +85 -0
- package/dist/shared/instance-binding.js.map +1 -0
- package/dist/shared/io.d.ts.map +1 -1
- package/dist/shared/io.js +5 -2
- package/dist/shared/io.js.map +1 -1
- package/dist/shared/logger.js.map +1 -1
- package/dist/shared/sqlite-runtime.d.ts.map +1 -1
- package/dist/shared/sqlite-runtime.js +0 -1
- package/dist/shared/sqlite-runtime.js.map +1 -1
- package/dist/task-executor.js.map +1 -1
- package/dist/telemetry/sdk.d.ts.map +1 -1
- package/dist/telemetry/sdk.js +0 -1
- package/dist/telemetry/sdk.js.map +1 -1
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js.map +1 -1
- package/dist/types/server-types.d.ts +16 -7
- package/dist/types/server-types.d.ts.map +1 -1
- package/package.json +14 -4
- package/templates/cloudflare/worker.ts.template +428 -14
- package/templates/cloudflare/wrangler.toml.template +2 -7
- package/templates/photon.template.ts +13 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings persistence for Photon instances.
|
|
3
|
+
*
|
|
4
|
+
* Owns the load → merge → expose-as-Proxy → persist-on-change lifecycle for
|
|
5
|
+
* `protected settings` declared by photons. Extracted from PhotonLoader so
|
|
6
|
+
* the loader doesn't have to know about settings paths, the read-only Proxy,
|
|
7
|
+
* or the auto-generated MCP tool surface.
|
|
8
|
+
*/
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import * as fs from 'fs/promises';
|
|
11
|
+
import { readJSON, writeJSON } from './shared/io.js';
|
|
12
|
+
import { getInstanceStatePath } from './context-store.js';
|
|
13
|
+
export class SettingsPersistence {
|
|
14
|
+
baseDir;
|
|
15
|
+
log;
|
|
16
|
+
constructor(baseDir, log) {
|
|
17
|
+
this.baseDir = baseDir;
|
|
18
|
+
this.log = log;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the settings persistence path for a photon instance.
|
|
22
|
+
* Co-located with state: settings.json sits next to state.json inside
|
|
23
|
+
* the per-instance directory.
|
|
24
|
+
*/
|
|
25
|
+
getPath(photonName, instanceName) {
|
|
26
|
+
const statePath = getInstanceStatePath(photonName, instanceName, this.baseDir);
|
|
27
|
+
return path.join(path.dirname(statePath), 'settings.json');
|
|
28
|
+
}
|
|
29
|
+
/** Load persisted settings from disk. Returns {} if the file is missing. */
|
|
30
|
+
async load(photonName, instanceName) {
|
|
31
|
+
try {
|
|
32
|
+
return await readJSON(this.getPath(photonName, instanceName));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return {};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Persist settings to disk, creating parent directories as needed. */
|
|
39
|
+
async persist(photonName, instanceName, values) {
|
|
40
|
+
const settingsPath = this.getPath(photonName, instanceName);
|
|
41
|
+
await fs.mkdir(path.dirname(settingsPath), { recursive: true });
|
|
42
|
+
await writeJSON(settingsPath, values);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Inject settings into a photon instance:
|
|
46
|
+
* - Load persisted values (persisted wins over in-source defaults)
|
|
47
|
+
* - Replace `instance.settings` with a read-only Proxy
|
|
48
|
+
* - Stamp the writable backing object plus identity on the instance so the
|
|
49
|
+
* auto-generated `settings` tool can update it later.
|
|
50
|
+
*/
|
|
51
|
+
async inject(instance, photonName, instanceName, schema) {
|
|
52
|
+
const defaults = instance.settings;
|
|
53
|
+
const persisted = await this.load(photonName, instanceName);
|
|
54
|
+
const backing = { ...defaults };
|
|
55
|
+
for (const key of Object.keys(persisted)) {
|
|
56
|
+
if (persisted[key] !== undefined) {
|
|
57
|
+
backing[key] = persisted[key];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
instance._settingsBacking = backing;
|
|
61
|
+
instance._settingsPhotonName = photonName;
|
|
62
|
+
instance._settingsInstanceName = instanceName;
|
|
63
|
+
instance._settingsSchema = schema;
|
|
64
|
+
instance.settings = new Proxy(backing, {
|
|
65
|
+
get(target, prop) {
|
|
66
|
+
if (typeof prop === 'string') {
|
|
67
|
+
return target[prop];
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
},
|
|
71
|
+
set(_target, prop, _value) {
|
|
72
|
+
throw new Error(`Cannot directly set settings.${String(prop)}. ` +
|
|
73
|
+
`Use the 'settings' tool to change settings (e.g., settings({ ${String(prop)}: newValue })).`);
|
|
74
|
+
},
|
|
75
|
+
deleteProperty(_target, prop) {
|
|
76
|
+
throw new Error(`Cannot delete settings.${String(prop)}. Use the 'settings' tool instead.`);
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/** Generate an MCP tool definition from a SettingsSchema. */
|
|
81
|
+
generateTool(schema) {
|
|
82
|
+
const properties = {};
|
|
83
|
+
for (const prop of schema.properties) {
|
|
84
|
+
const propSchema = { type: prop.type };
|
|
85
|
+
if (prop.description) {
|
|
86
|
+
propSchema.description = prop.description;
|
|
87
|
+
}
|
|
88
|
+
if (prop.default !== undefined) {
|
|
89
|
+
propSchema.default = prop.default;
|
|
90
|
+
}
|
|
91
|
+
properties[prop.name] = propSchema;
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
name: 'settings',
|
|
95
|
+
description: 'View or update photon settings. Call with no arguments to view current settings. Pass parameters to update specific settings.',
|
|
96
|
+
inputSchema: {
|
|
97
|
+
type: 'object',
|
|
98
|
+
properties,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Execute the auto-generated settings tool:
|
|
104
|
+
* - No params → return current settings (eliciting any required-but-unset values)
|
|
105
|
+
* - Params with values → update those settings, persist, emit change
|
|
106
|
+
* - Params with explicit undefined on a required prop → trigger elicitation
|
|
107
|
+
*/
|
|
108
|
+
async execute(instance, parameters, options) {
|
|
109
|
+
const backing = instance._settingsBacking;
|
|
110
|
+
const photonName = instance._settingsPhotonName;
|
|
111
|
+
const instanceName = instance._settingsInstanceName;
|
|
112
|
+
const schema = instance._settingsSchema;
|
|
113
|
+
if (!backing || !photonName || !schema) {
|
|
114
|
+
throw new Error('Settings not initialized for this photon');
|
|
115
|
+
}
|
|
116
|
+
if (!parameters || Object.keys(parameters).length === 0) {
|
|
117
|
+
const needsElicitation = schema.properties.filter((p) => p.required && backing[p.name] === undefined);
|
|
118
|
+
if (needsElicitation.length > 0 && options?.inputProvider) {
|
|
119
|
+
for (const prop of needsElicitation) {
|
|
120
|
+
const result = await options.inputProvider({
|
|
121
|
+
ask: prop.type === 'number' ? 'number' : 'text',
|
|
122
|
+
message: prop.description || `Enter value for ${prop.name}:`,
|
|
123
|
+
});
|
|
124
|
+
if (result !== undefined && result !== null) {
|
|
125
|
+
const oldValue = backing[prop.name];
|
|
126
|
+
backing[prop.name] = result;
|
|
127
|
+
this.log(`⚙️ Settings: ${prop.name} = ${JSON.stringify(result)} (elicited)`);
|
|
128
|
+
this.emitChange(instance, prop.name, oldValue, result);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
await this.persist(photonName, instanceName, backing);
|
|
132
|
+
}
|
|
133
|
+
return { ...backing };
|
|
134
|
+
}
|
|
135
|
+
const changes = [];
|
|
136
|
+
for (const [key, value] of Object.entries(parameters)) {
|
|
137
|
+
const prop = schema.properties.find((p) => p.name === key);
|
|
138
|
+
if (!prop)
|
|
139
|
+
continue;
|
|
140
|
+
if (value === undefined && prop.required) {
|
|
141
|
+
if (options?.inputProvider) {
|
|
142
|
+
const result = await options.inputProvider({
|
|
143
|
+
ask: prop.type === 'number' ? 'number' : 'text',
|
|
144
|
+
message: prop.description || `Enter value for ${key}:`,
|
|
145
|
+
});
|
|
146
|
+
if (result !== undefined && result !== null) {
|
|
147
|
+
const oldValue = backing[key];
|
|
148
|
+
backing[key] = result;
|
|
149
|
+
changes.push({ property: key, oldValue, newValue: result });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const oldValue = backing[key];
|
|
155
|
+
backing[key] = value;
|
|
156
|
+
changes.push({ property: key, oldValue, newValue: value });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (changes.length > 0) {
|
|
160
|
+
await this.persist(photonName, instanceName, backing);
|
|
161
|
+
for (const change of changes) {
|
|
162
|
+
this.log(`⚙️ Settings: ${change.property}: ${JSON.stringify(change.oldValue)} → ${JSON.stringify(change.newValue)}`);
|
|
163
|
+
this.emitChange(instance, change.property, change.oldValue, change.newValue);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return { ...backing };
|
|
167
|
+
}
|
|
168
|
+
/** Emit a `settings:changed` event through the photon's emit system. */
|
|
169
|
+
emitChange(instance, property, oldValue, newValue) {
|
|
170
|
+
if (typeof instance.emit === 'function') {
|
|
171
|
+
try {
|
|
172
|
+
instance.emit({
|
|
173
|
+
event: 'settings:changed',
|
|
174
|
+
data: {
|
|
175
|
+
property,
|
|
176
|
+
oldValue,
|
|
177
|
+
newValue,
|
|
178
|
+
timestamp: Date.now(),
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Best-effort emit
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=settings-persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-persistence.js","sourceRoot":"","sources":["../src/settings-persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encoding helpers for the embedded asset tree (compiled binaries).
|
|
3
|
+
*
|
|
4
|
+
* The tree ships inside the bundled JS as `Record<string, Record<string, string>>`,
|
|
5
|
+
* so binary siblings (.png, .woff2, .wasm, etc.) cannot be stored as raw bytes.
|
|
6
|
+
* We base64-encode them with a NUL-prefixed sentinel so the runtime serve path
|
|
7
|
+
* recognizes which entries are binary and decodes back to a Buffer before
|
|
8
|
+
* writing the HTTP response. UTF-8 decoding the same bytes (the v1.29 first
|
|
9
|
+
* pass) corrupts every binary asset.
|
|
10
|
+
*/
|
|
11
|
+
import { Buffer } from 'node:buffer';
|
|
12
|
+
export declare function isBinaryAssetExtension(ext: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Encode a file's bytes for inclusion in the embedded asset tree. Text
|
|
15
|
+
* extensions stay as UTF-8 strings (cheap to template-literalize and
|
|
16
|
+
* round-trip cleanly through `res.end(string)`). Binary extensions get
|
|
17
|
+
* the sentinel + base64 treatment.
|
|
18
|
+
*/
|
|
19
|
+
export declare function encodeAssetForEmbed(content: Buffer, ext: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Decode an embedded asset value back into the bytes the runtime should
|
|
22
|
+
* write to the response. Returns `{ buffer }` for binary entries and
|
|
23
|
+
* `{ text }` for plain UTF-8. Callers pick `res.end(buffer)` or
|
|
24
|
+
* `res.end(text)` accordingly so binary bytes round-trip unchanged.
|
|
25
|
+
*/
|
|
26
|
+
export declare function decodeEmbeddedAsset(value: string): {
|
|
27
|
+
text?: string;
|
|
28
|
+
buffer?: Buffer;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=asset-encoding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-encoding.d.ts","sourceRoot":"","sources":["../../src/shared/asset-encoding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAsCrC,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAKrF"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-encoding.js","sourceRoot":"","sources":["../../src/shared/asset-encoding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS;IACxC,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;CACP,CAAC,CAAC;AAEH,0EAA0E;AAC1E,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,GAAW;IAC9D,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-sqlite.d.ts","sourceRoot":"","sources":["../../src/shared/audit-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAc,KAAK,cAAc,EAAwB,MAAM,qBAAqB,CAAC;AAM5F,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,6CAA6C;IAC7C,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AA4BD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAE7E;AAMD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACnC,KAAK,IAAI,MAAM,CAAC;IAChB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,kBAAmB,YAAW,YAAY;IAmBnD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACf,mEAAmE;IACnE,OAAO,CAAC,YAAY;IArBtB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAK;IACnB,mFAAmF;IACnF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAU/B;gBAGO,EAAE,EAAE,cAAc,EAClB,OAAO,SAAU;IACzB,mEAAmE;IAC3D,YAAY,SAAM;IAY5B,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA+B9B,KAAK,CAAC,CAAC,GAAE,UAAe,GAAG,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"audit-sqlite.d.ts","sourceRoot":"","sources":["../../src/shared/audit-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAc,KAAK,cAAc,EAAwB,MAAM,qBAAqB,CAAC;AAM5F,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,6CAA6C;IAC7C,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AA4BD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAE7E;AAMD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACnC,KAAK,IAAI,MAAM,CAAC;IAChB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,kBAAmB,YAAW,YAAY;IAmBnD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACf,mEAAmE;IACnE,OAAO,CAAC,YAAY;IArBtB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAK;IACnB,mFAAmF;IACnF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAU/B;gBAGO,EAAE,EAAE,cAAc,EAClB,OAAO,SAAU;IACzB,mEAAmE;IAC3D,YAAY,SAAM;IAY5B,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA+B9B,KAAK,CAAC,CAAC,GAAE,UAAe,GAAG,UAAU,EAAE;IAgCvC,KAAK,IAAI,MAAM;IAKf,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,YAAY;CAUrB"}
|
|
@@ -122,7 +122,6 @@ export class SqliteAuditBackend {
|
|
|
122
122
|
const limit = q.limit ?? 1000;
|
|
123
123
|
const sql = `SELECT * FROM audit ${where} ORDER BY ts ${order} LIMIT ?`;
|
|
124
124
|
params.push(limit);
|
|
125
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
126
125
|
const rows = this.db.prepare(sql).all(...params);
|
|
127
126
|
return rows.map((r) => rowToEntry(r));
|
|
128
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-sqlite.js","sourceRoot":"","sources":["../../src/shared/audit-sqlite.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"audit-sqlite.js","sourceRoot":"","sources":["../../src/shared/audit-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-origin isolation headers (Track D2).
|
|
3
|
+
*
|
|
4
|
+
* Two header sets ride out of one handler depending on how the photon HTML
|
|
5
|
+
* is being loaded:
|
|
6
|
+
*
|
|
7
|
+
* - **standalone** — top-level navigation. The page benefits from
|
|
8
|
+
* cross-origin isolation: SharedArrayBuffer, WebGPU compute,
|
|
9
|
+
* persistent OPFS, Service Workers, threaded WASM modules. We send
|
|
10
|
+
* Cross-Origin-Opener-Policy: same-origin
|
|
11
|
+
* Cross-Origin-Embedder-Policy: require-corp
|
|
12
|
+
* so `crossOriginIsolated === true` resolves on the page.
|
|
13
|
+
*
|
|
14
|
+
* - **embedded** — request is destined for an iframe (host UIs like
|
|
15
|
+
* Beam, Claude Apps). COOP/COEP would block embedding from another
|
|
16
|
+
* origin, so we omit them and let the existing security headers
|
|
17
|
+
* stand.
|
|
18
|
+
*
|
|
19
|
+
* Asset responses (`assets/**` files) get
|
|
20
|
+
* Cross-Origin-Resource-Policy: same-origin
|
|
21
|
+
* regardless of mode so a standalone parent page with COEP `require-corp`
|
|
22
|
+
* can still load its own SPA chunks. Without this header the browser
|
|
23
|
+
* refuses cross-origin-isolated subresources.
|
|
24
|
+
*/
|
|
25
|
+
import type { ServerResponse, IncomingMessage } from 'http';
|
|
26
|
+
export type IsolationMode = 'standalone' | 'embedded';
|
|
27
|
+
/**
|
|
28
|
+
* Decide the isolation mode for an HTTP request. The request opts into
|
|
29
|
+
* `embedded` by sending `Sec-Fetch-Dest: iframe` (modern browsers always
|
|
30
|
+
* set this) or by carrying a `?embed=1` query param (manual override for
|
|
31
|
+
* test rigs and hosts that strip Sec-Fetch headers).
|
|
32
|
+
*/
|
|
33
|
+
export declare function detectIsolationMode(req: IncomingMessage): IsolationMode;
|
|
34
|
+
/**
|
|
35
|
+
* Apply COOP/COEP headers when serving an `@ui` HTML document. No-op for
|
|
36
|
+
* `embedded` mode so iframe embedding from a different origin keeps
|
|
37
|
+
* working.
|
|
38
|
+
*/
|
|
39
|
+
export declare function applyCrossOriginIsolationHeaders(res: ServerResponse, mode: IsolationMode): void;
|
|
40
|
+
/**
|
|
41
|
+
* Apply CORP `same-origin` to an asset response. Required so a standalone
|
|
42
|
+
* parent page with COEP `require-corp` can still load the asset. Safe to
|
|
43
|
+
* call unconditionally — the header has no negative effect on
|
|
44
|
+
* non-isolated pages.
|
|
45
|
+
*/
|
|
46
|
+
export declare function applyCorpSameOrigin(res: ServerResponse): void;
|
|
47
|
+
//# sourceMappingURL=cross-origin-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-origin-headers.d.ts","sourceRoot":"","sources":["../../src/shared/cross-origin-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5D,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,UAAU,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,aAAa,CAOvE;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAI/F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAE7D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-origin isolation headers (Track D2).
|
|
3
|
+
*
|
|
4
|
+
* Two header sets ride out of one handler depending on how the photon HTML
|
|
5
|
+
* is being loaded:
|
|
6
|
+
*
|
|
7
|
+
* - **standalone** — top-level navigation. The page benefits from
|
|
8
|
+
* cross-origin isolation: SharedArrayBuffer, WebGPU compute,
|
|
9
|
+
* persistent OPFS, Service Workers, threaded WASM modules. We send
|
|
10
|
+
* Cross-Origin-Opener-Policy: same-origin
|
|
11
|
+
* Cross-Origin-Embedder-Policy: require-corp
|
|
12
|
+
* so `crossOriginIsolated === true` resolves on the page.
|
|
13
|
+
*
|
|
14
|
+
* - **embedded** — request is destined for an iframe (host UIs like
|
|
15
|
+
* Beam, Claude Apps). COOP/COEP would block embedding from another
|
|
16
|
+
* origin, so we omit them and let the existing security headers
|
|
17
|
+
* stand.
|
|
18
|
+
*
|
|
19
|
+
* Asset responses (`assets/**` files) get
|
|
20
|
+
* Cross-Origin-Resource-Policy: same-origin
|
|
21
|
+
* regardless of mode so a standalone parent page with COEP `require-corp`
|
|
22
|
+
* can still load its own SPA chunks. Without this header the browser
|
|
23
|
+
* refuses cross-origin-isolated subresources.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Decide the isolation mode for an HTTP request. The request opts into
|
|
27
|
+
* `embedded` by sending `Sec-Fetch-Dest: iframe` (modern browsers always
|
|
28
|
+
* set this) or by carrying a `?embed=1` query param (manual override for
|
|
29
|
+
* test rigs and hosts that strip Sec-Fetch headers).
|
|
30
|
+
*/
|
|
31
|
+
export function detectIsolationMode(req) {
|
|
32
|
+
const dest = req.headers['sec-fetch-dest'];
|
|
33
|
+
if (typeof dest === 'string' && dest.toLowerCase() === 'iframe')
|
|
34
|
+
return 'embedded';
|
|
35
|
+
// Manual override — convenient for tests and hosts that strip Sec-Fetch.
|
|
36
|
+
const url = req.url || '';
|
|
37
|
+
if (/[?&]embed=1\b/.test(url))
|
|
38
|
+
return 'embedded';
|
|
39
|
+
return 'standalone';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Apply COOP/COEP headers when serving an `@ui` HTML document. No-op for
|
|
43
|
+
* `embedded` mode so iframe embedding from a different origin keeps
|
|
44
|
+
* working.
|
|
45
|
+
*/
|
|
46
|
+
export function applyCrossOriginIsolationHeaders(res, mode) {
|
|
47
|
+
if (mode !== 'standalone')
|
|
48
|
+
return;
|
|
49
|
+
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
|
|
50
|
+
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Apply CORP `same-origin` to an asset response. Required so a standalone
|
|
54
|
+
* parent page with COEP `require-corp` can still load the asset. Safe to
|
|
55
|
+
* call unconditionally — the header has no negative effect on
|
|
56
|
+
* non-isolated pages.
|
|
57
|
+
*/
|
|
58
|
+
export function applyCorpSameOrigin(res) {
|
|
59
|
+
res.setHeader('Cross-Origin-Resource-Policy', 'same-origin');
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=cross-origin-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-origin-headers.js","sourceRoot":"","sources":["../../src/shared/cross-origin-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC;IACnF,yEAAyE;IACzE,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;IAC1B,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACjD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAAC,GAAmB,EAAE,IAAmB;IACvF,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO;IAClC,GAAG,CAAC,SAAS,CAAC,4BAA4B,EAAE,aAAa,CAAC,CAAC;IAC3D,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAmB;IACrD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,aAAa,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/shared/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAMxC;;;GAGG;AACH,eAAO,MAAM,QAAQ;IACnB,qCAAqC;;IAErC,gCAAgC;;IAEhC,6CAA6C;;IAE7C,sDAAsD;;IAEtD,iCAAiC;;IAEjC,kCAAkC;;IAElC,iDAAiD;;IAEjD,wBAAwB;;IAExB,sCAAsC;;CAE9B,CAAC;AAEX,KAAK,YAAY,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAM7D;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAOzF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CA0C5F;AAMD;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,KAAK,GAAG,IAAI,CAsCd;AAQD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,KAAK,CAqCP;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/shared/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAMxC;;;GAGG;AACH,eAAO,MAAM,QAAQ;IACnB,qCAAqC;;IAErC,gCAAgC;;IAEhC,6CAA6C;;IAE7C,sDAAsD;;IAEtD,iCAAiC;;IAEjC,kCAAkC;;IAElC,iDAAiD;;IAEjD,wBAAwB;;IAExB,sCAAsC;;CAE9B,CAAC;AAEX,KAAK,YAAY,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAM7D;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAOzF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CA0C5F;AAMD;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,KAAK,GAAG,IAAI,CAsCd;AAQD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,KAAK,CAqCP;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CA4FzD"}
|
|
@@ -180,7 +180,9 @@ export function formatToolError(toolName, error) {
|
|
|
180
180
|
let suggestion = '';
|
|
181
181
|
let retryable = false;
|
|
182
182
|
const errorName = error instanceof Error ? error.name : '';
|
|
183
|
-
const nodeCode = error && typeof error === 'object' && 'code' in error
|
|
183
|
+
const nodeCode = error && typeof error === 'object' && 'code' in error
|
|
184
|
+
? String(error.code)
|
|
185
|
+
: '';
|
|
184
186
|
// Photon authors can attach userMessage and hint for friendly display
|
|
185
187
|
const userMessage = error && typeof error === 'object' && 'userMessage' in error ? String(error.userMessage) : '';
|
|
186
188
|
const userHint = error && typeof error === 'object' && 'hint' in error ? String(error.hint) : '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/shared/error-handler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/shared/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEnE,gDAAgD;AAChD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAExC,iFAAiF;AACjF,0CAA0C;AAC1C,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,qCAAqC;IACrC,OAAO,EAAE,CAAC;IACV,gCAAgC;IAChC,KAAK,EAAE,CAAC;IACR,6CAA6C;IAC7C,gBAAgB,EAAE,CAAC;IACnB,sDAAsD;IACtD,YAAY,EAAE,CAAC;IACf,iCAAiC;IACjC,SAAS,EAAE,CAAC;IACZ,kCAAkC;IAClC,aAAa,EAAE,CAAC;IAChB,iDAAiD;IACjD,gBAAgB,EAAE,CAAC;IACnB,wBAAwB;IACxB,iBAAiB,EAAE,EAAE;IACrB,sCAAsC;IACtC,SAAS,EAAE,GAAG;CACN,CAAC;AAIX,iFAAiF;AACjF,kBAAkB;AAClB,iFAAiF;AAEjF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,IAAa;IACvD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,SAAS,GAAG,KAA8B,CAAC;IACjD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,OAAgB,EAAE,UAAmB;IAC7E,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAE3F,yEAAyE;IACzE,6EAA6E;IAC7E,+CAA+C;IAC/C,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,6CAA6C;IAC7C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,OAAO,IAAI,WAAW,CACpB,mBAAmB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAChE,mBAAmB,EACnB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EACpB,0DAA0D,EAC1D,IAAI,CACL,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,OAAO,IAAI,WAAW,CACpB,sBAAsB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EACnE,mBAAmB,EACnB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EACpB,0DAA0D,EAC1D,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,WAAW,CACpB,OAAO,EACP,mBAAmB,EACnB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EACtC,UAAU,EACV,IAAI,CACL,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAChF,CAAC;AAED,iFAAiF;AACjF,gBAAgB;AAChB,iFAAiF;AAEjF;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAc,EACd,UAKI,EAAE;IAEN,MAAM,EACJ,MAAM,EACN,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,GACzC,GAAG,OAAO,CAAC;IAEZ,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACxB,IAAI,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAC1D,IAAI,SAAS,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,sBAAsB;AACtB,iFAAiF;AAEjF,MAAM,SAAS,GAAG,wEAAwE,CAAC;AAE3F;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,OAOC;IAED,MAAM,EACJ,QAAQ,GAAG,QAAQ,CAAC,KAAK,EACzB,UAAU,EACV,UAAU,EACV,UAAU,EACV,OAAO,EACP,MAAM,GACP,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEhF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9B,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,iFAAiF;AACjF,iEAAiE;AACjE,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,KAAc;IAEd,IAAI,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1E,IAAI,SAAS,GAAG,eAAe,CAAC;IAChC,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,MAAM,QAAQ,GACZ,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;QACnD,CAAC,CAAC,MAAM,CAAE,KAA2B,CAAC,IAAI,CAAC;QAC3C,CAAC,CAAC,EAAE,CAAC;IAET,sEAAsE;IACtE,MAAM,WAAW,GACf,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,MAAM,QAAQ,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjG,IAAI,WAAW;QAAE,YAAY,GAAG,WAAW,CAAC;IAE5C,iFAAiF;IACjF,IAAI,SAAS,KAAK,wBAAwB,EAAE,CAAC;QAC3C,SAAS,GAAG,cAAc,CAAC;QAC3B,UAAU;YACR,6FAA6F,CAAC;QAChG,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,sBAAsB,EAAE,CAAC;QAChD,SAAS,GAAG,cAAc,CAAC;QAC3B,UAAU,GAAG,gFAAgF,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,yBAAyB,EAAE,CAAC;QACnD,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU;YACR,kGAAkG,CAAC;QACrG,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,oBAAoB,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC1E,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU,GAAG,gFAAgF,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QAC3C,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,mEAAmE,CAAC;QACjF,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IACL,QAAQ,KAAK,cAAc;QAC3B,QAAQ,KAAK,aAAa;QAC1B,QAAQ,KAAK,WAAW,EACxB,CAAC;QACD,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU;YACR,wFAAwF,CAAC;QAC3F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzD,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,4DAA4D,CAAC;QAC1E,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,SAAS,GAAG,iBAAiB,CAAC;QAC9B,UAAU,GAAG,6DAA6D,CAAC;QAC3E,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,UAAU,GAAG,QAAQ,CAAC;IACxB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzF,SAAS,GAAG,sBAAsB,CAAC;QACnC,UAAU;YACR,yFAAyF,CAAC;IAC9F,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpF,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,mEAAmE,CAAC;IACnF,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU,GAAG,gFAAgF,CAAC;QAC9F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,SAAS,GAAG,eAAe,CAAC;QAC5B,UAAU;YACR,wFAAwF,CAAC;QAC3F,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,4DAA4D,CAAC;IAC5E,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9C,SAAS,GAAG,iBAAiB,CAAC;QAC9B,UAAU,GAAG,6DAA6D,CAAC;IAC7E,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,UAAU;QAAE,UAAU,GAAG,QAAQ,CAAC;IAEnD,IAAI,IAAI,GAAG,eAAe,QAAQ,mBAAmB,SAAS,cAAc,YAAY,IAAI,CAAC;IAC7F,IAAI,UAAU;QAAE,IAAI,IAAI,iBAAiB,UAAU,IAAI,CAAC;IACxD,IAAI,IAAI,cAAc,SAAS,IAAI,CAAC;IAEpC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source-level extractor for `@expose` declarations.
|
|
3
|
+
*
|
|
4
|
+
* v1.29 Track C. Methods tagged `@expose` are auto-bound to a kebab-cased
|
|
5
|
+
* `/api/<method>` POST endpoint so a same-origin SPA can call them via
|
|
6
|
+
* fetch without writing per-method `@post` directives. `@expose public`
|
|
7
|
+
* widens this from "SameSite-cookie required" to "any caller" — useful
|
|
8
|
+
* for anonymous public surfaces (iCal feeds, billing portals, etc.).
|
|
9
|
+
*
|
|
10
|
+
* Like `http-route-extractor.ts`, this runs against raw source so the
|
|
11
|
+
* extractor doesn't depend on whatever shape the published photon-core
|
|
12
|
+
* SchemaExtractor returns. Both the runtime dispatcher and the Cloudflare
|
|
13
|
+
* deploy code-gen consume the same output.
|
|
14
|
+
*
|
|
15
|
+
* /** @expose */ async getCurrentUser() { ... } → private
|
|
16
|
+
* /** @expose public */ async billing() { ... } → public
|
|
17
|
+
* (no @expose tag) async listUsers() { ... } → MCP-only
|
|
18
|
+
*/
|
|
19
|
+
export type ExposeVisibility = 'private' | 'public';
|
|
20
|
+
export interface ExposeDef {
|
|
21
|
+
/** Method on the photon class. */
|
|
22
|
+
handler: string;
|
|
23
|
+
/** SameSite cookie required (`private`) or anonymous OK (`public`). */
|
|
24
|
+
visibility: ExposeVisibility;
|
|
25
|
+
}
|
|
26
|
+
export declare function extractExposesFromSource(source: string): ExposeDef[];
|
|
27
|
+
/**
|
|
28
|
+
* Convert a method name to its kebab-cased route segment. Matches the
|
|
29
|
+
* convention the bridge fetch fallback uses (`fetch('/api/<kebab>', ...)`).
|
|
30
|
+
*
|
|
31
|
+
* getCurrentUser → get-current-user
|
|
32
|
+
* listUsers → list-users
|
|
33
|
+
* billing → billing
|
|
34
|
+
*/
|
|
35
|
+
export declare function methodToKebab(name: string): string;
|
|
36
|
+
//# sourceMappingURL=expose-route-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expose-route-extractor.d.ts","sourceRoot":"","sources":["../../src/shared/expose-route-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAWD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAqBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKlD"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source-level extractor for `@expose` declarations.
|
|
3
|
+
*
|
|
4
|
+
* v1.29 Track C. Methods tagged `@expose` are auto-bound to a kebab-cased
|
|
5
|
+
* `/api/<method>` POST endpoint so a same-origin SPA can call them via
|
|
6
|
+
* fetch without writing per-method `@post` directives. `@expose public`
|
|
7
|
+
* widens this from "SameSite-cookie required" to "any caller" — useful
|
|
8
|
+
* for anonymous public surfaces (iCal feeds, billing portals, etc.).
|
|
9
|
+
*
|
|
10
|
+
* Like `http-route-extractor.ts`, this runs against raw source so the
|
|
11
|
+
* extractor doesn't depend on whatever shape the published photon-core
|
|
12
|
+
* SchemaExtractor returns. Both the runtime dispatcher and the Cloudflare
|
|
13
|
+
* deploy code-gen consume the same output.
|
|
14
|
+
*
|
|
15
|
+
* /** @expose */ async getCurrentUser() { ... } → private
|
|
16
|
+
* /** @expose public */ async billing() { ... } → public
|
|
17
|
+
* (no @expose tag) async listUsers() { ... } → MCP-only
|
|
18
|
+
*/
|
|
19
|
+
const JSDOC_BLOCK_RE = /\/\*\*([\s\S]*?)\*\//g;
|
|
20
|
+
const METHOD_RE = /^\s*(?:public\s+|private\s+|protected\s+)?(?:async\s+)?(\w+)\s*\(/;
|
|
21
|
+
// Anchor `@expose` to a JSDoc tag position — either the very start of the
|
|
22
|
+
// block body (single-line `/** @expose */`) or a JSDoc line that begins
|
|
23
|
+
// with `*`. Prevents prose mentions like `No @expose — MCP-only` from
|
|
24
|
+
// tripping the matcher. The visibility capture excludes `*` so it stops
|
|
25
|
+
// at the JSDoc terminator on single-line blocks.
|
|
26
|
+
const EXPOSE_TAG_RE = /(?:^\s*|\n\s*\*\s*)@expose\b(?:[ \t]+([^\s*]+))?/im;
|
|
27
|
+
export function extractExposesFromSource(source) {
|
|
28
|
+
const exposes = [];
|
|
29
|
+
JSDOC_BLOCK_RE.lastIndex = 0;
|
|
30
|
+
let block;
|
|
31
|
+
while ((block = JSDOC_BLOCK_RE.exec(source)) !== null) {
|
|
32
|
+
const jsdocBody = block[1];
|
|
33
|
+
const exposeMatch = jsdocBody.match(EXPOSE_TAG_RE);
|
|
34
|
+
if (!exposeMatch)
|
|
35
|
+
continue;
|
|
36
|
+
const after = source.slice(block.index + block[0].length);
|
|
37
|
+
const methodMatch = after.match(METHOD_RE);
|
|
38
|
+
if (!methodMatch)
|
|
39
|
+
continue;
|
|
40
|
+
// The argument after @expose, if present, is one of: 'public' (widens
|
|
41
|
+
// exposure to anonymous callers) or anything else (treated as no
|
|
42
|
+
// visibility hint — defaults to private). This is intentionally loose:
|
|
43
|
+
// adding new visibility levels later doesn't break existing callers
|
|
44
|
+
// that already wrote `@expose public`.
|
|
45
|
+
const visibility = exposeMatch[1]?.trim().toLowerCase() === 'public' ? 'public' : 'private';
|
|
46
|
+
exposes.push({ handler: methodMatch[1], visibility });
|
|
47
|
+
}
|
|
48
|
+
return exposes;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Convert a method name to its kebab-cased route segment. Matches the
|
|
52
|
+
* convention the bridge fetch fallback uses (`fetch('/api/<kebab>', ...)`).
|
|
53
|
+
*
|
|
54
|
+
* getCurrentUser → get-current-user
|
|
55
|
+
* listUsers → list-users
|
|
56
|
+
* billing → billing
|
|
57
|
+
*/
|
|
58
|
+
export function methodToKebab(name) {
|
|
59
|
+
return name
|
|
60
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
61
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')
|
|
62
|
+
.toLowerCase();
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=expose-route-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expose-route-extractor.js","sourceRoot":"","sources":["../../src/shared/expose-route-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,SAAS,GAAG,mEAAmE,CAAC;AACtF,0EAA0E;AAC1E,wEAAwE;AACxE,sEAAsE;AACtE,wEAAwE;AACxE,iDAAiD;AACjD,MAAM,aAAa,GAAG,oDAAoD,CAAC;AAE3E,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;IAC7B,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,sEAAsE;QACtE,iEAAiE;QACjE,uEAAuE;QACvE,oEAAoE;QACpE,uCAAuC;QACvC,MAAM,UAAU,GACd,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI;SACR,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,WAAW,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract auth claims from incoming HTTP request headers.
|
|
3
|
+
*
|
|
4
|
+
* Used by the standalone HTTP server (Track C closure) to discover which
|
|
5
|
+
* claim bag the per-claim instance pool should key on. Two sources are
|
|
6
|
+
* recognized today, matching what `extractInstance` in the Cloudflare
|
|
7
|
+
* Worker template recognizes — same headers, same precedence:
|
|
8
|
+
*
|
|
9
|
+
* 1. `Cf-Access-Authenticated-User-Email` — set by Cloudflare Access at
|
|
10
|
+
* the edge after JWT verification. Trusted (origin is behind CF).
|
|
11
|
+
* 2. `Cf-Access-Jwt-Assertion` — the raw JWT. Decoded payload fields
|
|
12
|
+
* (email, sub, ...) are merged into the claim bag. The signature is
|
|
13
|
+
* NOT re-verified; CF already validated it before forwarding to the
|
|
14
|
+
* origin. If you run the standalone server outside Cloudflare and
|
|
15
|
+
* want a different trust boundary, add a verification step here.
|
|
16
|
+
*
|
|
17
|
+
* The standalone server is the only consumer right now. The MCP daemon
|
|
18
|
+
* pulls claims from its CLI / streamable-HTTP authentication path; the
|
|
19
|
+
* Cloudflare Worker template does its own header read. Keep the three
|
|
20
|
+
* surfaces in sync when adding a new claim source.
|
|
21
|
+
*/
|
|
22
|
+
import type { IncomingHttpHeaders } from 'node:http';
|
|
23
|
+
/**
|
|
24
|
+
* Read claims from CF Access headers. Returns undefined when no
|
|
25
|
+
* recognized auth headers are present so the caller can fall back to the
|
|
26
|
+
* default instance without a bound claim.
|
|
27
|
+
*
|
|
28
|
+
* The returned bag uses lowercased standard claim names (`email`, `sub`,
|
|
29
|
+
* etc.) so `resolveInstanceFromClaims` finds them by their canonical key
|
|
30
|
+
* regardless of the JWT's casing.
|
|
31
|
+
*/
|
|
32
|
+
export declare function extractClaimsFromHeaders(headers: IncomingHttpHeaders): Record<string, unknown> | undefined;
|
|
33
|
+
//# sourceMappingURL=extract-claims.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-claims.d.ts","sourceRoot":"","sources":["../../src/shared/extract-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGrD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA8BrC"}
|