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.
Files changed (178) hide show
  1. checksums.yaml +7 -0
  2. data/.bundle/config +2 -0
  3. data/.env.sample +112 -0
  4. data/.env.test +10 -0
  5. data/.github/workflows/ruby.yml +36 -0
  6. data/.gitignore +49 -0
  7. data/.ruby-version +1 -0
  8. data/.solargraph.yml +22 -0
  9. data/CHANGELOG.md +5816 -0
  10. data/Gemfile +30 -0
  11. data/Gemfile.lock +175 -0
  12. data/LICENSE.txt +23 -0
  13. data/Makefile +63 -0
  14. data/README.md +5655 -0
  15. data/Rakefile +573 -0
  16. data/bin/console +38 -0
  17. data/bin/parse-console +136 -0
  18. data/bin/server +17 -0
  19. data/bin/setup +7 -0
  20. data/config/parse-config.json +12 -0
  21. data/docs/TEST_SERVER.md +271 -0
  22. data/docs/_config.yml +1 -0
  23. data/docs/mcp_guide.md +3484 -0
  24. data/docs/mongodb_direct_guide.md +1348 -0
  25. data/docs/mongodb_index_optimization_guide.md +631 -0
  26. data/examples/transaction_example.rb +219 -0
  27. data/lib/parse/acl_scope.rb +728 -0
  28. data/lib/parse/agent/cancellation_token.rb +80 -0
  29. data/lib/parse/agent/constraint_translator.rb +480 -0
  30. data/lib/parse/agent/describe.rb +420 -0
  31. data/lib/parse/agent/errors.rb +133 -0
  32. data/lib/parse/agent/mcp_client.rb +557 -0
  33. data/lib/parse/agent/mcp_dispatcher.rb +1023 -0
  34. data/lib/parse/agent/mcp_rack_app.rb +1143 -0
  35. data/lib/parse/agent/mcp_server.rb +376 -0
  36. data/lib/parse/agent/metadata_audit.rb +259 -0
  37. data/lib/parse/agent/metadata_dsl.rb +733 -0
  38. data/lib/parse/agent/metadata_registry.rb +794 -0
  39. data/lib/parse/agent/pipeline_validator.rb +82 -0
  40. data/lib/parse/agent/prompts.rb +351 -0
  41. data/lib/parse/agent/rate_limiter.rb +158 -0
  42. data/lib/parse/agent/relation_graph.rb +162 -0
  43. data/lib/parse/agent/result_formatter.rb +453 -0
  44. data/lib/parse/agent/tools.rb +5489 -0
  45. data/lib/parse/agent.rb +3249 -0
  46. data/lib/parse/api/aggregate.rb +79 -0
  47. data/lib/parse/api/all.rb +26 -0
  48. data/lib/parse/api/analytics.rb +18 -0
  49. data/lib/parse/api/batch.rb +33 -0
  50. data/lib/parse/api/cloud_functions.rb +58 -0
  51. data/lib/parse/api/config.rb +125 -0
  52. data/lib/parse/api/files.rb +29 -0
  53. data/lib/parse/api/hooks.rb +117 -0
  54. data/lib/parse/api/objects.rb +146 -0
  55. data/lib/parse/api/path_segment.rb +75 -0
  56. data/lib/parse/api/push.rb +20 -0
  57. data/lib/parse/api/schema.rb +49 -0
  58. data/lib/parse/api/server.rb +50 -0
  59. data/lib/parse/api/sessions.rb +24 -0
  60. data/lib/parse/api/users.rb +250 -0
  61. data/lib/parse/atlas_search/index_manager.rb +353 -0
  62. data/lib/parse/atlas_search/result.rb +204 -0
  63. data/lib/parse/atlas_search/search_builder.rb +604 -0
  64. data/lib/parse/atlas_search/session.rb +253 -0
  65. data/lib/parse/atlas_search.rb +995 -0
  66. data/lib/parse/client/authentication.rb +97 -0
  67. data/lib/parse/client/batch.rb +234 -0
  68. data/lib/parse/client/body_builder.rb +240 -0
  69. data/lib/parse/client/caching.rb +203 -0
  70. data/lib/parse/client/logging.rb +293 -0
  71. data/lib/parse/client/profiling.rb +181 -0
  72. data/lib/parse/client/protocol.rb +91 -0
  73. data/lib/parse/client/request.rb +233 -0
  74. data/lib/parse/client/response.rb +208 -0
  75. data/lib/parse/client.rb +1104 -0
  76. data/lib/parse/clp_scope.rb +361 -0
  77. data/lib/parse/live_query/circuit_breaker.rb +256 -0
  78. data/lib/parse/live_query/client.rb +1001 -0
  79. data/lib/parse/live_query/configuration.rb +224 -0
  80. data/lib/parse/live_query/event.rb +115 -0
  81. data/lib/parse/live_query/event_queue.rb +272 -0
  82. data/lib/parse/live_query/health_monitor.rb +214 -0
  83. data/lib/parse/live_query/logging.rb +149 -0
  84. data/lib/parse/live_query/subscription.rb +294 -0
  85. data/lib/parse/live_query.rb +163 -0
  86. data/lib/parse/lookup_rewriter.rb +445 -0
  87. data/lib/parse/model/acl.rb +968 -0
  88. data/lib/parse/model/associations/belongs_to.rb +275 -0
  89. data/lib/parse/model/associations/collection_proxy.rb +435 -0
  90. data/lib/parse/model/associations/has_many.rb +597 -0
  91. data/lib/parse/model/associations/has_one.rb +158 -0
  92. data/lib/parse/model/associations/pointer_collection_proxy.rb +134 -0
  93. data/lib/parse/model/associations/relation_collection_proxy.rb +177 -0
  94. data/lib/parse/model/bytes.rb +62 -0
  95. data/lib/parse/model/classes/audience.rb +262 -0
  96. data/lib/parse/model/classes/installation.rb +363 -0
  97. data/lib/parse/model/classes/job_schedule.rb +153 -0
  98. data/lib/parse/model/classes/job_status.rb +264 -0
  99. data/lib/parse/model/classes/product.rb +75 -0
  100. data/lib/parse/model/classes/push_status.rb +263 -0
  101. data/lib/parse/model/classes/role.rb +751 -0
  102. data/lib/parse/model/classes/session.rb +201 -0
  103. data/lib/parse/model/classes/user.rb +943 -0
  104. data/lib/parse/model/clp.rb +544 -0
  105. data/lib/parse/model/core/actions.rb +1268 -0
  106. data/lib/parse/model/core/builder.rb +139 -0
  107. data/lib/parse/model/core/create_lock.rb +386 -0
  108. data/lib/parse/model/core/describe.rb +382 -0
  109. data/lib/parse/model/core/enhanced_change_tracking.rb +159 -0
  110. data/lib/parse/model/core/errors.rb +38 -0
  111. data/lib/parse/model/core/fetching.rb +566 -0
  112. data/lib/parse/model/core/field_guards.rb +220 -0
  113. data/lib/parse/model/core/indexing.rb +382 -0
  114. data/lib/parse/model/core/parse_reference.rb +407 -0
  115. data/lib/parse/model/core/properties.rb +809 -0
  116. data/lib/parse/model/core/querying.rb +491 -0
  117. data/lib/parse/model/core/schema.rb +202 -0
  118. data/lib/parse/model/core/search_indexing.rb +174 -0
  119. data/lib/parse/model/date.rb +88 -0
  120. data/lib/parse/model/email.rb +213 -0
  121. data/lib/parse/model/file.rb +527 -0
  122. data/lib/parse/model/geojson.rb +271 -0
  123. data/lib/parse/model/geopoint.rb +261 -0
  124. data/lib/parse/model/model.rb +260 -0
  125. data/lib/parse/model/object.rb +2068 -0
  126. data/lib/parse/model/phone.rb +520 -0
  127. data/lib/parse/model/pointer.rb +443 -0
  128. data/lib/parse/model/polygon.rb +406 -0
  129. data/lib/parse/model/push.rb +975 -0
  130. data/lib/parse/model/shortnames.rb +8 -0
  131. data/lib/parse/model/time_zone.rb +141 -0
  132. data/lib/parse/model/validations/uniqueness_validator.rb +97 -0
  133. data/lib/parse/model/validations.rb +96 -0
  134. data/lib/parse/mongodb.rb +2300 -0
  135. data/lib/parse/pipeline_security.rb +554 -0
  136. data/lib/parse/query/constraint.rb +198 -0
  137. data/lib/parse/query/constraints.rb +3279 -0
  138. data/lib/parse/query/cursor.rb +434 -0
  139. data/lib/parse/query/n_plus_one_detector.rb +445 -0
  140. data/lib/parse/query/operation.rb +104 -0
  141. data/lib/parse/query/ordering.rb +66 -0
  142. data/lib/parse/query.rb +7028 -0
  143. data/lib/parse/schema/index_migrator.rb +291 -0
  144. data/lib/parse/schema/search_index_migrator.rb +289 -0
  145. data/lib/parse/schema.rb +494 -0
  146. data/lib/parse/stack/generators/rails.rb +40 -0
  147. data/lib/parse/stack/generators/templates/model.erb +51 -0
  148. data/lib/parse/stack/generators/templates/model_installation.rb +4 -0
  149. data/lib/parse/stack/generators/templates/model_role.rb +4 -0
  150. data/lib/parse/stack/generators/templates/model_session.rb +4 -0
  151. data/lib/parse/stack/generators/templates/model_user.rb +11 -0
  152. data/lib/parse/stack/generators/templates/parse.rb +12 -0
  153. data/lib/parse/stack/generators/templates/webhooks.rb +10 -0
  154. data/lib/parse/stack/railtie.rb +18 -0
  155. data/lib/parse/stack/tasks.rb +563 -0
  156. data/lib/parse/stack/version.rb +11 -0
  157. data/lib/parse/stack.rb +455 -0
  158. data/lib/parse/two_factor_auth/user_extension.rb +449 -0
  159. data/lib/parse/two_factor_auth.rb +310 -0
  160. data/lib/parse/webhooks/payload.rb +360 -0
  161. data/lib/parse/webhooks/registration.rb +199 -0
  162. data/lib/parse/webhooks/replay_protection.rb +189 -0
  163. data/lib/parse/webhooks.rb +510 -0
  164. data/lib/parse-stack-next.rb +5 -0
  165. data/lib/parse-stack.rb +5 -0
  166. data/parse-stack-next.gemspec +82 -0
  167. data/parse-stack.png +0 -0
  168. data/scripts/debug-ips.js +35 -0
  169. data/scripts/docker/Dockerfile.parse +13 -0
  170. data/scripts/docker/atlas-init.js +284 -0
  171. data/scripts/docker/docker-compose.atlas.yml +76 -0
  172. data/scripts/docker/docker-compose.test.yml +106 -0
  173. data/scripts/docker/mongo-init.js +21 -0
  174. data/scripts/eval_mcp_with_lm_studio.rb +274 -0
  175. data/scripts/start-parse.sh +90 -0
  176. data/scripts/start_mcp_server.rb +78 -0
  177. data/scripts/test_server_connection.rb +82 -0
  178. 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
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_FORCE_RUBY_PLATFORM: "true"
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