@apify/actors-mcp-server 0.18.4 → 0.18.5-beta.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/README.md +5 -2
- package/dist/apify_client.js +1 -4
- package/dist/apify_client.js.map +1 -1
- package/dist/const.d.ts +7 -4
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +9 -8
- package/dist/const.js.map +1 -1
- package/dist/dev_server.js +1 -4
- package/dist/dev_server.js.map +1 -1
- package/dist/errors.js +1 -4
- package/dist/errors.js.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/index_internals.d.ts +2 -0
- package/dist/index_internals.d.ts.map +1 -1
- package/dist/index_internals.js +1 -4
- package/dist/index_internals.js.map +1 -1
- package/dist/index_internals_test_kit.js +1 -4
- package/dist/index_internals_test_kit.js.map +1 -1
- package/dist/input.js +1 -4
- package/dist/input.js.map +1 -1
- package/dist/instrument.js +1 -4
- package/dist/instrument.js.map +1 -1
- package/dist/mcp/actors.js +1 -4
- package/dist/mcp/actors.js.map +1 -1
- package/dist/mcp/client.js +1 -4
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/client_context.js +1 -4
- package/dist/mcp/client_context.js.map +1 -1
- package/dist/mcp/const.js +1 -4
- package/dist/mcp/const.js.map +1 -1
- package/dist/mcp/errors.js +1 -4
- package/dist/mcp/errors.js.map +1 -1
- package/dist/mcp/legacy_server.js +1 -4
- package/dist/mcp/legacy_server.js.map +1 -1
- package/dist/mcp/proxy.js +1 -4
- package/dist/mcp/proxy.js.map +1 -1
- package/dist/mcp/remote_tool_call.js +1 -4
- package/dist/mcp/remote_tool_call.js.map +1 -1
- package/dist/mcp/server.js +1 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/stateless_server.js +1 -4
- package/dist/mcp/stateless_server.js.map +1 -1
- package/dist/mcp/task_execution.js +1 -4
- package/dist/mcp/task_execution.js.map +1 -1
- package/dist/mcp/tool_call_engine.js +1 -4
- package/dist/mcp/tool_call_engine.js.map +1 -1
- package/dist/mcp/tool_call_error_mapper.js +1 -4
- package/dist/mcp/tool_call_error_mapper.js.map +1 -1
- package/dist/mcp/tool_call_telemetry.js +1 -4
- package/dist/mcp/tool_call_telemetry.js.map +1 -1
- package/dist/mcp/tool_dispatch.js +1 -4
- package/dist/mcp/tool_dispatch.js.map +1 -1
- package/dist/mcp/utils.js +1 -4
- package/dist/mcp/utils.js.map +1 -1
- package/dist/payments/const.js +1 -4
- package/dist/payments/const.js.map +1 -1
- package/dist/payments/helpers.js +1 -4
- package/dist/payments/helpers.js.map +1 -1
- package/dist/payments/index.js +1 -4
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/resolve.js +1 -4
- package/dist/payments/resolve.js.map +1 -1
- package/dist/payments/skyfire.js +1 -4
- package/dist/payments/skyfire.js.map +1 -1
- package/dist/payments/types.js +1 -4
- package/dist/payments/types.js.map +1 -1
- package/dist/payments/x402.js +1 -4
- package/dist/payments/x402.js.map +1 -1
- package/dist/prompts/index.js +1 -4
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/prompt_service.js +1 -4
- package/dist/prompts/prompt_service.js.map +1 -1
- package/dist/resources/api_resources.js +1 -4
- package/dist/resources/api_resources.js.map +1 -1
- package/dist/resources/resource_service.js +1 -4
- package/dist/resources/resource_service.js.map +1 -1
- package/dist/resources/widgets.js +1 -4
- package/dist/resources/widgets.js.map +1 -1
- package/dist/server_card.js +1 -4
- package/dist/server_card.js.map +1 -1
- package/dist/state.js +1 -4
- package/dist/state.js.map +1 -1
- package/dist/stdio.js +1 -4
- package/dist/stdio.js.map +1 -1
- package/dist/telemetry.js +1 -4
- package/dist/telemetry.js.map +1 -1
- package/dist/test_kit/cases/actors.cases.js +1 -4
- package/dist/test_kit/cases/actors.cases.js.map +1 -1
- package/dist/test_kit/cases/apps.cases.js +1 -4
- package/dist/test_kit/cases/apps.cases.js.map +1 -1
- package/dist/test_kit/cases/payments.cases.js +1 -4
- package/dist/test_kit/cases/payments.cases.js.map +1 -1
- package/dist/test_kit/cases/registration.cases.js +1 -4
- package/dist/test_kit/cases/registration.cases.js.map +1 -1
- package/dist/test_kit/cases/schedules.cases.js +1 -4
- package/dist/test_kit/cases/schedules.cases.js.map +1 -1
- package/dist/test_kit/cases/storage.cases.js +1 -4
- package/dist/test_kit/cases/storage.cases.js.map +1 -1
- package/dist/test_kit/cases/tasks.cases.js +1 -4
- package/dist/test_kit/cases/tasks.cases.js.map +1 -1
- package/dist/test_kit/cases/tools.cases.js +1 -4
- package/dist/test_kit/cases/tools.cases.js.map +1 -1
- package/dist/test_kit/cases/versions.cases.d.ts +3 -0
- package/dist/test_kit/cases/versions.cases.d.ts.map +1 -0
- package/dist/test_kit/cases/versions.cases.js +509 -0
- package/dist/test_kit/cases/versions.cases.js.map +1 -0
- package/dist/test_kit/helpers.d.ts +1 -1
- package/dist/test_kit/helpers.d.ts.map +1 -1
- package/dist/test_kit/helpers.js +2 -5
- package/dist/test_kit/helpers.js.map +1 -1
- package/dist/test_kit/index.d.ts +1 -0
- package/dist/test_kit/index.d.ts.map +1 -1
- package/dist/test_kit/index.js +4 -4
- package/dist/test_kit/index.js.map +1 -1
- package/dist/test_kit/mcp_client.js +1 -4
- package/dist/test_kit/mcp_client.js.map +1 -1
- package/dist/test_kit/register.js +1 -4
- package/dist/test_kit/register.js.map +1 -1
- package/dist/test_kit/tsconfig.tsbuildinfo +1 -1
- package/dist/test_kit/types.js +1 -4
- package/dist/test_kit/types.js.map +1 -1
- package/dist/tools/actor_input_schema.js +1 -4
- package/dist/tools/actor_input_schema.js.map +1 -1
- package/dist/tools/actor_tool_naming.js +1 -4
- package/dist/tools/actor_tool_naming.js.map +1 -1
- package/dist/tools/actors/actor_definition.js +1 -4
- package/dist/tools/actors/actor_definition.js.map +1 -1
- package/dist/tools/actors/actor_executor.js +1 -4
- package/dist/tools/actors/actor_executor.js.map +1 -1
- package/dist/tools/actors/actor_run_response.js +1 -4
- package/dist/tools/actors/actor_run_response.js.map +1 -1
- package/dist/tools/actors/actor_tool_contract.js +1 -4
- package/dist/tools/actors/actor_tool_contract.js.map +1 -1
- package/dist/tools/actors/actor_tools_factory.js +1 -4
- package/dist/tools/actors/actor_tools_factory.js.map +1 -1
- package/dist/tools/actors/call_actor.js +1 -4
- package/dist/tools/actors/call_actor.js.map +1 -1
- package/dist/tools/actors/delete_actor.js +1 -4
- package/dist/tools/actors/delete_actor.js.map +1 -1
- package/dist/tools/actors/fetch_actor_details.js +1 -4
- package/dist/tools/actors/fetch_actor_details.js.map +1 -1
- package/dist/tools/actors/get_actor_list.js +1 -4
- package/dist/tools/actors/get_actor_list.js.map +1 -1
- package/dist/tools/actors/search_actors.js +1 -4
- package/dist/tools/actors/search_actors.js.map +1 -1
- package/dist/tools/api/apify_api_blocklist.js +1 -4
- package/dist/tools/api/apify_api_blocklist.js.map +1 -1
- package/dist/tools/api/apify_api_details.js +1 -4
- package/dist/tools/api/apify_api_details.js.map +1 -1
- package/dist/tools/api/apify_api_path.js +1 -4
- package/dist/tools/api/apify_api_path.js.map +1 -1
- package/dist/tools/api/apify_api_read.js +1 -4
- package/dist/tools/api/apify_api_read.js.map +1 -1
- package/dist/tools/api/apify_api_request.js +1 -4
- package/dist/tools/api/apify_api_request.js.map +1 -1
- package/dist/tools/api/apify_api_search.js +1 -4
- package/dist/tools/api/apify_api_search.js.map +1 -1
- package/dist/tools/api/apify_api_spec.js +1 -4
- package/dist/tools/api/apify_api_spec.js.map +1 -1
- package/dist/tools/api/apify_api_write.js +1 -4
- package/dist/tools/api/apify_api_write.js.map +1 -1
- package/dist/tools/builds/build_actor.d.ts.map +1 -1
- package/dist/tools/builds/build_actor.js +10 -8
- package/dist/tools/builds/build_actor.js.map +1 -1
- package/dist/tools/builds/build_helpers.js +1 -4
- package/dist/tools/builds/build_helpers.js.map +1 -1
- package/dist/tools/builds/get_actor_build.js +1 -4
- package/dist/tools/builds/get_actor_build.js.map +1 -1
- package/dist/tools/builds/get_actor_build_list.d.ts.map +1 -1
- package/dist/tools/builds/get_actor_build_list.js +6 -7
- package/dist/tools/builds/get_actor_build_list.js.map +1 -1
- package/dist/tools/builds/get_actor_build_log.js +1 -4
- package/dist/tools/builds/get_actor_build_log.js.map +1 -1
- package/dist/tools/dev/report_problem.js +1 -4
- package/dist/tools/dev/report_problem.js.map +1 -1
- package/dist/tools/docs/fetch_apify_docs.js +1 -4
- package/dist/tools/docs/fetch_apify_docs.js.map +1 -1
- package/dist/tools/docs/search_apify_docs.js +1 -4
- package/dist/tools/docs/search_apify_docs.js.map +1 -1
- package/dist/tools/index.js +1 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +5 -6
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/runs/abort_actor_run.js +1 -4
- package/dist/tools/runs/abort_actor_run.js.map +1 -1
- package/dist/tools/runs/get_actor_run.js +1 -4
- package/dist/tools/runs/get_actor_run.js.map +1 -1
- package/dist/tools/runs/get_actor_run_list.d.ts.map +1 -1
- package/dist/tools/runs/get_actor_run_list.js +6 -7
- package/dist/tools/runs/get_actor_run_list.js.map +1 -1
- package/dist/tools/runs/get_actor_run_log.js +1 -4
- package/dist/tools/runs/get_actor_run_log.js.map +1 -1
- package/dist/tools/schedules/create_schedule.js +1 -4
- package/dist/tools/schedules/create_schedule.js.map +1 -1
- package/dist/tools/schedules/delete_schedule.js +1 -4
- package/dist/tools/schedules/delete_schedule.js.map +1 -1
- package/dist/tools/schedules/get_schedule.js +1 -4
- package/dist/tools/schedules/get_schedule.js.map +1 -1
- package/dist/tools/schedules/schedule_helpers.d.ts.map +1 -1
- package/dist/tools/schedules/schedule_helpers.js +3 -5
- package/dist/tools/schedules/schedule_helpers.js.map +1 -1
- package/dist/tools/schedules/update_schedule.js +2 -5
- package/dist/tools/schedules/update_schedule.js.map +1 -1
- package/dist/tools/storage/get_dataset.js +1 -4
- package/dist/tools/storage/get_dataset.js.map +1 -1
- package/dist/tools/storage/get_dataset_items.js +1 -4
- package/dist/tools/storage/get_dataset_items.js.map +1 -1
- package/dist/tools/storage/get_dataset_list.js +1 -4
- package/dist/tools/storage/get_dataset_list.js.map +1 -1
- package/dist/tools/storage/get_dataset_schema.js +1 -4
- package/dist/tools/storage/get_dataset_schema.js.map +1 -1
- package/dist/tools/storage/get_key_value_store.js +1 -4
- package/dist/tools/storage/get_key_value_store.js.map +1 -1
- package/dist/tools/storage/get_key_value_store_keys.js +1 -4
- package/dist/tools/storage/get_key_value_store_keys.js.map +1 -1
- package/dist/tools/storage/get_key_value_store_list.js +1 -4
- package/dist/tools/storage/get_key_value_store_list.js.map +1 -1
- package/dist/tools/storage/get_key_value_store_record.js +1 -4
- package/dist/tools/storage/get_key_value_store_record.js.map +1 -1
- package/dist/tools/storage/storage_helpers.js +1 -4
- package/dist/tools/storage/storage_helpers.js.map +1 -1
- package/dist/tools/structured_output_schemas.d.ts +180 -0
- package/dist/tools/structured_output_schemas.d.ts.map +1 -1
- package/dist/tools/structured_output_schemas.js +60 -4
- package/dist/tools/structured_output_schemas.js.map +1 -1
- package/dist/tools/tasks/create_actor_task.d.ts.map +1 -1
- package/dist/tools/tasks/create_actor_task.js +3 -5
- package/dist/tools/tasks/create_actor_task.js.map +1 -1
- package/dist/tools/tasks/get_actor_task.js +1 -4
- package/dist/tools/tasks/get_actor_task.js.map +1 -1
- package/dist/tools/tasks/publish_actor_task.js +1 -4
- package/dist/tools/tasks/publish_actor_task.js.map +1 -1
- package/dist/tools/tasks/task_helpers.d.ts +0 -16
- package/dist/tools/tasks/task_helpers.d.ts.map +1 -1
- package/dist/tools/tasks/task_helpers.js +2 -35
- package/dist/tools/tasks/task_helpers.js.map +1 -1
- package/dist/tools/tasks/unpublish_actor_task.js +1 -4
- package/dist/tools/tasks/unpublish_actor_task.js.map +1 -1
- package/dist/tools/tasks/update_actor_task.d.ts.map +1 -1
- package/dist/tools/tasks/update_actor_task.js +3 -5
- package/dist/tools/tasks/update_actor_task.js.map +1 -1
- package/dist/tools/versions/create_actor.d.ts +11 -0
- package/dist/tools/versions/create_actor.d.ts.map +1 -0
- package/dist/tools/versions/create_actor.js +171 -0
- package/dist/tools/versions/create_actor.js.map +1 -0
- package/dist/tools/versions/get_actor_version.d.ts.map +1 -0
- package/dist/tools/{source → versions}/get_actor_version.js +6 -92
- package/dist/tools/versions/get_actor_version.js.map +1 -0
- package/dist/tools/{source → versions}/source_files.d.ts +6 -2
- package/dist/tools/versions/source_files.d.ts.map +1 -0
- package/dist/tools/{source → versions}/source_files.js +8 -11
- package/dist/tools/versions/source_files.js.map +1 -0
- package/dist/tools/versions/source_helpers.d.ts +107 -0
- package/dist/tools/versions/source_helpers.d.ts.map +1 -0
- package/dist/tools/versions/source_helpers.js +350 -0
- package/dist/tools/versions/source_helpers.js.map +1 -0
- package/dist/tools/versions/update_actor_version.d.ts +15 -0
- package/dist/tools/versions/update_actor_version.d.ts.map +1 -0
- package/dist/tools/versions/update_actor_version.js +447 -0
- package/dist/tools/versions/update_actor_version.js.map +1 -0
- package/dist/tools/widgets/call_actor_widget.js +1 -4
- package/dist/tools/widgets/call_actor_widget.js.map +1 -1
- package/dist/tools/widgets/fetch_actor_details_widget.js +1 -4
- package/dist/tools/widgets/fetch_actor_details_widget.js.map +1 -1
- package/dist/tools/widgets/get_actor_run_widget.js +1 -4
- package/dist/tools/widgets/get_actor_run_widget.js.map +1 -1
- package/dist/tools/widgets/search_actors_widget.js +1 -4
- package/dist/tools/widgets/search_actors_widget.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.js +1 -4
- package/dist/types.js.map +1 -1
- package/dist/utils/actor.js +1 -4
- package/dist/utils/actor.js.map +1 -1
- package/dist/utils/actor_card.js +1 -4
- package/dist/utils/actor_card.js.map +1 -1
- package/dist/utils/actor_details.js +1 -4
- package/dist/utils/actor_details.js.map +1 -1
- package/dist/utils/actor_search.js +1 -4
- package/dist/utils/actor_search.js.map +1 -1
- package/dist/utils/ajv.js +1 -4
- package/dist/utils/ajv.js.map +1 -1
- package/dist/utils/apify_docs.js +1 -4
- package/dist/utils/apify_docs.js.map +1 -1
- package/dist/utils/apify_errors.js +1 -4
- package/dist/utils/apify_errors.js.map +1 -1
- package/dist/utils/apify_properties.js +1 -4
- package/dist/utils/apify_properties.js.map +1 -1
- package/dist/utils/apify_resource_id.d.ts +18 -0
- package/dist/utils/apify_resource_id.d.ts.map +1 -0
- package/dist/utils/apify_resource_id.js +33 -0
- package/dist/utils/apify_resource_id.js.map +1 -0
- package/dist/utils/auth.js +1 -4
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/console_link.js +1 -4
- package/dist/utils/console_link.js.map +1 -1
- package/dist/utils/encode_text.js +1 -4
- package/dist/utils/encode_text.js.map +1 -1
- package/dist/utils/generic.js +1 -4
- package/dist/utils/generic.js.map +1 -1
- package/dist/utils/logging.js +1 -4
- package/dist/utils/logging.js.map +1 -1
- package/dist/utils/mcp.js +1 -4
- package/dist/utils/mcp.js.map +1 -1
- package/dist/utils/mcp_clients.js +1 -4
- package/dist/utils/mcp_clients.js.map +1 -1
- package/dist/utils/payment_errors.js +1 -4
- package/dist/utils/payment_errors.js.map +1 -1
- package/dist/utils/pricing_info.js +1 -4
- package/dist/utils/pricing_info.js.map +1 -1
- package/dist/utils/progress.js +1 -4
- package/dist/utils/progress.js.map +1 -1
- package/dist/utils/schema_generation.js +1 -4
- package/dist/utils/schema_generation.js.map +1 -1
- package/dist/utils/server-instructions/index.js +1 -4
- package/dist/utils/server-instructions/index.js.map +1 -1
- package/dist/utils/server_mode.js +1 -4
- package/dist/utils/server_mode.js.map +1 -1
- package/dist/utils/tool_categories_helpers.js +1 -4
- package/dist/utils/tool_categories_helpers.js.map +1 -1
- package/dist/utils/tool_status.js +1 -4
- package/dist/utils/tool_status.js.map +1 -1
- package/dist/utils/tools.js +1 -4
- package/dist/utils/tools.js.map +1 -1
- package/dist/utils/tools_loader.d.ts +2 -1
- package/dist/utils/tools_loader.d.ts.map +1 -1
- package/dist/utils/tools_loader.js +4 -6
- package/dist/utils/tools_loader.js.map +1 -1
- package/dist/utils/ttl_lru.js +1 -4
- package/dist/utils/ttl_lru.js.map +1 -1
- package/dist/utils/userid_cache.js +1 -4
- package/dist/utils/userid_cache.js.map +1 -1
- package/dist/utils/version.js +1 -4
- package/dist/utils/version.js.map +1 -1
- package/dist/web/dist/actor-run-widget.js +0 -2
- package/dist/web/dist/search-actors-widget.js +0 -2
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/server.json +1 -1
- package/dist/tools/source/get_actor_version.d.ts.map +0 -1
- package/dist/tools/source/get_actor_version.js.map +0 -1
- package/dist/tools/source/source_files.d.ts.map +0 -1
- package/dist/tools/source/source_files.js.map +0 -1
- /package/dist/tools/{source → versions}/get_actor_version.d.ts +0 -0
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { ActorSourceType } from 'apify-client';
|
|
3
|
+
import { expect } from 'vitest';
|
|
4
|
+
import { validateStructuredOutputForTool, withClient } from '../helpers.js';
|
|
5
|
+
/**
|
|
6
|
+
* create-actor and update-actor-version against the live API. Each case reads what the platform stored with the raw
|
|
7
|
+
* client, so it checks the stored source, not only what the tool reported.
|
|
8
|
+
*
|
|
9
|
+
* Names are `test-source-<random>-<purpose>`, never `eval-`, so the eval harness's `eval-*` sweep on the same account
|
|
10
|
+
* never deletes an Actor mid-case. No case sets autoBuild, since builds cost time and money, and the build of the one
|
|
11
|
+
* build-actor call is aborted in `finally`. Every case deletes its Actor by name in `finally`, so an Actor a failed
|
|
12
|
+
* call left behind goes too; apify-client swallows the 404 when there is none.
|
|
13
|
+
*
|
|
14
|
+
* Tool names are hardcoded, not read from `HELPER_TOOLS`, so a rename fails these tests (CONTRIBUTING.md).
|
|
15
|
+
*/
|
|
16
|
+
/** A 1x1 PNG. */
|
|
17
|
+
const PNG_BASE64 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==';
|
|
18
|
+
/** Bytes that are not UTF-8, so the tools return them as base64 whatever the path. */
|
|
19
|
+
const NON_UTF8_BYTES = Buffer.from([0x00, 0xff, 0x80, 0x0a]);
|
|
20
|
+
/** Well-formed as a hash or a revision, and matching none in these cases. */
|
|
21
|
+
const WRONG_HASH = '0000000000000000';
|
|
22
|
+
/** Unique per call: three transport dimensions register each case, and CI runs PRs concurrently in one account. */
|
|
23
|
+
function buildUniqueActorName(purpose) {
|
|
24
|
+
return `test-source-${Math.random().toString(36).slice(2, 8)}-${purpose}`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The `username~name` selector of the Actor this account gets under `name`, resolved before the Actor exists, so the
|
|
28
|
+
* cleanup works even when the call that creates the Actor fails after the platform stored it.
|
|
29
|
+
*/
|
|
30
|
+
async function fetchOwnActorSelector(api, name) {
|
|
31
|
+
const { username } = await api.user().get();
|
|
32
|
+
return `${username}~${name}`;
|
|
33
|
+
}
|
|
34
|
+
/** The hash the source tools list: the first 16 hex characters of the SHA-256 of the bytes. */
|
|
35
|
+
function getFileHash(data) {
|
|
36
|
+
return createHash('sha256').update(data).digest('hex').slice(0, 16);
|
|
37
|
+
}
|
|
38
|
+
/** The listing entry get-actor-version gives a file with these bytes; a string counts as its UTF-8 bytes. */
|
|
39
|
+
function buildFileListing(path, data) {
|
|
40
|
+
const bytes = Buffer.from(data);
|
|
41
|
+
return { path, sizeBytes: bytes.length, hash: getFileHash(bytes) };
|
|
42
|
+
}
|
|
43
|
+
async function callTool(client, name, args) {
|
|
44
|
+
return (await client.callTool({ name, arguments: args }));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Fails the case on a tool error, checks the result against the tool's output schema and against its JSON text, which
|
|
48
|
+
* a client that reads only the text gets, and returns the structured content.
|
|
49
|
+
*/
|
|
50
|
+
function expectToolSuccess(result, toolName) {
|
|
51
|
+
var _a, _b, _c;
|
|
52
|
+
expect(result.isError, JSON.stringify(result.content)).not.toBe(true);
|
|
53
|
+
validateStructuredOutputForTool(result, toolName, 'default');
|
|
54
|
+
expect(JSON.parse((_c = (_b = (_a = result.content) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text) !== null && _c !== void 0 ? _c : 'null')).toEqual(result.structuredContent);
|
|
55
|
+
return result.structuredContent;
|
|
56
|
+
}
|
|
57
|
+
/** The one text of a failed call, which carries no structured content. */
|
|
58
|
+
function expectToolFailure(result) {
|
|
59
|
+
var _a, _b, _c;
|
|
60
|
+
expect(result.isError).toBe(true);
|
|
61
|
+
expect(result.structuredContent).toBeUndefined();
|
|
62
|
+
expect(result.content).toHaveLength(1);
|
|
63
|
+
return (_c = (_b = (_a = result.content) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text) !== null && _c !== void 0 ? _c : '';
|
|
64
|
+
}
|
|
65
|
+
async function fetchStoredActor(api, actorSelector) {
|
|
66
|
+
const actor = await api.actor(actorSelector).get();
|
|
67
|
+
expect(actor, `Actor ${actorSelector}`).toBeDefined();
|
|
68
|
+
return actor;
|
|
69
|
+
}
|
|
70
|
+
/** What a call that writes nothing leaves as it was: the versions, and modifiedAt, which every version write sets. */
|
|
71
|
+
function extractWrittenState({ modifiedAt, versions }) {
|
|
72
|
+
return { modifiedAt, versions };
|
|
73
|
+
}
|
|
74
|
+
/** The stored entries sorted by name; the order the platform keeps them in is not part of the contract. */
|
|
75
|
+
function extractSortedSourceFiles(version) {
|
|
76
|
+
var _a;
|
|
77
|
+
return [...((_a = version.sourceFiles) !== null && _a !== void 0 ? _a : [])].sort((a, b) => (a.name < b.name ? -1 : 1));
|
|
78
|
+
}
|
|
79
|
+
async function fetchBuildCount(api, actorId) {
|
|
80
|
+
const { total } = await api.actor(actorId).builds().list();
|
|
81
|
+
return total;
|
|
82
|
+
}
|
|
83
|
+
export const versionsCases = [
|
|
84
|
+
{
|
|
85
|
+
name: 'create-actor creates a private Actor whose stored files get-actor-version reads back with the same hashes and revision',
|
|
86
|
+
isDeploymentTest: false,
|
|
87
|
+
run: withClient({ tools: ['versions', 'build-actor'] }, async (client, ctx) => {
|
|
88
|
+
var _a, _b, _c, _d;
|
|
89
|
+
const api = ctx.createApifyClient();
|
|
90
|
+
const name = buildUniqueActorName('create');
|
|
91
|
+
const selector = await fetchOwnActorSelector(api, name);
|
|
92
|
+
// No name, which the platform adds, so the stored file differs from the one sent.
|
|
93
|
+
const actorJson = '{\n "actorSpecification": 1,\n "version": "0.0"\n}\n';
|
|
94
|
+
const mainJs = 'import { greet } from "./lib/greet.js";\n\nconsole.log(greet("Grüße 🌍"));\n';
|
|
95
|
+
const greetJs = 'export const greet = (who) => "Hello, " + who;\n';
|
|
96
|
+
let buildId;
|
|
97
|
+
try {
|
|
98
|
+
const createResult = await callTool(client, 'create-actor', {
|
|
99
|
+
name,
|
|
100
|
+
title: 'Source tools test',
|
|
101
|
+
description: 'Created by an integration test of create-actor.',
|
|
102
|
+
files: [
|
|
103
|
+
{ path: '.actor/actor.json', content: actorJson },
|
|
104
|
+
{ path: 'src/main.js', content: mainJs },
|
|
105
|
+
{ path: 'src/lib/greet.js', content: greetJs },
|
|
106
|
+
// Binary by its extension, so base64 without an encoding.
|
|
107
|
+
{ path: 'assets/logo.png', content: PNG_BASE64 },
|
|
108
|
+
{ path: 'assets/raw-bytes', content: NON_UTF8_BYTES.toString('base64'), encoding: 'base64' },
|
|
109
|
+
],
|
|
110
|
+
});
|
|
111
|
+
const created = expectToolSuccess(createResult, 'create-actor');
|
|
112
|
+
const stored = await fetchStoredActor(api, selector);
|
|
113
|
+
const fullName = `${stored.username}/${name}`;
|
|
114
|
+
expect(stored).toMatchObject({
|
|
115
|
+
id: created.actorId,
|
|
116
|
+
name,
|
|
117
|
+
title: 'Source tools test',
|
|
118
|
+
description: 'Created by an integration test of create-actor.',
|
|
119
|
+
isPublic: false,
|
|
120
|
+
});
|
|
121
|
+
expect(stored.versions).toHaveLength(1);
|
|
122
|
+
expect(stored.versions[0]).toMatchObject({
|
|
123
|
+
versionNumber: '0.0',
|
|
124
|
+
buildTag: 'latest',
|
|
125
|
+
sourceType: 'SOURCE_FILES',
|
|
126
|
+
envVars: [],
|
|
127
|
+
});
|
|
128
|
+
const storedFiles = extractSortedSourceFiles(stored.versions[0]);
|
|
129
|
+
const storedActorJson = storedFiles[0].content;
|
|
130
|
+
expect(JSON.parse(storedActorJson)).toEqual({ actorSpecification: 1, version: '0.0', name });
|
|
131
|
+
expect(storedFiles).toEqual([
|
|
132
|
+
{ name: '.actor/actor.json', format: 'TEXT', content: storedActorJson },
|
|
133
|
+
{ name: 'assets/logo.png', format: 'BASE64', content: PNG_BASE64 },
|
|
134
|
+
{ name: 'assets/raw-bytes', format: 'BASE64', content: NON_UTF8_BYTES.toString('base64') },
|
|
135
|
+
{ name: 'src/lib/greet.js', format: 'TEXT', content: greetJs },
|
|
136
|
+
{ name: 'src/main.js', format: 'TEXT', content: mainJs },
|
|
137
|
+
]);
|
|
138
|
+
// The listing has the stored bytes of actor.json, not the bytes sent.
|
|
139
|
+
const expectedFiles = [
|
|
140
|
+
buildFileListing('.actor/actor.json', storedActorJson),
|
|
141
|
+
buildFileListing('assets/logo.png', Buffer.from(PNG_BASE64, 'base64')),
|
|
142
|
+
buildFileListing('assets/raw-bytes', NON_UTF8_BYTES),
|
|
143
|
+
buildFileListing('src/lib/greet.js', greetJs),
|
|
144
|
+
buildFileListing('src/main.js', mainJs),
|
|
145
|
+
];
|
|
146
|
+
expect(expectedFiles[0].hash).not.toBe(getFileHash(actorJson));
|
|
147
|
+
expect(created).toEqual({
|
|
148
|
+
actorId: stored.id,
|
|
149
|
+
fullName,
|
|
150
|
+
versionNumber: '0.0',
|
|
151
|
+
revision: expect.stringMatching(/^[0-9a-f]{16}$/),
|
|
152
|
+
files: expectedFiles,
|
|
153
|
+
});
|
|
154
|
+
expect((_b = (_a = createResult.content) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.text).toBe(`Created the private Actor ${fullName}.\nNo build was started; runs use these files only after the version is built.`);
|
|
155
|
+
const read = expectToolSuccess(await callTool(client, 'get-actor-version', {
|
|
156
|
+
actor: created.actorId,
|
|
157
|
+
paths: expectedFiles.map(({ path }) => path),
|
|
158
|
+
}), 'get-actor-version');
|
|
159
|
+
expect(read).toEqual({
|
|
160
|
+
actorId: created.actorId,
|
|
161
|
+
fullName,
|
|
162
|
+
versionNumber: '0.0',
|
|
163
|
+
revision: created.revision,
|
|
164
|
+
files: created.files,
|
|
165
|
+
contents: [
|
|
166
|
+
{ path: '.actor/actor.json', content: storedActorJson, encoding: 'utf8' },
|
|
167
|
+
{ path: 'assets/logo.png', content: PNG_BASE64, encoding: 'base64' },
|
|
168
|
+
{ path: 'assets/raw-bytes', content: NON_UTF8_BYTES.toString('base64'), encoding: 'base64' },
|
|
169
|
+
{ path: 'src/lib/greet.js', content: greetJs, encoding: 'utf8' },
|
|
170
|
+
{ path: 'src/main.js', content: mainJs, encoding: 'utf8' },
|
|
171
|
+
],
|
|
172
|
+
});
|
|
173
|
+
// A name without the username is resolved against the token's own Actors.
|
|
174
|
+
const readByName = expectToolSuccess(await callTool(client, 'get-actor-version', { actor: name }), 'get-actor-version');
|
|
175
|
+
expect(readByName).toMatchObject({ actorId: created.actorId, fullName, revision: created.revision });
|
|
176
|
+
// autoBuild defaults to false.
|
|
177
|
+
expect(await fetchBuildCount(api, created.actorId)).toBe(0);
|
|
178
|
+
// build-actor resolves a name without the username the same way.
|
|
179
|
+
const buildResult = await callTool(client, 'build-actor', { actor: name, waitSecs: 0 });
|
|
180
|
+
// Taken before the checks, so the build is aborted when one of them fails.
|
|
181
|
+
buildId = (_d = (_c = buildResult.structuredContent) === null || _c === void 0 ? void 0 : _c.build) === null || _d === void 0 ? void 0 : _d.id;
|
|
182
|
+
const { build } = expectToolSuccess(buildResult, 'build-actor');
|
|
183
|
+
expect(build.actorId).toBe(created.actorId);
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
// A failed abort is only logged, so it cannot hide the error of a failed check, and the Actor is still
|
|
187
|
+
// deleted.
|
|
188
|
+
if (buildId !== undefined) {
|
|
189
|
+
await api
|
|
190
|
+
.build(buildId)
|
|
191
|
+
.abort()
|
|
192
|
+
.catch((error) => console.error(`Failed to abort build ${buildId}:`, error));
|
|
193
|
+
}
|
|
194
|
+
await api.actor(selector).delete();
|
|
195
|
+
}
|
|
196
|
+
}),
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: 'update-actor-version creates, replaces, edits, and deletes files in one call and leaves the other files, env vars, and build tag as they were',
|
|
200
|
+
isDeploymentTest: false,
|
|
201
|
+
run: withClient({ tools: ['versions'] }, async (client, ctx) => {
|
|
202
|
+
var _a, _b;
|
|
203
|
+
const api = ctx.createApifyClient();
|
|
204
|
+
const name = buildUniqueActorName('update');
|
|
205
|
+
const selector = await fetchOwnActorSelector(api, name);
|
|
206
|
+
const readme = '# Source tools test\n';
|
|
207
|
+
const utilJs = 'export const double = (value) => value * 2;\n';
|
|
208
|
+
const mainTs = 'export const greeting = "one";\n';
|
|
209
|
+
const oldJs = 'export const removed = true;\n';
|
|
210
|
+
const zJs = 'z();\n';
|
|
211
|
+
const newJs = 'export const added = true;\n';
|
|
212
|
+
const newReadme = '# Source tools test\n\nReplaced by update-actor-version.\n';
|
|
213
|
+
const editedMainTs = 'export const greeting = "two";\n';
|
|
214
|
+
try {
|
|
215
|
+
const seeded = await api.actors().create({
|
|
216
|
+
name,
|
|
217
|
+
versions: [
|
|
218
|
+
{
|
|
219
|
+
versionNumber: '0.0',
|
|
220
|
+
buildTag: 'beta',
|
|
221
|
+
sourceType: ActorSourceType.SourceFiles,
|
|
222
|
+
envVars: [
|
|
223
|
+
{ name: 'MODE', value: 'test' },
|
|
224
|
+
{ name: 'SECRET_MODE', value: 'hidden', isSecret: true },
|
|
225
|
+
],
|
|
226
|
+
sourceFiles: [
|
|
227
|
+
{ name: 'README.md', format: 'TEXT', content: readme },
|
|
228
|
+
{ name: 'assets/logo.png', format: 'BASE64', content: PNG_BASE64 },
|
|
229
|
+
{ name: 'src/lib/util.js', format: 'TEXT', content: utilJs },
|
|
230
|
+
// UTF-8 text stored as BASE64, as `apify push` stores a .ts file.
|
|
231
|
+
{
|
|
232
|
+
name: 'src/main.ts',
|
|
233
|
+
format: 'BASE64',
|
|
234
|
+
content: Buffer.from(mainTs).toString('base64'),
|
|
235
|
+
},
|
|
236
|
+
{ name: 'src/old.js', format: 'TEXT', content: oldJs },
|
|
237
|
+
// No format, which the build worker reads as TEXT, and no content, which it reads as
|
|
238
|
+
// empty; the casts drop what apify-client's type requires.
|
|
239
|
+
{ name: 'src/z.js', content: zJs },
|
|
240
|
+
{ name: 'src/blank.js', format: 'TEXT' },
|
|
241
|
+
// An empty folder as Console keeps it; the cast adds what apify-client's type leaves out.
|
|
242
|
+
{ name: 'storage', folder: true },
|
|
243
|
+
],
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
});
|
|
247
|
+
const fullName = `${seeded.username}/${name}`;
|
|
248
|
+
// The selector with a slash, which apify-client turns into the API's tilde.
|
|
249
|
+
const actorArg = selector.replace('~', '/');
|
|
250
|
+
const before = expectToolSuccess(await callTool(client, 'get-actor-version', { actor: actorArg, paths: ['src/main.ts'] }), 'get-actor-version');
|
|
251
|
+
expect(before.files).toEqual([
|
|
252
|
+
buildFileListing('README.md', readme),
|
|
253
|
+
buildFileListing('assets/logo.png', Buffer.from(PNG_BASE64, 'base64')),
|
|
254
|
+
buildFileListing('src/blank.js', ''),
|
|
255
|
+
buildFileListing('src/lib/util.js', utilJs),
|
|
256
|
+
buildFileListing('src/main.ts', mainTs),
|
|
257
|
+
buildFileListing('src/old.js', oldJs),
|
|
258
|
+
buildFileListing('src/z.js', zJs),
|
|
259
|
+
]);
|
|
260
|
+
expect(before.contents).toEqual([{ path: 'src/main.ts', content: mainTs, encoding: 'utf8' }]);
|
|
261
|
+
const storedBefore = await fetchStoredActor(api, seeded.id);
|
|
262
|
+
expect(storedBefore.versions[0].envVars).toEqual([
|
|
263
|
+
expect.objectContaining({ name: 'MODE', value: 'test' }),
|
|
264
|
+
expect.objectContaining({ name: 'SECRET_MODE', isSecret: true }),
|
|
265
|
+
]);
|
|
266
|
+
const hashesBefore = new Map(before.files.map(({ path, hash }) => [path, hash]));
|
|
267
|
+
const updateArgs = {
|
|
268
|
+
actor: actorArg,
|
|
269
|
+
expectedRevision: before.revision,
|
|
270
|
+
operations: [
|
|
271
|
+
{ type: 'write', path: 'src/new.js', content: newJs },
|
|
272
|
+
{
|
|
273
|
+
type: 'write',
|
|
274
|
+
path: 'README.md',
|
|
275
|
+
content: newReadme,
|
|
276
|
+
expectedHash: hashesBefore.get('README.md'),
|
|
277
|
+
},
|
|
278
|
+
{ type: 'edit', path: 'src/main.ts', edits: [{ oldText: '"one"', newText: '"two"' }] },
|
|
279
|
+
{ type: 'delete', path: 'src/old.js', expectedHash: hashesBefore.get('src/old.js') },
|
|
280
|
+
],
|
|
281
|
+
};
|
|
282
|
+
const updateResult = await callTool(client, 'update-actor-version', updateArgs);
|
|
283
|
+
const updated = expectToolSuccess(updateResult, 'update-actor-version');
|
|
284
|
+
const after = expectToolSuccess(await callTool(client, 'get-actor-version', {
|
|
285
|
+
actor: actorArg,
|
|
286
|
+
paths: ['src/main.ts', 'src/new.js'],
|
|
287
|
+
}), 'get-actor-version');
|
|
288
|
+
// The revision update-actor-version reported is the one the next read gets.
|
|
289
|
+
expect(updated).toEqual({
|
|
290
|
+
revision: after.revision,
|
|
291
|
+
changed: true,
|
|
292
|
+
changes: [
|
|
293
|
+
{ path: 'README.md', action: 'updated', hash: getFileHash(newReadme) },
|
|
294
|
+
{ path: 'src/main.ts', action: 'updated', hash: getFileHash(editedMainTs) },
|
|
295
|
+
{ path: 'src/new.js', action: 'created', hash: getFileHash(newJs) },
|
|
296
|
+
{ path: 'src/old.js', action: 'deleted' },
|
|
297
|
+
],
|
|
298
|
+
});
|
|
299
|
+
expect(updated.revision).not.toBe(before.revision);
|
|
300
|
+
expect((_b = (_a = updateResult.content) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.text).toBe(`Updated version 0.0 of ${fullName}.\nNo build was started; runs use these files only after the version is built.`);
|
|
301
|
+
expect(after.files).toEqual([
|
|
302
|
+
buildFileListing('README.md', newReadme),
|
|
303
|
+
buildFileListing('assets/logo.png', Buffer.from(PNG_BASE64, 'base64')),
|
|
304
|
+
buildFileListing('src/blank.js', ''),
|
|
305
|
+
buildFileListing('src/lib/util.js', utilJs),
|
|
306
|
+
buildFileListing('src/main.ts', editedMainTs),
|
|
307
|
+
buildFileListing('src/new.js', newJs),
|
|
308
|
+
buildFileListing('src/z.js', zJs),
|
|
309
|
+
]);
|
|
310
|
+
expect(after.contents).toEqual([
|
|
311
|
+
{ path: 'src/main.ts', content: editedMainTs, encoding: 'utf8' },
|
|
312
|
+
{ path: 'src/new.js', content: newJs, encoding: 'utf8' },
|
|
313
|
+
]);
|
|
314
|
+
// Untouched entries, the folder and the ones without format or content included, are stored as they
|
|
315
|
+
// were; the edited file stays BASE64.
|
|
316
|
+
const storedAfter = await fetchStoredActor(api, seeded.id);
|
|
317
|
+
const entriesBefore = new Map(extractSortedSourceFiles(storedBefore.versions[0]).map((entry) => [entry.name, entry]));
|
|
318
|
+
expect(entriesBefore.get('storage')).toMatchObject({ name: 'storage', folder: true });
|
|
319
|
+
expect(entriesBefore.get('src/z.js')).toEqual({ name: 'src/z.js', content: zJs });
|
|
320
|
+
expect(entriesBefore.get('src/blank.js')).toEqual({ name: 'src/blank.js', format: 'TEXT' });
|
|
321
|
+
expect(extractSortedSourceFiles(storedAfter.versions[0])).toEqual([
|
|
322
|
+
expect.objectContaining({ name: 'README.md', format: 'TEXT', content: newReadme }),
|
|
323
|
+
entriesBefore.get('assets/logo.png'),
|
|
324
|
+
entriesBefore.get('src/blank.js'),
|
|
325
|
+
entriesBefore.get('src/lib/util.js'),
|
|
326
|
+
expect.objectContaining({
|
|
327
|
+
name: 'src/main.ts',
|
|
328
|
+
format: 'BASE64',
|
|
329
|
+
content: Buffer.from(editedMainTs).toString('base64'),
|
|
330
|
+
}),
|
|
331
|
+
expect.objectContaining({ name: 'src/new.js', format: 'TEXT', content: newJs }),
|
|
332
|
+
entriesBefore.get('src/z.js'),
|
|
333
|
+
entriesBefore.get('storage'),
|
|
334
|
+
]);
|
|
335
|
+
// Every other field of the version, env vars and build tag included, is unchanged.
|
|
336
|
+
expect({ ...storedAfter.versions[0], sourceFiles: undefined }).toEqual({
|
|
337
|
+
...storedBefore.versions[0],
|
|
338
|
+
sourceFiles: undefined,
|
|
339
|
+
});
|
|
340
|
+
expect(storedAfter.versions[0].buildTag).toBe('beta');
|
|
341
|
+
// A retry of the same call fails on expectedRevision instead of applying the operations twice.
|
|
342
|
+
const retryText = expectToolFailure(await callTool(client, 'update-actor-version', updateArgs));
|
|
343
|
+
expect(retryText).toBe('Nothing was written: expectedRevision failed with REVISION_MISMATCH. ' +
|
|
344
|
+
`The version's revision is ${updated.revision}, not ${before.revision}.`);
|
|
345
|
+
expect(extractWrittenState(await fetchStoredActor(api, seeded.id))).toEqual(extractWrittenState(storedAfter));
|
|
346
|
+
expect(await fetchBuildCount(api, seeded.id)).toBe(0);
|
|
347
|
+
}
|
|
348
|
+
finally {
|
|
349
|
+
await api.actor(selector).delete();
|
|
350
|
+
}
|
|
351
|
+
}),
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
name: 'update-actor-version fails a write, an edit, or a revision that does not match with its reason code and writes nothing',
|
|
355
|
+
isDeploymentTest: false,
|
|
356
|
+
run: withClient({ tools: ['versions'] }, async (client, ctx) => {
|
|
357
|
+
var _a;
|
|
358
|
+
const api = ctx.createApifyClient();
|
|
359
|
+
const name = buildUniqueActorName('conflicts');
|
|
360
|
+
const selector = await fetchOwnActorSelector(api, name);
|
|
361
|
+
const mainJs = 'console.log("one");\n';
|
|
362
|
+
try {
|
|
363
|
+
const seeded = await api.actors().create({
|
|
364
|
+
name,
|
|
365
|
+
versions: [
|
|
366
|
+
{
|
|
367
|
+
versionNumber: '0.0',
|
|
368
|
+
sourceType: ActorSourceType.SourceFiles,
|
|
369
|
+
sourceFiles: [
|
|
370
|
+
{ name: 'README.md', format: 'TEXT', content: '# Conflicts\n' },
|
|
371
|
+
{ name: 'src/main.js', format: 'TEXT', content: mainJs },
|
|
372
|
+
],
|
|
373
|
+
},
|
|
374
|
+
],
|
|
375
|
+
});
|
|
376
|
+
const listing = expectToolSuccess(await callTool(client, 'get-actor-version', { actor: seeded.id }), 'get-actor-version');
|
|
377
|
+
const mainHash = getFileHash(mainJs);
|
|
378
|
+
expect((_a = listing.files.find(({ path }) => path === 'src/main.js')) === null || _a === void 0 ? void 0 : _a.hash).toBe(mainHash);
|
|
379
|
+
const storedBefore = extractWrittenState(await fetchStoredActor(api, seeded.id));
|
|
380
|
+
// Each failing operation follows a write that succeeds alone, which must not be saved either.
|
|
381
|
+
const addFile = { type: 'write', path: 'src/added.js', content: 'export {};\n' };
|
|
382
|
+
const conflicts = [
|
|
383
|
+
{
|
|
384
|
+
operations: [addFile, { type: 'write', path: 'src/main.js', content: 'console.log("x");\n' }],
|
|
385
|
+
text: 'Nothing was written: operations[1] (write src/main.js) failed with FILE_EXISTS. ' +
|
|
386
|
+
`src/main.js exists with hash ${mainHash}; a write with that hash as expectedHash replaces it.`,
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
operations: [
|
|
390
|
+
addFile,
|
|
391
|
+
{
|
|
392
|
+
type: 'write',
|
|
393
|
+
path: 'src/main.js',
|
|
394
|
+
content: 'console.log("x");\n',
|
|
395
|
+
expectedHash: WRONG_HASH,
|
|
396
|
+
},
|
|
397
|
+
],
|
|
398
|
+
text: 'Nothing was written: operations[1] (write src/main.js) failed with HASH_MISMATCH. ' +
|
|
399
|
+
`src/main.js has hash ${mainHash}, not ${WRONG_HASH}.`,
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
// The second edit runs on the text the first left, which no longer has "one".
|
|
403
|
+
operations: [
|
|
404
|
+
addFile,
|
|
405
|
+
{
|
|
406
|
+
type: 'edit',
|
|
407
|
+
path: 'src/main.js',
|
|
408
|
+
edits: [
|
|
409
|
+
{ oldText: '"one"', newText: '"two"' },
|
|
410
|
+
{ oldText: '"one"', newText: '"three"' },
|
|
411
|
+
],
|
|
412
|
+
},
|
|
413
|
+
],
|
|
414
|
+
text: 'Nothing was written: operations[1] (edit src/main.js) failed with NO_MATCH. ' +
|
|
415
|
+
'oldText of edits[1] is not in the file.',
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
expectedRevision: WRONG_HASH,
|
|
419
|
+
operations: [addFile],
|
|
420
|
+
text: 'Nothing was written: expectedRevision failed with REVISION_MISMATCH. ' +
|
|
421
|
+
`The version's revision is ${listing.revision}, not ${WRONG_HASH}.`,
|
|
422
|
+
},
|
|
423
|
+
];
|
|
424
|
+
for (const { text, ...args } of conflicts) {
|
|
425
|
+
const result = await callTool(client, 'update-actor-version', { actor: seeded.id, ...args });
|
|
426
|
+
expect(expectToolFailure(result)).toBe(text);
|
|
427
|
+
expect(extractWrittenState(await fetchStoredActor(api, seeded.id))).toEqual(storedBefore);
|
|
428
|
+
}
|
|
429
|
+
const reread = expectToolSuccess(await callTool(client, 'get-actor-version', { actor: seeded.id }), 'get-actor-version');
|
|
430
|
+
expect(reread.revision).toBe(listing.revision);
|
|
431
|
+
}
|
|
432
|
+
finally {
|
|
433
|
+
await api.actor(selector).delete();
|
|
434
|
+
}
|
|
435
|
+
}),
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
name: 'update-actor-version refuses a version stored in a Git repository, names the repository without its credentials, and changes nothing',
|
|
439
|
+
isDeploymentTest: false,
|
|
440
|
+
run: withClient({ tools: ['versions'] }, async (client, ctx) => {
|
|
441
|
+
const api = ctx.createApifyClient();
|
|
442
|
+
const name = buildUniqueActorName('git');
|
|
443
|
+
const selector = await fetchOwnActorSelector(api, name);
|
|
444
|
+
// A placeholder user and password, which the API returns to the owner and the refusal must not repeat.
|
|
445
|
+
const gitRepoUrl = 'https://ci:not-a-secret@github.com/apify/actor-templates.git#master';
|
|
446
|
+
try {
|
|
447
|
+
const seeded = await api.actors().create({
|
|
448
|
+
name,
|
|
449
|
+
versions: [{ versionNumber: '0.0', sourceType: ActorSourceType.GitRepo, gitRepoUrl }],
|
|
450
|
+
});
|
|
451
|
+
const storedBefore = await fetchStoredActor(api, seeded.id);
|
|
452
|
+
expect(storedBefore.versions).toEqual([
|
|
453
|
+
expect.objectContaining({ versionNumber: '0.0', sourceType: 'GIT_REPO', gitRepoUrl }),
|
|
454
|
+
]);
|
|
455
|
+
const refusal = `Version 0.0 of ${seeded.username}/${name} has its files in the Git repository ` +
|
|
456
|
+
'https://github.com/apify/actor-templates.git#master, not stored on Apify, so this tool cannot ' +
|
|
457
|
+
'work on them; use the repository.';
|
|
458
|
+
const updateResult = await callTool(client, 'update-actor-version', {
|
|
459
|
+
actor: seeded.id,
|
|
460
|
+
operations: [{ type: 'write', path: 'src/main.js', content: 'console.log("one");\n' }],
|
|
461
|
+
});
|
|
462
|
+
const readResult = await callTool(client, 'get-actor-version', { actor: seeded.id });
|
|
463
|
+
expect(expectToolFailure(updateResult)).toBe(refusal);
|
|
464
|
+
expect(expectToolFailure(readResult)).toBe(refusal);
|
|
465
|
+
expect(extractWrittenState(await fetchStoredActor(api, seeded.id))).toEqual(extractWrittenState(storedBefore));
|
|
466
|
+
}
|
|
467
|
+
finally {
|
|
468
|
+
await api.actor(selector).delete();
|
|
469
|
+
}
|
|
470
|
+
}),
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
name: 'create-actor returns the platform error for a name the account already uses and creates nothing',
|
|
474
|
+
isDeploymentTest: false,
|
|
475
|
+
run: withClient({ tools: ['versions'] }, async (client, ctx) => {
|
|
476
|
+
const api = ctx.createApifyClient();
|
|
477
|
+
const name = buildUniqueActorName('taken');
|
|
478
|
+
const selector = await fetchOwnActorSelector(api, name);
|
|
479
|
+
try {
|
|
480
|
+
const seeded = await api.actors().create({
|
|
481
|
+
name,
|
|
482
|
+
versions: [
|
|
483
|
+
{
|
|
484
|
+
versionNumber: '0.0',
|
|
485
|
+
sourceType: ActorSourceType.SourceFiles,
|
|
486
|
+
sourceFiles: [{ name: 'src/main.js', format: 'TEXT', content: 'console.log("first");\n' }],
|
|
487
|
+
},
|
|
488
|
+
],
|
|
489
|
+
});
|
|
490
|
+
const storedBefore = extractWrittenState(await fetchStoredActor(api, seeded.id));
|
|
491
|
+
const result = await callTool(client, 'create-actor', {
|
|
492
|
+
name,
|
|
493
|
+
files: [{ path: 'src/main.js', content: 'console.log("second");\n' }],
|
|
494
|
+
});
|
|
495
|
+
// The sentence is the platform's, so only the name, the API error type, and the tool's frame are
|
|
496
|
+
// exact. In apify-core it reads `Some other Actor already has this name ("<name>").`, with status 409.
|
|
497
|
+
expect(expectToolFailure(result)).toMatch(new RegExp(`^Error calling tool "create-actor": .*"${name}".* \\(API error type: actor-name-not-unique\\)\\.$`));
|
|
498
|
+
// The name still leads to the first Actor, stored as it was.
|
|
499
|
+
const storedAfter = await fetchStoredActor(api, selector);
|
|
500
|
+
expect(storedAfter.id).toBe(seeded.id);
|
|
501
|
+
expect(extractWrittenState(storedAfter)).toEqual(storedBefore);
|
|
502
|
+
}
|
|
503
|
+
finally {
|
|
504
|
+
await api.actor(selector).delete();
|
|
505
|
+
}
|
|
506
|
+
}),
|
|
507
|
+
},
|
|
508
|
+
];
|
|
509
|
+
//# sourceMappingURL=versions.cases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.cases.js","sourceRoot":"","sources":["../../../tests/test_kit/cases/versions.cases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,+BAA+B,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG5E;;;;;;;;;;GAUG;AAEH,iBAAiB;AACjB,MAAM,UAAU,GAAG,kGAAkG,CAAC;AAEtH,sFAAsF;AACtF,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE7D,6EAA6E;AAC7E,MAAM,UAAU,GAAG,kBAAkB,CAAC;AA0CtC,mHAAmH;AACnH,SAAS,oBAAoB,CAAC,OAAe;IACzC,OAAO,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,qBAAqB,CAAC,GAAgB,EAAE,IAAY;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;IAC5C,OAAO,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,+FAA+F;AAC/F,SAAS,WAAW,CAAC,IAAqB;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,6GAA6G;AAC7G,SAAS,gBAAgB,CAAC,IAAY,EAAE,IAAqB;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAmB,EAAE,IAAY,EAAE,IAA6B;IACpF,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAmB,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAI,MAAsB,EAAE,QAAgB;;IAClE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,+BAA+B,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAA,MAAA,MAAA,MAAM,CAAC,OAAO,0CAAG,CAAC,CAAC,0CAAE,IAAI,mCAAI,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC1F,OAAO,MAAM,CAAC,iBAAsB,CAAC;AACzC,CAAC;AAED,0EAA0E;AAC1E,SAAS,iBAAiB,CAAC,MAAsB;;IAC7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAAE,CAAC;IACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,MAAA,MAAA,MAAA,MAAM,CAAC,OAAO,0CAAG,CAAC,CAAC,0CAAE,IAAI,mCAAI,EAAE,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAgB,EAAE,aAAqB;IACnE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,CAAC;IACnD,MAAM,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,KAAmC,CAAC;AAC/C,CAAC;AAED,sHAAsH;AACtH,SAAS,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAmB;IAClE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACpC,CAAC;AAED,2GAA2G;AAC3G,SAAS,wBAAwB,CAAC,OAA0B;;IACxD,OAAO,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,GAAgB,EAAE,OAAe;IAC5D,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3D,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAW;IACjC;QACI,IAAI,EAAE,wHAAwH;QAC9H,gBAAgB,EAAE,KAAK;QACvB,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;;YAC1E,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxD,kFAAkF;YAClF,MAAM,SAAS,GAAG,4DAA4D,CAAC;YAC/E,MAAM,MAAM,GAAG,8EAA8E,CAAC;YAC9F,MAAM,OAAO,GAAG,kDAAkD,CAAC;YACnE,IAAI,OAA2B,CAAC;YAChC,IAAI,CAAC;gBACD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE;oBACxD,IAAI;oBACJ,KAAK,EAAE,mBAAmB;oBAC1B,WAAW,EAAE,iDAAiD;oBAC9D,KAAK,EAAE;wBACH,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE;wBACjD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE;wBACxC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE;wBAC9C,0DAA0D;wBAC1D,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE;wBAChD,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE;qBAC/F;iBACJ,CAAC,CAAC;gBACH,MAAM,OAAO,GAAG,iBAAiB,CAAoB,YAAY,EAAE,cAAc,CAAC,CAAC;gBACnF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACrD,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;gBAE9C,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;oBACzB,EAAE,EAAE,OAAO,CAAC,OAAO;oBACnB,IAAI;oBACJ,KAAK,EAAE,mBAAmB;oBAC1B,WAAW,EAAE,iDAAiD;oBAC9D,QAAQ,EAAE,KAAK;iBAClB,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;oBACrC,aAAa,EAAE,KAAK;oBACpB,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,cAAc;oBAC1B,OAAO,EAAE,EAAE;iBACd,CAAC,CAAC;gBAEH,MAAM,WAAW,GAAG,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7F,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;oBACxB,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE;oBACvE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;oBAClE,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBAC1F,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;oBAC9D,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;iBAC3D,CAAC,CAAC;gBAEH,sEAAsE;gBACtE,MAAM,aAAa,GAAG;oBAClB,gBAAgB,CAAC,mBAAmB,EAAE,eAAe,CAAC;oBACtD,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBACtE,gBAAgB,CAAC,kBAAkB,EAAE,cAAc,CAAC;oBACpD,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC;oBAC7C,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC;iBAC1C,CAAC;gBACF,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;oBACpB,OAAO,EAAE,MAAM,CAAC,EAAE;oBAClB,QAAQ;oBACR,aAAa,EAAE,KAAK;oBACpB,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC;oBACjD,KAAK,EAAE,aAAa;iBACvB,CAAC,CAAC;gBACH,MAAM,CAAC,MAAA,MAAA,YAAY,CAAC,OAAO,0CAAG,CAAC,CAAC,0CAAE,IAAI,CAAC,CAAC,IAAI,CACxC,6BAA6B,QAAQ,gFAAgF,CACxH,CAAC;gBAEF,MAAM,IAAI,GAAG,iBAAiB,CAC1B,MAAM,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE;oBACxC,KAAK,EAAE,OAAO,CAAC,OAAO;oBACtB,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;iBAC/C,CAAC,EACF,mBAAmB,CACtB,CAAC;gBAEF,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;oBACjB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,QAAQ;oBACR,aAAa,EAAE,KAAK;oBACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,QAAQ,EAAE;wBACN,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE;wBACzE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBACpE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBAC5F,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;wBAChE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;qBAC7D;iBACJ,CAAC,CAAC;gBACH,0EAA0E;gBAC1E,MAAM,UAAU,GAAG,iBAAiB,CAChC,MAAM,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAC5D,mBAAmB,CACtB,CAAC;gBACF,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrG,+BAA+B;gBAC/B,MAAM,CAAC,MAAM,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC5D,iEAAiE;gBACjE,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxF,2EAA2E;gBAC3E,OAAO,GAAG,MAAA,MAAC,WAAW,CAAC,iBAA2D,0CAAE,KAAK,0CAAE,EAAE,CAAC;gBAC9F,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAmB,WAAW,EAAE,aAAa,CAAC,CAAC;gBAClF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC;oBAAS,CAAC;gBACP,uGAAuG;gBACvG,WAAW;gBACX,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,GAAG;yBACJ,KAAK,CAAC,OAAO,CAAC;yBACd,KAAK,EAAE;yBACP,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9F,CAAC;gBACD,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;QACL,CAAC,CAAC;KACL;IACD;QACI,IAAI,EAAE,+IAA+I;QACrJ,gBAAgB,EAAE,KAAK;QACvB,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;;YAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,uBAAuB,CAAC;YACvC,MAAM,MAAM,GAAG,+CAA+C,CAAC;YAC/D,MAAM,MAAM,GAAG,kCAAkC,CAAC;YAClD,MAAM,KAAK,GAAG,gCAAgC,CAAC;YAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC;YACrB,MAAM,KAAK,GAAG,8BAA8B,CAAC;YAC7C,MAAM,SAAS,GAAG,4DAA4D,CAAC;YAC/E,MAAM,YAAY,GAAG,kCAAkC,CAAC;YACxD,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;oBACrC,IAAI;oBACJ,QAAQ,EAAE;wBACN;4BACI,aAAa,EAAE,KAAK;4BACpB,QAAQ,EAAE,MAAM;4BAChB,UAAU,EAAE,eAAe,CAAC,WAAW;4BACvC,OAAO,EAAE;gCACL,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gCAC/B,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;6BAC3D;4BACD,WAAW,EAAE;gCACT,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;gCACtD,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;gCAClE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;gCAC5D,kEAAkE;gCAClE;oCACI,IAAI,EAAE,aAAa;oCACnB,MAAM,EAAE,QAAQ;oCAChB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;iCAClD;gCACD,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;gCACtD,qFAAqF;gCACrF,2DAA2D;gCAC3D,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAA4B;gCAC5D,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAA4B;gCAClE,0FAA0F;gCAC1F,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAuC;6BACzE;yBACJ;qBACJ;iBACJ,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;gBAC9C,4EAA4E;gBAC5E,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAE5C,MAAM,MAAM,GAAG,iBAAiB,CAC5B,MAAM,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,EACxF,mBAAmB,CACtB,CAAC;gBACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;oBACzB,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC;oBACrC,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBACtE,gBAAgB,CAAC,cAAc,EAAE,EAAE,CAAC;oBACpC,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,CAAC;oBAC3C,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC;oBACvC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC;oBACrC,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC;iBACpC,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC9F,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC5D,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;oBAC7C,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;oBACxD,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;iBACnE,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjF,MAAM,UAAU,GAAG;oBACf,KAAK,EAAE,QAAQ;oBACf,gBAAgB,EAAE,MAAM,CAAC,QAAQ;oBACjC,UAAU,EAAE;wBACR,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE;wBACrD;4BACI,IAAI,EAAE,OAAO;4BACb,IAAI,EAAE,WAAW;4BACjB,OAAO,EAAE,SAAS;4BAClB,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;yBAC9C;wBACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;wBACtF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;qBACvF;iBACJ,CAAC;gBACF,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE,UAAU,CAAC,CAAC;gBAChF,MAAM,OAAO,GAAG,iBAAiB,CAA2B,YAAY,EAAE,sBAAsB,CAAC,CAAC;gBAClG,MAAM,KAAK,GAAG,iBAAiB,CAC3B,MAAM,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE;oBACxC,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;iBACvC,CAAC,EACF,mBAAmB,CACtB,CAAC;gBAEF,4EAA4E;gBAC5E,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;oBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACL,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE;wBACtE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE;wBAC3E,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE;wBACnE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE;qBAC5C;iBACJ,CAAC,CAAC;gBACH,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACnD,MAAM,CAAC,MAAA,MAAA,YAAY,CAAC,OAAO,0CAAG,CAAC,CAAC,0CAAE,IAAI,CAAC,CAAC,IAAI,CACxC,0BAA0B,QAAQ,gFAAgF,CACrH,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;oBACxB,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC;oBACxC,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBACtE,gBAAgB,CAAC,cAAc,EAAE,EAAE,CAAC;oBACpC,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,CAAC;oBAC3C,gBAAgB,CAAC,aAAa,EAAE,YAAY,CAAC;oBAC7C,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC;oBACrC,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC;iBACpC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;oBAC3B,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE;oBAChE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;iBAC3D,CAAC,CAAC;gBAEH,oGAAoG;gBACpG,sCAAsC;gBACtC,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM,aAAa,GAAG,IAAI,GAAG,CACzB,wBAAwB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CACzF,CAAC;gBACF,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtF,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClF,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC5F,MAAM,CAAC,wBAAwB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC9D,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;oBAClF,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBACpC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;oBACjC,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBACpC,MAAM,CAAC,gBAAgB,CAAC;wBACpB,IAAI,EAAE,aAAa;wBACnB,MAAM,EAAE,QAAQ;wBAChB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;qBACxD,CAAC;oBACF,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;oBAC/E,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;oBAC7B,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;iBAC/B,CAAC,CAAC;gBACH,mFAAmF;gBACnF,MAAM,CAAC,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC;oBACnE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC3B,WAAW,EAAE,SAAS;iBACzB,CAAC,CAAC;gBACH,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEtD,+FAA+F;gBAC/F,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE,UAAU,CAAC,CAAC,CAAC;gBAChG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAClB,uEAAuE;oBACnE,6BAA6B,OAAO,CAAC,QAAQ,SAAS,MAAM,CAAC,QAAQ,GAAG,CAC/E,CAAC;gBACF,MAAM,CAAC,mBAAmB,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CACvE,mBAAmB,CAAC,WAAW,CAAC,CACnC,CAAC;gBACF,MAAM,CAAC,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;oBAAS,CAAC;gBACP,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;QACL,CAAC,CAAC;KACL;IACD;QACI,IAAI,EAAE,wHAAwH;QAC9H,gBAAgB,EAAE,KAAK;QACvB,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;;YAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,uBAAuB,CAAC;YACvC,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;oBACrC,IAAI;oBACJ,QAAQ,EAAE;wBACN;4BACI,aAAa,EAAE,KAAK;4BACpB,UAAU,EAAE,eAAe,CAAC,WAAW;4BACvC,WAAW,EAAE;gCACT,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE;gCAC/D,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;6BAC3D;yBACJ;qBACJ;iBACJ,CAAC,CAAC;gBACH,MAAM,OAAO,GAAG,iBAAiB,CAC7B,MAAM,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EACjE,mBAAmB,CACtB,CAAC;gBACF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBACrC,MAAM,CAAC,MAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtF,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjF,8FAA8F;gBAC9F,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;gBACjF,MAAM,SAAS,GAAG;oBACd;wBACI,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;wBAC7F,IAAI,EACA,kFAAkF;4BAClF,gCAAgC,QAAQ,uDAAuD;qBACtG;oBACD;wBACI,UAAU,EAAE;4BACR,OAAO;4BACP;gCACI,IAAI,EAAE,OAAO;gCACb,IAAI,EAAE,aAAa;gCACnB,OAAO,EAAE,qBAAqB;gCAC9B,YAAY,EAAE,UAAU;6BAC3B;yBACJ;wBACD,IAAI,EACA,oFAAoF;4BACpF,wBAAwB,QAAQ,SAAS,UAAU,GAAG;qBAC7D;oBACD;wBACI,8EAA8E;wBAC9E,UAAU,EAAE;4BACR,OAAO;4BACP;gCACI,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,aAAa;gCACnB,KAAK,EAAE;oCACH,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;oCACtC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;iCAC3C;6BACJ;yBACJ;wBACD,IAAI,EACA,8EAA8E;4BAC9E,yCAAyC;qBAChD;oBACD;wBACI,gBAAgB,EAAE,UAAU;wBAC5B,UAAU,EAAE,CAAC,OAAO,CAAC;wBACrB,IAAI,EACA,uEAAuE;4BACvE,6BAA6B,OAAO,CAAC,QAAQ,SAAS,UAAU,GAAG;qBAC1E;iBACJ,CAAC;gBAEF,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;oBACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;oBAE7F,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7C,MAAM,CAAC,mBAAmB,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC9F,CAAC;gBACD,MAAM,MAAM,GAAG,iBAAiB,CAC5B,MAAM,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EACjE,mBAAmB,CACtB,CAAC;gBACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnD,CAAC;oBAAS,CAAC;gBACP,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;QACL,CAAC,CAAC;KACL;IACD;QACI,IAAI,EAAE,sIAAsI;QAC5I,gBAAgB,EAAE,KAAK;QACvB,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxD,uGAAuG;YACvG,MAAM,UAAU,GAAG,qEAAqE,CAAC;YACzF,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;oBACrC,IAAI;oBACJ,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;iBACxF,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC5D,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;oBAClC,MAAM,CAAC,gBAAgB,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;iBACxF,CAAC,CAAC;gBACH,MAAM,OAAO,GACT,kBAAkB,MAAM,CAAC,QAAQ,IAAI,IAAI,uCAAuC;oBAChF,gGAAgG;oBAChG,mCAAmC,CAAC;gBAExC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE;oBAChE,KAAK,EAAE,MAAM,CAAC,EAAE;oBAChB,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;iBACzF,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBAErF,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtD,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpD,MAAM,CAAC,mBAAmB,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CACvE,mBAAmB,CAAC,YAAY,CAAC,CACpC,CAAC;YACN,CAAC;oBAAS,CAAC;gBACP,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;QACL,CAAC,CAAC;KACL;IACD;QACI,IAAI,EAAE,iGAAiG;QACvG,gBAAgB,EAAE,KAAK;QACvB,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxD,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;oBACrC,IAAI;oBACJ,QAAQ,EAAE;wBACN;4BACI,aAAa,EAAE,KAAK;4BACpB,UAAU,EAAE,eAAe,CAAC,WAAW;4BACvC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;yBAC7F;qBACJ;iBACJ,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEjF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE;oBAClD,IAAI;oBACJ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;iBACxE,CAAC,CAAC;gBAEH,iGAAiG;gBACjG,uGAAuG;gBACvG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACrC,IAAI,MAAM,CACN,0CAA0C,IAAI,qDAAqD,CACtG,CACJ,CAAC;gBACF,6DAA6D;gBAC7D,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC1D,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACvC,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACnE,CAAC;oBAAS,CAAC;gBACP,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;QACL,CAAC,CAAC;KACL;CACJ,CAAC"}
|
|
@@ -5,7 +5,7 @@ import type { SERVER_MODE, ToolEntry } from '@apify/actors-mcp-server/internals/
|
|
|
5
5
|
import type { CaseCtx, SuiteClient } from './types.js';
|
|
6
6
|
export declare const ACTOR_NORMAL_MODE = "apify/normal-mode-test-actor";
|
|
7
7
|
export declare const ACTOR_EXAMPLE_MCP_SERVER = "apify/example-mcp-server";
|
|
8
|
-
export declare const RETIRED_SELECTORS: readonly ["add-actor", "experimental", "preview", "get-actor-log"];
|
|
8
|
+
export declare const RETIRED_SELECTORS: readonly ["add-actor", "experimental", "preview", "get-actor-log", "source"];
|
|
9
9
|
export declare const AUTO_INJECTED_TOOL_NAMES: string[];
|
|
10
10
|
export declare const DEFAULT_ACTOR_NAMES: string[];
|
|
11
11
|
export declare function getDefaultToolNames(): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../tests/test_kit/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAInE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAQzE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAC;AAQ7F,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AAGlE,eAAO,MAAM,iBAAiB,iCAAiC,CAAC;AAChE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAInE,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../tests/test_kit/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/test_kit/helpers.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="dee81661-93e7-5aa8-8686-8fd033e92b3d")}catch(e){}}();
|
|
3
1
|
import Ajv from 'ajv';
|
|
4
2
|
import { expect, vi } from 'vitest';
|
|
5
3
|
import { actorNameToToolName, defaults, getCategoryTools, getDefaultTools, getExpectedToolNamesByCategories, } from '@apify/actors-mcp-server/internals.js';
|
|
@@ -8,7 +6,7 @@ import { APIFY_ACTOR_RUN_META_KEY, AUTO_INJECTED_TOOLS, toolCategoriesEnabledByD
|
|
|
8
6
|
export const ACTOR_NORMAL_MODE = 'apify/normal-mode-test-actor';
|
|
9
7
|
export const ACTOR_EXAMPLE_MCP_SERVER = 'apify/example-mcp-server';
|
|
10
8
|
const STDIO_TRANSPORT = 'stdio';
|
|
11
|
-
export const RETIRED_SELECTORS = ['add-actor', 'experimental', 'preview', 'get-actor-log'];
|
|
9
|
+
export const RETIRED_SELECTORS = ['add-actor', 'experimental', 'preview', 'get-actor-log', 'source'];
|
|
12
10
|
export const AUTO_INJECTED_TOOL_NAMES = AUTO_INJECTED_TOOLS.map((t) => t.name);
|
|
13
11
|
export const DEFAULT_ACTOR_NAMES = defaults.actors.map((actor) => actorNameToToolName(actor));
|
|
14
12
|
// Lazy: avoids circular import during module init.
|
|
@@ -225,5 +223,4 @@ export async function assertStatusMessagePropagated(taskClient, stream) {
|
|
|
225
223
|
expect(getTaskSawStatusMessage).toBe(true);
|
|
226
224
|
expect(listTasksSawStatusMessage).toBe(true);
|
|
227
225
|
}
|
|
228
|
-
//# sourceMappingURL=helpers.js.map
|
|
229
|
-
//# debugId=dee81661-93e7-5aa8-8686-8fd033e92b3d
|
|
226
|
+
//# sourceMappingURL=helpers.js.map
|