mongo.do 0.1.0 → 0.1.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/dist/cli/index.d.ts +1 -15
- package/dist/cli/index.js +4083 -196
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2740 -20
- package/dist/index.js +9375 -27
- package/dist/index.js.map +1 -1
- package/dist/worker-entrypoint-BEW23Gmp.d.ts +1331 -0
- package/dist/worker.d.ts +6 -5
- package/dist/worker.js +5477 -18
- package/dist/worker.js.map +1 -1
- package/package.json +3 -2
- package/dist/agentfs/adapters/anthropic.d.ts +0 -176
- package/dist/agentfs/adapters/anthropic.d.ts.map +0 -1
- package/dist/agentfs/adapters/anthropic.js +0 -629
- package/dist/agentfs/adapters/anthropic.js.map +0 -1
- package/dist/agentfs/adapters/index.d.ts +0 -21
- package/dist/agentfs/adapters/index.d.ts.map +0 -1
- package/dist/agentfs/adapters/index.js +0 -23
- package/dist/agentfs/adapters/index.js.map +0 -1
- package/dist/agentfs/adapters/vercel.d.ts +0 -260
- package/dist/agentfs/adapters/vercel.d.ts.map +0 -1
- package/dist/agentfs/adapters/vercel.js +0 -288
- package/dist/agentfs/adapters/vercel.js.map +0 -1
- package/dist/agentfs/glob.d.ts +0 -116
- package/dist/agentfs/glob.d.ts.map +0 -1
- package/dist/agentfs/glob.js +0 -270
- package/dist/agentfs/glob.js.map +0 -1
- package/dist/agentfs/grep.d.ts +0 -83
- package/dist/agentfs/grep.d.ts.map +0 -1
- package/dist/agentfs/grep.js +0 -193
- package/dist/agentfs/grep.js.map +0 -1
- package/dist/agentfs/index.d.ts +0 -22
- package/dist/agentfs/index.d.ts.map +0 -1
- package/dist/agentfs/index.js +0 -18
- package/dist/agentfs/index.js.map +0 -1
- package/dist/agentfs/kv-store.d.ts +0 -128
- package/dist/agentfs/kv-store.d.ts.map +0 -1
- package/dist/agentfs/kv-store.js +0 -227
- package/dist/agentfs/kv-store.js.map +0 -1
- package/dist/agentfs/mondo-agent.d.ts +0 -255
- package/dist/agentfs/mondo-agent.d.ts.map +0 -1
- package/dist/agentfs/mondo-agent.js +0 -879
- package/dist/agentfs/mondo-agent.js.map +0 -1
- package/dist/agentfs/toolcalls.d.ts +0 -130
- package/dist/agentfs/toolcalls.d.ts.map +0 -1
- package/dist/agentfs/toolcalls.js +0 -178
- package/dist/agentfs/toolcalls.js.map +0 -1
- package/dist/agentfs/types.d.ts +0 -171
- package/dist/agentfs/types.d.ts.map +0 -1
- package/dist/agentfs/types.js +0 -7
- package/dist/agentfs/types.js.map +0 -1
- package/dist/agentfs/vfs.d.ts +0 -249
- package/dist/agentfs/vfs.d.ts.map +0 -1
- package/dist/agentfs/vfs.js +0 -469
- package/dist/agentfs/vfs.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/mcp.d.ts +0 -119
- package/dist/cli/mcp.d.ts.map +0 -1
- package/dist/cli/mcp.js +0 -418
- package/dist/cli/mcp.js.map +0 -1
- package/dist/cli/server.d.ts +0 -179
- package/dist/cli/server.d.ts.map +0 -1
- package/dist/cli/server.js +0 -441
- package/dist/cli/server.js.map +0 -1
- package/dist/client/Collection.d.ts +0 -199
- package/dist/client/Collection.d.ts.map +0 -1
- package/dist/client/Collection.js +0 -256
- package/dist/client/Collection.js.map +0 -1
- package/dist/client/Database.d.ts +0 -68
- package/dist/client/Database.d.ts.map +0 -1
- package/dist/client/Database.js +0 -105
- package/dist/client/Database.js.map +0 -1
- package/dist/client/MongoClient.d.ts +0 -165
- package/dist/client/MongoClient.d.ts.map +0 -1
- package/dist/client/MongoClient.js +0 -307
- package/dist/client/MongoClient.js.map +0 -1
- package/dist/client/aggregation-cursor.d.ts +0 -210
- package/dist/client/aggregation-cursor.d.ts.map +0 -1
- package/dist/client/aggregation-cursor.js +0 -509
- package/dist/client/aggregation-cursor.js.map +0 -1
- package/dist/client/bulk-write.d.ts +0 -216
- package/dist/client/bulk-write.d.ts.map +0 -1
- package/dist/client/bulk-write.js +0 -63
- package/dist/client/bulk-write.js.map +0 -1
- package/dist/client/change-stream.d.ts +0 -245
- package/dist/client/change-stream.d.ts.map +0 -1
- package/dist/client/change-stream.js +0 -429
- package/dist/client/change-stream.js.map +0 -1
- package/dist/client/cursor.d.ts +0 -85
- package/dist/client/cursor.d.ts.map +0 -1
- package/dist/client/cursor.js +0 -156
- package/dist/client/cursor.js.map +0 -1
- package/dist/client/http-cursor.d.ts +0 -233
- package/dist/client/http-cursor.d.ts.map +0 -1
- package/dist/client/http-cursor.js +0 -496
- package/dist/client/http-cursor.js.map +0 -1
- package/dist/client/index.d.ts +0 -18
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -24
- package/dist/client/index.js.map +0 -1
- package/dist/client/mongo-client.d.ts +0 -60
- package/dist/client/mongo-client.d.ts.map +0 -1
- package/dist/client/mongo-client.js +0 -190
- package/dist/client/mongo-client.js.map +0 -1
- package/dist/client/mongo-collection.d.ts +0 -359
- package/dist/client/mongo-collection.d.ts.map +0 -1
- package/dist/client/mongo-collection.js +0 -1641
- package/dist/client/mongo-collection.js.map +0 -1
- package/dist/client/mongo-cursor.d.ts +0 -257
- package/dist/client/mongo-cursor.d.ts.map +0 -1
- package/dist/client/mongo-cursor.js +0 -621
- package/dist/client/mongo-cursor.js.map +0 -1
- package/dist/client/mongo-database.d.ts +0 -88
- package/dist/client/mongo-database.d.ts.map +0 -1
- package/dist/client/mongo-database.js +0 -139
- package/dist/client/mongo-database.js.map +0 -1
- package/dist/client/session.d.ts +0 -210
- package/dist/client/session.d.ts.map +0 -1
- package/dist/client/session.js +0 -326
- package/dist/client/session.js.map +0 -1
- package/dist/durable-object/index-manager.d.ts +0 -173
- package/dist/durable-object/index-manager.d.ts.map +0 -1
- package/dist/durable-object/index-manager.js +0 -764
- package/dist/durable-object/index-manager.js.map +0 -1
- package/dist/durable-object/index.d.ts +0 -12
- package/dist/durable-object/index.d.ts.map +0 -1
- package/dist/durable-object/index.js +0 -8
- package/dist/durable-object/index.js.map +0 -1
- package/dist/durable-object/mcp-handler.d.ts +0 -52
- package/dist/durable-object/mcp-handler.d.ts.map +0 -1
- package/dist/durable-object/mcp-handler.js +0 -186
- package/dist/durable-object/mcp-handler.js.map +0 -1
- package/dist/durable-object/migrations.d.ts +0 -40
- package/dist/durable-object/migrations.d.ts.map +0 -1
- package/dist/durable-object/migrations.js +0 -121
- package/dist/durable-object/migrations.js.map +0 -1
- package/dist/durable-object/mondo-database.d.ts +0 -148
- package/dist/durable-object/mondo-database.d.ts.map +0 -1
- package/dist/durable-object/mondo-database.js +0 -621
- package/dist/durable-object/mondo-database.js.map +0 -1
- package/dist/durable-object/schema.d.ts +0 -192
- package/dist/durable-object/schema.d.ts.map +0 -1
- package/dist/durable-object/schema.js +0 -186
- package/dist/durable-object/schema.js.map +0 -1
- package/dist/embedding/document-serializer.d.ts +0 -118
- package/dist/embedding/document-serializer.d.ts.map +0 -1
- package/dist/embedding/document-serializer.js +0 -339
- package/dist/embedding/document-serializer.js.map +0 -1
- package/dist/embedding/embedding-manager.d.ts +0 -136
- package/dist/embedding/embedding-manager.d.ts.map +0 -1
- package/dist/embedding/embedding-manager.js +0 -176
- package/dist/embedding/embedding-manager.js.map +0 -1
- package/dist/embedding/index.d.ts +0 -9
- package/dist/embedding/index.d.ts.map +0 -1
- package/dist/embedding/index.js +0 -9
- package/dist/embedding/index.js.map +0 -1
- package/dist/executor/aggregation-executor.d.ts +0 -93
- package/dist/executor/aggregation-executor.d.ts.map +0 -1
- package/dist/executor/aggregation-executor.js +0 -275
- package/dist/executor/aggregation-executor.js.map +0 -1
- package/dist/executor/function-executor.d.ts +0 -39
- package/dist/executor/function-executor.d.ts.map +0 -1
- package/dist/executor/function-executor.js +0 -168
- package/dist/executor/function-executor.js.map +0 -1
- package/dist/executor/index.d.ts +0 -4
- package/dist/executor/index.d.ts.map +0 -1
- package/dist/executor/index.js +0 -4
- package/dist/executor/index.js.map +0 -1
- package/dist/executor/vector-search-executor.d.ts +0 -71
- package/dist/executor/vector-search-executor.d.ts.map +0 -1
- package/dist/executor/vector-search-executor.js +0 -113
- package/dist/executor/vector-search-executor.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/adapters/anthropic-adapter.d.ts +0 -256
- package/dist/mcp/adapters/anthropic-adapter.d.ts.map +0 -1
- package/dist/mcp/adapters/anthropic-adapter.js +0 -409
- package/dist/mcp/adapters/anthropic-adapter.js.map +0 -1
- package/dist/mcp/adapters/base-adapter.d.ts +0 -164
- package/dist/mcp/adapters/base-adapter.d.ts.map +0 -1
- package/dist/mcp/adapters/base-adapter.js +0 -277
- package/dist/mcp/adapters/base-adapter.js.map +0 -1
- package/dist/mcp/adapters/errors.d.ts +0 -173
- package/dist/mcp/adapters/errors.d.ts.map +0 -1
- package/dist/mcp/adapters/errors.js +0 -305
- package/dist/mcp/adapters/errors.js.map +0 -1
- package/dist/mcp/adapters/index.d.ts +0 -65
- package/dist/mcp/adapters/index.d.ts.map +0 -1
- package/dist/mcp/adapters/index.js +0 -92
- package/dist/mcp/adapters/index.js.map +0 -1
- package/dist/mcp/adapters/streaming.d.ts +0 -200
- package/dist/mcp/adapters/streaming.d.ts.map +0 -1
- package/dist/mcp/adapters/streaming.js +0 -381
- package/dist/mcp/adapters/streaming.js.map +0 -1
- package/dist/mcp/adapters/vercel-adapter.d.ts +0 -321
- package/dist/mcp/adapters/vercel-adapter.d.ts.map +0 -1
- package/dist/mcp/adapters/vercel-adapter.js +0 -487
- package/dist/mcp/adapters/vercel-adapter.js.map +0 -1
- package/dist/mcp/agent.d.ts +0 -192
- package/dist/mcp/agent.d.ts.map +0 -1
- package/dist/mcp/agent.js +0 -338
- package/dist/mcp/agent.js.map +0 -1
- package/dist/mcp/cli.d.ts +0 -71
- package/dist/mcp/cli.d.ts.map +0 -1
- package/dist/mcp/cli.js +0 -218
- package/dist/mcp/cli.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -15
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js +0 -20
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/sandbox/database-proxy.d.ts +0 -118
- package/dist/mcp/sandbox/database-proxy.d.ts.map +0 -1
- package/dist/mcp/sandbox/database-proxy.js +0 -154
- package/dist/mcp/sandbox/database-proxy.js.map +0 -1
- package/dist/mcp/sandbox/index.d.ts +0 -8
- package/dist/mcp/sandbox/index.d.ts.map +0 -1
- package/dist/mcp/sandbox/index.js +0 -7
- package/dist/mcp/sandbox/index.js.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts +0 -72
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.js +0 -379
- package/dist/mcp/sandbox/miniflare-evaluator.js.map +0 -1
- package/dist/mcp/sandbox/template.d.ts +0 -48
- package/dist/mcp/sandbox/template.d.ts.map +0 -1
- package/dist/mcp/sandbox/template.js +0 -147
- package/dist/mcp/sandbox/template.js.map +0 -1
- package/dist/mcp/sandbox/worker-evaluator.d.ts +0 -160
- package/dist/mcp/sandbox/worker-evaluator.d.ts.map +0 -1
- package/dist/mcp/sandbox/worker-evaluator.js +0 -217
- package/dist/mcp/sandbox/worker-evaluator.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -75
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -278
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/tool-call-auditor.d.ts +0 -188
- package/dist/mcp/tool-call-auditor.d.ts.map +0 -1
- package/dist/mcp/tool-call-auditor.js +0 -198
- package/dist/mcp/tool-call-auditor.js.map +0 -1
- package/dist/mcp/tools/do.d.ts +0 -51
- package/dist/mcp/tools/do.d.ts.map +0 -1
- package/dist/mcp/tools/do.js +0 -113
- package/dist/mcp/tools/do.js.map +0 -1
- package/dist/mcp/tools/fetch.d.ts +0 -43
- package/dist/mcp/tools/fetch.d.ts.map +0 -1
- package/dist/mcp/tools/fetch.js +0 -127
- package/dist/mcp/tools/fetch.js.map +0 -1
- package/dist/mcp/tools/index.d.ts +0 -9
- package/dist/mcp/tools/index.d.ts.map +0 -1
- package/dist/mcp/tools/index.js +0 -9
- package/dist/mcp/tools/index.js.map +0 -1
- package/dist/mcp/tools/search.d.ts +0 -60
- package/dist/mcp/tools/search.d.ts.map +0 -1
- package/dist/mcp/tools/search.js +0 -278
- package/dist/mcp/tools/search.js.map +0 -1
- package/dist/mcp/transport/http.d.ts +0 -144
- package/dist/mcp/transport/http.d.ts.map +0 -1
- package/dist/mcp/transport/http.js +0 -545
- package/dist/mcp/transport/http.js.map +0 -1
- package/dist/mcp/transport/index.d.ts +0 -10
- package/dist/mcp/transport/index.d.ts.map +0 -1
- package/dist/mcp/transport/index.js +0 -12
- package/dist/mcp/transport/index.js.map +0 -1
- package/dist/mcp/transport/stdio.d.ts +0 -132
- package/dist/mcp/transport/stdio.d.ts.map +0 -1
- package/dist/mcp/transport/stdio.js +0 -466
- package/dist/mcp/transport/stdio.js.map +0 -1
- package/dist/mcp/types.d.ts +0 -476
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js +0 -178
- package/dist/mcp/types.js.map +0 -1
- package/dist/olap/cdc/cdc-buffer.d.ts +0 -92
- package/dist/olap/cdc/cdc-buffer.d.ts.map +0 -1
- package/dist/olap/cdc/cdc-buffer.js +0 -146
- package/dist/olap/cdc/cdc-buffer.js.map +0 -1
- package/dist/olap/cdc/cdc-emitter.d.ts +0 -118
- package/dist/olap/cdc/cdc-emitter.d.ts.map +0 -1
- package/dist/olap/cdc/cdc-emitter.js +0 -217
- package/dist/olap/cdc/cdc-emitter.js.map +0 -1
- package/dist/olap/cdc/cdc-schema.d.ts +0 -119
- package/dist/olap/cdc/cdc-schema.d.ts.map +0 -1
- package/dist/olap/cdc/cdc-schema.js +0 -253
- package/dist/olap/cdc/cdc-schema.js.map +0 -1
- package/dist/olap/cdc/index.d.ts +0 -10
- package/dist/olap/cdc/index.d.ts.map +0 -1
- package/dist/olap/cdc/index.js +0 -10
- package/dist/olap/cdc/index.js.map +0 -1
- package/dist/olap/clickhouse/iceberg.d.ts +0 -164
- package/dist/olap/clickhouse/iceberg.d.ts.map +0 -1
- package/dist/olap/clickhouse/iceberg.js +0 -138
- package/dist/olap/clickhouse/iceberg.js.map +0 -1
- package/dist/olap/clickhouse/index.d.ts +0 -14
- package/dist/olap/clickhouse/index.d.ts.map +0 -1
- package/dist/olap/clickhouse/index.js +0 -14
- package/dist/olap/clickhouse/index.js.map +0 -1
- package/dist/olap/clickhouse/mapper.d.ts +0 -170
- package/dist/olap/clickhouse/mapper.d.ts.map +0 -1
- package/dist/olap/clickhouse/mapper.js +0 -654
- package/dist/olap/clickhouse/mapper.js.map +0 -1
- package/dist/olap/clickhouse/olap-backend.d.ts +0 -181
- package/dist/olap/clickhouse/olap-backend.d.ts.map +0 -1
- package/dist/olap/clickhouse/olap-backend.js +0 -1083
- package/dist/olap/clickhouse/olap-backend.js.map +0 -1
- package/dist/olap/clickhouse/query-executor.d.ts +0 -163
- package/dist/olap/clickhouse/query-executor.d.ts.map +0 -1
- package/dist/olap/clickhouse/query-executor.js +0 -560
- package/dist/olap/clickhouse/query-executor.js.map +0 -1
- package/dist/olap/clickhouse/query.d.ts +0 -134
- package/dist/olap/clickhouse/query.d.ts.map +0 -1
- package/dist/olap/clickhouse/query.js +0 -512
- package/dist/olap/clickhouse/query.js.map +0 -1
- package/dist/olap/stage/index.d.ts +0 -6
- package/dist/olap/stage/index.d.ts.map +0 -1
- package/dist/olap/stage/index.js +0 -6
- package/dist/olap/stage/index.js.map +0 -1
- package/dist/olap/stage/parser.d.ts +0 -68
- package/dist/olap/stage/parser.d.ts.map +0 -1
- package/dist/olap/stage/parser.js +0 -293
- package/dist/olap/stage/parser.js.map +0 -1
- package/dist/olap/stage/router.d.ts +0 -94
- package/dist/olap/stage/router.d.ts.map +0 -1
- package/dist/olap/stage/router.js +0 -390
- package/dist/olap/stage/router.js.map +0 -1
- package/dist/rpc/endpoint.d.ts +0 -52
- package/dist/rpc/endpoint.d.ts.map +0 -1
- package/dist/rpc/endpoint.js +0 -734
- package/dist/rpc/endpoint.js.map +0 -1
- package/dist/rpc/index.d.ts +0 -34
- package/dist/rpc/index.d.ts.map +0 -1
- package/dist/rpc/index.js +0 -45
- package/dist/rpc/index.js.map +0 -1
- package/dist/rpc/rpc-client.d.ts +0 -275
- package/dist/rpc/rpc-client.d.ts.map +0 -1
- package/dist/rpc/rpc-client.js +0 -735
- package/dist/rpc/rpc-client.js.map +0 -1
- package/dist/rpc/rpc-target.d.ts +0 -220
- package/dist/rpc/rpc-target.d.ts.map +0 -1
- package/dist/rpc/rpc-target.js +0 -500
- package/dist/rpc/rpc-target.js.map +0 -1
- package/dist/rpc/worker-entrypoint.d.ts +0 -159
- package/dist/rpc/worker-entrypoint.d.ts.map +0 -1
- package/dist/rpc/worker-entrypoint.js +0 -212
- package/dist/rpc/worker-entrypoint.js.map +0 -1
- package/dist/server.d.ts +0 -18
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -129
- package/dist/server.js.map +0 -1
- package/dist/studio/components/browser/CollectionItem.d.ts +0 -26
- package/dist/studio/components/browser/CollectionItem.d.ts.map +0 -1
- package/dist/studio/components/browser/CollectionItem.js +0 -143
- package/dist/studio/components/browser/CollectionItem.js.map +0 -1
- package/dist/studio/components/browser/CollectionTree.d.ts +0 -45
- package/dist/studio/components/browser/CollectionTree.d.ts.map +0 -1
- package/dist/studio/components/browser/CollectionTree.js +0 -207
- package/dist/studio/components/browser/CollectionTree.js.map +0 -1
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.d.ts +0 -51
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.d.ts.map +0 -1
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.js +0 -185
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.js.map +0 -1
- package/dist/studio/components/browser/DatabaseBrowser.d.ts +0 -46
- package/dist/studio/components/browser/DatabaseBrowser.d.ts.map +0 -1
- package/dist/studio/components/browser/DatabaseBrowser.js +0 -304
- package/dist/studio/components/browser/DatabaseBrowser.js.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionItem.test.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/CollectionItem.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionItem.test.js +0 -169
- package/dist/studio/components/browser/__tests__/CollectionItem.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionTree.test.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/CollectionTree.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionTree.test.js +0 -203
- package/dist/studio/components/browser/__tests__/CollectionTree.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.d.ts +0 -8
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.js +0 -522
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.js +0 -518
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/setup.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/setup.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/setup.js +0 -22
- package/dist/studio/components/browser/__tests__/setup.js.map +0 -1
- package/dist/studio/components/browser/index.d.ts +0 -15
- package/dist/studio/components/browser/index.d.ts.map +0 -1
- package/dist/studio/components/browser/index.js +0 -10
- package/dist/studio/components/browser/index.js.map +0 -1
- package/dist/studio/components/browser/types.d.ts +0 -33
- package/dist/studio/components/browser/types.d.ts.map +0 -1
- package/dist/studio/components/browser/types.js +0 -5
- package/dist/studio/components/browser/types.js.map +0 -1
- package/dist/studio/components/connection/ConnectionForm.d.ts +0 -59
- package/dist/studio/components/connection/ConnectionForm.d.ts.map +0 -1
- package/dist/studio/components/connection/ConnectionForm.js +0 -274
- package/dist/studio/components/connection/ConnectionForm.js.map +0 -1
- package/dist/studio/components/connection/ConnectionList.d.ts +0 -59
- package/dist/studio/components/connection/ConnectionList.d.ts.map +0 -1
- package/dist/studio/components/connection/ConnectionList.js +0 -286
- package/dist/studio/components/connection/ConnectionList.js.map +0 -1
- package/dist/studio/components/connection/ConnectionPanel.d.ts +0 -132
- package/dist/studio/components/connection/ConnectionPanel.d.ts.map +0 -1
- package/dist/studio/components/connection/ConnectionPanel.js +0 -293
- package/dist/studio/components/connection/ConnectionPanel.js.map +0 -1
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.d.ts +0 -8
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.d.ts.map +0 -1
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.js +0 -632
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.js.map +0 -1
- package/dist/studio/components/connection/__tests__/setup.d.ts +0 -5
- package/dist/studio/components/connection/__tests__/setup.d.ts.map +0 -1
- package/dist/studio/components/connection/__tests__/setup.js +0 -11
- package/dist/studio/components/connection/__tests__/setup.js.map +0 -1
- package/dist/studio/components/connection/index.d.ts +0 -10
- package/dist/studio/components/connection/index.d.ts.map +0 -1
- package/dist/studio/components/connection/index.js +0 -7
- package/dist/studio/components/connection/index.js.map +0 -1
- package/dist/studio/components/crud/DeleteDocumentDialog.d.ts +0 -91
- package/dist/studio/components/crud/DeleteDocumentDialog.d.ts.map +0 -1
- package/dist/studio/components/crud/DeleteDocumentDialog.js +0 -273
- package/dist/studio/components/crud/DeleteDocumentDialog.js.map +0 -1
- package/dist/studio/components/crud/DocumentEditor.d.ts +0 -32
- package/dist/studio/components/crud/DocumentEditor.d.ts.map +0 -1
- package/dist/studio/components/crud/DocumentEditor.js +0 -546
- package/dist/studio/components/crud/DocumentEditor.js.map +0 -1
- package/dist/studio/components/crud/InsertDocumentDialog.d.ts +0 -78
- package/dist/studio/components/crud/InsertDocumentDialog.d.ts.map +0 -1
- package/dist/studio/components/crud/InsertDocumentDialog.js +0 -323
- package/dist/studio/components/crud/InsertDocumentDialog.js.map +0 -1
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.d.ts +0 -5
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.js +0 -298
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.js.map +0 -1
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.d.ts +0 -8
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.js +0 -368
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.js.map +0 -1
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.d.ts +0 -2
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.js +0 -352
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.js.map +0 -1
- package/dist/studio/components/crud/__tests__/setup.d.ts +0 -5
- package/dist/studio/components/crud/__tests__/setup.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/setup.js +0 -22
- package/dist/studio/components/crud/__tests__/setup.js.map +0 -1
- package/dist/studio/components/crud/index.d.ts +0 -12
- package/dist/studio/components/crud/index.d.ts.map +0 -1
- package/dist/studio/components/crud/index.js +0 -11
- package/dist/studio/components/crud/index.js.map +0 -1
- package/dist/studio/hooks/useConnection.d.ts +0 -127
- package/dist/studio/hooks/useConnection.d.ts.map +0 -1
- package/dist/studio/hooks/useConnection.js +0 -414
- package/dist/studio/hooks/useConnection.js.map +0 -1
- package/dist/studio/hooks/useDatabaseBrowser.d.ts +0 -107
- package/dist/studio/hooks/useDatabaseBrowser.d.ts.map +0 -1
- package/dist/studio/hooks/useDatabaseBrowser.js +0 -294
- package/dist/studio/hooks/useDatabaseBrowser.js.map +0 -1
- package/dist/studio/index.d.ts +0 -16
- package/dist/studio/index.d.ts.map +0 -1
- package/dist/studio/index.js +0 -14
- package/dist/studio/index.js.map +0 -1
- package/dist/studio/types/connection.d.ts +0 -266
- package/dist/studio/types/connection.d.ts.map +0 -1
- package/dist/studio/types/connection.js +0 -159
- package/dist/studio/types/connection.js.map +0 -1
- package/dist/studio/vitest.config.d.ts +0 -3
- package/dist/studio/vitest.config.d.ts.map +0 -1
- package/dist/studio/vitest.config.js +0 -33
- package/dist/studio/vitest.config.js.map +0 -1
- package/dist/translator/aggregation-translator.d.ts +0 -51
- package/dist/translator/aggregation-translator.d.ts.map +0 -1
- package/dist/translator/aggregation-translator.js +0 -324
- package/dist/translator/aggregation-translator.js.map +0 -1
- package/dist/translator/dialect.d.ts +0 -131
- package/dist/translator/dialect.d.ts.map +0 -1
- package/dist/translator/dialect.js +0 -276
- package/dist/translator/dialect.js.map +0 -1
- package/dist/translator/geo-translator.d.ts +0 -91
- package/dist/translator/geo-translator.d.ts.map +0 -1
- package/dist/translator/geo-translator.js +0 -587
- package/dist/translator/geo-translator.js.map +0 -1
- package/dist/translator/hybrid-translator.d.ts +0 -70
- package/dist/translator/hybrid-translator.d.ts.map +0 -1
- package/dist/translator/hybrid-translator.js +0 -193
- package/dist/translator/hybrid-translator.js.map +0 -1
- package/dist/translator/index.d.ts +0 -13
- package/dist/translator/index.d.ts.map +0 -1
- package/dist/translator/index.js +0 -11
- package/dist/translator/index.js.map +0 -1
- package/dist/translator/query-translator.d.ts +0 -211
- package/dist/translator/query-translator.d.ts.map +0 -1
- package/dist/translator/query-translator.js +0 -1276
- package/dist/translator/query-translator.js.map +0 -1
- package/dist/translator/search-highlight.d.ts +0 -83
- package/dist/translator/search-highlight.d.ts.map +0 -1
- package/dist/translator/search-highlight.js +0 -83
- package/dist/translator/search-highlight.js.map +0 -1
- package/dist/translator/search-translator.d.ts +0 -155
- package/dist/translator/search-translator.d.ts.map +0 -1
- package/dist/translator/search-translator.js +0 -241
- package/dist/translator/search-translator.js.map +0 -1
- package/dist/translator/stages/add-fields-stage.d.ts +0 -7
- package/dist/translator/stages/add-fields-stage.d.ts.map +0 -1
- package/dist/translator/stages/add-fields-stage.js +0 -72
- package/dist/translator/stages/add-fields-stage.js.map +0 -1
- package/dist/translator/stages/bucket-stage.d.ts +0 -7
- package/dist/translator/stages/bucket-stage.d.ts.map +0 -1
- package/dist/translator/stages/bucket-stage.js +0 -87
- package/dist/translator/stages/bucket-stage.js.map +0 -1
- package/dist/translator/stages/count-stage.d.ts +0 -7
- package/dist/translator/stages/count-stage.d.ts.map +0 -1
- package/dist/translator/stages/count-stage.js +0 -12
- package/dist/translator/stages/count-stage.js.map +0 -1
- package/dist/translator/stages/expression-translator.d.ts +0 -68
- package/dist/translator/stages/expression-translator.d.ts.map +0 -1
- package/dist/translator/stages/expression-translator.js +0 -467
- package/dist/translator/stages/expression-translator.js.map +0 -1
- package/dist/translator/stages/facet-stage.d.ts +0 -13
- package/dist/translator/stages/facet-stage.d.ts.map +0 -1
- package/dist/translator/stages/facet-stage.js +0 -26
- package/dist/translator/stages/facet-stage.js.map +0 -1
- package/dist/translator/stages/fusion-stages.d.ts +0 -118
- package/dist/translator/stages/fusion-stages.d.ts.map +0 -1
- package/dist/translator/stages/fusion-stages.js +0 -201
- package/dist/translator/stages/fusion-stages.js.map +0 -1
- package/dist/translator/stages/group-stage.d.ts +0 -8
- package/dist/translator/stages/group-stage.d.ts.map +0 -1
- package/dist/translator/stages/group-stage.js +0 -123
- package/dist/translator/stages/group-stage.js.map +0 -1
- package/dist/translator/stages/index.d.ts +0 -24
- package/dist/translator/stages/index.d.ts.map +0 -1
- package/dist/translator/stages/index.js +0 -24
- package/dist/translator/stages/index.js.map +0 -1
- package/dist/translator/stages/join-optimizer.d.ts +0 -37
- package/dist/translator/stages/join-optimizer.d.ts.map +0 -1
- package/dist/translator/stages/join-optimizer.js +0 -93
- package/dist/translator/stages/join-optimizer.js.map +0 -1
- package/dist/translator/stages/limit-stage.d.ts +0 -7
- package/dist/translator/stages/limit-stage.d.ts.map +0 -1
- package/dist/translator/stages/limit-stage.js +0 -11
- package/dist/translator/stages/limit-stage.js.map +0 -1
- package/dist/translator/stages/lookup-stage.d.ts +0 -7
- package/dist/translator/stages/lookup-stage.d.ts.map +0 -1
- package/dist/translator/stages/lookup-stage.js +0 -73
- package/dist/translator/stages/lookup-stage.js.map +0 -1
- package/dist/translator/stages/match-stage.d.ts +0 -7
- package/dist/translator/stages/match-stage.d.ts.map +0 -1
- package/dist/translator/stages/match-stage.js +0 -14
- package/dist/translator/stages/match-stage.js.map +0 -1
- package/dist/translator/stages/optimizer.d.ts +0 -15
- package/dist/translator/stages/optimizer.d.ts.map +0 -1
- package/dist/translator/stages/optimizer.js +0 -249
- package/dist/translator/stages/optimizer.js.map +0 -1
- package/dist/translator/stages/parallel-facet.d.ts +0 -47
- package/dist/translator/stages/parallel-facet.d.ts.map +0 -1
- package/dist/translator/stages/parallel-facet.js +0 -57
- package/dist/translator/stages/parallel-facet.js.map +0 -1
- package/dist/translator/stages/project-stage.d.ts +0 -8
- package/dist/translator/stages/project-stage.d.ts.map +0 -1
- package/dist/translator/stages/project-stage.js +0 -145
- package/dist/translator/stages/project-stage.js.map +0 -1
- package/dist/translator/stages/search-stage.d.ts +0 -60
- package/dist/translator/stages/search-stage.d.ts.map +0 -1
- package/dist/translator/stages/search-stage.js +0 -89
- package/dist/translator/stages/search-stage.js.map +0 -1
- package/dist/translator/stages/skip-stage.d.ts +0 -7
- package/dist/translator/stages/skip-stage.d.ts.map +0 -1
- package/dist/translator/stages/skip-stage.js +0 -11
- package/dist/translator/stages/skip-stage.js.map +0 -1
- package/dist/translator/stages/sort-stage.d.ts +0 -7
- package/dist/translator/stages/sort-stage.d.ts.map +0 -1
- package/dist/translator/stages/sort-stage.js +0 -21
- package/dist/translator/stages/sort-stage.js.map +0 -1
- package/dist/translator/stages/types.d.ts +0 -136
- package/dist/translator/stages/types.d.ts.map +0 -1
- package/dist/translator/stages/types.js +0 -5
- package/dist/translator/stages/types.js.map +0 -1
- package/dist/translator/stages/unwind-stage.d.ts +0 -7
- package/dist/translator/stages/unwind-stage.d.ts.map +0 -1
- package/dist/translator/stages/unwind-stage.js +0 -61
- package/dist/translator/stages/unwind-stage.js.map +0 -1
- package/dist/translator/stages/vector-search-stage.d.ts +0 -53
- package/dist/translator/stages/vector-search-stage.d.ts.map +0 -1
- package/dist/translator/stages/vector-search-stage.js +0 -62
- package/dist/translator/stages/vector-search-stage.js.map +0 -1
- package/dist/translator/update-translator.d.ts +0 -148
- package/dist/translator/update-translator.d.ts.map +0 -1
- package/dist/translator/update-translator.js +0 -819
- package/dist/translator/update-translator.js.map +0 -1
- package/dist/translator/vector-translator.d.ts +0 -89
- package/dist/translator/vector-translator.d.ts.map +0 -1
- package/dist/translator/vector-translator.js +0 -106
- package/dist/translator/vector-translator.js.map +0 -1
- package/dist/types/env.d.ts +0 -31
- package/dist/types/env.d.ts.map +0 -1
- package/dist/types/env.js +0 -5
- package/dist/types/env.js.map +0 -1
- package/dist/types/function.d.ts +0 -65
- package/dist/types/function.d.ts.map +0 -1
- package/dist/types/function.js +0 -5
- package/dist/types/function.js.map +0 -1
- package/dist/types/index.d.ts +0 -137
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -13
- package/dist/types/index.js.map +0 -1
- package/dist/types/mongodb.d.ts +0 -258
- package/dist/types/mongodb.d.ts.map +0 -1
- package/dist/types/mongodb.js +0 -5
- package/dist/types/mongodb.js.map +0 -1
- package/dist/types/objectid.d.ts +0 -130
- package/dist/types/objectid.d.ts.map +0 -1
- package/dist/types/objectid.js +0 -314
- package/dist/types/objectid.js.map +0 -1
- package/dist/types/rpc.d.ts +0 -313
- package/dist/types/rpc.d.ts.map +0 -1
- package/dist/types/rpc.js +0 -136
- package/dist/types/rpc.js.map +0 -1
- package/dist/types/vectorize.d.ts +0 -136
- package/dist/types/vectorize.d.ts.map +0 -1
- package/dist/types/vectorize.js +0 -8
- package/dist/types/vectorize.js.map +0 -1
- package/dist/utils/sql-safety.d.ts +0 -64
- package/dist/utils/sql-safety.d.ts.map +0 -1
- package/dist/utils/sql-safety.js +0 -112
- package/dist/utils/sql-safety.js.map +0 -1
- package/dist/validation/document-validator.d.ts +0 -195
- package/dist/validation/document-validator.d.ts.map +0 -1
- package/dist/validation/document-validator.js +0 -529
- package/dist/validation/document-validator.js.map +0 -1
- package/dist/vectorize/document-serializer.d.ts +0 -119
- package/dist/vectorize/document-serializer.d.ts.map +0 -1
- package/dist/vectorize/document-serializer.js +0 -320
- package/dist/vectorize/document-serializer.js.map +0 -1
- package/dist/wire/auth/index.d.ts +0 -5
- package/dist/wire/auth/index.d.ts.map +0 -1
- package/dist/wire/auth/index.js +0 -5
- package/dist/wire/auth/index.js.map +0 -1
- package/dist/wire/auth/scram.d.ts +0 -160
- package/dist/wire/auth/scram.d.ts.map +0 -1
- package/dist/wire/auth/scram.js +0 -425
- package/dist/wire/auth/scram.js.map +0 -1
- package/dist/wire/backend/interface.d.ts +0 -168
- package/dist/wire/backend/interface.d.ts.map +0 -1
- package/dist/wire/backend/interface.js +0 -10
- package/dist/wire/backend/interface.js.map +0 -1
- package/dist/wire/backend/local-sqlite.d.ts +0 -89
- package/dist/wire/backend/local-sqlite.d.ts.map +0 -1
- package/dist/wire/backend/local-sqlite.js +0 -1002
- package/dist/wire/backend/local-sqlite.js.map +0 -1
- package/dist/wire/backend/query-router.d.ts +0 -197
- package/dist/wire/backend/query-router.d.ts.map +0 -1
- package/dist/wire/backend/query-router.js +0 -590
- package/dist/wire/backend/query-router.js.map +0 -1
- package/dist/wire/backend/validation.d.ts +0 -26
- package/dist/wire/backend/validation.d.ts.map +0 -1
- package/dist/wire/backend/validation.js +0 -79
- package/dist/wire/backend/validation.js.map +0 -1
- package/dist/wire/backend/workers-proxy.d.ts +0 -95
- package/dist/wire/backend/workers-proxy.d.ts.map +0 -1
- package/dist/wire/backend/workers-proxy.js +0 -429
- package/dist/wire/backend/workers-proxy.js.map +0 -1
- package/dist/wire/commands/admin.d.ts +0 -49
- package/dist/wire/commands/admin.d.ts.map +0 -1
- package/dist/wire/commands/admin.js +0 -272
- package/dist/wire/commands/admin.js.map +0 -1
- package/dist/wire/commands/aggregate.d.ts +0 -15
- package/dist/wire/commands/aggregate.d.ts.map +0 -1
- package/dist/wire/commands/aggregate.js +0 -98
- package/dist/wire/commands/aggregate.js.map +0 -1
- package/dist/wire/commands/auth.d.ts +0 -58
- package/dist/wire/commands/auth.d.ts.map +0 -1
- package/dist/wire/commands/auth.js +0 -158
- package/dist/wire/commands/auth.js.map +0 -1
- package/dist/wire/commands/crud.d.ts +0 -49
- package/dist/wire/commands/crud.d.ts.map +0 -1
- package/dist/wire/commands/crud.js +0 -336
- package/dist/wire/commands/crud.js.map +0 -1
- package/dist/wire/commands/hello.d.ts +0 -35
- package/dist/wire/commands/hello.d.ts.map +0 -1
- package/dist/wire/commands/hello.js +0 -204
- package/dist/wire/commands/hello.js.map +0 -1
- package/dist/wire/commands/index.d.ts +0 -24
- package/dist/wire/commands/index.d.ts.map +0 -1
- package/dist/wire/commands/index.js +0 -145
- package/dist/wire/commands/index.js.map +0 -1
- package/dist/wire/commands/router.d.ts +0 -46
- package/dist/wire/commands/router.d.ts.map +0 -1
- package/dist/wire/commands/router.js +0 -151
- package/dist/wire/commands/router.js.map +0 -1
- package/dist/wire/commands/types.d.ts +0 -51
- package/dist/wire/commands/types.d.ts.map +0 -1
- package/dist/wire/commands/types.js +0 -15
- package/dist/wire/commands/types.js.map +0 -1
- package/dist/wire/index.d.ts +0 -15
- package/dist/wire/index.d.ts.map +0 -1
- package/dist/wire/index.js +0 -19
- package/dist/wire/index.js.map +0 -1
- package/dist/wire/message.d.ts +0 -49
- package/dist/wire/message.d.ts.map +0 -1
- package/dist/wire/message.js +0 -299
- package/dist/wire/message.js.map +0 -1
- package/dist/wire/server.d.ts +0 -145
- package/dist/wire/server.d.ts.map +0 -1
- package/dist/wire/server.js +0 -284
- package/dist/wire/server.js.map +0 -1
- package/dist/wire/types.d.ts +0 -140
- package/dist/wire/types.d.ts.map +0 -1
- package/dist/wire/types.js +0 -64
- package/dist/wire/types.js.map +0 -1
- package/dist/worker.d.ts.map +0 -1
package/dist/rpc/endpoint.js
DELETED
|
@@ -1,734 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RPC Endpoint - Workers RPC handler for MondoBackend operations
|
|
3
|
-
*
|
|
4
|
-
* Implements:
|
|
5
|
-
* - HTTP POST /rpc endpoint for JSON-RPC style calls
|
|
6
|
-
* - Request validation and routing
|
|
7
|
-
* - MongoDB-compatible error codes
|
|
8
|
-
* - CORS support
|
|
9
|
-
* - Authentication (optional)
|
|
10
|
-
*/
|
|
11
|
-
import { ErrorCode } from '../types/rpc';
|
|
12
|
-
// ============================================================================
|
|
13
|
-
// MongoDB Error Codes (mapped for this module)
|
|
14
|
-
// ============================================================================
|
|
15
|
-
const ErrorCodes = {
|
|
16
|
-
InternalError: { code: ErrorCode.INTERNAL_ERROR, name: 'InternalError' },
|
|
17
|
-
BadValue: { code: ErrorCode.BAD_VALUE, name: 'BadValue' },
|
|
18
|
-
Unauthorized: { code: ErrorCode.UNAUTHORIZED, name: 'Unauthorized' },
|
|
19
|
-
NamespaceNotFound: { code: ErrorCode.NAMESPACE_NOT_FOUND, name: 'NamespaceNotFound' },
|
|
20
|
-
CommandNotFound: { code: ErrorCode.COMMAND_NOT_FOUND, name: 'CommandNotFound' },
|
|
21
|
-
DuplicateKey: { code: ErrorCode.DUPLICATE_KEY, name: 'DuplicateKey' },
|
|
22
|
-
};
|
|
23
|
-
// ============================================================================
|
|
24
|
-
// Method Definitions
|
|
25
|
-
// ============================================================================
|
|
26
|
-
/**
|
|
27
|
-
* Methods that don't require db or collection
|
|
28
|
-
*/
|
|
29
|
-
const GLOBAL_METHODS = new Set(['listDatabases']);
|
|
30
|
-
/**
|
|
31
|
-
* Methods that require db but not collection
|
|
32
|
-
*/
|
|
33
|
-
const DB_METHODS = new Set(['listCollections', 'createDatabase', 'dropDatabase', 'databaseExists', 'dbStats']);
|
|
34
|
-
/**
|
|
35
|
-
* Methods that require both db and collection
|
|
36
|
-
*/
|
|
37
|
-
const COLLECTION_METHODS = new Set([
|
|
38
|
-
'find',
|
|
39
|
-
'insertOne',
|
|
40
|
-
'insertMany',
|
|
41
|
-
'updateOne',
|
|
42
|
-
'updateMany',
|
|
43
|
-
'deleteOne',
|
|
44
|
-
'deleteMany',
|
|
45
|
-
'count',
|
|
46
|
-
'distinct',
|
|
47
|
-
'aggregate',
|
|
48
|
-
'createCollection',
|
|
49
|
-
'dropCollection',
|
|
50
|
-
'collectionExists',
|
|
51
|
-
'collStats',
|
|
52
|
-
'listIndexes',
|
|
53
|
-
'createIndexes',
|
|
54
|
-
'dropIndex',
|
|
55
|
-
'dropIndexes',
|
|
56
|
-
'getMore',
|
|
57
|
-
'killCursors',
|
|
58
|
-
]);
|
|
59
|
-
/**
|
|
60
|
-
* All supported methods
|
|
61
|
-
*/
|
|
62
|
-
const SUPPORTED_METHODS = new Set([...GLOBAL_METHODS, ...DB_METHODS, ...COLLECTION_METHODS]);
|
|
63
|
-
/**
|
|
64
|
-
* Write methods (cannot be called on system collections)
|
|
65
|
-
*/
|
|
66
|
-
const WRITE_METHODS = new Set([
|
|
67
|
-
'insertOne',
|
|
68
|
-
'insertMany',
|
|
69
|
-
'updateOne',
|
|
70
|
-
'updateMany',
|
|
71
|
-
'deleteOne',
|
|
72
|
-
'deleteMany',
|
|
73
|
-
'createIndexes',
|
|
74
|
-
'dropIndex',
|
|
75
|
-
'dropIndexes',
|
|
76
|
-
]);
|
|
77
|
-
// ============================================================================
|
|
78
|
-
// CORS Headers
|
|
79
|
-
// ============================================================================
|
|
80
|
-
const CORS_HEADERS = {
|
|
81
|
-
'Access-Control-Allow-Origin': '*',
|
|
82
|
-
'Access-Control-Allow-Methods': 'POST, OPTIONS',
|
|
83
|
-
'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Mondo-Token',
|
|
84
|
-
'Access-Control-Max-Age': '86400',
|
|
85
|
-
};
|
|
86
|
-
// ============================================================================
|
|
87
|
-
// Helper Functions
|
|
88
|
-
// ============================================================================
|
|
89
|
-
/**
|
|
90
|
-
* Create a success response
|
|
91
|
-
*/
|
|
92
|
-
function successResponse(result) {
|
|
93
|
-
const body = { ok: 1, result };
|
|
94
|
-
return new Response(JSON.stringify(body), {
|
|
95
|
-
status: 200,
|
|
96
|
-
headers: {
|
|
97
|
-
'Content-Type': 'application/json',
|
|
98
|
-
...CORS_HEADERS,
|
|
99
|
-
},
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Create an error response
|
|
104
|
-
*/
|
|
105
|
-
function errorResponse(message, errorCode, status = 400) {
|
|
106
|
-
const body = {
|
|
107
|
-
ok: 0,
|
|
108
|
-
error: message,
|
|
109
|
-
code: errorCode.code,
|
|
110
|
-
codeName: errorCode.name,
|
|
111
|
-
};
|
|
112
|
-
return new Response(JSON.stringify(body), {
|
|
113
|
-
status,
|
|
114
|
-
headers: {
|
|
115
|
-
'Content-Type': 'application/json',
|
|
116
|
-
...CORS_HEADERS,
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Validate database name
|
|
122
|
-
*/
|
|
123
|
-
function isValidDbName(name) {
|
|
124
|
-
return typeof name === 'string' && name.length > 0;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Validate collection name
|
|
128
|
-
*/
|
|
129
|
-
function isValidCollectionName(name) {
|
|
130
|
-
return typeof name === 'string' && name.length > 0;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Check if collection is a system collection
|
|
134
|
-
*/
|
|
135
|
-
function isSystemCollection(name) {
|
|
136
|
-
return name.startsWith('system.');
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Timing-safe string comparison to prevent timing attacks
|
|
140
|
-
*
|
|
141
|
-
* Compares strings in constant time, preventing attackers from
|
|
142
|
-
* inferring token values through timing analysis.
|
|
143
|
-
*
|
|
144
|
-
* Security note: When lengths differ, we still perform a constant-time
|
|
145
|
-
* comparison against a buffer of equal length to avoid leaking length
|
|
146
|
-
* information through timing differences.
|
|
147
|
-
*/
|
|
148
|
-
function safeCompare(a, b) {
|
|
149
|
-
const encoder = new TextEncoder();
|
|
150
|
-
const bufA = encoder.encode(a);
|
|
151
|
-
const bufB = encoder.encode(b);
|
|
152
|
-
if (bufA.length !== bufB.length) {
|
|
153
|
-
// Do a dummy comparison to maintain constant time
|
|
154
|
-
let result = 0;
|
|
155
|
-
for (let i = 0; i < bufA.length; i++) {
|
|
156
|
-
result |= (bufA[i] ?? 0) ^ (bufA[i] ?? 0);
|
|
157
|
-
}
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
// Timing-safe comparison
|
|
161
|
-
let result = 0;
|
|
162
|
-
for (let i = 0; i < bufA.length; i++) {
|
|
163
|
-
result |= (bufA[i] ?? 0) ^ (bufB[i] ?? 0);
|
|
164
|
-
}
|
|
165
|
-
return result === 0;
|
|
166
|
-
}
|
|
167
|
-
// ============================================================================
|
|
168
|
-
// RPC Handler Implementation
|
|
169
|
-
// ============================================================================
|
|
170
|
-
/**
|
|
171
|
-
* Create an RPC handler for the given environment
|
|
172
|
-
*/
|
|
173
|
-
export function createRpcHandler(env, _ctx) {
|
|
174
|
-
return {
|
|
175
|
-
async fetch(request) {
|
|
176
|
-
// Handle OPTIONS preflight request
|
|
177
|
-
if (request.method === 'OPTIONS') {
|
|
178
|
-
return new Response(null, {
|
|
179
|
-
status: 204,
|
|
180
|
-
headers: CORS_HEADERS,
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
// Only accept POST requests
|
|
184
|
-
if (request.method !== 'POST') {
|
|
185
|
-
return errorResponse('Method not allowed. Use POST.', ErrorCodes.BadValue, 405);
|
|
186
|
-
}
|
|
187
|
-
// Check content type
|
|
188
|
-
const contentType = request.headers.get('Content-Type');
|
|
189
|
-
if (!contentType?.includes('application/json')) {
|
|
190
|
-
return errorResponse('Invalid Content-Type. Expected application/json.', ErrorCodes.BadValue);
|
|
191
|
-
}
|
|
192
|
-
// Authenticate if auth token is configured
|
|
193
|
-
if (env.MONDO_AUTH_TOKEN) {
|
|
194
|
-
const authHeader = request.headers.get('Authorization');
|
|
195
|
-
const tokenHeader = request.headers.get('X-Mondo-Token');
|
|
196
|
-
let token = null;
|
|
197
|
-
if (authHeader?.startsWith('Bearer ')) {
|
|
198
|
-
token = authHeader.slice(7);
|
|
199
|
-
}
|
|
200
|
-
else if (tokenHeader) {
|
|
201
|
-
token = tokenHeader;
|
|
202
|
-
}
|
|
203
|
-
if (!token || !safeCompare(token, env.MONDO_AUTH_TOKEN)) {
|
|
204
|
-
return errorResponse('Unauthorized', ErrorCodes.Unauthorized, 401);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
// Parse request body
|
|
208
|
-
let body;
|
|
209
|
-
try {
|
|
210
|
-
const text = await request.text();
|
|
211
|
-
if (!text) {
|
|
212
|
-
return errorResponse('Empty request body', ErrorCodes.BadValue);
|
|
213
|
-
}
|
|
214
|
-
body = JSON.parse(text);
|
|
215
|
-
}
|
|
216
|
-
catch {
|
|
217
|
-
return errorResponse('Invalid JSON body', ErrorCodes.BadValue);
|
|
218
|
-
}
|
|
219
|
-
// Validate method
|
|
220
|
-
if (!body.method) {
|
|
221
|
-
return errorResponse('Missing required field: method', ErrorCodes.BadValue);
|
|
222
|
-
}
|
|
223
|
-
if (!SUPPORTED_METHODS.has(body.method)) {
|
|
224
|
-
return errorResponse(`Unknown method: ${body.method}`, ErrorCodes.CommandNotFound);
|
|
225
|
-
}
|
|
226
|
-
// Validate db parameter for methods that require it
|
|
227
|
-
if (DB_METHODS.has(body.method) || COLLECTION_METHODS.has(body.method)) {
|
|
228
|
-
if (!isValidDbName(body.db)) {
|
|
229
|
-
return errorResponse('Missing required field: db', ErrorCodes.BadValue);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
// Validate collection parameter for methods that require it
|
|
233
|
-
if (COLLECTION_METHODS.has(body.method)) {
|
|
234
|
-
if (!isValidCollectionName(body.collection)) {
|
|
235
|
-
return errorResponse('Missing required field: collection', ErrorCodes.BadValue);
|
|
236
|
-
}
|
|
237
|
-
// Check for writes to system collections
|
|
238
|
-
if (WRITE_METHODS.has(body.method) && isSystemCollection(body.collection)) {
|
|
239
|
-
return errorResponse(`Cannot write to system collection: ${body.collection}`, ErrorCodes.Unauthorized, 403);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
// Validate method-specific parameters
|
|
243
|
-
const validationError = validateMethodParams(body);
|
|
244
|
-
if (validationError) {
|
|
245
|
-
return validationError;
|
|
246
|
-
}
|
|
247
|
-
// Route to Durable Object
|
|
248
|
-
try {
|
|
249
|
-
const result = await routeToDurableObject(env, body);
|
|
250
|
-
return successResponse(result);
|
|
251
|
-
}
|
|
252
|
-
catch (error) {
|
|
253
|
-
return handleError(error);
|
|
254
|
-
}
|
|
255
|
-
},
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Validate method-specific parameters
|
|
260
|
-
*/
|
|
261
|
-
function validateMethodParams(body) {
|
|
262
|
-
switch (body.method) {
|
|
263
|
-
case 'insertMany':
|
|
264
|
-
if (!body.documents || !Array.isArray(body.documents)) {
|
|
265
|
-
return errorResponse('Missing required field: documents', ErrorCodes.BadValue);
|
|
266
|
-
}
|
|
267
|
-
break;
|
|
268
|
-
case 'updateOne':
|
|
269
|
-
case 'updateMany':
|
|
270
|
-
if (!body.filter || typeof body.filter !== 'object') {
|
|
271
|
-
return errorResponse('Missing required field: filter', ErrorCodes.BadValue);
|
|
272
|
-
}
|
|
273
|
-
if (!body.update || typeof body.update !== 'object') {
|
|
274
|
-
return errorResponse('Missing required field: update', ErrorCodes.BadValue);
|
|
275
|
-
}
|
|
276
|
-
break;
|
|
277
|
-
case 'deleteOne':
|
|
278
|
-
case 'deleteMany':
|
|
279
|
-
if (!body.filter || typeof body.filter !== 'object') {
|
|
280
|
-
return errorResponse('Missing required field: filter', ErrorCodes.BadValue);
|
|
281
|
-
}
|
|
282
|
-
break;
|
|
283
|
-
case 'aggregate':
|
|
284
|
-
if (!body.pipeline) {
|
|
285
|
-
return errorResponse('Missing required field: pipeline', ErrorCodes.BadValue);
|
|
286
|
-
}
|
|
287
|
-
if (!Array.isArray(body.pipeline)) {
|
|
288
|
-
return errorResponse('pipeline must be an array', ErrorCodes.BadValue);
|
|
289
|
-
}
|
|
290
|
-
break;
|
|
291
|
-
case 'distinct':
|
|
292
|
-
if (!body.field || typeof body.field !== 'string') {
|
|
293
|
-
return errorResponse('Missing required field: field', ErrorCodes.BadValue);
|
|
294
|
-
}
|
|
295
|
-
break;
|
|
296
|
-
case 'find':
|
|
297
|
-
// filter is optional for find, but if provided must be an object
|
|
298
|
-
if (body.filter !== undefined && typeof body.filter !== 'object') {
|
|
299
|
-
return errorResponse('filter must be an object', ErrorCodes.BadValue);
|
|
300
|
-
}
|
|
301
|
-
break;
|
|
302
|
-
}
|
|
303
|
-
return null;
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Route request to the appropriate Durable Object
|
|
307
|
-
*/
|
|
308
|
-
async function routeToDurableObject(env, body) {
|
|
309
|
-
// Get the Durable Object stub for the database
|
|
310
|
-
const dbName = body.db || 'admin';
|
|
311
|
-
const id = env.MONDO_DATABASE.idFromName(dbName);
|
|
312
|
-
const stub = env.MONDO_DATABASE.get(id);
|
|
313
|
-
// Build the internal request based on method
|
|
314
|
-
const internalPath = `http://internal/${body.method}`;
|
|
315
|
-
const internalBody = buildInternalBody(body);
|
|
316
|
-
const response = await stub.fetch(internalPath, {
|
|
317
|
-
method: 'POST',
|
|
318
|
-
headers: { 'Content-Type': 'application/json' },
|
|
319
|
-
body: JSON.stringify(internalBody),
|
|
320
|
-
});
|
|
321
|
-
// Check for errors from the Durable Object
|
|
322
|
-
if (!response.ok) {
|
|
323
|
-
const errorData = await response.json().catch(() => null);
|
|
324
|
-
if (errorData?.error) {
|
|
325
|
-
const error = new Error(errorData.error);
|
|
326
|
-
if (errorData.code !== undefined) {
|
|
327
|
-
error.code = errorData.code;
|
|
328
|
-
}
|
|
329
|
-
throw error;
|
|
330
|
-
}
|
|
331
|
-
throw new Error(`Durable Object returned status ${response.status}`);
|
|
332
|
-
}
|
|
333
|
-
return response.json();
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Build the internal request body for the Durable Object
|
|
337
|
-
*/
|
|
338
|
-
function buildInternalBody(body) {
|
|
339
|
-
const internalBody = {};
|
|
340
|
-
if (body.collection) {
|
|
341
|
-
internalBody.collection = body.collection;
|
|
342
|
-
}
|
|
343
|
-
if (body.filter) {
|
|
344
|
-
internalBody.filter = body.filter;
|
|
345
|
-
}
|
|
346
|
-
if (body.update) {
|
|
347
|
-
internalBody.update = body.update;
|
|
348
|
-
}
|
|
349
|
-
if (body.document) {
|
|
350
|
-
internalBody.document = body.document;
|
|
351
|
-
}
|
|
352
|
-
if (body.documents) {
|
|
353
|
-
internalBody.documents = body.documents;
|
|
354
|
-
}
|
|
355
|
-
if (body.pipeline) {
|
|
356
|
-
internalBody.pipeline = body.pipeline;
|
|
357
|
-
}
|
|
358
|
-
if (body.options) {
|
|
359
|
-
// Merge options into the body
|
|
360
|
-
Object.assign(internalBody, body.options);
|
|
361
|
-
}
|
|
362
|
-
if (body.field) {
|
|
363
|
-
internalBody.field = body.field;
|
|
364
|
-
}
|
|
365
|
-
if (body.query) {
|
|
366
|
-
internalBody.query = body.query;
|
|
367
|
-
}
|
|
368
|
-
return internalBody;
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Handle errors and convert to appropriate responses
|
|
372
|
-
*/
|
|
373
|
-
function handleError(error) {
|
|
374
|
-
if (error instanceof Error) {
|
|
375
|
-
const errorWithCode = error;
|
|
376
|
-
// Map error codes to MongoDB error codes
|
|
377
|
-
if (errorWithCode.code === 26) {
|
|
378
|
-
return errorResponse(error.message, ErrorCodes.NamespaceNotFound, 404);
|
|
379
|
-
}
|
|
380
|
-
if (errorWithCode.code === 11000) {
|
|
381
|
-
return errorResponse(error.message, ErrorCodes.DuplicateKey, 409);
|
|
382
|
-
}
|
|
383
|
-
if (errorWithCode.code === 13) {
|
|
384
|
-
return errorResponse(error.message, ErrorCodes.Unauthorized, 401);
|
|
385
|
-
}
|
|
386
|
-
// Default to internal error
|
|
387
|
-
return errorResponse(error.message, ErrorCodes.InternalError, 500);
|
|
388
|
-
}
|
|
389
|
-
return errorResponse('Unknown error', ErrorCodes.InternalError, 500);
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* JSON-RPC 2.0 Standard Error Codes
|
|
393
|
-
*/
|
|
394
|
-
const JsonRpcErrorCodes = {
|
|
395
|
-
PARSE_ERROR: -32700,
|
|
396
|
-
INVALID_REQUEST: -32600,
|
|
397
|
-
METHOD_NOT_FOUND: -32601,
|
|
398
|
-
INVALID_PARAMS: -32602,
|
|
399
|
-
INTERNAL_ERROR: -32603,
|
|
400
|
-
// Server error range for application-specific errors
|
|
401
|
-
SERVER_ERROR_AUTH: -32000, // Authentication error
|
|
402
|
-
};
|
|
403
|
-
/**
|
|
404
|
-
* Create a JSON-RPC success response
|
|
405
|
-
*/
|
|
406
|
-
function jsonRpcSuccess(id, result) {
|
|
407
|
-
return {
|
|
408
|
-
jsonrpc: '2.0',
|
|
409
|
-
id,
|
|
410
|
-
result,
|
|
411
|
-
};
|
|
412
|
-
}
|
|
413
|
-
/**
|
|
414
|
-
* Create a JSON-RPC error response
|
|
415
|
-
*/
|
|
416
|
-
function jsonRpcError(id, code, message, data) {
|
|
417
|
-
return {
|
|
418
|
-
jsonrpc: '2.0',
|
|
419
|
-
id,
|
|
420
|
-
error: {
|
|
421
|
-
code,
|
|
422
|
-
message,
|
|
423
|
-
...(data !== undefined && { data }),
|
|
424
|
-
},
|
|
425
|
-
};
|
|
426
|
-
}
|
|
427
|
-
/**
|
|
428
|
-
* Create a JSON-RPC 2.0 handler for the given environment
|
|
429
|
-
*
|
|
430
|
-
* Implements JSON-RPC 2.0 protocol support:
|
|
431
|
-
* - Parse JSON-RPC formatted requests
|
|
432
|
-
* - Return JSON-RPC formatted responses
|
|
433
|
-
* - Handle batch requests
|
|
434
|
-
* - Support notifications (requests without id)
|
|
435
|
-
* - Return standard JSON-RPC error codes:
|
|
436
|
-
* - -32700: Parse error
|
|
437
|
-
* - -32600: Invalid Request
|
|
438
|
-
* - -32601: Method not found
|
|
439
|
-
* - -32602: Invalid params
|
|
440
|
-
* - -32603: Internal error
|
|
441
|
-
*/
|
|
442
|
-
export function createJsonRpcHandler(env, _ctx) {
|
|
443
|
-
return {
|
|
444
|
-
async fetch(request) {
|
|
445
|
-
// Handle OPTIONS preflight request
|
|
446
|
-
if (request.method === 'OPTIONS') {
|
|
447
|
-
return new Response(null, {
|
|
448
|
-
status: 204,
|
|
449
|
-
headers: CORS_HEADERS,
|
|
450
|
-
});
|
|
451
|
-
}
|
|
452
|
-
// Only accept POST requests
|
|
453
|
-
if (request.method !== 'POST') {
|
|
454
|
-
return jsonRpcErrorResponse(jsonRpcError(null, JsonRpcErrorCodes.INVALID_REQUEST, 'Method not allowed. Use POST.'), 405);
|
|
455
|
-
}
|
|
456
|
-
// Check content type
|
|
457
|
-
const contentType = request.headers.get('Content-Type');
|
|
458
|
-
if (!contentType?.includes('application/json')) {
|
|
459
|
-
return jsonRpcErrorResponse(jsonRpcError(null, JsonRpcErrorCodes.INVALID_REQUEST, 'Invalid Content-Type. Expected application/json.'), 400);
|
|
460
|
-
}
|
|
461
|
-
// Parse request body
|
|
462
|
-
let body;
|
|
463
|
-
try {
|
|
464
|
-
const text = await request.text();
|
|
465
|
-
if (!text) {
|
|
466
|
-
return jsonRpcErrorResponse(jsonRpcError(null, JsonRpcErrorCodes.PARSE_ERROR, 'Parse error: Empty request body'), 400);
|
|
467
|
-
}
|
|
468
|
-
body = JSON.parse(text);
|
|
469
|
-
}
|
|
470
|
-
catch {
|
|
471
|
-
return jsonRpcErrorResponse(jsonRpcError(null, JsonRpcErrorCodes.PARSE_ERROR, 'Parse error: Invalid JSON'), 400);
|
|
472
|
-
}
|
|
473
|
-
// Authenticate if auth token is configured
|
|
474
|
-
if (env.MONDO_AUTH_TOKEN) {
|
|
475
|
-
const authHeader = request.headers.get('Authorization');
|
|
476
|
-
const tokenHeader = request.headers.get('X-Mondo-Token');
|
|
477
|
-
let token = null;
|
|
478
|
-
if (authHeader?.startsWith('Bearer ')) {
|
|
479
|
-
token = authHeader.slice(7);
|
|
480
|
-
}
|
|
481
|
-
else if (tokenHeader) {
|
|
482
|
-
token = tokenHeader;
|
|
483
|
-
}
|
|
484
|
-
if (!token || !safeCompare(token, env.MONDO_AUTH_TOKEN)) {
|
|
485
|
-
return jsonRpcErrorResponse(jsonRpcError(null, JsonRpcErrorCodes.SERVER_ERROR_AUTH, 'Unauthorized'), 401);
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
// Handle batch requests
|
|
489
|
-
if (Array.isArray(body)) {
|
|
490
|
-
return handleBatchRequest(env, body);
|
|
491
|
-
}
|
|
492
|
-
// Handle single request
|
|
493
|
-
return handleSingleRequest(env, body);
|
|
494
|
-
},
|
|
495
|
-
};
|
|
496
|
-
}
|
|
497
|
-
/**
|
|
498
|
-
* Handle a single JSON-RPC request
|
|
499
|
-
*/
|
|
500
|
-
async function handleSingleRequest(env, body) {
|
|
501
|
-
const id = body.id ?? null;
|
|
502
|
-
const isNotification = body.id === undefined;
|
|
503
|
-
// Validate jsonrpc version
|
|
504
|
-
if (body.jsonrpc !== '2.0') {
|
|
505
|
-
if (isNotification) {
|
|
506
|
-
return new Response(null, { status: 204, headers: CORS_HEADERS });
|
|
507
|
-
}
|
|
508
|
-
return jsonRpcErrorResponse(jsonRpcError(id, JsonRpcErrorCodes.INVALID_REQUEST, 'Invalid Request: Missing or invalid jsonrpc version'), 200);
|
|
509
|
-
}
|
|
510
|
-
// Validate method
|
|
511
|
-
if (!body.method || typeof body.method !== 'string') {
|
|
512
|
-
if (isNotification) {
|
|
513
|
-
return new Response(null, { status: 204, headers: CORS_HEADERS });
|
|
514
|
-
}
|
|
515
|
-
return jsonRpcErrorResponse(jsonRpcError(id, JsonRpcErrorCodes.INVALID_REQUEST, 'Invalid Request: Missing method'), 200);
|
|
516
|
-
}
|
|
517
|
-
// Validate params - must be object or array, but also check if required params are provided
|
|
518
|
-
// For most methods, params is required and must be an object
|
|
519
|
-
const methodsRequiringParams = new Set([
|
|
520
|
-
'find', 'insertOne', 'insertMany', 'updateOne', 'updateMany',
|
|
521
|
-
'deleteOne', 'deleteMany', 'aggregate', 'count', 'distinct',
|
|
522
|
-
'listCollections', 'createIndexes', 'listIndexes', 'dropIndex',
|
|
523
|
-
'getMore', 'killCursors'
|
|
524
|
-
]);
|
|
525
|
-
if (body.params !== undefined && typeof body.params !== 'object') {
|
|
526
|
-
if (isNotification) {
|
|
527
|
-
return new Response(null, { status: 204, headers: CORS_HEADERS });
|
|
528
|
-
}
|
|
529
|
-
return jsonRpcErrorResponse(jsonRpcError(id, JsonRpcErrorCodes.INVALID_PARAMS, 'Invalid params: Must be object or array'), 200);
|
|
530
|
-
}
|
|
531
|
-
if (methodsRequiringParams.has(body.method) && body.params === undefined) {
|
|
532
|
-
if (isNotification) {
|
|
533
|
-
return new Response(null, { status: 204, headers: CORS_HEADERS });
|
|
534
|
-
}
|
|
535
|
-
return jsonRpcErrorResponse(jsonRpcError(id, JsonRpcErrorCodes.INVALID_PARAMS, 'Invalid params: params is required for this method'), 200);
|
|
536
|
-
}
|
|
537
|
-
// Check if method is supported
|
|
538
|
-
// Also support 'insertOne' which is similar to insertMany but with a single document
|
|
539
|
-
const allSupportedMethods = new Set([...SUPPORTED_METHODS, 'insertOne']);
|
|
540
|
-
if (!allSupportedMethods.has(body.method)) {
|
|
541
|
-
if (isNotification) {
|
|
542
|
-
return new Response(null, { status: 204, headers: CORS_HEADERS });
|
|
543
|
-
}
|
|
544
|
-
return jsonRpcErrorResponse(jsonRpcError(id, JsonRpcErrorCodes.METHOD_NOT_FOUND, `Method not found: ${body.method}`), 200);
|
|
545
|
-
}
|
|
546
|
-
// Execute the method
|
|
547
|
-
try {
|
|
548
|
-
const result = await executeJsonRpcMethod(env, body.method, body.params);
|
|
549
|
-
// For notifications, don't return a response
|
|
550
|
-
if (isNotification) {
|
|
551
|
-
return new Response(null, { status: 204, headers: CORS_HEADERS });
|
|
552
|
-
}
|
|
553
|
-
return jsonRpcSuccessResponse(jsonRpcSuccess(id, result));
|
|
554
|
-
}
|
|
555
|
-
catch (error) {
|
|
556
|
-
// For notifications, don't return error responses either
|
|
557
|
-
if (isNotification) {
|
|
558
|
-
return new Response(null, { status: 204, headers: CORS_HEADERS });
|
|
559
|
-
}
|
|
560
|
-
return handleJsonRpcError(id, error);
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
/**
|
|
564
|
-
* Handle a batch of JSON-RPC requests
|
|
565
|
-
*/
|
|
566
|
-
async function handleBatchRequest(env, batch) {
|
|
567
|
-
const responses = [];
|
|
568
|
-
for (const request of batch) {
|
|
569
|
-
const id = request.id ?? null;
|
|
570
|
-
const isNotification = request.id === undefined;
|
|
571
|
-
// Validate jsonrpc version
|
|
572
|
-
if (request.jsonrpc !== '2.0') {
|
|
573
|
-
if (!isNotification) {
|
|
574
|
-
responses.push(jsonRpcError(id, JsonRpcErrorCodes.INVALID_REQUEST, 'Invalid Request: Missing or invalid jsonrpc version'));
|
|
575
|
-
}
|
|
576
|
-
continue;
|
|
577
|
-
}
|
|
578
|
-
// Validate method
|
|
579
|
-
if (!request.method || typeof request.method !== 'string') {
|
|
580
|
-
if (!isNotification) {
|
|
581
|
-
responses.push(jsonRpcError(id, JsonRpcErrorCodes.INVALID_REQUEST, 'Invalid Request: Missing method'));
|
|
582
|
-
}
|
|
583
|
-
continue;
|
|
584
|
-
}
|
|
585
|
-
// Check if method is supported
|
|
586
|
-
const allSupportedMethods = new Set([...SUPPORTED_METHODS, 'insertOne']);
|
|
587
|
-
if (!allSupportedMethods.has(request.method)) {
|
|
588
|
-
if (!isNotification) {
|
|
589
|
-
responses.push(jsonRpcError(id, JsonRpcErrorCodes.METHOD_NOT_FOUND, `Method not found: ${request.method}`));
|
|
590
|
-
}
|
|
591
|
-
continue;
|
|
592
|
-
}
|
|
593
|
-
// Execute the method
|
|
594
|
-
try {
|
|
595
|
-
const result = await executeJsonRpcMethod(env, request.method, request.params);
|
|
596
|
-
// Only add response for non-notifications
|
|
597
|
-
if (!isNotification) {
|
|
598
|
-
responses.push(jsonRpcSuccess(id, result));
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
catch (error) {
|
|
602
|
-
// Only add error response for non-notifications
|
|
603
|
-
if (!isNotification) {
|
|
604
|
-
if (error instanceof Error) {
|
|
605
|
-
const errorWithCode = error;
|
|
606
|
-
responses.push(jsonRpcError(id, mapMongoErrorToJsonRpcCode(errorWithCode.code), error.message, errorWithCode.data));
|
|
607
|
-
}
|
|
608
|
-
else {
|
|
609
|
-
responses.push(jsonRpcError(id, JsonRpcErrorCodes.INTERNAL_ERROR, 'Internal error'));
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
return new Response(JSON.stringify(responses), {
|
|
615
|
-
status: 200,
|
|
616
|
-
headers: {
|
|
617
|
-
'Content-Type': 'application/json',
|
|
618
|
-
...CORS_HEADERS,
|
|
619
|
-
},
|
|
620
|
-
});
|
|
621
|
-
}
|
|
622
|
-
/**
|
|
623
|
-
* Execute a JSON-RPC method
|
|
624
|
-
*/
|
|
625
|
-
async function executeJsonRpcMethod(env, method, params) {
|
|
626
|
-
// Get the Durable Object stub for the database
|
|
627
|
-
const dbName = params?.db || 'admin';
|
|
628
|
-
const id = env.MONDO_DATABASE.idFromName(dbName);
|
|
629
|
-
const stub = env.MONDO_DATABASE.get(id);
|
|
630
|
-
// Build the internal request
|
|
631
|
-
const internalPath = `http://internal/${method}`;
|
|
632
|
-
const internalBody = buildJsonRpcInternalBody(params);
|
|
633
|
-
const response = await stub.fetch(internalPath, {
|
|
634
|
-
method: 'POST',
|
|
635
|
-
headers: { 'Content-Type': 'application/json' },
|
|
636
|
-
body: JSON.stringify(internalBody),
|
|
637
|
-
});
|
|
638
|
-
// Check for errors from the Durable Object
|
|
639
|
-
if (!response.ok) {
|
|
640
|
-
const errorData = await response.json().catch(() => null);
|
|
641
|
-
if (errorData?.error) {
|
|
642
|
-
const error = new Error(errorData.error);
|
|
643
|
-
if (errorData.code !== undefined) {
|
|
644
|
-
error.code = errorData.code;
|
|
645
|
-
}
|
|
646
|
-
error.data = errorData;
|
|
647
|
-
throw error;
|
|
648
|
-
}
|
|
649
|
-
throw new Error(`Durable Object returned status ${response.status}`);
|
|
650
|
-
}
|
|
651
|
-
return response.json();
|
|
652
|
-
}
|
|
653
|
-
/**
|
|
654
|
-
* Build the internal request body for JSON-RPC
|
|
655
|
-
*/
|
|
656
|
-
function buildJsonRpcInternalBody(params) {
|
|
657
|
-
if (!params) {
|
|
658
|
-
return {};
|
|
659
|
-
}
|
|
660
|
-
const internalBody = {};
|
|
661
|
-
// Copy relevant params to internal body
|
|
662
|
-
if (params.collection) {
|
|
663
|
-
internalBody.collection = params.collection;
|
|
664
|
-
}
|
|
665
|
-
if (params.filter) {
|
|
666
|
-
internalBody.filter = params.filter;
|
|
667
|
-
}
|
|
668
|
-
if (params.update) {
|
|
669
|
-
internalBody.update = params.update;
|
|
670
|
-
}
|
|
671
|
-
if (params.document) {
|
|
672
|
-
internalBody.document = params.document;
|
|
673
|
-
}
|
|
674
|
-
if (params.documents) {
|
|
675
|
-
internalBody.documents = params.documents;
|
|
676
|
-
}
|
|
677
|
-
if (params.pipeline) {
|
|
678
|
-
internalBody.pipeline = params.pipeline;
|
|
679
|
-
}
|
|
680
|
-
if (params.options) {
|
|
681
|
-
// Merge options into the body
|
|
682
|
-
Object.assign(internalBody, params.options);
|
|
683
|
-
}
|
|
684
|
-
if (params.field) {
|
|
685
|
-
internalBody.field = params.field;
|
|
686
|
-
}
|
|
687
|
-
if (params.query) {
|
|
688
|
-
internalBody.query = params.query;
|
|
689
|
-
}
|
|
690
|
-
return internalBody;
|
|
691
|
-
}
|
|
692
|
-
/**
|
|
693
|
-
* Map MongoDB error codes to JSON-RPC error codes
|
|
694
|
-
*/
|
|
695
|
-
function mapMongoErrorToJsonRpcCode(_mongoCode) {
|
|
696
|
-
// For backend errors, use the internal error code
|
|
697
|
-
// But preserve the original code in the data field
|
|
698
|
-
return JsonRpcErrorCodes.INTERNAL_ERROR;
|
|
699
|
-
}
|
|
700
|
-
/**
|
|
701
|
-
* Handle JSON-RPC errors
|
|
702
|
-
*/
|
|
703
|
-
function handleJsonRpcError(id, error) {
|
|
704
|
-
if (error instanceof Error) {
|
|
705
|
-
const errorWithCode = error;
|
|
706
|
-
return jsonRpcErrorResponse(jsonRpcError(id, JsonRpcErrorCodes.INTERNAL_ERROR, error.message, errorWithCode.data), 200);
|
|
707
|
-
}
|
|
708
|
-
return jsonRpcErrorResponse(jsonRpcError(id, JsonRpcErrorCodes.INTERNAL_ERROR, 'Internal error'), 200);
|
|
709
|
-
}
|
|
710
|
-
/**
|
|
711
|
-
* Create a JSON-RPC response
|
|
712
|
-
*/
|
|
713
|
-
function jsonRpcSuccessResponse(body) {
|
|
714
|
-
return new Response(JSON.stringify(body), {
|
|
715
|
-
status: 200,
|
|
716
|
-
headers: {
|
|
717
|
-
'Content-Type': 'application/json',
|
|
718
|
-
...CORS_HEADERS,
|
|
719
|
-
},
|
|
720
|
-
});
|
|
721
|
-
}
|
|
722
|
-
/**
|
|
723
|
-
* Create a JSON-RPC error response
|
|
724
|
-
*/
|
|
725
|
-
function jsonRpcErrorResponse(body, status) {
|
|
726
|
-
return new Response(JSON.stringify(body), {
|
|
727
|
-
status,
|
|
728
|
-
headers: {
|
|
729
|
-
'Content-Type': 'application/json',
|
|
730
|
-
...CORS_HEADERS,
|
|
731
|
-
},
|
|
732
|
-
});
|
|
733
|
-
}
|
|
734
|
-
//# sourceMappingURL=endpoint.js.map
|