timbal 2.2.5__tar.gz → 2.2.6__tar.gz
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.
- {timbal-2.2.5 → timbal-2.2.6}/PKG-INFO +1 -1
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/_version.py +2 -2
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/netsuite.py +71 -22
- {timbal-2.2.5 → timbal-2.2.6}/.gitignore +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/LICENSE +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/README.md +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/chat-completions.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/create-from-workforce.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/jobs/cancel.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/jobs/get.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/jobs/list.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/jobs/retry.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/link.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/list-context-vars.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/list-policies.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/messages.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/responses.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/docs/api-reference/ace/unlink.mdx +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/pyproject.toml +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/pyrightconfig.json +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/__main__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/cli_utils.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/cst_utils.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/flow.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/format.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/model_discovery.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/test.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/tool_discovery.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/add_edge.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/add_step.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/add_tool.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/remove_edge.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/remove_step.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/remove_tool.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/set_config.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/set_param.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/codegen/transformers/set_position.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/base.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/impl/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/impl/anthropic.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/impl/default.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/impl/message.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/impl/openai.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/impl/string.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/impl/timbal.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/collectors/registry.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/agent.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/fallback_model.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/llm_router.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/mcp.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/memory_compaction.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/models.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/runnable.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/skill.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/test_model.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/tool.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/tool_set.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/core/workflow.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/errors.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/cli.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/display.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/fixtures/agent.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/fixtures/eval_examples.yaml +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/fixtures/eval_flow_validators.yaml +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/fixtures/eval_negations.yaml +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/fixtures/eval_parallel.yaml +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/fixtures/eval_subagent.yaml +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/fixtures/eval_transforms.yaml +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/fixtures/test_invalid_validator.yaml +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/models.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/runner.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/utils.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/base.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/comparison_base.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/contains.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/contains_all.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/contains_any.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/context.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/email.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/ends_with.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/eq.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/gt.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/gte.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/json.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/language.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/length.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/llm_base.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/lt.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/lte.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/max_length.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/min_length.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/not_null.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/parallel.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/pattern.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/prompt.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/semantic.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/seq.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/starts_with.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/evals/validators/type.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/logs.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/models.yaml +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/platform/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/platform/integrations.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/platform/knowledge_bases/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/platform/knowledge_bases/query.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/platform/tool_proxy.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/platform/types.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/platform/utils.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/server/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/server/__main__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/server/http.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/server/jobs.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/server/voice.html +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/server/voice.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/config.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/config_loader.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/context.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/dependency_analyzer.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/exporters/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/exporters/otel.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/providers/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/providers/base.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/providers/in_memory.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/providers/jsonl.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/providers/platform.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/providers/sqlite.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/span.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/state/tracing/trace.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/_creds.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/asana.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/bash.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/cala.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/cloudflare.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/dynamics_business_central.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/dynamics_sales.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/edit.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/elasticsearch.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/elevenlabs.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/excel.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/fal.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/fathom.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/firecrawl.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/gemini_images.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/gmail.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/google_analytics.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/google_business.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/google_calendar.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/google_docs.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/google_drive.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/google_maps.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/google_merchant_center.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/google_search_console.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/google_sheets.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/happy_scribe.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/higgsfield.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/hubspot.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/interaction.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/jira.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/klaviyo.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/knowledge_base.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/krea.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/lancedb.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/linkedin.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/mongodb.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/onedrive.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/outlook.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/parallel.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/pinecone.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/powerbi.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/quiver_ai.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/read.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/replicate.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/resend.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/salesforce.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/scraperapi.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/sharepoint.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/shopify.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/slack.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/stripe.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/tavily.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/web_search.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/write.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/xai.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/zendesk.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/tools/zoho_crm.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/approval.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/content/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/content/base.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/content/custom.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/content/file.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/content/text.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/content/thinking.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/content/tool_result.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/content/tool_use.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/events/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/events/approval.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/events/base.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/events/delta.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/events/interaction.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/events/output.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/events/start.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/file.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/message.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/types/run_status.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/utils/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/utils/import_spec.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/utils/model.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/utils/net.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/utils/schema.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/utils/serialization.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/voice/__init__.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/voice/elevenlabs.py +0 -0
- {timbal-2.2.5 → timbal-2.2.6}/python/timbal/voice/session.py +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '2.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (2, 2,
|
|
21
|
+
__version__ = version = '2.2.6'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 2, 6)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -29,6 +29,8 @@ def _netsuite_auth_header(
|
|
|
29
29
|
consumer_secret: str,
|
|
30
30
|
token_id: str,
|
|
31
31
|
token_secret: str,
|
|
32
|
+
query_params: dict[str, Any] | None = None,
|
|
33
|
+
body: str | None = None,
|
|
32
34
|
) -> str:
|
|
33
35
|
"""Generate OAuth 1.0a Token-Based Authentication (TBA) header for NetSuite."""
|
|
34
36
|
import base64
|
|
@@ -41,7 +43,7 @@ def _netsuite_auth_header(
|
|
|
41
43
|
nonce = uuid.uuid4().hex
|
|
42
44
|
timestamp = str(int(time.time()))
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
oauth_params: dict[str, str] = {
|
|
45
47
|
"oauth_consumer_key": consumer_key,
|
|
46
48
|
"oauth_nonce": nonce,
|
|
47
49
|
"oauth_signature_method": "HMAC-SHA256",
|
|
@@ -49,10 +51,21 @@ def _netsuite_auth_header(
|
|
|
49
51
|
"oauth_token": token_id,
|
|
50
52
|
"oauth_version": "1.0",
|
|
51
53
|
}
|
|
54
|
+
if body is not None:
|
|
55
|
+
# NetSuite requires oauth_body_hash for non-form POST/PATCH/PUT bodies.
|
|
56
|
+
oauth_params["oauth_body_hash"] = base64.b64encode(
|
|
57
|
+
hashlib.sha1(body.encode(), usedforsecurity=False).digest()
|
|
58
|
+
).decode()
|
|
59
|
+
|
|
60
|
+
signature_params = dict(oauth_params)
|
|
61
|
+
if query_params:
|
|
62
|
+
for key, value in query_params.items():
|
|
63
|
+
if value is not None:
|
|
64
|
+
signature_params[str(key)] = str(value)
|
|
52
65
|
|
|
53
66
|
sorted_params = "&".join(
|
|
54
67
|
f"{urllib.parse.quote(k, safe='')}={urllib.parse.quote(v, safe='')}"
|
|
55
|
-
for k, v in sorted(
|
|
68
|
+
for k, v in sorted(signature_params.items())
|
|
56
69
|
)
|
|
57
70
|
base_string = (
|
|
58
71
|
f"{method.upper()}&"
|
|
@@ -64,11 +77,11 @@ def _netsuite_auth_header(
|
|
|
64
77
|
hmac.new(signing_key.encode(), base_string.encode(), hashlib.sha256).digest()
|
|
65
78
|
).decode()
|
|
66
79
|
|
|
67
|
-
|
|
80
|
+
oauth_params["oauth_signature"] = signature
|
|
68
81
|
realm = account_id.strip().upper()
|
|
69
82
|
|
|
70
83
|
header_parts = [f'realm="{urllib.parse.quote(realm, safe="")}"'] + [
|
|
71
|
-
f'{k}="{urllib.parse.quote(v, safe="")}"' for k, v in sorted(
|
|
84
|
+
f'{k}="{urllib.parse.quote(v, safe="")}"' for k, v in sorted(oauth_params.items())
|
|
72
85
|
]
|
|
73
86
|
return "OAuth " + ", ".join(header_parts)
|
|
74
87
|
|
|
@@ -273,7 +286,9 @@ class NetSuiteGetAccount(Tool):
|
|
|
273
286
|
if fields:
|
|
274
287
|
params["fields"] = fields
|
|
275
288
|
|
|
276
|
-
auth = _netsuite_auth_header(
|
|
289
|
+
auth = _netsuite_auth_header(
|
|
290
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
291
|
+
)
|
|
277
292
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
278
293
|
response = await client.get(
|
|
279
294
|
url,
|
|
@@ -328,7 +343,9 @@ class NetSuiteListAccounts(Tool):
|
|
|
328
343
|
if query:
|
|
329
344
|
params["q"] = query
|
|
330
345
|
|
|
331
|
-
auth = _netsuite_auth_header(
|
|
346
|
+
auth = _netsuite_auth_header(
|
|
347
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
348
|
+
)
|
|
332
349
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
333
350
|
response = await client.get(url, headers={"Authorization": auth, "Content-Type": "application/json"}, params=params)
|
|
334
351
|
response.raise_for_status()
|
|
@@ -492,7 +509,9 @@ class NetSuiteGetAssemblyBuild(Tool):
|
|
|
492
509
|
if fields:
|
|
493
510
|
params["fields"] = fields
|
|
494
511
|
|
|
495
|
-
auth = _netsuite_auth_header(
|
|
512
|
+
auth = _netsuite_auth_header(
|
|
513
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
514
|
+
)
|
|
496
515
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
497
516
|
response = await client.get(
|
|
498
517
|
url,
|
|
@@ -547,7 +566,9 @@ class NetSuiteListAssemblyBuilds(Tool):
|
|
|
547
566
|
if query:
|
|
548
567
|
params["q"] = query
|
|
549
568
|
|
|
550
|
-
auth = _netsuite_auth_header(
|
|
569
|
+
auth = _netsuite_auth_header(
|
|
570
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
571
|
+
)
|
|
551
572
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
552
573
|
response = await client.get(url, headers={"Authorization": auth, "Content-Type": "application/json"}, params=params)
|
|
553
574
|
response.raise_for_status()
|
|
@@ -952,7 +973,9 @@ class NetSuiteGetAssemblyItem(Tool):
|
|
|
952
973
|
if fields:
|
|
953
974
|
params["fields"] = fields
|
|
954
975
|
|
|
955
|
-
auth = _netsuite_auth_header(
|
|
976
|
+
auth = _netsuite_auth_header(
|
|
977
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
978
|
+
)
|
|
956
979
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
957
980
|
response = await client.get(
|
|
958
981
|
url,
|
|
@@ -1007,7 +1030,9 @@ class NetSuiteListAssemblyItems(Tool):
|
|
|
1007
1030
|
if query:
|
|
1008
1031
|
params["q"] = query
|
|
1009
1032
|
|
|
1010
|
-
auth = _netsuite_auth_header(
|
|
1033
|
+
auth = _netsuite_auth_header(
|
|
1034
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
1035
|
+
)
|
|
1011
1036
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
1012
1037
|
response = await client.get(url, headers={"Authorization": auth, "Content-Type": "application/json"}, params=params)
|
|
1013
1038
|
response.raise_for_status()
|
|
@@ -1108,7 +1133,9 @@ class NetSuiteSuiteQL(Tool):
|
|
|
1108
1133
|
|
|
1109
1134
|
payload = {"q": query}
|
|
1110
1135
|
params = {"limit": min(limit, 1000), "offset": offset}
|
|
1111
|
-
auth = _netsuite_auth_header(
|
|
1136
|
+
auth = _netsuite_auth_header(
|
|
1137
|
+
"POST", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
1138
|
+
)
|
|
1112
1139
|
|
|
1113
1140
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
1114
1141
|
response = await client.post(
|
|
@@ -1284,7 +1311,9 @@ class NetSuiteGetBillingAccount(Tool):
|
|
|
1284
1311
|
if fields:
|
|
1285
1312
|
params["fields"] = fields
|
|
1286
1313
|
|
|
1287
|
-
auth = _netsuite_auth_header(
|
|
1314
|
+
auth = _netsuite_auth_header(
|
|
1315
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
1316
|
+
)
|
|
1288
1317
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
1289
1318
|
response = await client.get(
|
|
1290
1319
|
url,
|
|
@@ -1339,7 +1368,9 @@ class NetSuiteListBillingAccounts(Tool):
|
|
|
1339
1368
|
if query:
|
|
1340
1369
|
params["q"] = query
|
|
1341
1370
|
|
|
1342
|
-
auth = _netsuite_auth_header(
|
|
1371
|
+
auth = _netsuite_auth_header(
|
|
1372
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
1373
|
+
)
|
|
1343
1374
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
1344
1375
|
response = await client.get(url, headers={"Authorization": auth, "Content-Type": "application/json"}, params=params)
|
|
1345
1376
|
response.raise_for_status()
|
|
@@ -1552,7 +1583,9 @@ class NetSuiteGetBillingSchedule(Tool):
|
|
|
1552
1583
|
if fields:
|
|
1553
1584
|
params["fields"] = fields
|
|
1554
1585
|
|
|
1555
|
-
auth = _netsuite_auth_header(
|
|
1586
|
+
auth = _netsuite_auth_header(
|
|
1587
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
1588
|
+
)
|
|
1556
1589
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
1557
1590
|
response = await client.get(
|
|
1558
1591
|
url,
|
|
@@ -1607,7 +1640,9 @@ class NetSuiteListBillingSchedules(Tool):
|
|
|
1607
1640
|
if query:
|
|
1608
1641
|
params["q"] = query
|
|
1609
1642
|
|
|
1610
|
-
auth = _netsuite_auth_header(
|
|
1643
|
+
auth = _netsuite_auth_header(
|
|
1644
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
1645
|
+
)
|
|
1611
1646
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
1612
1647
|
response = await client.get(url, headers={"Authorization": auth, "Content-Type": "application/json"}, params=params)
|
|
1613
1648
|
response.raise_for_status()
|
|
@@ -1916,7 +1951,9 @@ class NetSuiteGetCalendarEvent(Tool):
|
|
|
1916
1951
|
if fields:
|
|
1917
1952
|
params["fields"] = fields
|
|
1918
1953
|
|
|
1919
|
-
auth = _netsuite_auth_header(
|
|
1954
|
+
auth = _netsuite_auth_header(
|
|
1955
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
1956
|
+
)
|
|
1920
1957
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
1921
1958
|
response = await client.get(
|
|
1922
1959
|
url,
|
|
@@ -1971,7 +2008,9 @@ class NetSuiteListCalendarEvents(Tool):
|
|
|
1971
2008
|
if query:
|
|
1972
2009
|
params["q"] = query
|
|
1973
2010
|
|
|
1974
|
-
auth = _netsuite_auth_header(
|
|
2011
|
+
auth = _netsuite_auth_header(
|
|
2012
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
2013
|
+
)
|
|
1975
2014
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
1976
2015
|
response = await client.get(url, headers={"Authorization": auth, "Content-Type": "application/json"}, params=params)
|
|
1977
2016
|
response.raise_for_status()
|
|
@@ -2118,7 +2157,9 @@ class NetSuiteCustomSuiteQL(Tool):
|
|
|
2118
2157
|
|
|
2119
2158
|
payload = {"q": query}
|
|
2120
2159
|
params = {"limit": min(limit, 1000), "offset": offset}
|
|
2121
|
-
auth = _netsuite_auth_header(
|
|
2160
|
+
auth = _netsuite_auth_header(
|
|
2161
|
+
"POST", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
2162
|
+
)
|
|
2122
2163
|
|
|
2123
2164
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
2124
2165
|
response = await client.post(
|
|
@@ -2287,7 +2328,9 @@ class NetSuiteGetIntercompanyJournalEntry(Tool):
|
|
|
2287
2328
|
if fields:
|
|
2288
2329
|
params["fields"] = fields
|
|
2289
2330
|
|
|
2290
|
-
auth = _netsuite_auth_header(
|
|
2331
|
+
auth = _netsuite_auth_header(
|
|
2332
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
2333
|
+
)
|
|
2291
2334
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
2292
2335
|
response = await client.get(
|
|
2293
2336
|
url,
|
|
@@ -2342,7 +2385,9 @@ class NetSuiteListIntercompanyJournalEntries(Tool):
|
|
|
2342
2385
|
if query:
|
|
2343
2386
|
params["q"] = query
|
|
2344
2387
|
|
|
2345
|
-
auth = _netsuite_auth_header(
|
|
2388
|
+
auth = _netsuite_auth_header(
|
|
2389
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
2390
|
+
)
|
|
2346
2391
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
2347
2392
|
response = await client.get(url, headers={"Authorization": auth, "Content-Type": "application/json"}, params=params)
|
|
2348
2393
|
response.raise_for_status()
|
|
@@ -2557,7 +2602,9 @@ class NetSuiteGetBinTransfer(Tool):
|
|
|
2557
2602
|
if fields:
|
|
2558
2603
|
params["fields"] = fields
|
|
2559
2604
|
|
|
2560
|
-
auth = _netsuite_auth_header(
|
|
2605
|
+
auth = _netsuite_auth_header(
|
|
2606
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
2607
|
+
)
|
|
2561
2608
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
2562
2609
|
response = await client.get(
|
|
2563
2610
|
url,
|
|
@@ -2612,7 +2659,9 @@ class NetSuiteListBinTransfers(Tool):
|
|
|
2612
2659
|
if query:
|
|
2613
2660
|
params["q"] = query
|
|
2614
2661
|
|
|
2615
|
-
auth = _netsuite_auth_header(
|
|
2662
|
+
auth = _netsuite_auth_header(
|
|
2663
|
+
"GET", url, account_id, consumer_key, consumer_secret, token_id, token_secret, query_params=params
|
|
2664
|
+
)
|
|
2616
2665
|
async with httpx.AsyncClient(timeout=httpx.Timeout(30.0, connect=10.0)) as client:
|
|
2617
2666
|
response = await client.get(url, headers={"Authorization": auth, "Content-Type": "application/json"}, params=params)
|
|
2618
2667
|
response.raise_for_status()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|