enya-agent 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +20 -0
- package/.github/workflows/ci.yml +70 -0
- package/.github/workflows/publish.yml +250 -0
- package/.gitmodules +3 -0
- package/Cargo.lock +3584 -0
- package/Cargo.toml +97 -0
- package/crates/enact/Cargo.toml +27 -0
- package/crates/enact/src/lib.rs +60 -0
- package/crates/enact-a2a/Cargo.toml +25 -0
- package/crates/enact-a2a/src/lib.rs +411 -0
- package/crates/enact-channels/Cargo.toml +64 -0
- package/crates/enact-channels/examples/README.md +80 -0
- package/crates/enact-channels/examples/channel_bot.rs +169 -0
- package/crates/enact-channels/examples/telegram-echo.rs +34 -0
- package/crates/enact-channels/examples/whatsapp-echo.rs +142 -0
- package/crates/enact-channels/src/config.rs +213 -0
- package/crates/enact-channels/src/lib.rs +25 -0
- package/crates/enact-channels/src/runtime.rs +237 -0
- package/crates/enact-channels/src/security/mod.rs +5 -0
- package/crates/enact-channels/src/security/pairing.rs +205 -0
- package/crates/enact-channels/src/teams.rs +601 -0
- package/crates/enact-channels/src/telegram.rs +2833 -0
- package/crates/enact-channels/src/traits.rs +200 -0
- package/crates/enact-channels/src/webhook.rs +262 -0
- package/crates/enact-channels/src/whatsapp.rs +310 -0
- package/crates/enact-cli/Cargo.toml +40 -0
- package/crates/enact-cli/src/commands/doctor.rs +62 -0
- package/crates/enact-cli/src/commands/mod.rs +3 -0
- package/crates/enact-cli/src/commands/run.rs +69 -0
- package/crates/enact-cli/src/commands/serve.rs +81 -0
- package/crates/enact-cli/src/config.rs +2 -0
- package/crates/enact-cli/src/main.rs +79 -0
- package/crates/enact-config/Cargo.toml +36 -0
- package/crates/enact-config/ENV_VAR_MAPPING.md +135 -0
- package/crates/enact-config/QUICK_REFERENCE.md +92 -0
- package/crates/enact-config/README.md +107 -0
- package/crates/enact-config/TESTING.md +161 -0
- package/crates/enact-config/examples/test-env-vars.rs +100 -0
- package/crates/enact-config/src/config.rs +399 -0
- package/crates/enact-config/src/encrypted_store.rs +211 -0
- package/crates/enact-config/src/lib.rs +298 -0
- package/crates/enact-config/src/secrets.rs +149 -0
- package/crates/enact-config/src/sync.rs +260 -0
- package/crates/enact-config/test-env-vars.sh +34 -0
- package/crates/enact-config/tests/README.md +99 -0
- package/crates/enact-config/tests/config_integration_test.rs +202 -0
- package/crates/enact-config/tests/security_test.rs +140 -0
- package/crates/enact-context/Cargo.toml +41 -0
- package/crates/enact-context/src/budget.rs +314 -0
- package/crates/enact-context/src/calibrator.rs +535 -0
- package/crates/enact-context/src/compactor.rs +392 -0
- package/crates/enact-context/src/condenser.rs +826 -0
- package/crates/enact-context/src/lib.rs +94 -0
- package/crates/enact-context/src/segment.rs +238 -0
- package/crates/enact-context/src/step_context.rs +645 -0
- package/crates/enact-context/src/token_counter.rs +148 -0
- package/crates/enact-context/src/window.rs +372 -0
- package/crates/enact-core/Cargo.toml +42 -0
- package/crates/enact-core/README.md +98 -0
- package/crates/enact-core/src/background/executor.rs +524 -0
- package/crates/enact-core/src/background/mod.rs +48 -0
- package/crates/enact-core/src/background/target_binding.rs +390 -0
- package/crates/enact-core/src/background/trigger.rs +511 -0
- package/crates/enact-core/src/callable/callable.rs +152 -0
- package/crates/enact-core/src/callable/composite.rs +817 -0
- package/crates/enact-core/src/callable/graph.rs +104 -0
- package/crates/enact-core/src/callable/llm.rs +211 -0
- package/crates/enact-core/src/callable/mod.rs +64 -0
- package/crates/enact-core/src/callable/registry.rs +206 -0
- package/crates/enact-core/src/context/execution_context.rs +757 -0
- package/crates/enact-core/src/context/invocation.rs +99 -0
- package/crates/enact-core/src/context/mod.rs +50 -0
- package/crates/enact-core/src/context/tenant.rs +175 -0
- package/crates/enact-core/src/context/trace.rs +127 -0
- package/crates/enact-core/src/flow/conditional.rs +293 -0
- package/crates/enact-core/src/flow/mod.rs +43 -0
- package/crates/enact-core/src/flow/parallel.rs +437 -0
- package/crates/enact-core/src/flow/repeat.rs +534 -0
- package/crates/enact-core/src/flow/sequential.rs +248 -0
- package/crates/enact-core/src/graph/checkpoint.rs +79 -0
- package/crates/enact-core/src/graph/checkpoint_store.rs +76 -0
- package/crates/enact-core/src/graph/compiled.rs +189 -0
- package/crates/enact-core/src/graph/edge.rs +59 -0
- package/crates/enact-core/src/graph/graph_schema.rs +218 -0
- package/crates/enact-core/src/graph/loader.rs +155 -0
- package/crates/enact-core/src/graph/mod.rs +18 -0
- package/crates/enact-core/src/graph/node/function.rs +49 -0
- package/crates/enact-core/src/graph/node/mod.rs +48 -0
- package/crates/enact-core/src/graph/schema.rs +62 -0
- package/crates/enact-core/src/inbox/message.rs +405 -0
- package/crates/enact-core/src/inbox/mod.rs +31 -0
- package/crates/enact-core/src/inbox/store.rs +355 -0
- package/crates/enact-core/src/kernel/artifact/filesystem.rs +546 -0
- package/crates/enact-core/src/kernel/artifact/metadata.rs +283 -0
- package/crates/enact-core/src/kernel/artifact/mod.rs +27 -0
- package/crates/enact-core/src/kernel/artifact/store.rs +427 -0
- package/crates/enact-core/src/kernel/enforcement.rs +1315 -0
- package/crates/enact-core/src/kernel/error.rs +1200 -0
- package/crates/enact-core/src/kernel/event.rs +1394 -0
- package/crates/enact-core/src/kernel/execution_model.rs +831 -0
- package/crates/enact-core/src/kernel/execution_state.rs +189 -0
- package/crates/enact-core/src/kernel/execution_strategy.rs +117 -0
- package/crates/enact-core/src/kernel/ids.rs +2086 -0
- package/crates/enact-core/src/kernel/interrupt.rs +125 -0
- package/crates/enact-core/src/kernel/kernel.rs +1283 -0
- package/crates/enact-core/src/kernel/mod.rs +205 -0
- package/crates/enact-core/src/kernel/persistence/event_store.rs +270 -0
- package/crates/enact-core/src/kernel/persistence/message_store.rs +908 -0
- package/crates/enact-core/src/kernel/persistence/mod.rs +102 -0
- package/crates/enact-core/src/kernel/persistence/state_store.rs +228 -0
- package/crates/enact-core/src/kernel/persistence/vector_store.rs +299 -0
- package/crates/enact-core/src/kernel/reducer.rs +808 -0
- package/crates/enact-core/src/kernel/replay.rs +153 -0
- package/crates/enact-core/src/lib.rs +413 -0
- package/crates/enact-core/src/memory/episodic.rs +0 -0
- package/crates/enact-core/src/memory/mod.rs +6 -0
- package/crates/enact-core/src/memory/semantic.rs +0 -0
- package/crates/enact-core/src/memory/trait.rs +0 -0
- package/crates/enact-core/src/memory/vector_db.rs +0 -0
- package/crates/enact-core/src/memory/working.rs +0 -0
- package/crates/enact-core/src/policy/execution_policy.rs +292 -0
- package/crates/enact-core/src/policy/filters.rs +458 -0
- package/crates/enact-core/src/policy/input_processor.rs +407 -0
- package/crates/enact-core/src/policy/long_running.rs +134 -0
- package/crates/enact-core/src/policy/mod.rs +193 -0
- package/crates/enact-core/src/policy/pii_input.rs +274 -0
- package/crates/enact-core/src/policy/tenant_policy.rs +453 -0
- package/crates/enact-core/src/policy/tool_policy.rs +407 -0
- package/crates/enact-core/src/providers/mod.rs +63 -0
- package/crates/enact-core/src/providers/trait.rs +292 -0
- package/crates/enact-core/src/runner/callbacks.rs +6 -0
- package/crates/enact-core/src/runner/execution_runner.rs +476 -0
- package/crates/enact-core/src/runner/loop.rs +117 -0
- package/crates/enact-core/src/runner/mod.rs +58 -0
- package/crates/enact-core/src/runner/protected_runner.rs +280 -0
- package/crates/enact-core/src/signal/inmemory.rs +231 -0
- package/crates/enact-core/src/signal/mod.rs +108 -0
- package/crates/enact-core/src/streaming/event_logger.rs +195 -0
- package/crates/enact-core/src/streaming/event_stream.rs +1423 -0
- package/crates/enact-core/src/streaming/mod.rs +108 -0
- package/crates/enact-core/src/streaming/pause_cancel.rs +0 -0
- package/crates/enact-core/src/streaming/protected_emitter.rs +173 -0
- package/crates/enact-core/src/streaming/protection/context.rs +136 -0
- package/crates/enact-core/src/streaming/protection/encryption.rs +289 -0
- package/crates/enact-core/src/streaming/protection/mod.rs +43 -0
- package/crates/enact-core/src/streaming/protection/pii_protection.rs +243 -0
- package/crates/enact-core/src/streaming/protection/processor.rs +166 -0
- package/crates/enact-core/src/streaming/sse.rs +0 -0
- package/crates/enact-core/src/telemetry/exporter.rs +0 -0
- package/crates/enact-core/src/telemetry/init.rs +0 -0
- package/crates/enact-core/src/telemetry/mod.rs +49 -0
- package/crates/enact-core/src/telemetry/spans.rs +245 -0
- package/crates/enact-core/src/tool/agent_tool.rs +177 -0
- package/crates/enact-core/src/tool/browser/mod.rs +0 -0
- package/crates/enact-core/src/tool/browser/webdriver.rs +0 -0
- package/crates/enact-core/src/tool/cost.rs +247 -0
- package/crates/enact-core/src/tool/discovery.rs +0 -0
- package/crates/enact-core/src/tool/dispatcher.rs +347 -0
- package/crates/enact-core/src/tool/filesystem.rs +231 -0
- package/crates/enact-core/src/tool/function.rs +99 -0
- package/crates/enact-core/src/tool/git.rs +162 -0
- package/crates/enact-core/src/tool/http.rs +214 -0
- package/crates/enact-core/src/tool/mcp/client.rs +0 -0
- package/crates/enact-core/src/tool/mcp/mod.rs +0 -0
- package/crates/enact-core/src/tool/mod.rs +51 -0
- package/crates/enact-core/src/tool/reasoning/debugging.rs +0 -0
- package/crates/enact-core/src/tool/reasoning/mcts.rs +0 -0
- package/crates/enact-core/src/tool/reasoning/mod.rs +0 -0
- package/crates/enact-core/src/tool/reasoning/sequential.rs +0 -0
- package/crates/enact-core/src/tool/sandbox/dagger.rs +0 -0
- package/crates/enact-core/src/tool/sandbox/mod.rs +0 -0
- package/crates/enact-core/src/tool/shell.rs +147 -0
- package/crates/enact-core/src/tool/trait.rs +33 -0
- package/crates/enact-core/src/tool/web_search.rs +277 -0
- package/crates/enact-core/src/util/config.rs +0 -0
- package/crates/enact-core/src/util/errors.rs +0 -0
- package/crates/enact-core/src/util/mod.rs +6 -0
- package/crates/enact-core/tests/airgapped_e2e_test.rs +291 -0
- package/crates/enact-core/tests/e2e_agentic_loop.rs +119 -0
- package/crates/enact-core/tests/e2e_test.rs +259 -0
- package/crates/enact-core/tests/graph_test.rs +130 -0
- package/crates/enact-core/tests/stream_event_id_validation.rs +435 -0
- package/crates/enact-cron/Cargo.toml +28 -0
- package/crates/enact-cron/src/lib.rs +44 -0
- package/crates/enact-cron/src/schedule.rs +156 -0
- package/crates/enact-cron/src/store.rs +589 -0
- package/crates/enact-cron/src/types.rs +148 -0
- package/crates/enact-gateway/Cargo.toml +31 -0
- package/crates/enact-gateway/README.md +30 -0
- package/crates/enact-gateway/examples/whatsapp-gateway-runner-mock.rs +59 -0
- package/crates/enact-gateway/examples/whatsapp-gateway.rs +42 -0
- package/crates/enact-gateway/src/lib.rs +582 -0
- package/crates/enact-mcp/Cargo.toml +24 -0
- package/crates/enact-mcp/src/lib.rs +178 -0
- package/crates/enact-memory/Cargo.toml +25 -0
- package/crates/enact-memory/src/backend.rs +20 -0
- package/crates/enact-memory/src/chunker.rs +230 -0
- package/crates/enact-memory/src/embeddings.rs +221 -0
- package/crates/enact-memory/src/lib.rs +67 -0
- package/crates/enact-memory/src/markdown.rs +127 -0
- package/crates/enact-memory/src/none.rs +61 -0
- package/crates/enact-memory/src/sqlite.rs +276 -0
- package/crates/enact-memory/src/traits.rs +65 -0
- package/crates/enact-memory/src/vector.rs +198 -0
- package/crates/enact-oauth/Cargo.toml +27 -0
- package/crates/enact-oauth/src/lib.rs +584 -0
- package/crates/enact-observability/Cargo.toml +22 -0
- package/crates/enact-observability/src/lib.rs +197 -0
- package/crates/enact-providers/Cargo.toml +33 -0
- package/crates/enact-providers/examples/hello-agent.rs +33 -0
- package/crates/enact-providers/src/anthropic.rs +182 -0
- package/crates/enact-providers/src/azure.rs +96 -0
- package/crates/enact-providers/src/bridge.rs +221 -0
- package/crates/enact-providers/src/gemini.rs +227 -0
- package/crates/enact-providers/src/http.rs +78 -0
- package/crates/enact-providers/src/lib.rs +53 -0
- package/crates/enact-providers/src/openai_compatible.rs +167 -0
- package/crates/enact-providers/src/openrouter.rs +33 -0
- package/crates/enact-runner/Cargo.toml +24 -0
- package/crates/enact-runner/README.md +76 -0
- package/crates/enact-runner/src/compaction.rs +225 -0
- package/crates/enact-runner/src/config.rs +118 -0
- package/crates/enact-runner/src/lib.rs +63 -0
- package/crates/enact-runner/src/loop_driver.rs +414 -0
- package/crates/enact-runner/src/parser.rs +421 -0
- package/crates/enact-runner/src/retry.rs +262 -0
- package/crates/enact-runner/tests/integration.rs +278 -0
- package/crates/enact-security/Cargo.toml +22 -0
- package/crates/enact-security/src/audit.rs +375 -0
- package/crates/enact-security/src/lib.rs +37 -0
- package/crates/enact-security/src/policy.rs +406 -0
- package/crates/enact-skills/Cargo.toml +25 -0
- package/crates/enact-skills/src/lib.rs +506 -0
- package/crates/enact-tools/Cargo.toml +22 -0
- package/crates/enact-tools/src/file_read.rs +166 -0
- package/crates/enact-tools/src/file_write.rs +216 -0
- package/crates/enact-tools/src/git_operations.rs +513 -0
- package/crates/enact-tools/src/http_request.rs +417 -0
- package/crates/enact-tools/src/lib.rs +104 -0
- package/crates/enact-tools/src/security.rs +227 -0
- package/crates/enact-tools/src/shell.rs +191 -0
- package/crates/enact-tools/src/traits.rs +159 -0
- package/docs/Makefile +74 -0
- package/docs/config.toml +62 -0
- package/docs/content/_index.md +174 -0
- package/docs/content/a2a/_index.md +431 -0
- package/docs/content/api/_index.md +323 -0
- package/docs/content/channels/_index.md +160 -0
- package/docs/content/channels/teams.md +205 -0
- package/docs/content/channels/telegram.md +182 -0
- package/docs/content/channels/webhook.md +423 -0
- package/docs/content/channels/whatsapp.md +240 -0
- package/docs/content/cli/_index.md +261 -0
- package/docs/content/concepts/_index.md +273 -0
- package/docs/content/configuration/_index.md +241 -0
- package/docs/content/cron/_index.md +248 -0
- package/docs/content/developers/_index.md +278 -0
- package/docs/content/getting-started/_index.md +180 -0
- package/docs/content/installation/_index.md +186 -0
- package/docs/content/installation/uninstall.md +101 -0
- package/docs/content/installation/updating.md +120 -0
- package/docs/content/mcp/_index.md +215 -0
- package/docs/content/memory/_index.md +163 -0
- package/docs/content/oauth/_index.md +515 -0
- package/docs/content/providers/_index.md +206 -0
- package/docs/content/roadmap/_index.md +199 -0
- package/docs/content/security/_index.md +219 -0
- package/docs/content/skills/_index.md +228 -0
- package/docs/content/tools/_index.md +485 -0
- package/docs/content/troubleshooting/_index.md +259 -0
- package/docs/content/yaml-schema/_index.md +294 -0
- package/docs/static/giallo-dark.css +91 -0
- package/docs/static/giallo-light.css +91 -0
- package/docs/themes/tanuki/.github/workflows/deploy.yml +44 -0
- package/docs/themes/tanuki/LICENSE +21 -0
- package/docs/themes/tanuki/README.md +166 -0
- package/docs/themes/tanuki/examples/blog/config.toml +58 -0
- package/docs/themes/tanuki/examples/blog/content/_index.md +4 -0
- package/docs/themes/tanuki/examples/blog/content/about.md +33 -0
- package/docs/themes/tanuki/examples/blog/content/blog/_index.md +7 -0
- package/docs/themes/tanuki/examples/blog/content/blog/api-design-best-practices.md +245 -0
- package/docs/themes/tanuki/examples/blog/content/blog/building-accessible-websites.md +147 -0
- package/docs/themes/tanuki/examples/blog/content/blog/css-grid-vs-flexbox.md +165 -0
- package/docs/themes/tanuki/examples/blog/content/blog/customizing-catppuccin-colors.md +137 -0
- package/docs/themes/tanuki/examples/blog/content/blog/dark-mode-best-practices.md +82 -0
- package/docs/themes/tanuki/examples/blog/content/blog/docker-essentials.md +301 -0
- package/docs/themes/tanuki/examples/blog/content/blog/getting-started-with-zola.md +129 -0
- package/docs/themes/tanuki/examples/blog/content/blog/git-workflow-for-content.md +112 -0
- package/docs/themes/tanuki/examples/blog/content/blog/introduction-to-webassembly.md +183 -0
- package/docs/themes/tanuki/examples/blog/content/blog/modern-javascript-features.md +234 -0
- package/docs/themes/tanuki/examples/blog/content/blog/testing-strategies.md +311 -0
- package/docs/themes/tanuki/examples/blog/content/blog/typography-for-developers.md +104 -0
- package/docs/themes/tanuki/examples/blog/content/blog/welcome-to-tanuki.md +67 -0
- package/docs/themes/tanuki/examples/blog/content/blog/why-static-sites.md +85 -0
- package/docs/themes/tanuki/examples/blog/content/projects.md +64 -0
- package/docs/themes/tanuki/examples/book/config.toml +17 -0
- package/docs/themes/tanuki/examples/book/content/_index.md +12 -0
- package/docs/themes/tanuki/examples/book/content/chapter-1.md +90 -0
- package/docs/themes/tanuki/examples/book/content/chapter-2.md +143 -0
- package/docs/themes/tanuki/examples/book/content/chapter-3.md +217 -0
- package/docs/themes/tanuki/examples/book/content/chapter-4.md +224 -0
- package/docs/themes/tanuki/examples/book/content/chapter-5.md +297 -0
- package/docs/themes/tanuki/examples/book/content/print.md +6 -0
- package/docs/themes/tanuki/examples/docs/config.toml +28 -0
- package/docs/themes/tanuki/examples/docs/content/_index.md +20 -0
- package/docs/themes/tanuki/examples/docs/content/components.md +156 -0
- package/docs/themes/tanuki/examples/docs/content/configuration.md +94 -0
- package/docs/themes/tanuki/examples/docs/content/customization.md +202 -0
- package/docs/themes/tanuki/examples/docs/content/deployment.md +204 -0
- package/docs/themes/tanuki/examples/docs/content/installation.md +59 -0
- package/docs/themes/tanuki/examples/docs/content/print.md +6 -0
- package/docs/themes/tanuki/examples/docs/static/img/tanuki-icon.avif +0 -0
- package/docs/themes/tanuki/examples/index.html +2104 -0
- package/docs/themes/tanuki/mise.toml +108 -0
- package/docs/themes/tanuki/sass/base/_catppuccin.scss +164 -0
- package/docs/themes/tanuki/sass/base/_fonts.scss +64 -0
- package/docs/themes/tanuki/sass/base/_reset.scss +152 -0
- package/docs/themes/tanuki/sass/base/_typography.scss +523 -0
- package/docs/themes/tanuki/sass/components/_buttons.scss +209 -0
- package/docs/themes/tanuki/sass/components/_code.scss +457 -0
- package/docs/themes/tanuki/sass/components/_landing.scss +633 -0
- package/docs/themes/tanuki/sass/components/_layout.scss +294 -0
- package/docs/themes/tanuki/sass/components/_navigation.scss +1200 -0
- package/docs/themes/tanuki/sass/components/_print.scss +237 -0
- package/docs/themes/tanuki/sass/components/_search.scss +224 -0
- package/docs/themes/tanuki/sass/components/_sidebar.scss +473 -0
- package/docs/themes/tanuki/sass/components/_theme-toggle.scss +186 -0
- package/docs/themes/tanuki/sass/modes/_blog.scss +366 -0
- package/docs/themes/tanuki/sass/modes/_product.scss +875 -0
- package/docs/themes/tanuki/sass/modes/_raskell.scss +1696 -0
- package/docs/themes/tanuki/sass/patterns/_buttons.scss +183 -0
- package/docs/themes/tanuki/sass/patterns/_cards.scss +144 -0
- package/docs/themes/tanuki/sass/patterns/_index.scss +9 -0
- package/docs/themes/tanuki/sass/patterns/_lists.scss +259 -0
- package/docs/themes/tanuki/sass/patterns/_sections.scss +243 -0
- package/docs/themes/tanuki/sass/style.scss +47 -0
- package/docs/themes/tanuki/sass/tokens/_colors.scss +139 -0
- package/docs/themes/tanuki/sass/tokens/_spacing.scss +100 -0
- package/docs/themes/tanuki/sass/tokens/_typography.scss +186 -0
- package/docs/themes/tanuki/screenshot.png +0 -0
- package/docs/themes/tanuki/sentinel.kdl +59 -0
- package/docs/themes/tanuki/static/elasticlunr.min.js +10 -0
- package/docs/themes/tanuki/static/fonts/GEIST-LICENSE.txt +92 -0
- package/docs/themes/tanuki/static/fonts/Geist-Variable.woff2 +0 -0
- package/docs/themes/tanuki/static/fonts/GeistMono-Variable.woff2 +0 -0
- package/docs/themes/tanuki/static/img/tanuki-icon.avif +0 -0
- package/docs/themes/tanuki/static/img/tanuki-icon.png +0 -0
- package/docs/themes/tanuki/static/js/anchors.js +18 -0
- package/docs/themes/tanuki/static/js/app.js +274 -0
- package/docs/themes/tanuki/static/js/code.js +394 -0
- package/docs/themes/tanuki/static/js/navigation.js +778 -0
- package/docs/themes/tanuki/static/js/scroll-to-top.js +33 -0
- package/docs/themes/tanuki/static/js/search-raskell.js +240 -0
- package/docs/themes/tanuki/static/js/search.js +215 -0
- package/docs/themes/tanuki/static/js/theme.js +169 -0
- package/docs/themes/tanuki/static/syntax-dark.css +151 -0
- package/docs/themes/tanuki/static/syntax-light.css +151 -0
- package/docs/themes/tanuki/static/wasm/sentinel_playground_wasm.js +486 -0
- package/docs/themes/tanuki/static/wasm/sentinel_playground_wasm_bg.wasm +0 -0
- package/docs/themes/tanuki/templates/404.html +52 -0
- package/docs/themes/tanuki/templates/base.html +428 -0
- package/docs/themes/tanuki/templates/blog.html +66 -0
- package/docs/themes/tanuki/templates/home.html +108 -0
- package/docs/themes/tanuki/templates/index.html +178 -0
- package/docs/themes/tanuki/templates/landing.html +168 -0
- package/docs/themes/tanuki/templates/macros/nav.html +128 -0
- package/docs/themes/tanuki/templates/macros/posts.html +101 -0
- package/docs/themes/tanuki/templates/macros/ui.html +159 -0
- package/docs/themes/tanuki/templates/page.html +135 -0
- package/docs/themes/tanuki/templates/partials/footer.html +38 -0
- package/docs/themes/tanuki/templates/partials/header.html +366 -0
- package/docs/themes/tanuki/templates/partials/nav-buttons.html +55 -0
- package/docs/themes/tanuki/templates/partials/nav-overlay.html +81 -0
- package/docs/themes/tanuki/templates/partials/page-toc-panel.html +43 -0
- package/docs/themes/tanuki/templates/partials/search.html +52 -0
- package/docs/themes/tanuki/templates/partials/sidebar.html +107 -0
- package/docs/themes/tanuki/templates/partials/theme-toggle.html +35 -0
- package/docs/themes/tanuki/templates/partials/toc-overlay.html +146 -0
- package/docs/themes/tanuki/templates/partials/version-picker.html +38 -0
- package/docs/themes/tanuki/templates/print.html +244 -0
- package/docs/themes/tanuki/templates/section.html +186 -0
- package/docs/themes/tanuki/templates/taxonomy_list.html +18 -0
- package/docs/themes/tanuki/templates/taxonomy_single.html +31 -0
- package/docs/themes/tanuki/theme.toml +58 -0
- package/examples/hello-agent.rs +55 -0
- package/package.json +36 -0
- package/proto/config.proto +60 -0
- package/proto/events.proto +0 -0
- package/proto/runtime.proto +215 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "API Reference"
|
|
3
|
+
description = "Complete API reference for the Acme SDK."
|
|
4
|
+
weight = 3
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# API Reference
|
|
8
|
+
|
|
9
|
+
Complete reference for all Acme SDK methods and types.
|
|
10
|
+
|
|
11
|
+
## Users
|
|
12
|
+
|
|
13
|
+
Manage user accounts and profiles.
|
|
14
|
+
|
|
15
|
+
### `users.get(id)`
|
|
16
|
+
|
|
17
|
+
Retrieve a user by ID.
|
|
18
|
+
|
|
19
|
+
```javascript
|
|
20
|
+
const user = await client.users.get('user_123');
|
|
21
|
+
// Returns: { id, email, name, createdAt, ... }
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### `users.list(options?)`
|
|
25
|
+
|
|
26
|
+
List all users with optional filtering.
|
|
27
|
+
|
|
28
|
+
```javascript
|
|
29
|
+
const users = await client.users.list({
|
|
30
|
+
limit: 20,
|
|
31
|
+
offset: 0,
|
|
32
|
+
status: 'active',
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### `users.create(data)`
|
|
37
|
+
|
|
38
|
+
Create a new user.
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
const user = await client.users.create({
|
|
42
|
+
email: 'jane@example.com',
|
|
43
|
+
name: 'Jane Doe',
|
|
44
|
+
role: 'member',
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### `users.update(id, data)`
|
|
49
|
+
|
|
50
|
+
Update an existing user.
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
const user = await client.users.update('user_123', {
|
|
54
|
+
name: 'Jane Smith',
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### `users.delete(id)`
|
|
59
|
+
|
|
60
|
+
Delete a user.
|
|
61
|
+
|
|
62
|
+
```javascript
|
|
63
|
+
await client.users.delete('user_123');
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Widgets
|
|
69
|
+
|
|
70
|
+
> **New in v1.2.0** — Build custom UI components with the Widgets API.
|
|
71
|
+
|
|
72
|
+
### `widgets.create(config)`
|
|
73
|
+
|
|
74
|
+
Create a new widget instance.
|
|
75
|
+
|
|
76
|
+
```javascript
|
|
77
|
+
const widget = await client.widgets.create({
|
|
78
|
+
type: 'payment-form',
|
|
79
|
+
container: '#widget-container',
|
|
80
|
+
theme: 'dark',
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### `widgets.render()`
|
|
85
|
+
|
|
86
|
+
Render the widget to the DOM.
|
|
87
|
+
|
|
88
|
+
```javascript
|
|
89
|
+
await widget.render();
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### `widgets.on(event, handler)`
|
|
93
|
+
|
|
94
|
+
Subscribe to widget events.
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
widget.on('success', (data) => {
|
|
98
|
+
console.log('Payment successful:', data);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
widget.on('error', (error) => {
|
|
102
|
+
console.error('Widget error:', error);
|
|
103
|
+
});
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Events
|
|
109
|
+
|
|
110
|
+
Real-time event subscriptions.
|
|
111
|
+
|
|
112
|
+
### `events.subscribe(channel)`
|
|
113
|
+
|
|
114
|
+
Subscribe to a channel for real-time updates.
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
const subscription = client.events.subscribe('user_123');
|
|
118
|
+
|
|
119
|
+
subscription.on('user.updated', (event) => {
|
|
120
|
+
console.log('User updated:', event.data);
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### `events.unsubscribe(channel)`
|
|
125
|
+
|
|
126
|
+
Unsubscribe from a channel.
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
client.events.unsubscribe('user_123');
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Error Handling
|
|
135
|
+
|
|
136
|
+
The SDK throws typed errors for different scenarios:
|
|
137
|
+
|
|
138
|
+
```javascript
|
|
139
|
+
import { AcmeError, RateLimitError, AuthError } from '@acme/sdk';
|
|
140
|
+
|
|
141
|
+
try {
|
|
142
|
+
await client.users.get('user_123');
|
|
143
|
+
} catch (error) {
|
|
144
|
+
if (error instanceof RateLimitError) {
|
|
145
|
+
console.log('Rate limited, retry after:', error.retryAfter);
|
|
146
|
+
} else if (error instanceof AuthError) {
|
|
147
|
+
console.log('Invalid API key');
|
|
148
|
+
} else if (error instanceof AcmeError) {
|
|
149
|
+
console.log('API error:', error.message);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Next Steps
|
|
155
|
+
|
|
156
|
+
Learn about [Customization](/customization/) for advanced usage patterns.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "Configuration"
|
|
3
|
+
description = "Configure the Acme SDK for your environment."
|
|
4
|
+
weight = 2
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# Configuration
|
|
8
|
+
|
|
9
|
+
Learn how to configure the Acme SDK for different environments and use cases.
|
|
10
|
+
|
|
11
|
+
## API Credentials
|
|
12
|
+
|
|
13
|
+
The SDK requires an API key for authentication. Get your key from the [Acme Dashboard](https://dashboard.acme.dev).
|
|
14
|
+
|
|
15
|
+
```javascript
|
|
16
|
+
import { Acme } from '@acme/sdk';
|
|
17
|
+
|
|
18
|
+
const client = new Acme({
|
|
19
|
+
apiKey: 'your-api-key',
|
|
20
|
+
// Optional: specify API version (defaults to v3 in SDK 1.2.0)
|
|
21
|
+
apiVersion: 'v3',
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Environment Variables
|
|
26
|
+
|
|
27
|
+
We recommend using environment variables for sensitive configuration:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# .env
|
|
31
|
+
ACME_API_KEY=sk_live_xxxxx
|
|
32
|
+
ACME_API_VERSION=v3
|
|
33
|
+
ACME_TIMEOUT=30000
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
const client = new Acme({
|
|
38
|
+
apiKey: process.env.ACME_API_KEY,
|
|
39
|
+
apiVersion: process.env.ACME_API_VERSION,
|
|
40
|
+
timeout: parseInt(process.env.ACME_TIMEOUT),
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Configuration Options
|
|
45
|
+
|
|
46
|
+
| Option | Type | Default | Description |
|
|
47
|
+
|--------|------|---------|-------------|
|
|
48
|
+
| `apiKey` | string | required | Your Acme API key |
|
|
49
|
+
| `apiVersion` | string | `"v3"` | API version to use |
|
|
50
|
+
| `timeout` | number | `30000` | Request timeout in ms |
|
|
51
|
+
| `retries` | number | `3` | Number of retry attempts |
|
|
52
|
+
| `baseUrl` | string | `"https://api.acme.dev"` | API base URL |
|
|
53
|
+
|
|
54
|
+
## Environment-Specific Config
|
|
55
|
+
|
|
56
|
+
### Development
|
|
57
|
+
|
|
58
|
+
```javascript
|
|
59
|
+
const client = new Acme({
|
|
60
|
+
apiKey: process.env.ACME_API_KEY,
|
|
61
|
+
baseUrl: 'https://sandbox.acme.dev',
|
|
62
|
+
debug: true,
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Production
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
const client = new Acme({
|
|
70
|
+
apiKey: process.env.ACME_API_KEY,
|
|
71
|
+
retries: 5,
|
|
72
|
+
timeout: 60000,
|
|
73
|
+
});
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## TypeScript Support
|
|
77
|
+
|
|
78
|
+
The SDK includes full TypeScript definitions:
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { Acme, AcmeConfig, User } from '@acme/sdk';
|
|
82
|
+
|
|
83
|
+
const config: AcmeConfig = {
|
|
84
|
+
apiKey: process.env.ACME_API_KEY!,
|
|
85
|
+
apiVersion: 'v3',
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const client = new Acme(config);
|
|
89
|
+
const user: User = await client.users.get('user_123');
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Next Steps
|
|
93
|
+
|
|
94
|
+
See [API Reference](/components/) for available methods and types.
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "Advanced Usage"
|
|
3
|
+
description = "Advanced patterns and customization for the Acme SDK."
|
|
4
|
+
weight = 4
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# Advanced Usage
|
|
8
|
+
|
|
9
|
+
Learn advanced patterns for getting the most out of the Acme SDK.
|
|
10
|
+
|
|
11
|
+
## Middleware
|
|
12
|
+
|
|
13
|
+
Add custom middleware to intercept requests and responses:
|
|
14
|
+
|
|
15
|
+
```javascript
|
|
16
|
+
import { Acme } from '@acme/sdk';
|
|
17
|
+
|
|
18
|
+
const client = new Acme({
|
|
19
|
+
apiKey: process.env.ACME_API_KEY,
|
|
20
|
+
middleware: [
|
|
21
|
+
// Logging middleware
|
|
22
|
+
async (request, next) => {
|
|
23
|
+
console.log(`[Acme] ${request.method} ${request.url}`);
|
|
24
|
+
const start = Date.now();
|
|
25
|
+
const response = await next(request);
|
|
26
|
+
console.log(`[Acme] Completed in ${Date.now() - start}ms`);
|
|
27
|
+
return response;
|
|
28
|
+
},
|
|
29
|
+
// Auth refresh middleware
|
|
30
|
+
async (request, next) => {
|
|
31
|
+
try {
|
|
32
|
+
return await next(request);
|
|
33
|
+
} catch (error) {
|
|
34
|
+
if (error.code === 'TOKEN_EXPIRED') {
|
|
35
|
+
await refreshToken();
|
|
36
|
+
return next(request);
|
|
37
|
+
}
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Batching Requests
|
|
46
|
+
|
|
47
|
+
Batch multiple operations for better performance:
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
const results = await client.batch([
|
|
51
|
+
{ method: 'users.get', params: { id: 'user_1' } },
|
|
52
|
+
{ method: 'users.get', params: { id: 'user_2' } },
|
|
53
|
+
{ method: 'users.get', params: { id: 'user_3' } },
|
|
54
|
+
]);
|
|
55
|
+
|
|
56
|
+
// results[0] = user_1 data
|
|
57
|
+
// results[1] = user_2 data
|
|
58
|
+
// results[2] = user_3 data
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Pagination
|
|
62
|
+
|
|
63
|
+
Handle paginated responses with built-in iterators:
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
// Manual pagination
|
|
67
|
+
let page = await client.users.list({ limit: 100 });
|
|
68
|
+
|
|
69
|
+
while (page.hasMore) {
|
|
70
|
+
for (const user of page.data) {
|
|
71
|
+
console.log(user.name);
|
|
72
|
+
}
|
|
73
|
+
page = await page.next();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Async iterator (recommended)
|
|
77
|
+
for await (const user of client.users.listAll()) {
|
|
78
|
+
console.log(user.name);
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Custom HTTP Client
|
|
83
|
+
|
|
84
|
+
Use your own HTTP client for advanced networking needs:
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
import { Acme } from '@acme/sdk';
|
|
88
|
+
import axios from 'axios';
|
|
89
|
+
|
|
90
|
+
const httpClient = {
|
|
91
|
+
async request(config) {
|
|
92
|
+
const response = await axios({
|
|
93
|
+
url: config.url,
|
|
94
|
+
method: config.method,
|
|
95
|
+
headers: config.headers,
|
|
96
|
+
data: config.body,
|
|
97
|
+
});
|
|
98
|
+
return {
|
|
99
|
+
status: response.status,
|
|
100
|
+
headers: response.headers,
|
|
101
|
+
body: response.data,
|
|
102
|
+
};
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const client = new Acme({
|
|
107
|
+
apiKey: process.env.ACME_API_KEY,
|
|
108
|
+
httpClient,
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Webhooks
|
|
113
|
+
|
|
114
|
+
Verify and handle incoming webhooks:
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
import { Acme, WebhookError } from '@acme/sdk';
|
|
118
|
+
import express from 'express';
|
|
119
|
+
|
|
120
|
+
const app = express();
|
|
121
|
+
|
|
122
|
+
app.post('/webhooks/acme', express.raw({ type: '*/*' }), (req, res) => {
|
|
123
|
+
const signature = req.headers['x-acme-signature'];
|
|
124
|
+
|
|
125
|
+
try {
|
|
126
|
+
const event = Acme.webhooks.verify(
|
|
127
|
+
req.body,
|
|
128
|
+
signature,
|
|
129
|
+
process.env.ACME_WEBHOOK_SECRET
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
switch (event.type) {
|
|
133
|
+
case 'user.created':
|
|
134
|
+
handleUserCreated(event.data);
|
|
135
|
+
break;
|
|
136
|
+
case 'user.deleted':
|
|
137
|
+
handleUserDeleted(event.data);
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
res.status(200).send('OK');
|
|
142
|
+
} catch (error) {
|
|
143
|
+
if (error instanceof WebhookError) {
|
|
144
|
+
console.error('Invalid webhook signature');
|
|
145
|
+
res.status(400).send('Invalid signature');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Caching
|
|
152
|
+
|
|
153
|
+
Implement response caching for improved performance:
|
|
154
|
+
|
|
155
|
+
```javascript
|
|
156
|
+
import { Acme } from '@acme/sdk';
|
|
157
|
+
|
|
158
|
+
const cache = new Map();
|
|
159
|
+
|
|
160
|
+
const client = new Acme({
|
|
161
|
+
apiKey: process.env.ACME_API_KEY,
|
|
162
|
+
cache: {
|
|
163
|
+
get: (key) => cache.get(key),
|
|
164
|
+
set: (key, value, ttl) => {
|
|
165
|
+
cache.set(key, value);
|
|
166
|
+
setTimeout(() => cache.delete(key), ttl);
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
cacheTTL: 60000, // 1 minute
|
|
170
|
+
});
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Migration from v1.1.x
|
|
174
|
+
|
|
175
|
+
> **Breaking Changes in v1.2.0**
|
|
176
|
+
|
|
177
|
+
### Async/Await
|
|
178
|
+
|
|
179
|
+
All methods now return Promises instead of using callbacks:
|
|
180
|
+
|
|
181
|
+
```javascript
|
|
182
|
+
// v1.1.x (deprecated)
|
|
183
|
+
client.users.get('user_123', (err, user) => {
|
|
184
|
+
if (err) throw err;
|
|
185
|
+
console.log(user);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
// v1.2.x
|
|
189
|
+
const user = await client.users.get('user_123');
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Import Changes
|
|
193
|
+
|
|
194
|
+
```javascript
|
|
195
|
+
// v1.1.x
|
|
196
|
+
const Acme = require('@acme/sdk');
|
|
197
|
+
|
|
198
|
+
// v1.2.x
|
|
199
|
+
import { Acme } from '@acme/sdk';
|
|
200
|
+
// or
|
|
201
|
+
const { Acme } = require('@acme/sdk');
|
|
202
|
+
```
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "Deployment"
|
|
3
|
+
description = "Deploy applications using the Acme SDK."
|
|
4
|
+
weight = 5
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# Deployment
|
|
8
|
+
|
|
9
|
+
Best practices for deploying applications that use the Acme SDK.
|
|
10
|
+
|
|
11
|
+
## Environment Setup
|
|
12
|
+
|
|
13
|
+
### Production Checklist
|
|
14
|
+
|
|
15
|
+
Before deploying to production:
|
|
16
|
+
|
|
17
|
+
- [ ] Use production API keys (not sandbox)
|
|
18
|
+
- [ ] Set appropriate timeouts and retry limits
|
|
19
|
+
- [ ] Configure error monitoring
|
|
20
|
+
- [ ] Enable request logging
|
|
21
|
+
- [ ] Set up webhook endpoints
|
|
22
|
+
|
|
23
|
+
### Environment Variables
|
|
24
|
+
|
|
25
|
+
Required environment variables:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Required
|
|
29
|
+
ACME_API_KEY=sk_live_xxxxx
|
|
30
|
+
|
|
31
|
+
# Optional
|
|
32
|
+
ACME_API_VERSION=v3
|
|
33
|
+
ACME_TIMEOUT=30000
|
|
34
|
+
ACME_RETRIES=3
|
|
35
|
+
ACME_WEBHOOK_SECRET=whsec_xxxxx
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Platform Guides
|
|
39
|
+
|
|
40
|
+
### Node.js
|
|
41
|
+
|
|
42
|
+
```javascript
|
|
43
|
+
// server.js
|
|
44
|
+
import { Acme } from '@acme/sdk';
|
|
45
|
+
import express from 'express';
|
|
46
|
+
|
|
47
|
+
const client = new Acme({
|
|
48
|
+
apiKey: process.env.ACME_API_KEY,
|
|
49
|
+
retries: 5,
|
|
50
|
+
timeout: 60000,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const app = express();
|
|
54
|
+
|
|
55
|
+
app.get('/api/users/:id', async (req, res) => {
|
|
56
|
+
try {
|
|
57
|
+
const user = await client.users.get(req.params.id);
|
|
58
|
+
res.json(user);
|
|
59
|
+
} catch (error) {
|
|
60
|
+
res.status(500).json({ error: error.message });
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
app.listen(3000);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Serverless (AWS Lambda)
|
|
68
|
+
|
|
69
|
+
```javascript
|
|
70
|
+
// handler.js
|
|
71
|
+
import { Acme } from '@acme/sdk';
|
|
72
|
+
|
|
73
|
+
// Initialize outside handler for connection reuse
|
|
74
|
+
const client = new Acme({
|
|
75
|
+
apiKey: process.env.ACME_API_KEY,
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export const handler = async (event) => {
|
|
79
|
+
const user = await client.users.get(event.userId);
|
|
80
|
+
return {
|
|
81
|
+
statusCode: 200,
|
|
82
|
+
body: JSON.stringify(user),
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Edge Functions (Cloudflare Workers)
|
|
88
|
+
|
|
89
|
+
```javascript
|
|
90
|
+
// worker.js
|
|
91
|
+
import { Acme } from '@acme/sdk/edge';
|
|
92
|
+
|
|
93
|
+
export default {
|
|
94
|
+
async fetch(request, env) {
|
|
95
|
+
const client = new Acme({
|
|
96
|
+
apiKey: env.ACME_API_KEY,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
const url = new URL(request.url);
|
|
100
|
+
const userId = url.searchParams.get('id');
|
|
101
|
+
const user = await client.users.get(userId);
|
|
102
|
+
|
|
103
|
+
return new Response(JSON.stringify(user), {
|
|
104
|
+
headers: { 'Content-Type': 'application/json' },
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Monitoring
|
|
111
|
+
|
|
112
|
+
### Health Checks
|
|
113
|
+
|
|
114
|
+
Implement health checks to monitor SDK connectivity:
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
app.get('/health', async (req, res) => {
|
|
118
|
+
try {
|
|
119
|
+
await client.ping();
|
|
120
|
+
res.json({ status: 'healthy', sdk: 'connected' });
|
|
121
|
+
} catch (error) {
|
|
122
|
+
res.status(503).json({ status: 'unhealthy', error: error.message });
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Error Tracking
|
|
128
|
+
|
|
129
|
+
Integrate with error tracking services:
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
import * as Sentry from '@sentry/node';
|
|
133
|
+
import { Acme, AcmeError } from '@acme/sdk';
|
|
134
|
+
|
|
135
|
+
const client = new Acme({
|
|
136
|
+
apiKey: process.env.ACME_API_KEY,
|
|
137
|
+
onError: (error) => {
|
|
138
|
+
if (error instanceof AcmeError) {
|
|
139
|
+
Sentry.captureException(error, {
|
|
140
|
+
tags: { sdk: 'acme', version: '1.2.0' },
|
|
141
|
+
extra: { requestId: error.requestId },
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Rate Limiting
|
|
149
|
+
|
|
150
|
+
The Acme API has rate limits. Handle them gracefully:
|
|
151
|
+
|
|
152
|
+
| Plan | Requests/min | Burst |
|
|
153
|
+
|------|--------------|-------|
|
|
154
|
+
| Free | 60 | 10 |
|
|
155
|
+
| Pro | 600 | 100 |
|
|
156
|
+
| Enterprise | 6000 | 1000 |
|
|
157
|
+
|
|
158
|
+
```javascript
|
|
159
|
+
import { Acme, RateLimitError } from '@acme/sdk';
|
|
160
|
+
|
|
161
|
+
try {
|
|
162
|
+
await client.users.list();
|
|
163
|
+
} catch (error) {
|
|
164
|
+
if (error instanceof RateLimitError) {
|
|
165
|
+
console.log(`Rate limited. Retry after ${error.retryAfter}s`);
|
|
166
|
+
await sleep(error.retryAfter * 1000);
|
|
167
|
+
// Retry request
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Security
|
|
173
|
+
|
|
174
|
+
### API Key Rotation
|
|
175
|
+
|
|
176
|
+
Rotate API keys periodically:
|
|
177
|
+
|
|
178
|
+
1. Generate a new key in the [Dashboard](https://dashboard.acme.dev)
|
|
179
|
+
2. Update your environment variables
|
|
180
|
+
3. Deploy the update
|
|
181
|
+
4. Revoke the old key
|
|
182
|
+
|
|
183
|
+
### Webhook Security
|
|
184
|
+
|
|
185
|
+
Always verify webhook signatures:
|
|
186
|
+
|
|
187
|
+
```javascript
|
|
188
|
+
const isValid = Acme.webhooks.verify(
|
|
189
|
+
payload,
|
|
190
|
+
signature,
|
|
191
|
+
process.env.ACME_WEBHOOK_SECRET
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
if (!isValid) {
|
|
195
|
+
throw new Error('Invalid webhook signature');
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Support
|
|
200
|
+
|
|
201
|
+
- **Documentation**: You're here!
|
|
202
|
+
- **API Status**: [status.acme.dev](https://status.acme.dev)
|
|
203
|
+
- **Support**: support@acme.dev
|
|
204
|
+
- **Enterprise**: enterprise@acme.dev
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "Installation"
|
|
3
|
+
description = "How to install the Acme SDK in your project."
|
|
4
|
+
weight = 1
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# Installation
|
|
8
|
+
|
|
9
|
+
Get started with the Acme SDK in your project.
|
|
10
|
+
|
|
11
|
+
## Requirements
|
|
12
|
+
|
|
13
|
+
- Node.js 18.0 or later
|
|
14
|
+
- npm, yarn, or pnpm
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
Install the SDK using your preferred package manager:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# npm
|
|
22
|
+
npm install @acme/sdk@1.2.0
|
|
23
|
+
|
|
24
|
+
# yarn
|
|
25
|
+
yarn add @acme/sdk@1.2.0
|
|
26
|
+
|
|
27
|
+
# pnpm
|
|
28
|
+
pnpm add @acme/sdk@1.2.0
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Verify Installation
|
|
32
|
+
|
|
33
|
+
Create a simple test to verify the SDK is working:
|
|
34
|
+
|
|
35
|
+
```javascript
|
|
36
|
+
import { Acme } from '@acme/sdk';
|
|
37
|
+
|
|
38
|
+
const client = new Acme({
|
|
39
|
+
apiKey: process.env.ACME_API_KEY,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Test the connection
|
|
43
|
+
const status = await client.ping();
|
|
44
|
+
console.log('Acme SDK connected:', status);
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Version Compatibility
|
|
48
|
+
|
|
49
|
+
| SDK Version | Node.js | API Version |
|
|
50
|
+
|-------------|---------|-------------|
|
|
51
|
+
| 1.2.x | ≥18.0 | v3 |
|
|
52
|
+
| 1.1.x | ≥16.0 | v2 |
|
|
53
|
+
| 1.0.x | ≥14.0 | v1 |
|
|
54
|
+
|
|
55
|
+
> **Upgrading?** See the [migration guide](/configuration/) for breaking changes between versions.
|
|
56
|
+
|
|
57
|
+
## Next Steps
|
|
58
|
+
|
|
59
|
+
Once installed, head to [Configuration](/configuration/) to set up your API credentials.
|
|
Binary file
|