@hasna/recordings 0.2.13 → 0.3.1
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/Dockerfile.package +4 -5
- package/README.md +113 -8
- package/bun.lock +2 -2
- package/dist/__tests__/helpers/installer-guard-execution.d.ts +22 -0
- package/dist/__tests__/helpers/installer-guard-execution.d.ts.map +1 -0
- package/dist/__tests__/helpers/installer-preflight.d.ts +22 -0
- package/dist/__tests__/helpers/installer-preflight.d.ts.map +1 -0
- package/dist/__tests__/helpers/native-fs-guard.d.ts.map +1 -1
- package/dist/__tests__/helpers/source-assertions.d.ts +169 -0
- package/dist/__tests__/helpers/source-assertions.d.ts.map +1 -0
- package/dist/__tests__/preload.d.ts +1 -4
- package/dist/__tests__/preload.d.ts.map +1 -1
- package/dist/cli/desktop-snapshot.d.ts +20 -0
- package/dist/cli/desktop-snapshot.d.ts.map +1 -0
- package/dist/cli/index.js +2078 -277
- package/dist/cli/macos-permissions.d.ts +72 -0
- package/dist/cli/macos-permissions.d.ts.map +1 -1
- package/dist/cli/macos-shortcut.d.ts +139 -0
- package/dist/cli/macos-shortcut.d.ts.map +1 -0
- package/dist/cli/trigger-probe.d.ts +172 -0
- package/dist/cli/trigger-probe.d.ts.map +1 -0
- package/dist/db/database.d.ts +9 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/http/client.d.ts +10 -7
- package/dist/http/client.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +634 -49
- package/dist/lib/capture-probe.d.ts +216 -0
- package/dist/lib/capture-probe.d.ts.map +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/macos-bundle.d.ts +50 -0
- package/dist/lib/macos-bundle.d.ts.map +1 -0
- package/dist/lib/persistence-probe.d.ts +208 -0
- package/dist/lib/persistence-probe.d.ts.map +1 -0
- package/dist/lib/recorder.d.ts.map +1 -1
- package/dist/lib/retired-deployment-modes.d.ts +24 -0
- package/dist/lib/retired-deployment-modes.d.ts.map +1 -0
- package/dist/lib/transcriber.d.ts +60 -0
- package/dist/lib/transcriber.d.ts.map +1 -1
- package/dist/mcp/index.js +140 -56
- package/dist/server/cloud-config.d.ts +25 -3
- package/dist/server/cloud-config.d.ts.map +1 -1
- package/dist/server/cloud-readiness.d.ts.map +1 -1
- package/dist/server/cloud.d.ts +8 -7
- package/dist/server/cloud.d.ts.map +1 -1
- package/dist/server/index.js +187 -79
- package/dist/server/migrate-command.d.ts.map +1 -1
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +108 -49
- package/dist/store.d.ts +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/package.json +25 -6
- package/scripts/build_native_fs_guard.sh +15 -2
- package/scripts/ci-linux-suite.ts +403 -0
- package/scripts/ci-native-build.ts +402 -0
- package/scripts/enforce_identity_migration.sh +110 -0
- package/scripts/generate-sdk.ts +1 -1
- package/scripts/install_macos_app.sh +138 -24
- package/scripts/macos_artifact.ts +205 -33
- package/scripts/native/realtime-settle-probe/README.md +39 -0
- package/scripts/native/realtime-settle-probe/main.swift +135 -0
- package/scripts/policy/local-only-approved-targets.txt +21 -0
- package/scripts/read_local_only_targets.sh +203 -0
- package/scripts/scan-artifact.ts +40 -0
- package/scripts/set-version.ts +145 -0
- package/scripts/vacuity-manifest-gen.ts +96 -0
- package/scripts/vacuity-manifests/enhancement-screen-mirror.tsv +44 -0
- package/scripts/vacuity-manifests/install-chain.tsv +13 -0
- package/scripts/vacuity-manifests/must-survive-controls.tsv +10 -0
- package/scripts/vacuity-manifests/reorder.tsv +4 -0
- package/scripts/vacuity-manifests/source-side.tsv +15 -0
- package/scripts/vacuity-manifests/variable-operands.tsv +16 -0
- package/scripts/vacuity-manifests/version-sites.tsv +61 -0
- package/scripts/vacuity-mutation-battery.ts +266 -0
- package/src/native/Recordings/App/MenuBarStatusView.swift +14 -7
- package/src/native/Recordings/App/RuntimeSmoke.swift +5 -1
- package/src/native/Recordings/App/SidebarView.swift +1 -1
- package/src/native/Recordings/Package.swift +24 -5
- package/src/native/Recordings/RecordingsLib/EnhancementScreen.swift +91 -0
- package/src/native/Recordings/RecordingsLib/FnKeyMonitor.swift +27 -4
- package/src/native/Recordings/RecordingsLib/Info.plist +2 -2
- package/src/native/Recordings/RecordingsLib/MenuBarPresentation.swift +56 -3
- package/src/native/Recordings/RecordingsLib/NativePCMRecorder.swift +13 -0
- package/src/native/Recordings/RecordingsLib/PasteDeliveryVerification.swift +460 -0
- package/src/native/Recordings/RecordingsLib/RealtimeTranscriptionClient.swift +41 -7
- package/src/native/Recordings/RecordingsLib/RecordingAttemptAlert.swift +36 -0
- package/src/native/Recordings/RecordingsLib/RecordingEngine.swift +1071 -75
- package/src/native/Recordings/RecordingsLib/SettingsView.swift +47 -3
- package/src/native/Recordings/RecordingsLib/VoiceShortcuts.swift +11 -6
- package/src/native/Recordings/RecordingsTests/CLIRunnerTests.swift +3 -3
- package/src/native/Recordings/RecordingsTests/EnhancementScreenTests.swift +191 -0
- package/src/native/Recordings/RecordingsTests/MenuBarPresentationTests.swift +144 -4
- package/src/native/Recordings/RecordingsTests/PasteDeliveryVerificationTests.swift +463 -0
- package/src/native/Recordings/RecordingsTests/PasteTargetTests.swift +33 -20
- package/src/native/Recordings/RecordingsTests/ProjectStoreTests.swift +1 -1
- package/src/native/Recordings/RecordingsTests/RealtimeSettleBenchmark.swift +200 -0
- package/src/native/Recordings/RecordingsTests/RealtimeSettleBudgetTests.swift +80 -0
- package/src/native/Recordings/RecordingsTests/RealtimeTranscriptionTests.swift +22 -4
- package/src/native/Recordings/RecordingsTests/RecordingEngineDeliveryTests.swift +12 -6
- package/src/native/Recordings/RecordingsTests/RecordingEngineHomeIsolationTests.swift +67 -0
- package/src/native/Recordings/RecordingsTests/RecordingStartGateTests.swift +12 -3
- package/src/native/Recordings/RecordingsTests/RecordingStartTimingTests.swift +207 -11
- package/src/native/Recordings/RecordingsTests/SpeechIntentTests.swift +17 -6
- package/src/native/Recordings/RecordingsTests/TestHomeDirectory.swift +23 -0
- package/src/native/Recordings/Updater/Broker/ApplicationProcessQuiescence.swift +7 -1
- package/src/native/Recordings/Updater/Broker/AtomicActivation.swift +10 -10
- package/src/native/Recordings/Updater/Broker/BrokerMain.swift +5 -1
- package/src/native/Recordings/Updater/Broker/HostOSProductVersion.swift +1 -0
- package/src/native/Recordings/Updater/Broker/PeerIdentity.swift +59 -3
- package/src/native/Recordings/Updater/Protocol/UpdateProtocol.swift +21 -2
- package/src/native/Recordings/Updater/ProtocolTests/ExpectationIntegrityTests.swift +60 -0
- package/src/native/Recordings/Updater/ProtocolTests/UpdateXPCInterfaceTests.swift +113 -0
- package/src/native/Recordings/Updater/VerifierLauncher/RecordingsVerifierLauncher.c +106 -5
- package/src/native/Recordings/build.sh +75 -9
- package/scripts/native/prebuilds/darwin-universal/recordings_fs_guard.node +0 -0
package/dist/server/index.js
CHANGED
|
@@ -18,7 +18,7 @@ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
|
18
18
|
var __require = import.meta.require;
|
|
19
19
|
|
|
20
20
|
// src/version.ts
|
|
21
|
-
var VERSION = "0.
|
|
21
|
+
var VERSION = "0.3.1";
|
|
22
22
|
|
|
23
23
|
// src/db/remote-storage.ts
|
|
24
24
|
import pg from "pg";
|
|
@@ -82,29 +82,84 @@ class PgAdapterAsync {
|
|
|
82
82
|
}
|
|
83
83
|
var init_remote_storage = () => {};
|
|
84
84
|
|
|
85
|
+
// src/lib/retired-deployment-modes.ts
|
|
86
|
+
function normalizeModeToken(value) {
|
|
87
|
+
return value.trim().toLowerCase().replace(/-/g, "_");
|
|
88
|
+
}
|
|
89
|
+
function asRetiredDeploymentMode(value) {
|
|
90
|
+
const token = normalizeModeToken(value);
|
|
91
|
+
return RETIRED_DEPLOYMENT_MODES.includes(token) ? token : null;
|
|
92
|
+
}
|
|
93
|
+
function retiredDeploymentModeError(rawValue, sourceEnvKey, replacement) {
|
|
94
|
+
const mode = asRetiredDeploymentMode(rawValue);
|
|
95
|
+
const value = mode === "local" ? replacement.onBox : replacement.offBox;
|
|
96
|
+
return new Error(`${sourceEnvKey}=${rawValue} names a deployment mode, and deployment modes are removed: ` + `${RETIRED_DEPLOYMENT_MODES.join(" | ")} no longer select anything. ` + `Set ${replacement.envKey}=${value} instead ` + `(${replacement.envKey} takes ${replacement.onBox} or ${replacement.offBox}).`);
|
|
97
|
+
}
|
|
98
|
+
var RETIRED_DEPLOYMENT_MODES;
|
|
99
|
+
var init_retired_deployment_modes = __esm(() => {
|
|
100
|
+
RETIRED_DEPLOYMENT_MODES = [
|
|
101
|
+
"local",
|
|
102
|
+
"self_hosted",
|
|
103
|
+
"cloud",
|
|
104
|
+
"remote",
|
|
105
|
+
"hybrid"
|
|
106
|
+
];
|
|
107
|
+
});
|
|
108
|
+
|
|
85
109
|
// src/server/cloud-config.ts
|
|
110
|
+
function backendReplacement() {
|
|
111
|
+
return { envKey: DATA_BACKEND_ENV_KEYS[0], onBox: "sqlite", offBox: "postgresql" };
|
|
112
|
+
}
|
|
86
113
|
function resolveCloudDatabaseUrl(env = process.env) {
|
|
87
114
|
return env.HASNA_RECORDINGS_DATABASE_URL || env.RECORDINGS_DATABASE_URL || env.DATABASE_URL || undefined;
|
|
88
115
|
}
|
|
116
|
+
function configuredDataBackend(env = process.env) {
|
|
117
|
+
for (const key of DATA_BACKEND_ENV_KEYS) {
|
|
118
|
+
const raw = env[key]?.trim();
|
|
119
|
+
if (!raw)
|
|
120
|
+
continue;
|
|
121
|
+
const token = normalizeModeToken(raw);
|
|
122
|
+
if (token === "sqlite")
|
|
123
|
+
return { backend: "sqlite", source: key };
|
|
124
|
+
if (token === "postgresql" || token === "postgres")
|
|
125
|
+
return { backend: "postgresql", source: key };
|
|
126
|
+
if (asRetiredDeploymentMode(raw)) {
|
|
127
|
+
throw retiredDeploymentModeError(raw, key, backendReplacement());
|
|
128
|
+
}
|
|
129
|
+
throw new Error(`${key}=${raw} is not a data backend. Use ${DATA_BACKEND_ENV_KEYS[0]}=sqlite or ` + `${DATA_BACKEND_ENV_KEYS[0]}=postgresql.`);
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
function resolveDataBackend(env = process.env) {
|
|
134
|
+
const configured = configuredDataBackend(env);
|
|
135
|
+
if (configured)
|
|
136
|
+
return configured.backend;
|
|
137
|
+
return resolveCloudDatabaseUrl(env) ? "postgresql" : "sqlite";
|
|
138
|
+
}
|
|
139
|
+
function isPostgresBackendEnabled(env = process.env) {
|
|
140
|
+
return resolveDataBackend(env) === "postgresql";
|
|
141
|
+
}
|
|
89
142
|
function resolveSigningSecret(env = process.env) {
|
|
90
143
|
return env.HASNA_RECORDINGS_API_SIGNING_KEY || env.HASNA_API_SIGNING_KEY || env.API_KEY_SIGNING_SECRET || undefined;
|
|
91
144
|
}
|
|
92
145
|
function requireSigningSecret(env = process.env) {
|
|
93
146
|
const signingSecret = resolveSigningSecret(env);
|
|
94
147
|
if (!signingSecret) {
|
|
95
|
-
throw new Error("
|
|
148
|
+
throw new Error("The /v1 API requires a signing secret (HASNA_RECORDINGS_API_SIGNING_KEY / HASNA_API_SIGNING_KEY / API_KEY_SIGNING_SECRET).");
|
|
96
149
|
}
|
|
97
150
|
if (Buffer.byteLength(signingSecret, "utf8") < 16) {
|
|
98
|
-
throw new Error("
|
|
151
|
+
throw new Error("The /v1 API signing secret must be at least 16 bytes.");
|
|
99
152
|
}
|
|
100
153
|
return signingSecret;
|
|
101
154
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
155
|
+
var DATA_BACKEND_ENV_KEYS;
|
|
156
|
+
var init_cloud_config = __esm(() => {
|
|
157
|
+
init_retired_deployment_modes();
|
|
158
|
+
DATA_BACKEND_ENV_KEYS = [
|
|
159
|
+
"HASNA_RECORDINGS_STORAGE_MODE",
|
|
160
|
+
"RECORDINGS_STORAGE_MODE"
|
|
161
|
+
];
|
|
162
|
+
});
|
|
108
163
|
|
|
109
164
|
// src/server/cloud-readiness.ts
|
|
110
165
|
var exports_cloud_readiness = {};
|
|
@@ -145,7 +200,11 @@ async function assertCloudSchemaContract(pg2) {
|
|
|
145
200
|
}
|
|
146
201
|
}
|
|
147
202
|
const idempotencyColumns = columns.filter((column) => column.table_name === "recording_idempotency");
|
|
148
|
-
const
|
|
203
|
+
const expectedIdempotencySpec = REQUIRED_COLUMNS.recording_idempotency;
|
|
204
|
+
if (expectedIdempotencySpec === undefined) {
|
|
205
|
+
throw new Error("cloud schema contract is missing recording_idempotency");
|
|
206
|
+
}
|
|
207
|
+
const expectedIdempotencyColumns = Object.keys(expectedIdempotencySpec);
|
|
149
208
|
const unexpectedIdempotencyColumn = idempotencyColumns.find((column) => !expectedIdempotencyColumns.includes(column.column_name));
|
|
150
209
|
if (unexpectedIdempotencyColumn) {
|
|
151
210
|
throw new Error(`cloud schema has unexpected column: recording_idempotency.${unexpectedIdempotencyColumn.column_name}`);
|
|
@@ -590,7 +649,11 @@ async function applyRecordedCloudMigrations(pg2, ensureApiKeySchema) {
|
|
|
590
649
|
for (let version = 0;version < PG_MIGRATIONS.length; version++) {
|
|
591
650
|
if (appliedSet.has(version))
|
|
592
651
|
continue;
|
|
593
|
-
|
|
652
|
+
const migration = PG_MIGRATIONS[version];
|
|
653
|
+
if (migration === undefined) {
|
|
654
|
+
throw new Error(`Missing PostgreSQL migration at version ${version}`);
|
|
655
|
+
}
|
|
656
|
+
await pg2.exec(migration);
|
|
594
657
|
await pg2.run("INSERT INTO _pg_migrations (version) VALUES (?) ON CONFLICT DO NOTHING", version);
|
|
595
658
|
}
|
|
596
659
|
await ensureApiKeySchema();
|
|
@@ -608,16 +671,18 @@ var init_migrate_command = __esm(() => {
|
|
|
608
671
|
var exports_cloud = {};
|
|
609
672
|
__export(exports_cloud, {
|
|
610
673
|
resolveSigningSecret: () => resolveSigningSecret,
|
|
674
|
+
resolveDataBackend: () => resolveDataBackend,
|
|
611
675
|
resolveCloudDatabaseUrl: () => resolveCloudDatabaseUrl,
|
|
612
676
|
requireSigningSecret: () => requireSigningSecret,
|
|
613
677
|
pingCloudConnectivity: () => pingCloudConnectivity2,
|
|
614
678
|
pingCloud: () => pingCloud,
|
|
615
679
|
migrateCloudSchema: () => migrateCloudSchema,
|
|
616
|
-
|
|
680
|
+
isPostgresBackendEnabled: () => isPostgresBackendEnabled,
|
|
617
681
|
getCloudVerifier: () => getCloudVerifier,
|
|
618
682
|
getCloudPg: () => getCloudPg,
|
|
619
683
|
getApiKeyStore: () => getApiKeyStore,
|
|
620
684
|
ensureCloudSchema: () => ensureCloudSchema,
|
|
685
|
+
configuredDataBackend: () => configuredDataBackend,
|
|
621
686
|
closeCloud: () => closeCloud,
|
|
622
687
|
RECORDINGS_APP_SLUG: () => RECORDINGS_APP_SLUG
|
|
623
688
|
});
|
|
@@ -628,7 +693,7 @@ function getCloudPg() {
|
|
|
628
693
|
return cachedPg;
|
|
629
694
|
const url = resolveCloudDatabaseUrl();
|
|
630
695
|
if (!url) {
|
|
631
|
-
throw new Error("
|
|
696
|
+
throw new Error("The /v1 API requires a PostgreSQL database URL (HASNA_RECORDINGS_DATABASE_URL / RECORDINGS_DATABASE_URL / DATABASE_URL).");
|
|
632
697
|
}
|
|
633
698
|
cachedPg = new PgAdapterAsync(url);
|
|
634
699
|
return cachedPg;
|
|
@@ -694,8 +759,10 @@ async function closeCloud() {
|
|
|
694
759
|
var RECORDINGS_APP_SLUG = "recordings", cachedPg = null, cachedStore = null, cachedVerifier = null, schemaEnsured = null;
|
|
695
760
|
var init_cloud = __esm(() => {
|
|
696
761
|
init_remote_storage();
|
|
762
|
+
init_cloud_config();
|
|
697
763
|
init_cloud_readiness();
|
|
698
764
|
init_migrate_command();
|
|
765
|
+
init_cloud_config();
|
|
699
766
|
});
|
|
700
767
|
|
|
701
768
|
// src/db/errors.ts
|
|
@@ -1712,7 +1779,7 @@ function startMcpHttpServer(options) {
|
|
|
1712
1779
|
var DEFAULT_MCP_HTTP_PORT = 8873, MCP_HTTP_HOST = "127.0.0.1";
|
|
1713
1780
|
var init_http = () => {};
|
|
1714
1781
|
|
|
1715
|
-
// node_modules/zod/v3/helpers/util.js
|
|
1782
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js
|
|
1716
1783
|
var util, objectUtil, ZodParsedType, getParsedType = (data) => {
|
|
1717
1784
|
const t = typeof data;
|
|
1718
1785
|
switch (t) {
|
|
@@ -1843,7 +1910,7 @@ var init_util = __esm(() => {
|
|
|
1843
1910
|
]);
|
|
1844
1911
|
});
|
|
1845
1912
|
|
|
1846
|
-
// node_modules/zod/v3/ZodError.js
|
|
1913
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js
|
|
1847
1914
|
var ZodIssueCode, quotelessJson = (obj) => {
|
|
1848
1915
|
const json2 = JSON.stringify(obj, null, 2);
|
|
1849
1916
|
return json2.replace(/"([^"]+)":/g, "$1:");
|
|
@@ -1964,7 +2031,7 @@ var init_ZodError = __esm(() => {
|
|
|
1964
2031
|
};
|
|
1965
2032
|
});
|
|
1966
2033
|
|
|
1967
|
-
// node_modules/zod/v3/locales/en.js
|
|
2034
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js
|
|
1968
2035
|
var errorMap = (issue, _ctx) => {
|
|
1969
2036
|
let message;
|
|
1970
2037
|
switch (issue.code) {
|
|
@@ -2071,7 +2138,7 @@ var init_en = __esm(() => {
|
|
|
2071
2138
|
en_default = errorMap;
|
|
2072
2139
|
});
|
|
2073
2140
|
|
|
2074
|
-
// node_modules/zod/v3/errors.js
|
|
2141
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js
|
|
2075
2142
|
function setErrorMap(map) {
|
|
2076
2143
|
overrideErrorMap = map;
|
|
2077
2144
|
}
|
|
@@ -2084,7 +2151,7 @@ var init_errors2 = __esm(() => {
|
|
|
2084
2151
|
overrideErrorMap = en_default;
|
|
2085
2152
|
});
|
|
2086
2153
|
|
|
2087
|
-
// node_modules/zod/v3/helpers/parseUtil.js
|
|
2154
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js
|
|
2088
2155
|
function addIssueToContext(ctx, issueData) {
|
|
2089
2156
|
const overrideMap = getErrorMap();
|
|
2090
2157
|
const issue = makeIssue({
|
|
@@ -2189,10 +2256,10 @@ var init_parseUtil = __esm(() => {
|
|
|
2189
2256
|
});
|
|
2190
2257
|
});
|
|
2191
2258
|
|
|
2192
|
-
// node_modules/zod/v3/helpers/typeAliases.js
|
|
2259
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js
|
|
2193
2260
|
var init_typeAliases = () => {};
|
|
2194
2261
|
|
|
2195
|
-
// node_modules/zod/v3/helpers/errorUtil.js
|
|
2262
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js
|
|
2196
2263
|
var errorUtil;
|
|
2197
2264
|
var init_errorUtil = __esm(() => {
|
|
2198
2265
|
(function(errorUtil2) {
|
|
@@ -2201,7 +2268,7 @@ var init_errorUtil = __esm(() => {
|
|
|
2201
2268
|
})(errorUtil || (errorUtil = {}));
|
|
2202
2269
|
});
|
|
2203
2270
|
|
|
2204
|
-
// node_modules/zod/v3/types.js
|
|
2271
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js
|
|
2205
2272
|
class ParseInputLazyPath {
|
|
2206
2273
|
constructor(parent, value, path, key) {
|
|
2207
2274
|
this._cachedPath = [];
|
|
@@ -5552,7 +5619,7 @@ var init_types = __esm(() => {
|
|
|
5552
5619
|
NEVER = INVALID;
|
|
5553
5620
|
});
|
|
5554
5621
|
|
|
5555
|
-
// node_modules/zod/v3/external.js
|
|
5622
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/external.js
|
|
5556
5623
|
var exports_external = {};
|
|
5557
5624
|
__export(exports_external, {
|
|
5558
5625
|
void: () => voidType,
|
|
@@ -5672,7 +5739,7 @@ var init_external = __esm(() => {
|
|
|
5672
5739
|
init_ZodError();
|
|
5673
5740
|
});
|
|
5674
5741
|
|
|
5675
|
-
// node_modules/zod/index.js
|
|
5742
|
+
// ../../node_modules/.bun/zod@3.25.76/node_modules/zod/index.js
|
|
5676
5743
|
var init_zod = __esm(() => {
|
|
5677
5744
|
init_external();
|
|
5678
5745
|
init_external();
|
|
@@ -6059,7 +6126,8 @@ function findProjectRecordingsPath(entry) {
|
|
|
6059
6126
|
function findRepositoryRoot(start) {
|
|
6060
6127
|
let dir = start;
|
|
6061
6128
|
while (true) {
|
|
6062
|
-
|
|
6129
|
+
const gitPath = join2(dir, ".git");
|
|
6130
|
+
if (isRepositoryMarker(gitPath))
|
|
6063
6131
|
return dir;
|
|
6064
6132
|
const parent = dirname2(dir);
|
|
6065
6133
|
if (parent === dir)
|
|
@@ -6067,6 +6135,15 @@ function findRepositoryRoot(start) {
|
|
|
6067
6135
|
dir = parent;
|
|
6068
6136
|
}
|
|
6069
6137
|
}
|
|
6138
|
+
function isRepositoryMarker(gitPath) {
|
|
6139
|
+
try {
|
|
6140
|
+
if (statSync(gitPath).isFile())
|
|
6141
|
+
return true;
|
|
6142
|
+
return existsSync(join2(gitPath, "HEAD"));
|
|
6143
|
+
} catch {
|
|
6144
|
+
return false;
|
|
6145
|
+
}
|
|
6146
|
+
}
|
|
6070
6147
|
function canonicalExistingPath(path) {
|
|
6071
6148
|
try {
|
|
6072
6149
|
return realpathSync2(path);
|
|
@@ -6095,14 +6172,17 @@ function loadSecretKey(keyName) {
|
|
|
6095
6172
|
try {
|
|
6096
6173
|
const content = readFileSync(candidate, "utf-8");
|
|
6097
6174
|
const match = content.match(new RegExp(`export\\s+${keyName}\\s*=\\s*"([^"]+)"`));
|
|
6098
|
-
|
|
6099
|
-
|
|
6175
|
+
const doubleQuotedValue = match?.[1];
|
|
6176
|
+
if (doubleQuotedValue !== undefined)
|
|
6177
|
+
return doubleQuotedValue;
|
|
6100
6178
|
const match2 = content.match(new RegExp(`export\\s+${keyName}\\s*=\\s*'([^']+)'`));
|
|
6101
|
-
|
|
6102
|
-
|
|
6179
|
+
const singleQuotedValue = match2?.[1];
|
|
6180
|
+
if (singleQuotedValue !== undefined)
|
|
6181
|
+
return singleQuotedValue;
|
|
6103
6182
|
const match3 = content.match(new RegExp(`${keyName}\\s*=\\s*(.+)`));
|
|
6104
|
-
|
|
6105
|
-
|
|
6183
|
+
const unquotedValue = match3?.[1];
|
|
6184
|
+
if (unquotedValue !== undefined)
|
|
6185
|
+
return unquotedValue.trim().replace(/^["']|["']$/g, "");
|
|
6106
6186
|
} catch {}
|
|
6107
6187
|
}
|
|
6108
6188
|
return "";
|
|
@@ -6247,7 +6327,11 @@ function runMigrations(db) {
|
|
|
6247
6327
|
const currentLevel = result?.max_id ?? -1;
|
|
6248
6328
|
for (let i = currentLevel + 1;i < MIGRATIONS.length; i++) {
|
|
6249
6329
|
try {
|
|
6250
|
-
|
|
6330
|
+
const migration = MIGRATIONS[i];
|
|
6331
|
+
if (migration === undefined) {
|
|
6332
|
+
throw new Error(`Missing SQLite migration at version ${i}`);
|
|
6333
|
+
}
|
|
6334
|
+
db.run(migration);
|
|
6251
6335
|
db.query("INSERT INTO _migrations (id) VALUES (?)").run(i);
|
|
6252
6336
|
} catch (e) {
|
|
6253
6337
|
if (isBenignMigrationError(e)) {
|
|
@@ -6284,7 +6368,7 @@ function ensureColumn(db, table, column, definition) {
|
|
|
6284
6368
|
function shortUuid2() {
|
|
6285
6369
|
return crypto.randomUUID().slice(0, 8);
|
|
6286
6370
|
}
|
|
6287
|
-
var _db = null, _adapter = null, MIGRATIONS;
|
|
6371
|
+
var _db = null, _adapter = null, MIGRATIONS, CURRENT_MIGRATION_LEVEL;
|
|
6288
6372
|
var init_database = __esm(() => {
|
|
6289
6373
|
init_sqlite_adapter();
|
|
6290
6374
|
init_config();
|
|
@@ -6367,6 +6451,7 @@ var init_database = __esm(() => {
|
|
|
6367
6451
|
ALTER TABLE agents ADD COLUMN active_project_id TEXT REFERENCES projects(id) ON DELETE SET NULL;
|
|
6368
6452
|
`
|
|
6369
6453
|
];
|
|
6454
|
+
CURRENT_MIGRATION_LEVEL = MIGRATIONS.length - 1;
|
|
6370
6455
|
});
|
|
6371
6456
|
|
|
6372
6457
|
// src/db/recordings.ts
|
|
@@ -6648,24 +6733,28 @@ var init_feedback = __esm(() => {
|
|
|
6648
6733
|
function envToken(name) {
|
|
6649
6734
|
return name.toUpperCase().replace(/-/g, "_");
|
|
6650
6735
|
}
|
|
6651
|
-
function
|
|
6652
|
-
|
|
6653
|
-
|
|
6654
|
-
|
|
6655
|
-
|
|
6656
|
-
|
|
6657
|
-
|
|
6658
|
-
|
|
6736
|
+
function clientStoreReplacement(envKey) {
|
|
6737
|
+
return { envKey, onBox: "sqlite", offBox: "http" };
|
|
6738
|
+
}
|
|
6739
|
+
function normalizeClientStore(value, sourceEnvKey, replacementEnvKey) {
|
|
6740
|
+
const normalized = normalizeModeToken(value);
|
|
6741
|
+
if (normalized === "sqlite")
|
|
6742
|
+
return "sqlite";
|
|
6743
|
+
if (normalized === "http" || normalized === "https")
|
|
6744
|
+
return "http";
|
|
6745
|
+
if (asRetiredDeploymentMode(value)) {
|
|
6746
|
+
throw retiredDeploymentModeError(value, sourceEnvKey, clientStoreReplacement(replacementEnvKey));
|
|
6659
6747
|
}
|
|
6660
|
-
throw new Error(`Unknown
|
|
6748
|
+
throw new Error(`Unknown client store: ${value}. Use sqlite or http.`);
|
|
6661
6749
|
}
|
|
6662
|
-
function
|
|
6750
|
+
function defaultApiBaseUrl(name) {
|
|
6663
6751
|
return `https://${name}.hasna.xyz`;
|
|
6664
6752
|
}
|
|
6665
6753
|
function envKeys(name) {
|
|
6666
6754
|
const token = envToken(name);
|
|
6667
6755
|
return {
|
|
6668
|
-
|
|
6756
|
+
storeKeys: [`HASNA_${token}_CLIENT_STORE`, `${token}_CLIENT_STORE`],
|
|
6757
|
+
retiredModeKeys: [`HASNA_${token}_STORAGE_MODE`, `HASNA_${token}_MODE`, `${token}_STORAGE_MODE`, `${token}_MODE`],
|
|
6669
6758
|
apiUrlKeys: [`HASNA_${token}_API_URL`, `${token}_API_URL`],
|
|
6670
6759
|
apiKeyKeys: [`HASNA_${token}_API_KEY`, `${token}_API_KEY`]
|
|
6671
6760
|
};
|
|
@@ -6678,6 +6767,20 @@ function firstEnv(env, keys) {
|
|
|
6678
6767
|
}
|
|
6679
6768
|
return null;
|
|
6680
6769
|
}
|
|
6770
|
+
function assertNoRetiredMode(env, keys) {
|
|
6771
|
+
for (const key of keys.retiredModeKeys) {
|
|
6772
|
+
const value = env[key]?.trim();
|
|
6773
|
+
if (!value)
|
|
6774
|
+
continue;
|
|
6775
|
+
const normalized = normalizeModeToken(value);
|
|
6776
|
+
if (SERVER_BACKEND_VALUES.includes(normalized))
|
|
6777
|
+
continue;
|
|
6778
|
+
if (asRetiredDeploymentMode(value)) {
|
|
6779
|
+
throw retiredDeploymentModeError(value, key, clientStoreReplacement(keys.storeKeys[0]));
|
|
6780
|
+
}
|
|
6781
|
+
throw new Error(`${key}=${value} is not a client store. ${key} no longer selects one; ` + `set ${keys.storeKeys[0]}=sqlite or ${keys.storeKeys[0]}=http instead.`);
|
|
6782
|
+
}
|
|
6783
|
+
}
|
|
6681
6784
|
function toV1BaseUrl(apiUrl) {
|
|
6682
6785
|
const url = new URL(apiUrl);
|
|
6683
6786
|
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
@@ -6693,45 +6796,42 @@ function toV1BaseUrl(apiUrl) {
|
|
|
6693
6796
|
}
|
|
6694
6797
|
function resolveTransport(name, env = process.env) {
|
|
6695
6798
|
const keys = envKeys(name);
|
|
6696
|
-
|
|
6799
|
+
assertNoRetiredMode(env, keys);
|
|
6800
|
+
const storeHit = firstEnv(env, keys.storeKeys);
|
|
6697
6801
|
const urlHit = firstEnv(env, keys.apiUrlKeys);
|
|
6698
6802
|
const keyHit = firstEnv(env, keys.apiKeyKeys);
|
|
6699
|
-
let
|
|
6700
|
-
let deprecatedAlias = null;
|
|
6803
|
+
let requested = "sqlite";
|
|
6701
6804
|
let modeSource = "default";
|
|
6702
|
-
if (
|
|
6703
|
-
|
|
6704
|
-
|
|
6705
|
-
deprecatedAlias = normalized.deprecatedAlias;
|
|
6706
|
-
modeSource = modeHit.key;
|
|
6805
|
+
if (storeHit) {
|
|
6806
|
+
requested = normalizeClientStore(storeHit.value, storeHit.key, keys.storeKeys[0]);
|
|
6807
|
+
modeSource = storeHit.key;
|
|
6707
6808
|
} else if (urlHit && keyHit) {
|
|
6708
|
-
|
|
6809
|
+
requested = "http";
|
|
6709
6810
|
modeSource = "auto:api-url+api-key";
|
|
6710
6811
|
}
|
|
6711
|
-
if (
|
|
6712
|
-
return { transport: "
|
|
6812
|
+
if (requested === "sqlite") {
|
|
6813
|
+
return { transport: "sqlite", requested, modeSource, baseUrl: null, apiKeyPresent: Boolean(keyHit), misconfigured: false, warning: null };
|
|
6713
6814
|
}
|
|
6714
6815
|
if (!keyHit) {
|
|
6715
6816
|
return {
|
|
6716
|
-
transport: "
|
|
6717
|
-
|
|
6718
|
-
deprecatedAlias,
|
|
6817
|
+
transport: "sqlite",
|
|
6818
|
+
requested,
|
|
6719
6819
|
modeSource,
|
|
6720
6820
|
baseUrl: null,
|
|
6721
6821
|
apiKeyPresent: false,
|
|
6722
6822
|
misconfigured: true,
|
|
6723
|
-
warning: `${modeSource}=
|
|
6823
|
+
warning: `${modeSource}=http but no API key is set (${keys.apiKeyKeys[0]}). Refusing to route to the API.`
|
|
6724
6824
|
};
|
|
6725
6825
|
}
|
|
6726
|
-
const rawUrl = urlHit?.value ??
|
|
6826
|
+
const rawUrl = urlHit?.value ?? defaultApiBaseUrl(name);
|
|
6727
6827
|
let baseUrl;
|
|
6728
6828
|
try {
|
|
6729
6829
|
baseUrl = toV1BaseUrl(rawUrl);
|
|
6730
6830
|
} catch (error2) {
|
|
6731
6831
|
const message = error2 instanceof Error ? error2.message : String(error2);
|
|
6732
|
-
return { transport: "
|
|
6832
|
+
return { transport: "sqlite", requested, modeSource, baseUrl: null, apiKeyPresent: true, misconfigured: true, warning: `Invalid API URL: ${message}.` };
|
|
6733
6833
|
}
|
|
6734
|
-
return { transport: "
|
|
6834
|
+
return { transport: "http", requested, modeSource, baseUrl, apiKeyPresent: true, misconfigured: false, warning: null };
|
|
6735
6835
|
}
|
|
6736
6836
|
function appendQuery(path, query) {
|
|
6737
6837
|
if (!query)
|
|
@@ -6825,6 +6925,8 @@ function createHttpTransport(options) {
|
|
|
6825
6925
|
const jitter = Math.floor(Math.random() * (backoff / 2 + 1));
|
|
6826
6926
|
await sleep(backoff + jitter);
|
|
6827
6927
|
}
|
|
6928
|
+
if (last === null)
|
|
6929
|
+
throw new Error(`Request to ${rel} completed without a result`);
|
|
6828
6930
|
throw last.error;
|
|
6829
6931
|
}
|
|
6830
6932
|
return {
|
|
@@ -6896,21 +6998,22 @@ function createStorageClient(name, transport) {
|
|
|
6896
6998
|
function resolveStorageClient(name, env = process.env, fetchImpl) {
|
|
6897
6999
|
const resolution = resolveTransport(name, env);
|
|
6898
7000
|
if (resolution.misconfigured) {
|
|
6899
|
-
throw new Error(resolution.warning ?? `Client for '${name}' is misconfigured for
|
|
7001
|
+
throw new Error(resolution.warning ?? `Client for '${name}' is misconfigured for the /v1 API.`);
|
|
6900
7002
|
}
|
|
6901
|
-
if (resolution.transport === "
|
|
6902
|
-
return { transport: "
|
|
7003
|
+
if (resolution.transport === "sqlite" || !resolution.baseUrl) {
|
|
7004
|
+
return { transport: "sqlite", client: null, resolution };
|
|
6903
7005
|
}
|
|
6904
7006
|
const keys = envKeys(name);
|
|
6905
7007
|
const apiKey = firstEnv(env, keys.apiKeyKeys)?.value;
|
|
6906
7008
|
if (!apiKey)
|
|
6907
|
-
throw new Error(`Client for '${name}' resolved to
|
|
7009
|
+
throw new Error(`Client for '${name}' resolved to the /v1 API without an API key.`);
|
|
6908
7010
|
const transport = createHttpTransport({ name, baseUrl: resolution.baseUrl, apiKey, ...fetchImpl ? { fetchImpl } : {} });
|
|
6909
|
-
return { transport: "
|
|
7011
|
+
return { transport: "http", client: createStorageClient(name, transport), resolution };
|
|
6910
7012
|
}
|
|
6911
|
-
var
|
|
7013
|
+
var SERVER_BACKEND_VALUES, HasnaHttpError, RETRY_STATUSES, IDEMPOTENT, defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
6912
7014
|
var init_client = __esm(() => {
|
|
6913
|
-
|
|
7015
|
+
init_retired_deployment_modes();
|
|
7016
|
+
SERVER_BACKEND_VALUES = ["sqlite", "postgresql", "postgres"];
|
|
6914
7017
|
HasnaHttpError = class HasnaHttpError extends Error {
|
|
6915
7018
|
status;
|
|
6916
7019
|
method;
|
|
@@ -6949,13 +7052,16 @@ function listQuery(filter) {
|
|
|
6949
7052
|
}
|
|
6950
7053
|
function unwrap(res, key) {
|
|
6951
7054
|
if (res && typeof res === "object" && key in res) {
|
|
6952
|
-
|
|
7055
|
+
const value = res[key];
|
|
7056
|
+
if (value === undefined)
|
|
7057
|
+
throw new Error(`Response field ${key} is undefined`);
|
|
7058
|
+
return value;
|
|
6953
7059
|
}
|
|
6954
7060
|
return res;
|
|
6955
7061
|
}
|
|
6956
7062
|
function apiStore(client) {
|
|
6957
7063
|
return {
|
|
6958
|
-
mode: "
|
|
7064
|
+
mode: "http",
|
|
6959
7065
|
baseUrl: client.baseUrl,
|
|
6960
7066
|
async createRecording(input, idempotencyKey) {
|
|
6961
7067
|
const keyCandidate = idempotencyKey === undefined && (input.id === undefined || input.id === null) ? randomUUID2() : idempotencyKey;
|
|
@@ -7122,7 +7228,7 @@ function getStore(env = process.env) {
|
|
|
7122
7228
|
if (env === process.env && cached)
|
|
7123
7229
|
return cached;
|
|
7124
7230
|
const resolved = resolveStorageClient(APP, env);
|
|
7125
|
-
const store = resolved.transport === "
|
|
7231
|
+
const store = resolved.transport === "http" ? apiStore(resolved.client) : localStore;
|
|
7126
7232
|
if (env === process.env)
|
|
7127
7233
|
cached = store;
|
|
7128
7234
|
return store;
|
|
@@ -7137,7 +7243,7 @@ var init_store = __esm(() => {
|
|
|
7137
7243
|
init_recording_create_identity();
|
|
7138
7244
|
init_install_maintenance();
|
|
7139
7245
|
localStore = {
|
|
7140
|
-
mode: "
|
|
7246
|
+
mode: "sqlite",
|
|
7141
7247
|
baseUrl: null,
|
|
7142
7248
|
async createRecording(input, idempotencyKey) {
|
|
7143
7249
|
return withLocalStoreReaderLease(() => createRecording2(input, undefined, idempotencyKey));
|
|
@@ -8195,13 +8301,13 @@ function buildFetch(options = {}) {
|
|
|
8195
8301
|
"Retry-After": String(rl.retryAfter ?? 60)
|
|
8196
8302
|
});
|
|
8197
8303
|
}
|
|
8198
|
-
const mode =
|
|
8304
|
+
const mode = resolveDataBackend();
|
|
8199
8305
|
if ((path === "/health" || path === "/ready" || path === "/version") && method === "GET") {
|
|
8200
8306
|
if (path === "/version") {
|
|
8201
8307
|
return jsonResponse({ status: "ok", version: VERSION, mode, name: "recordings" });
|
|
8202
8308
|
}
|
|
8203
8309
|
if (path === "/ready") {
|
|
8204
|
-
if (mode === "
|
|
8310
|
+
if (mode === "postgresql") {
|
|
8205
8311
|
try {
|
|
8206
8312
|
await checkCloudAuth();
|
|
8207
8313
|
await checkCloud();
|
|
@@ -8259,12 +8365,13 @@ async function startServer(port, options) {
|
|
|
8259
8365
|
};
|
|
8260
8366
|
process.on("SIGINT", shutdown);
|
|
8261
8367
|
process.on("SIGTERM", shutdown);
|
|
8262
|
-
const mode =
|
|
8368
|
+
const mode = resolveDataBackend();
|
|
8263
8369
|
console.log(`recordings-serve listening on http://${hostname2}:${port} (mode: ${mode})`);
|
|
8264
8370
|
return server;
|
|
8265
8371
|
}
|
|
8266
8372
|
var SECURITY_HEADERS, rateLimitMap, RATE_LIMIT_WINDOW_MS = 60000, RATE_LIMIT_MAX;
|
|
8267
8373
|
var init_serve = __esm(() => {
|
|
8374
|
+
init_cloud_config();
|
|
8268
8375
|
init_v1();
|
|
8269
8376
|
init_openapi();
|
|
8270
8377
|
SECURITY_HEADERS = {
|
|
@@ -8283,9 +8390,9 @@ function parsePort() {
|
|
|
8283
8390
|
const arg = process.argv.find((a) => a === "--port" || a.startsWith("--port="));
|
|
8284
8391
|
if (arg) {
|
|
8285
8392
|
if (arg.includes("="))
|
|
8286
|
-
return parseInt(arg.split("=")[1], 10) || DEFAULT_PORT;
|
|
8393
|
+
return parseInt(arg.split("=", 2)[1] ?? "", 10) || DEFAULT_PORT;
|
|
8287
8394
|
const idx = process.argv.indexOf(arg);
|
|
8288
|
-
return parseInt(process.argv[idx + 1], 10) || DEFAULT_PORT;
|
|
8395
|
+
return parseInt(process.argv[idx + 1] ?? "", 10) || DEFAULT_PORT;
|
|
8289
8396
|
}
|
|
8290
8397
|
const envPort = process.env.PORT ? parseInt(process.env.PORT, 10) : undefined;
|
|
8291
8398
|
return envPort || DEFAULT_PORT;
|
|
@@ -8311,10 +8418,11 @@ Options:
|
|
|
8311
8418
|
-h, --help display help for command
|
|
8312
8419
|
|
|
8313
8420
|
Commands:
|
|
8314
|
-
migrate Apply the
|
|
8421
|
+
migrate Apply the PostgreSQL schema, then exit. Idempotent.
|
|
8315
8422
|
|
|
8316
8423
|
Environment:
|
|
8317
|
-
|
|
8424
|
+
HASNA_RECORDINGS_STORAGE_MODE Data backend: sqlite | postgresql
|
|
8425
|
+
HASNA_RECORDINGS_DATABASE_URL PostgreSQL DSN (implies postgresql)
|
|
8318
8426
|
HASNA_RECORDINGS_API_SIGNING_KEY HMAC signing secret for API-key auth`);
|
|
8319
8427
|
}
|
|
8320
8428
|
async function runMigrate() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-command.d.ts","sourceRoot":"","sources":["../../src/server/migrate-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAED,oFAAoF;AACpF,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,EAChD,kBAAkB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GACzC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"migrate-command.d.ts","sourceRoot":"","sources":["../../src/server/migrate-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAED,oFAAoF;AACpF,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,EAChD,kBAAkB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GACzC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,6FAA6F;AAC7F,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKnD,CAAC;AAyCF,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACzC;AAED,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,IAWtD,KAAK,OAAO,EACZ,QAAQ;IAAE,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,KAC9D,OAAO,CAAC,QAAQ,CAAC,CAqFrB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAqBnH"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { getStore, __resetStore, APP } from "./store.js";
|
|
2
2
|
export type { Store, RecordingStats, FeedbackInput } from "./store.js";
|
|
3
|
-
export { resolveStorageClient, resolveTransport, createHttpTransport, createStorageClient, toV1BaseUrl,
|
|
4
|
-
export type { StorageClient,
|
|
3
|
+
export { resolveStorageClient, resolveTransport, createHttpTransport, createStorageClient, toV1BaseUrl, defaultApiBaseUrl, HasnaHttpError, } from "./http/client.js";
|
|
4
|
+
export type { StorageClient, ClientStore, TransportKind, TransportResolution, HttpTransport, } from "./http/client.js";
|
|
5
5
|
//# sourceMappingURL=storage.d.ts.map
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,aAAa,GACd,MAAM,kBAAkB,CAAC"}
|