airbyte-agent-shopify 0.1.26__tar.gz → 0.1.28__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.
Files changed (62) hide show
  1. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/AUTH.md +2 -6
  2. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/CHANGELOG.md +10 -0
  3. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/PKG-INFO +5 -6
  4. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/README.md +4 -5
  5. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/__init__.py +6 -6
  6. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/executor/local_executor.py +15 -10
  7. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/schema/extensions.py +22 -2
  8. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/schema/operations.py +3 -2
  9. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/types.py +1 -1
  10. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/validation.py +1 -1
  11. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/connector.py +3 -3
  12. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/connector_model.py +3 -6
  13. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/models.py +65 -67
  14. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/pyproject.toml +1 -1
  15. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/.gitignore +0 -0
  16. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/REFERENCE.md +0 -0
  17. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/__init__.py +0 -0
  18. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/__init__.py +0 -0
  19. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/auth_strategies.py +0 -0
  20. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/auth_template.py +0 -0
  21. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/cloud_utils/__init__.py +0 -0
  22. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/cloud_utils/client.py +0 -0
  23. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/connector_model_loader.py +0 -0
  24. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/constants.py +0 -0
  25. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/exceptions.py +0 -0
  26. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/executor/__init__.py +0 -0
  27. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/executor/hosted_executor.py +0 -0
  28. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/executor/models.py +0 -0
  29. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/extensions.py +0 -0
  30. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/http/__init__.py +0 -0
  31. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/http/adapters/__init__.py +0 -0
  32. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/http/adapters/httpx_adapter.py +0 -0
  33. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/http/config.py +0 -0
  34. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/http/exceptions.py +0 -0
  35. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/http/protocols.py +0 -0
  36. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/http/response.py +0 -0
  37. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/http_client.py +0 -0
  38. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/introspection.py +0 -0
  39. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/logging/__init__.py +0 -0
  40. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/logging/logger.py +0 -0
  41. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/logging/types.py +0 -0
  42. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/observability/__init__.py +0 -0
  43. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/observability/config.py +0 -0
  44. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/observability/models.py +0 -0
  45. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/observability/redactor.py +0 -0
  46. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/observability/session.py +0 -0
  47. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/performance/__init__.py +0 -0
  48. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/performance/instrumentation.py +0 -0
  49. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/performance/metrics.py +0 -0
  50. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/schema/__init__.py +0 -0
  51. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/schema/base.py +0 -0
  52. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/schema/components.py +0 -0
  53. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/schema/connector.py +0 -0
  54. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/schema/security.py +0 -0
  55. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/secrets.py +0 -0
  56. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/telemetry/__init__.py +0 -0
  57. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/telemetry/config.py +0 -0
  58. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/telemetry/events.py +0 -0
  59. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/telemetry/tracker.py +0 -0
  60. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/utils.py +0 -0
  61. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/_vendored/connector_sdk/validation_replication.py +0 -0
  62. {airbyte_agent_shopify-0.1.26 → airbyte_agent_shopify-0.1.28}/airbyte_agent_shopify/types.py +0 -0
@@ -18,7 +18,6 @@ This authentication method isn't available for this connector.
18
18
  | Field Name | Type | Required | Description |
19
19
  |------------|------|----------|-------------|
20
20
  | `api_key` | `str` | Yes | Your Shopify Admin API access token |
21
- | `shop` | `str` | Yes | Your Shopify store name (e.g., 'my-store' from my-store.myshopify.com) |
22
21
 
23
22
  Example request:
24
23
 
@@ -28,8 +27,7 @@ from airbyte_agent_shopify.models import ShopifyAuthConfig
28
27
 
29
28
  connector = ShopifyConnector(
30
29
  auth_config=ShopifyAuthConfig(
31
- api_key="<Your Shopify Admin API access token>",
32
- shop="<Your Shopify store name (e.g., 'my-store' from my-store.myshopify.com)>"
30
+ api_key="<Your Shopify Admin API access token>"
33
31
  )
34
32
  )
35
33
  ```
@@ -53,7 +51,6 @@ Create a connector with Token credentials.
53
51
  | Field Name | Type | Required | Description |
54
52
  |------------|------|----------|-------------|
55
53
  | `api_key` | `str` | Yes | Your Shopify Admin API access token |
56
- | `shop` | `str` | Yes | Your Shopify store name (e.g., 'my-store' from my-store.myshopify.com) |
57
54
 
58
55
  Example request:
59
56
 
@@ -67,8 +64,7 @@ curl -X POST "https://api.airbyte.ai/v1/integrations/connectors" \
67
64
  "connector_type": "Shopify",
68
65
  "name": "My Shopify Connector",
69
66
  "credentials": {
70
- "api_key": "<Your Shopify Admin API access token>",
71
- "shop": "<Your Shopify store name (e.g., 'my-store' from my-store.myshopify.com)>"
67
+ "api_key": "<Your Shopify Admin API access token>"
72
68
  }
73
69
  }'
74
70
  ```
@@ -1,5 +1,15 @@
1
1
  # Shopify changelog
2
2
 
3
+ ## [0.1.28] - 2026-02-03
4
+ - Updated connector definition (YAML version 0.1.5)
5
+ - Source commit: 1fc2ac28
6
+ - SDK version: 0.1.0
7
+
8
+ ## [0.1.27] - 2026-02-03
9
+ - Updated connector definition (YAML version 0.1.4)
10
+ - Source commit: f2dbc00e
11
+ - SDK version: 0.1.0
12
+
3
13
  ## [0.1.26] - 2026-02-02
4
14
  - Updated connector definition (YAML version 0.1.3)
5
15
  - Source commit: 94024675
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: airbyte-agent-shopify
3
- Version: 0.1.26
3
+ Version: 0.1.28
4
4
  Summary: Airbyte Shopify Connector for AI platforms
5
5
  Project-URL: Homepage, https://github.com/airbytehq/airbyte-agent-connectors
6
6
  Project-URL: Documentation, https://docs.airbyte.com/ai-agents/
@@ -87,8 +87,7 @@ from airbyte_agent_shopify.models import ShopifyAuthConfig
87
87
 
88
88
  connector = ShopifyConnector(
89
89
  auth_config=ShopifyAuthConfig(
90
- api_key="<Your Shopify Admin API access token>",
91
- shop="<Your Shopify store name (e.g., 'my-store' from my-store.myshopify.com)>"
90
+ api_key="<Your Shopify Admin API access token>"
92
91
  )
93
92
  )
94
93
 
@@ -171,7 +170,7 @@ See the official [Shopify API reference](https://shopify.dev/docs/api/admin-rest
171
170
 
172
171
  ## Version information
173
172
 
174
- - **Package version:** 0.1.26
175
- - **Connector version:** 0.1.3
176
- - **Generated with Connector SDK commit SHA:** 940246757c7476ed4edd7d16b873ebe54ea2b456
173
+ - **Package version:** 0.1.28
174
+ - **Connector version:** 0.1.5
175
+ - **Generated with Connector SDK commit SHA:** 1fc2ac286cff08133bc2a07f7181779928a3461b
177
176
  - **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/shopify/CHANGELOG.md)
@@ -54,8 +54,7 @@ from airbyte_agent_shopify.models import ShopifyAuthConfig
54
54
 
55
55
  connector = ShopifyConnector(
56
56
  auth_config=ShopifyAuthConfig(
57
- api_key="<Your Shopify Admin API access token>",
58
- shop="<Your Shopify store name (e.g., 'my-store' from my-store.myshopify.com)>"
57
+ api_key="<Your Shopify Admin API access token>"
59
58
  )
60
59
  )
61
60
 
@@ -138,7 +137,7 @@ See the official [Shopify API reference](https://shopify.dev/docs/api/admin-rest
138
137
 
139
138
  ## Version information
140
139
 
141
- - **Package version:** 0.1.26
142
- - **Connector version:** 0.1.3
143
- - **Generated with Connector SDK commit SHA:** 940246757c7476ed4edd7d16b873ebe54ea2b456
140
+ - **Package version:** 0.1.28
141
+ - **Connector version:** 0.1.5
142
+ - **Generated with Connector SDK commit SHA:** 1fc2ac286cff08133bc2a07f7181779928a3461b
144
143
  - **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/shopify/CHANGELOG.md)
@@ -13,14 +13,14 @@ from .models import (
13
13
  CustomerAddressList,
14
14
  MarketingConsent,
15
15
  OrderAddress,
16
- LineItem,
17
- Fulfillment,
18
16
  Transaction,
19
17
  Refund,
18
+ LineItem,
19
+ Fulfillment,
20
20
  Order,
21
21
  OrderList,
22
- ProductImage,
23
22
  ProductVariant,
23
+ ProductImage,
24
24
  Product,
25
25
  ProductList,
26
26
  ProductVariantList,
@@ -187,14 +187,14 @@ __all__ = [
187
187
  "CustomerAddressList",
188
188
  "MarketingConsent",
189
189
  "OrderAddress",
190
- "LineItem",
191
- "Fulfillment",
192
190
  "Transaction",
193
191
  "Refund",
192
+ "LineItem",
193
+ "Fulfillment",
194
194
  "Order",
195
195
  "OrderList",
196
- "ProductImage",
197
196
  "ProductVariant",
197
+ "ProductImage",
198
198
  "Product",
199
199
  "ProductList",
200
200
  "ProductVariantList",
@@ -546,23 +546,25 @@ class LocalExecutor:
546
546
  return ExecutionResult(success=False, data={}, error=str(e))
547
547
 
548
548
  async def check(self) -> ExecutionResult:
549
- """Perform a health check by running a lightweight list operation.
549
+ """Perform a health check by running a lightweight operation.
550
550
 
551
551
  Finds the operation marked with preferred_for_check=True, or falls back
552
- to the first list operation. Executes it with limit=1 to verify
553
- connectivity and credentials.
552
+ to the first list operation. Executes it to verify connectivity and credentials.
553
+ For list operations, uses limit=1 to minimize data transfer.
554
554
 
555
555
  Returns:
556
556
  ExecutionResult with data containing status, error, and checked operation details.
557
557
  """
558
558
  check_entity = None
559
559
  check_endpoint = None
560
+ check_action = None
560
561
 
561
- # Look for preferred check operation
562
+ # Look for preferred check operation (can be any action type)
562
563
  for (ent_name, op_action), endpoint in self._operation_index.items():
563
564
  if getattr(endpoint, "preferred_for_check", False):
564
565
  check_entity = ent_name
565
566
  check_endpoint = endpoint
567
+ check_action = op_action
566
568
  break
567
569
 
568
570
  # Fallback to first list operation
@@ -571,18 +573,19 @@ class LocalExecutor:
571
573
  if op_action == Action.LIST:
572
574
  check_entity = ent_name
573
575
  check_endpoint = endpoint
576
+ check_action = op_action
574
577
  break
575
578
 
576
- if check_endpoint is None or check_entity is None:
579
+ if check_endpoint is None or check_entity is None or check_action is None:
577
580
  return ExecutionResult(
578
581
  success=True,
579
582
  data={
580
583
  "status": "skipped",
581
- "error": "No list operation available for health check",
584
+ "error": "No operation available for health check",
582
585
  },
583
586
  )
584
587
 
585
- # Find the standard handler to execute the list operation
588
+ # Find the standard handler to execute the operation
586
589
  standard_handler = next(
587
590
  (h for h in self._operation_handlers if isinstance(h, _StandardOperationHandler)),
588
591
  None,
@@ -598,13 +601,15 @@ class LocalExecutor:
598
601
  )
599
602
 
600
603
  try:
601
- await standard_handler.execute_operation(check_entity, Action.LIST, {"limit": 1})
604
+ # Use limit=1 for list operations to minimize data transfer
605
+ params = {"limit": 1} if check_action == Action.LIST else {}
606
+ await standard_handler.execute_operation(check_entity, check_action, params)
602
607
  return ExecutionResult(
603
608
  success=True,
604
609
  data={
605
610
  "status": "healthy",
606
611
  "checked_entity": check_entity,
607
- "checked_action": "list",
612
+ "checked_action": check_action.value,
608
613
  },
609
614
  )
610
615
  except Exception as e:
@@ -614,7 +619,7 @@ class LocalExecutor:
614
619
  "status": "unhealthy",
615
620
  "error": str(e),
616
621
  "checked_entity": check_entity,
617
- "checked_action": "list",
622
+ "checked_action": check_action.value,
618
623
  },
619
624
  error=str(e),
620
625
  )
@@ -182,12 +182,25 @@ class CacheEntityConfig(BaseModel):
182
182
  return self.x_airbyte_name or self.entity
183
183
 
184
184
 
185
+ class ReplicationConfigPropertyItems(BaseModel):
186
+ """
187
+ Items definition for array-type replication configuration fields.
188
+
189
+ Defines the schema for items in an array-type replication config property.
190
+ """
191
+
192
+ model_config = ConfigDict(populate_by_name=True, extra="forbid")
193
+
194
+ type: str
195
+
196
+
185
197
  class ReplicationConfigProperty(BaseModel):
186
198
  """
187
199
  Property definition for replication configuration fields.
188
200
 
189
201
  Defines a single field in the replication configuration with its type,
190
- description, and optional default value.
202
+ description, and optional default value. Supports both simple types
203
+ (string, integer, boolean) and array types.
191
204
 
192
205
  Example YAML usage:
193
206
  x-airbyte-replication-config:
@@ -197,6 +210,12 @@ class ReplicationConfigProperty(BaseModel):
197
210
  title: Start Date
198
211
  description: UTC date and time from which to replicate data
199
212
  format: date-time
213
+ account_ids:
214
+ type: array
215
+ title: Account IDs
216
+ description: List of account IDs to replicate
217
+ items:
218
+ type: string
200
219
  """
201
220
 
202
221
  model_config = ConfigDict(populate_by_name=True, extra="forbid")
@@ -205,8 +224,9 @@ class ReplicationConfigProperty(BaseModel):
205
224
  title: str | None = None
206
225
  description: str | None = None
207
226
  format: str | None = None
208
- default: str | int | float | bool | None = None
227
+ default: str | int | float | bool | list | None = None
209
228
  enum: list[str] | None = None
229
+ items: ReplicationConfigPropertyItems | None = None
210
230
 
211
231
 
212
232
  class ReplicationConfig(BaseModel):
@@ -90,9 +90,10 @@ class Operation(BaseModel):
90
90
  None,
91
91
  alias="x-airbyte-preferred-for-check",
92
92
  description=(
93
- "Mark this list operation as the preferred operation for health checks. "
93
+ "Mark this operation as the preferred operation for health checks. "
94
94
  "When the CHECK action is executed, this operation will be used instead of "
95
- "falling back to the first available list operation. Choose a lightweight, "
95
+ "falling back to the first available list operation. The operation's actual "
96
+ "action type (get, list, etc.) will be respected. Choose a lightweight, "
96
97
  "always-available endpoint (e.g., users, accounts)."
97
98
  ),
98
99
  )
@@ -239,7 +239,7 @@ class EndpointDefinition(BaseModel):
239
239
  # Health check support (Airbyte extension)
240
240
  preferred_for_check: bool = Field(
241
241
  False,
242
- description="Mark this list operation as preferred for health checks (from x-airbyte-preferred-for-check extension)",
242
+ description="Mark this operation as preferred for health checks (from x-airbyte-preferred-for-check extension)",
243
243
  )
244
244
 
245
245
 
@@ -959,7 +959,7 @@ def validate_connector_readiness(connector_dir: str | Path) -> Dict[str, Any]:
959
959
  if not has_preferred_check:
960
960
  readiness_warnings.append(
961
961
  "No operation has x-airbyte-preferred-for-check: true. "
962
- "Add this extension to a lightweight list operation (e.g., users.list) "
962
+ "Add this extension to a lightweight operation (e.g., users.list or accounts.get) "
963
963
  "to enable reliable health checks."
964
964
  )
965
965
 
@@ -180,7 +180,7 @@ class ShopifyConnector:
180
180
  """
181
181
 
182
182
  connector_name = "shopify"
183
- connector_version = "0.1.3"
183
+ connector_version = "0.1.5"
184
184
  vendored_sdk_version = "0.1.0" # Version of vendored connector-sdk
185
185
 
186
186
  # Map of (entity, action) -> needs_envelope for envelope wrapping decision
@@ -321,7 +321,7 @@ class ShopifyConnector:
321
321
  Example: lambda tokens: save_to_database(tokens) shop: Your Shopify store name (e.g., 'my-store' from my-store.myshopify.com)
322
322
  Examples:
323
323
  # Local mode (direct API calls)
324
- connector = ShopifyConnector(auth_config=ShopifyAuthConfig(api_key="...", shop="..."))
324
+ connector = ShopifyConnector(auth_config=ShopifyAuthConfig(api_key="..."))
325
325
  # Hosted mode with explicit connector_id (no lookup needed)
326
326
  connector = ShopifyConnector(
327
327
  airbyte_client_id="client_abc123",
@@ -1117,7 +1117,7 @@ class ShopifyConnector:
1117
1117
  external_user_id="my-workspace",
1118
1118
  airbyte_client_id="client_abc",
1119
1119
  airbyte_client_secret="secret_xyz",
1120
- auth_config=ShopifyAuthConfig(api_key="...", shop="..."),
1120
+ auth_config=ShopifyAuthConfig(api_key="..."),
1121
1121
  )
1122
1122
 
1123
1123
  # Use the connector
@@ -26,7 +26,7 @@ from uuid import (
26
26
  ShopifyConnectorModel: ConnectorModel = ConnectorModel(
27
27
  id=UUID('9da77001-af33-4bcd-be46-6252bf9342b9'),
28
28
  name='shopify',
29
- version='0.1.3',
29
+ version='0.1.5',
30
30
  base_url='https://{shop}.myshopify.com/admin/api/2025-01',
31
31
  auth=AuthConfig(
32
32
  type=AuthType.API_KEY,
@@ -34,18 +34,15 @@ ShopifyConnectorModel: ConnectorModel = ConnectorModel(
34
34
  user_config_spec=AirbyteAuthConfig(
35
35
  title='Access Token Authentication',
36
36
  type='object',
37
- required=['api_key', 'shop'],
37
+ required=['api_key'],
38
38
  properties={
39
39
  'api_key': AuthConfigFieldSpec(
40
40
  title='Access Token',
41
41
  description='Your Shopify Admin API access token',
42
42
  ),
43
- 'shop': AuthConfigFieldSpec(
44
- title='Shop Name',
45
- description="Your Shopify store name (e.g., 'my-store' from my-store.myshopify.com)",
46
- ),
47
43
  },
48
44
  auth_mapping={'api_key': '${api_key}'},
45
+ replication_auth_key_mapping={'credentials.access_token': 'api_key'},
49
46
  ),
50
47
  ),
51
48
  entities=[
@@ -19,8 +19,6 @@ class ShopifyAuthConfig(BaseModel):
19
19
 
20
20
  api_key: str
21
21
  """Your Shopify Admin API access token"""
22
- shop: str
23
- """Your Shopify store name (e.g., 'my-store' from my-store.myshopify.com)"""
24
22
 
25
23
  # ===== RESPONSE TYPE DEFINITIONS (PYDANTIC) =====
26
24
 
@@ -119,6 +117,55 @@ class OrderAddress(BaseModel):
119
117
  latitude: Union[float | None, Any] = Field(default=None)
120
118
  longitude: Union[float | None, Any] = Field(default=None)
121
119
 
120
+ class Transaction(BaseModel):
121
+ """An order transaction"""
122
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
123
+
124
+ id: Union[int, Any] = Field(default=None)
125
+ order_id: Union[int | None, Any] = Field(default=None)
126
+ kind: Union[str | None, Any] = Field(default=None)
127
+ gateway: Union[str | None, Any] = Field(default=None)
128
+ status: Union[str | None, Any] = Field(default=None)
129
+ message: Union[str | None, Any] = Field(default=None)
130
+ created_at: Union[str | None, Any] = Field(default=None)
131
+ test: Union[bool | None, Any] = Field(default=None)
132
+ authorization: Union[str | None, Any] = Field(default=None)
133
+ location_id: Union[int | None, Any] = Field(default=None)
134
+ user_id: Union[int | None, Any] = Field(default=None)
135
+ parent_id: Union[int | None, Any] = Field(default=None)
136
+ processed_at: Union[str | None, Any] = Field(default=None)
137
+ device_id: Union[int | None, Any] = Field(default=None)
138
+ error_code: Union[str | None, Any] = Field(default=None)
139
+ source_name: Union[str | None, Any] = Field(default=None)
140
+ receipt: Union[dict[str, Any] | None, Any] = Field(default=None)
141
+ currency_exchange_adjustment: Union[dict[str, Any] | None, Any] = Field(default=None)
142
+ amount: Union[str | None, Any] = Field(default=None)
143
+ currency: Union[str | None, Any] = Field(default=None)
144
+ payment_id: Union[str | None, Any] = Field(default=None)
145
+ total_unsettled_set: Union[dict[str, Any] | None, Any] = Field(default=None)
146
+ manual_payment_gateway: Union[bool | None, Any] = Field(default=None)
147
+ admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
148
+
149
+ class Refund(BaseModel):
150
+ """An order refund"""
151
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
152
+
153
+ id: Union[int, Any] = Field(default=None)
154
+ order_id: Union[int | None, Any] = Field(default=None)
155
+ created_at: Union[str | None, Any] = Field(default=None)
156
+ note: Union[str | None, Any] = Field(default=None)
157
+ user_id: Union[int | None, Any] = Field(default=None)
158
+ processed_at: Union[str | None, Any] = Field(default=None)
159
+ restock: Union[bool | None, Any] = Field(default=None)
160
+ duties: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
161
+ total_duties_set: Union[dict[str, Any] | None, Any] = Field(default=None)
162
+ return_: Union[dict[str, Any] | None, Any] = Field(default=None, alias="return")
163
+ refund_line_items: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
164
+ transactions: Union[list[Transaction] | None, Any] = Field(default=None)
165
+ order_adjustments: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
166
+ admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
167
+ refund_shipping_lines: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
168
+
122
169
  class LineItem(BaseModel):
123
170
  """LineItem type definition"""
124
171
  model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -176,55 +223,6 @@ class Fulfillment(BaseModel):
176
223
  name: Union[str | None, Any] = Field(default=None)
177
224
  admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
178
225
 
179
- class Transaction(BaseModel):
180
- """An order transaction"""
181
- model_config = ConfigDict(extra="allow", populate_by_name=True)
182
-
183
- id: Union[int, Any] = Field(default=None)
184
- order_id: Union[int | None, Any] = Field(default=None)
185
- kind: Union[str | None, Any] = Field(default=None)
186
- gateway: Union[str | None, Any] = Field(default=None)
187
- status: Union[str | None, Any] = Field(default=None)
188
- message: Union[str | None, Any] = Field(default=None)
189
- created_at: Union[str | None, Any] = Field(default=None)
190
- test: Union[bool | None, Any] = Field(default=None)
191
- authorization: Union[str | None, Any] = Field(default=None)
192
- location_id: Union[int | None, Any] = Field(default=None)
193
- user_id: Union[int | None, Any] = Field(default=None)
194
- parent_id: Union[int | None, Any] = Field(default=None)
195
- processed_at: Union[str | None, Any] = Field(default=None)
196
- device_id: Union[int | None, Any] = Field(default=None)
197
- error_code: Union[str | None, Any] = Field(default=None)
198
- source_name: Union[str | None, Any] = Field(default=None)
199
- receipt: Union[dict[str, Any] | None, Any] = Field(default=None)
200
- currency_exchange_adjustment: Union[dict[str, Any] | None, Any] = Field(default=None)
201
- amount: Union[str | None, Any] = Field(default=None)
202
- currency: Union[str | None, Any] = Field(default=None)
203
- payment_id: Union[str | None, Any] = Field(default=None)
204
- total_unsettled_set: Union[dict[str, Any] | None, Any] = Field(default=None)
205
- manual_payment_gateway: Union[bool | None, Any] = Field(default=None)
206
- admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
207
-
208
- class Refund(BaseModel):
209
- """An order refund"""
210
- model_config = ConfigDict(extra="allow", populate_by_name=True)
211
-
212
- id: Union[int, Any] = Field(default=None)
213
- order_id: Union[int | None, Any] = Field(default=None)
214
- created_at: Union[str | None, Any] = Field(default=None)
215
- note: Union[str | None, Any] = Field(default=None)
216
- user_id: Union[int | None, Any] = Field(default=None)
217
- processed_at: Union[str | None, Any] = Field(default=None)
218
- restock: Union[bool | None, Any] = Field(default=None)
219
- duties: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
220
- total_duties_set: Union[dict[str, Any] | None, Any] = Field(default=None)
221
- return_: Union[dict[str, Any] | None, Any] = Field(default=None, alias="return")
222
- refund_line_items: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
223
- transactions: Union[list[Transaction] | None, Any] = Field(default=None)
224
- order_adjustments: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
225
- admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
226
- refund_shipping_lines: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
227
-
228
226
  class Order(BaseModel):
229
227
  """A Shopify order"""
230
228
  model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -329,22 +327,6 @@ class OrderList(BaseModel):
329
327
 
330
328
  orders: Union[list[Order], Any] = Field(default=None)
331
329
 
332
- class ProductImage(BaseModel):
333
- """A product image"""
334
- model_config = ConfigDict(extra="allow", populate_by_name=True)
335
-
336
- id: Union[int, Any] = Field(default=None)
337
- product_id: Union[int | None, Any] = Field(default=None)
338
- position: Union[int | None, Any] = Field(default=None)
339
- created_at: Union[str | None, Any] = Field(default=None)
340
- updated_at: Union[str | None, Any] = Field(default=None)
341
- alt: Union[str | None, Any] = Field(default=None)
342
- width: Union[int | None, Any] = Field(default=None)
343
- height: Union[int | None, Any] = Field(default=None)
344
- src: Union[str | None, Any] = Field(default=None)
345
- variant_ids: Union[list[int] | None, Any] = Field(default=None)
346
- admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
347
-
348
330
  class ProductVariant(BaseModel):
349
331
  """A product variant"""
350
332
  model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -376,6 +358,22 @@ class ProductVariant(BaseModel):
376
358
  requires_shipping: Union[bool | None, Any] = Field(default=None)
377
359
  admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
378
360
 
361
+ class ProductImage(BaseModel):
362
+ """A product image"""
363
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
364
+
365
+ id: Union[int, Any] = Field(default=None)
366
+ product_id: Union[int | None, Any] = Field(default=None)
367
+ position: Union[int | None, Any] = Field(default=None)
368
+ created_at: Union[str | None, Any] = Field(default=None)
369
+ updated_at: Union[str | None, Any] = Field(default=None)
370
+ alt: Union[str | None, Any] = Field(default=None)
371
+ width: Union[int | None, Any] = Field(default=None)
372
+ height: Union[int | None, Any] = Field(default=None)
373
+ src: Union[str | None, Any] = Field(default=None)
374
+ variant_ids: Union[list[int] | None, Any] = Field(default=None)
375
+ admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
376
+
379
377
  class Product(BaseModel):
380
378
  """A Shopify product"""
381
379
  model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "airbyte-agent-shopify"
3
- version = "0.1.26"
3
+ version = "0.1.28"
4
4
  description = "Airbyte Shopify Connector for AI platforms"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"