parse-stack-next 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.bundle/config +2 -0
- data/.env.sample +112 -0
- data/.env.test +10 -0
- data/.github/workflows/ruby.yml +36 -0
- data/.gitignore +49 -0
- data/.ruby-version +1 -0
- data/.solargraph.yml +22 -0
- data/CHANGELOG.md +5816 -0
- data/Gemfile +30 -0
- data/Gemfile.lock +175 -0
- data/LICENSE.txt +23 -0
- data/Makefile +63 -0
- data/README.md +5655 -0
- data/Rakefile +573 -0
- data/bin/console +38 -0
- data/bin/parse-console +136 -0
- data/bin/server +17 -0
- data/bin/setup +7 -0
- data/config/parse-config.json +12 -0
- data/docs/TEST_SERVER.md +271 -0
- data/docs/_config.yml +1 -0
- data/docs/mcp_guide.md +3484 -0
- data/docs/mongodb_direct_guide.md +1348 -0
- data/docs/mongodb_index_optimization_guide.md +631 -0
- data/examples/transaction_example.rb +219 -0
- data/lib/parse/acl_scope.rb +728 -0
- data/lib/parse/agent/cancellation_token.rb +80 -0
- data/lib/parse/agent/constraint_translator.rb +480 -0
- data/lib/parse/agent/describe.rb +420 -0
- data/lib/parse/agent/errors.rb +133 -0
- data/lib/parse/agent/mcp_client.rb +557 -0
- data/lib/parse/agent/mcp_dispatcher.rb +1023 -0
- data/lib/parse/agent/mcp_rack_app.rb +1143 -0
- data/lib/parse/agent/mcp_server.rb +376 -0
- data/lib/parse/agent/metadata_audit.rb +259 -0
- data/lib/parse/agent/metadata_dsl.rb +733 -0
- data/lib/parse/agent/metadata_registry.rb +794 -0
- data/lib/parse/agent/pipeline_validator.rb +82 -0
- data/lib/parse/agent/prompts.rb +351 -0
- data/lib/parse/agent/rate_limiter.rb +158 -0
- data/lib/parse/agent/relation_graph.rb +162 -0
- data/lib/parse/agent/result_formatter.rb +453 -0
- data/lib/parse/agent/tools.rb +5489 -0
- data/lib/parse/agent.rb +3249 -0
- data/lib/parse/api/aggregate.rb +79 -0
- data/lib/parse/api/all.rb +26 -0
- data/lib/parse/api/analytics.rb +18 -0
- data/lib/parse/api/batch.rb +33 -0
- data/lib/parse/api/cloud_functions.rb +58 -0
- data/lib/parse/api/config.rb +125 -0
- data/lib/parse/api/files.rb +29 -0
- data/lib/parse/api/hooks.rb +117 -0
- data/lib/parse/api/objects.rb +146 -0
- data/lib/parse/api/path_segment.rb +75 -0
- data/lib/parse/api/push.rb +20 -0
- data/lib/parse/api/schema.rb +49 -0
- data/lib/parse/api/server.rb +50 -0
- data/lib/parse/api/sessions.rb +24 -0
- data/lib/parse/api/users.rb +250 -0
- data/lib/parse/atlas_search/index_manager.rb +353 -0
- data/lib/parse/atlas_search/result.rb +204 -0
- data/lib/parse/atlas_search/search_builder.rb +604 -0
- data/lib/parse/atlas_search/session.rb +253 -0
- data/lib/parse/atlas_search.rb +995 -0
- data/lib/parse/client/authentication.rb +97 -0
- data/lib/parse/client/batch.rb +234 -0
- data/lib/parse/client/body_builder.rb +240 -0
- data/lib/parse/client/caching.rb +203 -0
- data/lib/parse/client/logging.rb +293 -0
- data/lib/parse/client/profiling.rb +181 -0
- data/lib/parse/client/protocol.rb +91 -0
- data/lib/parse/client/request.rb +233 -0
- data/lib/parse/client/response.rb +208 -0
- data/lib/parse/client.rb +1104 -0
- data/lib/parse/clp_scope.rb +361 -0
- data/lib/parse/live_query/circuit_breaker.rb +256 -0
- data/lib/parse/live_query/client.rb +1001 -0
- data/lib/parse/live_query/configuration.rb +224 -0
- data/lib/parse/live_query/event.rb +115 -0
- data/lib/parse/live_query/event_queue.rb +272 -0
- data/lib/parse/live_query/health_monitor.rb +214 -0
- data/lib/parse/live_query/logging.rb +149 -0
- data/lib/parse/live_query/subscription.rb +294 -0
- data/lib/parse/live_query.rb +163 -0
- data/lib/parse/lookup_rewriter.rb +445 -0
- data/lib/parse/model/acl.rb +968 -0
- data/lib/parse/model/associations/belongs_to.rb +275 -0
- data/lib/parse/model/associations/collection_proxy.rb +435 -0
- data/lib/parse/model/associations/has_many.rb +597 -0
- data/lib/parse/model/associations/has_one.rb +158 -0
- data/lib/parse/model/associations/pointer_collection_proxy.rb +134 -0
- data/lib/parse/model/associations/relation_collection_proxy.rb +177 -0
- data/lib/parse/model/bytes.rb +62 -0
- data/lib/parse/model/classes/audience.rb +262 -0
- data/lib/parse/model/classes/installation.rb +363 -0
- data/lib/parse/model/classes/job_schedule.rb +153 -0
- data/lib/parse/model/classes/job_status.rb +264 -0
- data/lib/parse/model/classes/product.rb +75 -0
- data/lib/parse/model/classes/push_status.rb +263 -0
- data/lib/parse/model/classes/role.rb +751 -0
- data/lib/parse/model/classes/session.rb +201 -0
- data/lib/parse/model/classes/user.rb +943 -0
- data/lib/parse/model/clp.rb +544 -0
- data/lib/parse/model/core/actions.rb +1268 -0
- data/lib/parse/model/core/builder.rb +139 -0
- data/lib/parse/model/core/create_lock.rb +386 -0
- data/lib/parse/model/core/describe.rb +382 -0
- data/lib/parse/model/core/enhanced_change_tracking.rb +159 -0
- data/lib/parse/model/core/errors.rb +38 -0
- data/lib/parse/model/core/fetching.rb +566 -0
- data/lib/parse/model/core/field_guards.rb +220 -0
- data/lib/parse/model/core/indexing.rb +382 -0
- data/lib/parse/model/core/parse_reference.rb +407 -0
- data/lib/parse/model/core/properties.rb +809 -0
- data/lib/parse/model/core/querying.rb +491 -0
- data/lib/parse/model/core/schema.rb +202 -0
- data/lib/parse/model/core/search_indexing.rb +174 -0
- data/lib/parse/model/date.rb +88 -0
- data/lib/parse/model/email.rb +213 -0
- data/lib/parse/model/file.rb +527 -0
- data/lib/parse/model/geojson.rb +271 -0
- data/lib/parse/model/geopoint.rb +261 -0
- data/lib/parse/model/model.rb +260 -0
- data/lib/parse/model/object.rb +2068 -0
- data/lib/parse/model/phone.rb +520 -0
- data/lib/parse/model/pointer.rb +443 -0
- data/lib/parse/model/polygon.rb +406 -0
- data/lib/parse/model/push.rb +975 -0
- data/lib/parse/model/shortnames.rb +8 -0
- data/lib/parse/model/time_zone.rb +141 -0
- data/lib/parse/model/validations/uniqueness_validator.rb +97 -0
- data/lib/parse/model/validations.rb +96 -0
- data/lib/parse/mongodb.rb +2300 -0
- data/lib/parse/pipeline_security.rb +554 -0
- data/lib/parse/query/constraint.rb +198 -0
- data/lib/parse/query/constraints.rb +3279 -0
- data/lib/parse/query/cursor.rb +434 -0
- data/lib/parse/query/n_plus_one_detector.rb +445 -0
- data/lib/parse/query/operation.rb +104 -0
- data/lib/parse/query/ordering.rb +66 -0
- data/lib/parse/query.rb +7028 -0
- data/lib/parse/schema/index_migrator.rb +291 -0
- data/lib/parse/schema/search_index_migrator.rb +289 -0
- data/lib/parse/schema.rb +494 -0
- data/lib/parse/stack/generators/rails.rb +40 -0
- data/lib/parse/stack/generators/templates/model.erb +51 -0
- data/lib/parse/stack/generators/templates/model_installation.rb +4 -0
- data/lib/parse/stack/generators/templates/model_role.rb +4 -0
- data/lib/parse/stack/generators/templates/model_session.rb +4 -0
- data/lib/parse/stack/generators/templates/model_user.rb +11 -0
- data/lib/parse/stack/generators/templates/parse.rb +12 -0
- data/lib/parse/stack/generators/templates/webhooks.rb +10 -0
- data/lib/parse/stack/railtie.rb +18 -0
- data/lib/parse/stack/tasks.rb +563 -0
- data/lib/parse/stack/version.rb +11 -0
- data/lib/parse/stack.rb +455 -0
- data/lib/parse/two_factor_auth/user_extension.rb +449 -0
- data/lib/parse/two_factor_auth.rb +310 -0
- data/lib/parse/webhooks/payload.rb +360 -0
- data/lib/parse/webhooks/registration.rb +199 -0
- data/lib/parse/webhooks/replay_protection.rb +189 -0
- data/lib/parse/webhooks.rb +510 -0
- data/lib/parse-stack-next.rb +5 -0
- data/lib/parse-stack.rb +5 -0
- data/parse-stack-next.gemspec +82 -0
- data/parse-stack.png +0 -0
- data/scripts/debug-ips.js +35 -0
- data/scripts/docker/Dockerfile.parse +13 -0
- data/scripts/docker/atlas-init.js +284 -0
- data/scripts/docker/docker-compose.atlas.yml +76 -0
- data/scripts/docker/docker-compose.test.yml +106 -0
- data/scripts/docker/mongo-init.js +21 -0
- data/scripts/eval_mcp_with_lm_studio.rb +274 -0
- data/scripts/start-parse.sh +90 -0
- data/scripts/start_mcp_server.rb +78 -0
- data/scripts/test_server_connection.rb +82 -0
- metadata +377 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: b354266f9fc2d699d75a8ae2c15cbaa278805f895d13f4d62b7968cecdc61678
|
|
4
|
+
data.tar.gz: 87977904fe5f826e84fb60945cb6dc71548943293184af9ab734aba5b978bb3d
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 9440647f605498a4b0051d437ea242bda57e10036a3541c5fb88dafefa1975763b04c8a0d9b0a91756b06ba9fb4e0285f32fdbe2e46c8973663bb869e30b8b4f
|
|
7
|
+
data.tar.gz: ce24add8f26eeb0e589b747ac4dae546abce69ab8aa74c39a78c96c67b31e9a831606acc8f4600dd37a8f93e37852e59f352003d5417599026b3f5ef3b8f6a9e
|
data/.bundle/config
ADDED
data/.env.sample
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Sample environment configuration for parse-stack.
|
|
2
|
+
#
|
|
3
|
+
# Copy to `.env` and fill in real values. `.env` is gitignored;
|
|
4
|
+
# this file (`.env.sample`) is committed as the reference.
|
|
5
|
+
#
|
|
6
|
+
# Loaded automatically by:
|
|
7
|
+
# - `ruby -rdotenv/load -Ilib:test path/to/test.rb`
|
|
8
|
+
# - Anything that requires `dotenv` at boot
|
|
9
|
+
# Or pass values inline:
|
|
10
|
+
# LLM_PROVIDER=openai LLM_API_KEY=sk-... bundle exec rake test:foo
|
|
11
|
+
|
|
12
|
+
# ===========================================================================
|
|
13
|
+
# Test harness
|
|
14
|
+
# ===========================================================================
|
|
15
|
+
|
|
16
|
+
# Routes the test suite at the Docker Compose Parse Server + MongoDB defined
|
|
17
|
+
# in scripts/docker/docker-compose.test.yml. Unset for in-process unit tests.
|
|
18
|
+
PARSE_TEST_USE_DOCKER='true'
|
|
19
|
+
|
|
20
|
+
# ===========================================================================
|
|
21
|
+
# Parse client (test fixtures + Rake tasks that boot a Parse client)
|
|
22
|
+
#
|
|
23
|
+
# Defaults below match scripts/docker/docker-compose.test.yml.
|
|
24
|
+
# Override for testing against a different Parse Server instance.
|
|
25
|
+
# ===========================================================================
|
|
26
|
+
|
|
27
|
+
PARSE_SERVER_URL=http://localhost:2337/parse
|
|
28
|
+
PARSE_APP_ID=myAppId
|
|
29
|
+
PARSE_API_KEY=myApiKey
|
|
30
|
+
PARSE_MASTER_KEY=myMasterKey
|
|
31
|
+
|
|
32
|
+
# Optional client tuning (read by Parse::Client.new):
|
|
33
|
+
# PARSE_OPEN_TIMEOUT=5
|
|
34
|
+
# PARSE_TIMEOUT=30
|
|
35
|
+
# PARSE_REQUIRE_HTTPS=true
|
|
36
|
+
|
|
37
|
+
# Optional service URLs (only if you split webhooks/config/hooks endpoints):
|
|
38
|
+
# PARSE_LIVE_QUERY_URL=
|
|
39
|
+
# CONFIG_URL=
|
|
40
|
+
# HOOKS_URL=
|
|
41
|
+
# HYPERDRIVE_URL=
|
|
42
|
+
|
|
43
|
+
# ===========================================================================
|
|
44
|
+
# Webhooks
|
|
45
|
+
# ===========================================================================
|
|
46
|
+
|
|
47
|
+
# Required for the Parse::Webhooks Rack endpoint to accept calls.
|
|
48
|
+
# Without this, the endpoint fails closed (4.0.0+ behavior).
|
|
49
|
+
# PARSE_WEBHOOK_KEY=
|
|
50
|
+
# PARSE_SERVER_WEBHOOK_KEY=
|
|
51
|
+
# PARSE_WEBHOOK_ALLOW_UNAUTHENTICATED=false
|
|
52
|
+
|
|
53
|
+
# ===========================================================================
|
|
54
|
+
# MCP Server
|
|
55
|
+
# ===========================================================================
|
|
56
|
+
|
|
57
|
+
# Required dual-gate for the standalone MCP server. Both this AND
|
|
58
|
+
# `Parse.mcp_server_enabled = true` (in code) are required before
|
|
59
|
+
# Parse::Agent.enable_mcp! will boot. Embedded MCPRackApp does NOT require
|
|
60
|
+
# either flag.
|
|
61
|
+
# PARSE_MCP_ENABLED=true
|
|
62
|
+
|
|
63
|
+
# X-MCP-API-Key value used by MCPServer and the rake test:mcp_inspector task.
|
|
64
|
+
# MCP_API_KEY=changeme-mcp-key
|
|
65
|
+
|
|
66
|
+
# Override the inspector port (default 3099) and key when running
|
|
67
|
+
# `rake test:mcp_inspector`:
|
|
68
|
+
# MCP_INSPECTOR_PORT=3099
|
|
69
|
+
# MCP_INSPECTOR_KEY=rake-inspector-key
|
|
70
|
+
|
|
71
|
+
# ===========================================================================
|
|
72
|
+
# LLM provider for `rake mcp:chat` / `rake mcp:console`
|
|
73
|
+
# (also consumed by the LLM-driven integration test files under
|
|
74
|
+
# test/lib/parse/agent/mcp_real_llm_*_test.rb)
|
|
75
|
+
#
|
|
76
|
+
# Pick ONE provider stanza below and uncomment its block. The chat console
|
|
77
|
+
# refuses to start without LLM_PROVIDER set.
|
|
78
|
+
# ===========================================================================
|
|
79
|
+
|
|
80
|
+
# --- Option A: LM Studio (free, local) -------------------------------------
|
|
81
|
+
# Start the LM Studio HTTP server first (Server tab → Start Server), with a
|
|
82
|
+
# tool-capable model loaded (Qwen2.5-7B-instruct, Llama-3.1-8B-instruct,
|
|
83
|
+
# gpt-oss-20b, etc.). The API key value is ignored by LM Studio.
|
|
84
|
+
#
|
|
85
|
+
# LLM_PROVIDER=lmstudio
|
|
86
|
+
# LLM_MODEL=qwen2.5-7b-instruct
|
|
87
|
+
# LLM_BASE_URL=http://localhost:1234/v1
|
|
88
|
+
# LLM_API_KEY=lm-studio
|
|
89
|
+
|
|
90
|
+
# --- Option B: OpenAI gpt-4o-mini (~$0.0001 per run) -----------------------
|
|
91
|
+
# Get a key at https://platform.openai.com/api-keys
|
|
92
|
+
#
|
|
93
|
+
# LLM_PROVIDER=openai
|
|
94
|
+
# LLM_API_KEY=sk-proj-...
|
|
95
|
+
# LLM_MODEL=gpt-4o-mini
|
|
96
|
+
# LLM_BASE_URL=https://api.openai.com/v1 # default; override only if proxying
|
|
97
|
+
|
|
98
|
+
# --- Option C: Anthropic Claude Haiku (~$0.001 per run) --------------------
|
|
99
|
+
# Get a key at https://console.anthropic.com/settings/keys
|
|
100
|
+
#
|
|
101
|
+
# LLM_PROVIDER=anthropic
|
|
102
|
+
# LLM_API_KEY=sk-ant-api03-...
|
|
103
|
+
# LLM_MODEL=claude-haiku-4-5
|
|
104
|
+
# LLM_BASE_URL=https://api.anthropic.com/v1
|
|
105
|
+
|
|
106
|
+
# --- Legacy LLM endpoint (Parse::Agent#ask path, NOT the MCP smoke test) ---
|
|
107
|
+
# Used by the in-process Parse::Agent#ask conversational path, separate from
|
|
108
|
+
# the MCP smoke test above. Defaults to a local OpenAI-compatible endpoint.
|
|
109
|
+
#
|
|
110
|
+
# LLM_ENDPOINT=http://localhost:1234/v1
|
|
111
|
+
# OPENAI_API_KEY=
|
|
112
|
+
# ANTHROPIC_API_KEY=
|
data/.env.test
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Parse Server Test Configuration
|
|
2
|
+
PARSE_TEST_SERVER_URL=http://localhost:1337/parse
|
|
3
|
+
PARSE_TEST_APP_ID=myAppId
|
|
4
|
+
PARSE_TEST_API_KEY=test-rest-key
|
|
5
|
+
PARSE_TEST_MASTER_KEY=myMasterKey
|
|
6
|
+
|
|
7
|
+
# Docker Configuration
|
|
8
|
+
PARSE_TEST_USE_DOCKER=true
|
|
9
|
+
PARSE_TEST_AUTO_START=false
|
|
10
|
+
PARSE_TEST_AUTO_STOP=false
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
2
|
+
# They are provided by a third-party and are governed by
|
|
3
|
+
# separate terms of service, privacy policy, and support
|
|
4
|
+
# documentation.
|
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
|
7
|
+
|
|
8
|
+
name: Gem Tests
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [master]
|
|
13
|
+
pull_request:
|
|
14
|
+
branches: [master]
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
test:
|
|
18
|
+
strategy:
|
|
19
|
+
fail-fast: false
|
|
20
|
+
matrix:
|
|
21
|
+
os: [ubuntu-latest, macos-latest]
|
|
22
|
+
ruby: ['3.2', '3.3', '3.4', '3.5']
|
|
23
|
+
runs-on: ${{ matrix.os }}
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
- name: Set up Ruby
|
|
27
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
|
28
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
|
29
|
+
uses: ruby/setup-ruby@v1
|
|
30
|
+
# uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
|
|
31
|
+
with:
|
|
32
|
+
ruby-version: ${{ matrix.ruby }}
|
|
33
|
+
- name: Install dependencies
|
|
34
|
+
run: bundle install
|
|
35
|
+
- name: Run tests
|
|
36
|
+
run: bundle exec rake
|
data/.gitignore
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
.DS_Store
|
|
2
|
+
*.gem
|
|
3
|
+
*.rbc
|
|
4
|
+
/.config
|
|
5
|
+
/coverage/
|
|
6
|
+
/InstalledFiles
|
|
7
|
+
/pkg/
|
|
8
|
+
/spec/reports/
|
|
9
|
+
/spec/examples.txt
|
|
10
|
+
/test/tmp/
|
|
11
|
+
/test/version_tmp/
|
|
12
|
+
/tmp/
|
|
13
|
+
|
|
14
|
+
## Specific to RubyMotion:
|
|
15
|
+
.dat*
|
|
16
|
+
.repl_history
|
|
17
|
+
build/
|
|
18
|
+
|
|
19
|
+
## Documentation cache and generated files:
|
|
20
|
+
/.yardoc/
|
|
21
|
+
/_yardoc/
|
|
22
|
+
/doc/
|
|
23
|
+
/rdoc/
|
|
24
|
+
|
|
25
|
+
## Environment normalization:
|
|
26
|
+
/.bundle/*
|
|
27
|
+
!/.bundle/config
|
|
28
|
+
/vendor/bundle
|
|
29
|
+
/lib/bundler/man/
|
|
30
|
+
|
|
31
|
+
# for a library or gem, you might want to ignore these files since the code is
|
|
32
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
33
|
+
# Gemfile.lock
|
|
34
|
+
# .ruby-version
|
|
35
|
+
# .ruby-gemset
|
|
36
|
+
|
|
37
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
|
38
|
+
.rvmrc
|
|
39
|
+
bin/.env
|
|
40
|
+
bin/config.json
|
|
41
|
+
.byebug_history
|
|
42
|
+
/.env
|
|
43
|
+
/node_modules
|
|
44
|
+
/bin/parse-dashboard-config.json
|
|
45
|
+
logs
|
|
46
|
+
*.md
|
|
47
|
+
!docs/mcp_guide.md
|
|
48
|
+
!docs/mongodb_direct_guide.md
|
|
49
|
+
!docs/mongodb_index_optimization_guide.md
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.4.7
|
data/.solargraph.yml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
include:
|
|
3
|
+
- "**/*.rb"
|
|
4
|
+
exclude:
|
|
5
|
+
- spec/**/*
|
|
6
|
+
- test/**/*
|
|
7
|
+
- vendor/**/*
|
|
8
|
+
- ".bundle/**/*"
|
|
9
|
+
domains: []
|
|
10
|
+
reporters:
|
|
11
|
+
- rubocop
|
|
12
|
+
- require_not_found
|
|
13
|
+
require_paths: []
|
|
14
|
+
max_files: 5000
|
|
15
|
+
require:
|
|
16
|
+
- activemodel
|
|
17
|
+
- faraday
|
|
18
|
+
- moneta
|
|
19
|
+
- activesupport
|
|
20
|
+
- rack
|
|
21
|
+
- active_model_serializers
|
|
22
|
+
- parallel
|