brand.dev 0.19.0 → 0.20.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +1 -1
- data/lib/brand_dev/models/brand_ai_products_params.rb +43 -0
- data/lib/brand_dev/models/brand_ai_products_response.rb +152 -0
- data/lib/brand_dev/models.rb +2 -0
- data/lib/brand_dev/resources/brand.rb +42 -12
- data/lib/brand_dev/version.rb +1 -1
- data/lib/brand_dev.rb +2 -0
- data/rbi/brand_dev/models/brand_ai_products_params.rbi +69 -0
- data/rbi/brand_dev/models/brand_ai_products_response.rbi +298 -0
- data/rbi/brand_dev/models.rbi +2 -0
- data/rbi/brand_dev/resources/brand.rbi +35 -12
- data/sig/brand_dev/models/brand_ai_products_params.rbs +36 -0
- data/sig/brand_dev/models/brand_ai_products_response.rbs +121 -0
- data/sig/brand_dev/models.rbs +2 -0
- data/sig/brand_dev/resources/brand.rbs +7 -0
- metadata +8 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: be4fa887e23eb9143aaf2472d22397b99b414cb4ff93540d2ea3da5fbae0cfa3
|
|
4
|
+
data.tar.gz: 1c923c23ca8386e90fefe684df20b6ece1cc9455bcc9fec14d1f7cdb221cb100
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ac2de9483c9ed519557f9fcff0e2ea5041c938d8fd313a934332321d79133d25081c648bad90e320ed22a09a53faada008b3dae7cf023713350382cf8289ec28
|
|
7
|
+
data.tar.gz: f82183b8ff1d77f93834c0b4cbcb100ffd3ec1fcfa2ae08f5a3d6f2fc37b8f86933c423e2b5130a1f9319313404a336ac3cc7c4855b3f788e91d971fd3fb669f
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.20.0 (2026-01-05)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.19.0...v0.20.0](https://github.com/brand-dot-dev/ruby-sdk/compare/v0.19.0...v0.20.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([0e16540](https://github.com/brand-dot-dev/ruby-sdk/commit/0e1654086ce29b4db61d42d680f5c837723200c8))
|
|
10
|
+
* **api:** api update ([25e7a5a](https://github.com/brand-dot-dev/ruby-sdk/commit/25e7a5a8d67e1a1f6d12ea45c9e5f8c3d0172419))
|
|
11
|
+
* **api:** manual updates ([58d3d58](https://github.com/brand-dot-dev/ruby-sdk/commit/58d3d58d2f482c0b7e173dd3c1805c09af80a2c8))
|
|
12
|
+
|
|
3
13
|
## 0.19.0 (2025-12-22)
|
|
4
14
|
|
|
5
15
|
Full Changelog: [v0.18.0...v0.19.0](https://github.com/brand-dot-dev/ruby-sdk/compare/v0.18.0...v0.19.0)
|
data/README.md
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BrandDev
|
|
4
|
+
module Models
|
|
5
|
+
# @see BrandDev::Resources::Brand#ai_products
|
|
6
|
+
class BrandAIProductsParams < BrandDev::Internal::Type::BaseModel
|
|
7
|
+
extend BrandDev::Internal::Type::RequestParameters::Converter
|
|
8
|
+
include BrandDev::Internal::Type::RequestParameters
|
|
9
|
+
|
|
10
|
+
# @!attribute domain
|
|
11
|
+
# The domain name to analyze
|
|
12
|
+
#
|
|
13
|
+
# @return [String]
|
|
14
|
+
required :domain, String
|
|
15
|
+
|
|
16
|
+
# @!attribute max_products
|
|
17
|
+
# Maximum number of products to extract.
|
|
18
|
+
#
|
|
19
|
+
# @return [Integer, nil]
|
|
20
|
+
optional :max_products, Integer, api_name: :maxProducts
|
|
21
|
+
|
|
22
|
+
# @!attribute timeout_ms
|
|
23
|
+
# Optional timeout in milliseconds for the request. If the request takes longer
|
|
24
|
+
# than this value, it will be aborted with a 408 status code. Maximum allowed
|
|
25
|
+
# value is 300000ms (5 minutes).
|
|
26
|
+
#
|
|
27
|
+
# @return [Integer, nil]
|
|
28
|
+
optional :timeout_ms, Integer, api_name: :timeoutMS
|
|
29
|
+
|
|
30
|
+
# @!method initialize(domain:, max_products: nil, timeout_ms: nil, request_options: {})
|
|
31
|
+
# Some parameter documentations has been truncated, see
|
|
32
|
+
# {BrandDev::Models::BrandAIProductsParams} for more details.
|
|
33
|
+
#
|
|
34
|
+
# @param domain [String] The domain name to analyze
|
|
35
|
+
#
|
|
36
|
+
# @param max_products [Integer] Maximum number of products to extract.
|
|
37
|
+
#
|
|
38
|
+
# @param timeout_ms [Integer] Optional timeout in milliseconds for the request. If the request takes longer th
|
|
39
|
+
#
|
|
40
|
+
# @param request_options [BrandDev::RequestOptions, Hash{Symbol=>Object}]
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BrandDev
|
|
4
|
+
module Models
|
|
5
|
+
# @see BrandDev::Resources::Brand#ai_products
|
|
6
|
+
class BrandAIProductsResponse < BrandDev::Internal::Type::BaseModel
|
|
7
|
+
# @!attribute products
|
|
8
|
+
# Array of products extracted from the website
|
|
9
|
+
#
|
|
10
|
+
# @return [Array<BrandDev::Models::BrandAIProductsResponse::Product>, nil]
|
|
11
|
+
optional :products,
|
|
12
|
+
-> { BrandDev::Internal::Type::ArrayOf[BrandDev::Models::BrandAIProductsResponse::Product] }
|
|
13
|
+
|
|
14
|
+
# @!method initialize(products: nil)
|
|
15
|
+
# @param products [Array<BrandDev::Models::BrandAIProductsResponse::Product>] Array of products extracted from the website
|
|
16
|
+
|
|
17
|
+
class Product < BrandDev::Internal::Type::BaseModel
|
|
18
|
+
# @!attribute description
|
|
19
|
+
# Description of the product
|
|
20
|
+
#
|
|
21
|
+
# @return [String]
|
|
22
|
+
required :description, String
|
|
23
|
+
|
|
24
|
+
# @!attribute features
|
|
25
|
+
# List of product features
|
|
26
|
+
#
|
|
27
|
+
# @return [Array<String>]
|
|
28
|
+
required :features, BrandDev::Internal::Type::ArrayOf[String]
|
|
29
|
+
|
|
30
|
+
# @!attribute name
|
|
31
|
+
# Name of the product
|
|
32
|
+
#
|
|
33
|
+
# @return [String]
|
|
34
|
+
required :name, String
|
|
35
|
+
|
|
36
|
+
# @!attribute tags
|
|
37
|
+
# Tags associated with the product
|
|
38
|
+
#
|
|
39
|
+
# @return [Array<String>]
|
|
40
|
+
required :tags, BrandDev::Internal::Type::ArrayOf[String]
|
|
41
|
+
|
|
42
|
+
# @!attribute target_audience
|
|
43
|
+
# Target audience for the product (array of strings)
|
|
44
|
+
#
|
|
45
|
+
# @return [Array<String>]
|
|
46
|
+
required :target_audience, BrandDev::Internal::Type::ArrayOf[String]
|
|
47
|
+
|
|
48
|
+
# @!attribute billing_frequency
|
|
49
|
+
# Billing frequency for the product
|
|
50
|
+
#
|
|
51
|
+
# @return [Symbol, BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency, nil]
|
|
52
|
+
optional :billing_frequency,
|
|
53
|
+
enum: -> { BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency },
|
|
54
|
+
nil?: true
|
|
55
|
+
|
|
56
|
+
# @!attribute category
|
|
57
|
+
# Category of the product
|
|
58
|
+
#
|
|
59
|
+
# @return [String, nil]
|
|
60
|
+
optional :category, String, nil?: true
|
|
61
|
+
|
|
62
|
+
# @!attribute currency
|
|
63
|
+
# Currency code for the price (e.g., USD, EUR)
|
|
64
|
+
#
|
|
65
|
+
# @return [String, nil]
|
|
66
|
+
optional :currency, String, nil?: true
|
|
67
|
+
|
|
68
|
+
# @!attribute image_url
|
|
69
|
+
# URL to the product image
|
|
70
|
+
#
|
|
71
|
+
# @return [String, nil]
|
|
72
|
+
optional :image_url, String, nil?: true
|
|
73
|
+
|
|
74
|
+
# @!attribute price
|
|
75
|
+
# Price of the product
|
|
76
|
+
#
|
|
77
|
+
# @return [Float, nil]
|
|
78
|
+
optional :price, Float, nil?: true
|
|
79
|
+
|
|
80
|
+
# @!attribute pricing_model
|
|
81
|
+
# Pricing model for the product
|
|
82
|
+
#
|
|
83
|
+
# @return [Symbol, BrandDev::Models::BrandAIProductsResponse::Product::PricingModel, nil]
|
|
84
|
+
optional :pricing_model,
|
|
85
|
+
enum: -> { BrandDev::Models::BrandAIProductsResponse::Product::PricingModel },
|
|
86
|
+
nil?: true
|
|
87
|
+
|
|
88
|
+
# @!attribute url
|
|
89
|
+
# URL to the product page
|
|
90
|
+
#
|
|
91
|
+
# @return [String, nil]
|
|
92
|
+
optional :url, String, nil?: true
|
|
93
|
+
|
|
94
|
+
# @!method initialize(description:, features:, name:, tags:, target_audience:, billing_frequency: nil, category: nil, currency: nil, image_url: nil, price: nil, pricing_model: nil, url: nil)
|
|
95
|
+
# @param description [String] Description of the product
|
|
96
|
+
#
|
|
97
|
+
# @param features [Array<String>] List of product features
|
|
98
|
+
#
|
|
99
|
+
# @param name [String] Name of the product
|
|
100
|
+
#
|
|
101
|
+
# @param tags [Array<String>] Tags associated with the product
|
|
102
|
+
#
|
|
103
|
+
# @param target_audience [Array<String>] Target audience for the product (array of strings)
|
|
104
|
+
#
|
|
105
|
+
# @param billing_frequency [Symbol, BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency, nil] Billing frequency for the product
|
|
106
|
+
#
|
|
107
|
+
# @param category [String, nil] Category of the product
|
|
108
|
+
#
|
|
109
|
+
# @param currency [String, nil] Currency code for the price (e.g., USD, EUR)
|
|
110
|
+
#
|
|
111
|
+
# @param image_url [String, nil] URL to the product image
|
|
112
|
+
#
|
|
113
|
+
# @param price [Float, nil] Price of the product
|
|
114
|
+
#
|
|
115
|
+
# @param pricing_model [Symbol, BrandDev::Models::BrandAIProductsResponse::Product::PricingModel, nil] Pricing model for the product
|
|
116
|
+
#
|
|
117
|
+
# @param url [String, nil] URL to the product page
|
|
118
|
+
|
|
119
|
+
# Billing frequency for the product
|
|
120
|
+
#
|
|
121
|
+
# @see BrandDev::Models::BrandAIProductsResponse::Product#billing_frequency
|
|
122
|
+
module BillingFrequency
|
|
123
|
+
extend BrandDev::Internal::Type::Enum
|
|
124
|
+
|
|
125
|
+
MONTHLY = :monthly
|
|
126
|
+
YEARLY = :yearly
|
|
127
|
+
ONE_TIME = :one_time
|
|
128
|
+
USAGE_BASED = :usage_based
|
|
129
|
+
|
|
130
|
+
# @!method self.values
|
|
131
|
+
# @return [Array<Symbol>]
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Pricing model for the product
|
|
135
|
+
#
|
|
136
|
+
# @see BrandDev::Models::BrandAIProductsResponse::Product#pricing_model
|
|
137
|
+
module PricingModel
|
|
138
|
+
extend BrandDev::Internal::Type::Enum
|
|
139
|
+
|
|
140
|
+
PER_SEAT = :per_seat
|
|
141
|
+
FLAT = :flat
|
|
142
|
+
TIERED = :tiered
|
|
143
|
+
FREEMIUM = :freemium
|
|
144
|
+
CUSTOM = :custom
|
|
145
|
+
|
|
146
|
+
# @!method self.values
|
|
147
|
+
# @return [Array<Symbol>]
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
data/lib/brand_dev/models.rb
CHANGED
|
@@ -39,6 +39,8 @@ module BrandDev
|
|
|
39
39
|
mod.define_sorbet_constant!(const) { T.type_alias { mod.to_sorbet_type } }
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
BrandAIProductsParams = BrandDev::Models::BrandAIProductsParams
|
|
43
|
+
|
|
42
44
|
BrandAIQueryParams = BrandDev::Models::BrandAIQueryParams
|
|
43
45
|
|
|
44
46
|
BrandFontsParams = BrandDev::Models::BrandFontsParams
|
|
@@ -35,12 +35,43 @@ module BrandDev
|
|
|
35
35
|
)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
+
# Some parameter documentations has been truncated, see
|
|
39
|
+
# {BrandDev::Models::BrandAIProductsParams} for more details.
|
|
40
|
+
#
|
|
41
|
+
# Beta feature: Extract product information from a brand's website. Brand.dev will
|
|
42
|
+
# analyze the website and return a list of products with details such as name,
|
|
43
|
+
# description, image, pricing, features, and more.
|
|
44
|
+
#
|
|
45
|
+
# @overload ai_products(domain:, max_products: nil, timeout_ms: nil, request_options: {})
|
|
46
|
+
#
|
|
47
|
+
# @param domain [String] The domain name to analyze
|
|
48
|
+
#
|
|
49
|
+
# @param max_products [Integer] Maximum number of products to extract.
|
|
50
|
+
#
|
|
51
|
+
# @param timeout_ms [Integer] Optional timeout in milliseconds for the request. If the request takes longer th
|
|
52
|
+
#
|
|
53
|
+
# @param request_options [BrandDev::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
54
|
+
#
|
|
55
|
+
# @return [BrandDev::Models::BrandAIProductsResponse]
|
|
56
|
+
#
|
|
57
|
+
# @see BrandDev::Models::BrandAIProductsParams
|
|
58
|
+
def ai_products(params)
|
|
59
|
+
parsed, options = BrandDev::BrandAIProductsParams.dump_request(params)
|
|
60
|
+
@client.request(
|
|
61
|
+
method: :post,
|
|
62
|
+
path: "brand/ai/products",
|
|
63
|
+
body: parsed,
|
|
64
|
+
model: BrandDev::Models::BrandAIProductsResponse,
|
|
65
|
+
options: options
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
|
|
38
69
|
# Some parameter documentations has been truncated, see
|
|
39
70
|
# {BrandDev::Models::BrandAIQueryParams} for more details.
|
|
40
71
|
#
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
#
|
|
72
|
+
# Use AI to extract specific data points from a brand's website. The AI will crawl
|
|
73
|
+
# the website and extract the requested information based on the provided data
|
|
74
|
+
# points.
|
|
44
75
|
#
|
|
45
76
|
# @overload ai_query(data_to_extract:, domain:, specific_pages: nil, timeout_ms: nil, request_options: {})
|
|
46
77
|
#
|
|
@@ -71,8 +102,8 @@ module BrandDev
|
|
|
71
102
|
# Some parameter documentations has been truncated, see
|
|
72
103
|
# {BrandDev::Models::BrandFontsParams} for more details.
|
|
73
104
|
#
|
|
74
|
-
#
|
|
75
|
-
#
|
|
105
|
+
# Extract font information from a brand's website including font families, usage
|
|
106
|
+
# statistics, fallbacks, and element/word counts.
|
|
76
107
|
#
|
|
77
108
|
# @overload fonts(domain:, timeout_ms: nil, request_options: {})
|
|
78
109
|
#
|
|
@@ -398,10 +429,10 @@ module BrandDev
|
|
|
398
429
|
# Some parameter documentations has been truncated, see
|
|
399
430
|
# {BrandDev::Models::BrandScreenshotParams} for more details.
|
|
400
431
|
#
|
|
401
|
-
#
|
|
402
|
-
#
|
|
403
|
-
#
|
|
404
|
-
#
|
|
432
|
+
# Capture a screenshot of a website. Supports both viewport (standard browser
|
|
433
|
+
# view) and full-page screenshots. Can also screenshot specific page types (login,
|
|
434
|
+
# pricing, etc.) by using heuristics to find the appropriate URL. Returns a URL to
|
|
435
|
+
# the uploaded screenshot image hosted on our CDN.
|
|
405
436
|
#
|
|
406
437
|
# @overload screenshot(domain:, full_screenshot: nil, page: nil, prioritize: nil, request_options: {})
|
|
407
438
|
#
|
|
@@ -432,9 +463,8 @@ module BrandDev
|
|
|
432
463
|
# Some parameter documentations has been truncated, see
|
|
433
464
|
# {BrandDev::Models::BrandStyleguideParams} for more details.
|
|
434
465
|
#
|
|
435
|
-
#
|
|
436
|
-
#
|
|
437
|
-
# components.
|
|
466
|
+
# Automatically extract comprehensive design system information from a brand's
|
|
467
|
+
# website including colors, typography, spacing, shadows, and UI components.
|
|
438
468
|
#
|
|
439
469
|
# @overload styleguide(domain:, prioritize: nil, timeout_ms: nil, request_options: {})
|
|
440
470
|
#
|
data/lib/brand_dev/version.rb
CHANGED
data/lib/brand_dev.rb
CHANGED
|
@@ -52,6 +52,8 @@ require_relative "brand_dev/errors"
|
|
|
52
52
|
require_relative "brand_dev/internal/transport/base_client"
|
|
53
53
|
require_relative "brand_dev/internal/transport/pooled_net_requester"
|
|
54
54
|
require_relative "brand_dev/client"
|
|
55
|
+
require_relative "brand_dev/models/brand_ai_products_params"
|
|
56
|
+
require_relative "brand_dev/models/brand_ai_products_response"
|
|
55
57
|
require_relative "brand_dev/models/brand_ai_query_params"
|
|
56
58
|
require_relative "brand_dev/models/brand_ai_query_response"
|
|
57
59
|
require_relative "brand_dev/models/brand_fonts_params"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module BrandDev
|
|
4
|
+
module Models
|
|
5
|
+
class BrandAIProductsParams < BrandDev::Internal::Type::BaseModel
|
|
6
|
+
extend BrandDev::Internal::Type::RequestParameters::Converter
|
|
7
|
+
include BrandDev::Internal::Type::RequestParameters
|
|
8
|
+
|
|
9
|
+
OrHash =
|
|
10
|
+
T.type_alias do
|
|
11
|
+
T.any(BrandDev::BrandAIProductsParams, BrandDev::Internal::AnyHash)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# The domain name to analyze
|
|
15
|
+
sig { returns(String) }
|
|
16
|
+
attr_accessor :domain
|
|
17
|
+
|
|
18
|
+
# Maximum number of products to extract.
|
|
19
|
+
sig { returns(T.nilable(Integer)) }
|
|
20
|
+
attr_reader :max_products
|
|
21
|
+
|
|
22
|
+
sig { params(max_products: Integer).void }
|
|
23
|
+
attr_writer :max_products
|
|
24
|
+
|
|
25
|
+
# Optional timeout in milliseconds for the request. If the request takes longer
|
|
26
|
+
# than this value, it will be aborted with a 408 status code. Maximum allowed
|
|
27
|
+
# value is 300000ms (5 minutes).
|
|
28
|
+
sig { returns(T.nilable(Integer)) }
|
|
29
|
+
attr_reader :timeout_ms
|
|
30
|
+
|
|
31
|
+
sig { params(timeout_ms: Integer).void }
|
|
32
|
+
attr_writer :timeout_ms
|
|
33
|
+
|
|
34
|
+
sig do
|
|
35
|
+
params(
|
|
36
|
+
domain: String,
|
|
37
|
+
max_products: Integer,
|
|
38
|
+
timeout_ms: Integer,
|
|
39
|
+
request_options: BrandDev::RequestOptions::OrHash
|
|
40
|
+
).returns(T.attached_class)
|
|
41
|
+
end
|
|
42
|
+
def self.new(
|
|
43
|
+
# The domain name to analyze
|
|
44
|
+
domain:,
|
|
45
|
+
# Maximum number of products to extract.
|
|
46
|
+
max_products: nil,
|
|
47
|
+
# Optional timeout in milliseconds for the request. If the request takes longer
|
|
48
|
+
# than this value, it will be aborted with a 408 status code. Maximum allowed
|
|
49
|
+
# value is 300000ms (5 minutes).
|
|
50
|
+
timeout_ms: nil,
|
|
51
|
+
request_options: {}
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
sig do
|
|
56
|
+
override.returns(
|
|
57
|
+
{
|
|
58
|
+
domain: String,
|
|
59
|
+
max_products: Integer,
|
|
60
|
+
timeout_ms: Integer,
|
|
61
|
+
request_options: BrandDev::RequestOptions
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
def to_hash
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module BrandDev
|
|
4
|
+
module Models
|
|
5
|
+
class BrandAIProductsResponse < BrandDev::Internal::Type::BaseModel
|
|
6
|
+
OrHash =
|
|
7
|
+
T.type_alias do
|
|
8
|
+
T.any(
|
|
9
|
+
BrandDev::Models::BrandAIProductsResponse,
|
|
10
|
+
BrandDev::Internal::AnyHash
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Array of products extracted from the website
|
|
15
|
+
sig do
|
|
16
|
+
returns(
|
|
17
|
+
T.nilable(
|
|
18
|
+
T::Array[BrandDev::Models::BrandAIProductsResponse::Product]
|
|
19
|
+
)
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
attr_reader :products
|
|
23
|
+
|
|
24
|
+
sig do
|
|
25
|
+
params(
|
|
26
|
+
products:
|
|
27
|
+
T::Array[BrandDev::Models::BrandAIProductsResponse::Product::OrHash]
|
|
28
|
+
).void
|
|
29
|
+
end
|
|
30
|
+
attr_writer :products
|
|
31
|
+
|
|
32
|
+
sig do
|
|
33
|
+
params(
|
|
34
|
+
products:
|
|
35
|
+
T::Array[BrandDev::Models::BrandAIProductsResponse::Product::OrHash]
|
|
36
|
+
).returns(T.attached_class)
|
|
37
|
+
end
|
|
38
|
+
def self.new(
|
|
39
|
+
# Array of products extracted from the website
|
|
40
|
+
products: nil
|
|
41
|
+
)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
sig do
|
|
45
|
+
override.returns(
|
|
46
|
+
{
|
|
47
|
+
products:
|
|
48
|
+
T::Array[BrandDev::Models::BrandAIProductsResponse::Product]
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
def to_hash
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Product < BrandDev::Internal::Type::BaseModel
|
|
56
|
+
OrHash =
|
|
57
|
+
T.type_alias do
|
|
58
|
+
T.any(
|
|
59
|
+
BrandDev::Models::BrandAIProductsResponse::Product,
|
|
60
|
+
BrandDev::Internal::AnyHash
|
|
61
|
+
)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Description of the product
|
|
65
|
+
sig { returns(String) }
|
|
66
|
+
attr_accessor :description
|
|
67
|
+
|
|
68
|
+
# List of product features
|
|
69
|
+
sig { returns(T::Array[String]) }
|
|
70
|
+
attr_accessor :features
|
|
71
|
+
|
|
72
|
+
# Name of the product
|
|
73
|
+
sig { returns(String) }
|
|
74
|
+
attr_accessor :name
|
|
75
|
+
|
|
76
|
+
# Tags associated with the product
|
|
77
|
+
sig { returns(T::Array[String]) }
|
|
78
|
+
attr_accessor :tags
|
|
79
|
+
|
|
80
|
+
# Target audience for the product (array of strings)
|
|
81
|
+
sig { returns(T::Array[String]) }
|
|
82
|
+
attr_accessor :target_audience
|
|
83
|
+
|
|
84
|
+
# Billing frequency for the product
|
|
85
|
+
sig do
|
|
86
|
+
returns(
|
|
87
|
+
T.nilable(
|
|
88
|
+
BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency::TaggedSymbol
|
|
89
|
+
)
|
|
90
|
+
)
|
|
91
|
+
end
|
|
92
|
+
attr_accessor :billing_frequency
|
|
93
|
+
|
|
94
|
+
# Category of the product
|
|
95
|
+
sig { returns(T.nilable(String)) }
|
|
96
|
+
attr_accessor :category
|
|
97
|
+
|
|
98
|
+
# Currency code for the price (e.g., USD, EUR)
|
|
99
|
+
sig { returns(T.nilable(String)) }
|
|
100
|
+
attr_accessor :currency
|
|
101
|
+
|
|
102
|
+
# URL to the product image
|
|
103
|
+
sig { returns(T.nilable(String)) }
|
|
104
|
+
attr_accessor :image_url
|
|
105
|
+
|
|
106
|
+
# Price of the product
|
|
107
|
+
sig { returns(T.nilable(Float)) }
|
|
108
|
+
attr_accessor :price
|
|
109
|
+
|
|
110
|
+
# Pricing model for the product
|
|
111
|
+
sig do
|
|
112
|
+
returns(
|
|
113
|
+
T.nilable(
|
|
114
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel::TaggedSymbol
|
|
115
|
+
)
|
|
116
|
+
)
|
|
117
|
+
end
|
|
118
|
+
attr_accessor :pricing_model
|
|
119
|
+
|
|
120
|
+
# URL to the product page
|
|
121
|
+
sig { returns(T.nilable(String)) }
|
|
122
|
+
attr_accessor :url
|
|
123
|
+
|
|
124
|
+
sig do
|
|
125
|
+
params(
|
|
126
|
+
description: String,
|
|
127
|
+
features: T::Array[String],
|
|
128
|
+
name: String,
|
|
129
|
+
tags: T::Array[String],
|
|
130
|
+
target_audience: T::Array[String],
|
|
131
|
+
billing_frequency:
|
|
132
|
+
T.nilable(
|
|
133
|
+
BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency::OrSymbol
|
|
134
|
+
),
|
|
135
|
+
category: T.nilable(String),
|
|
136
|
+
currency: T.nilable(String),
|
|
137
|
+
image_url: T.nilable(String),
|
|
138
|
+
price: T.nilable(Float),
|
|
139
|
+
pricing_model:
|
|
140
|
+
T.nilable(
|
|
141
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel::OrSymbol
|
|
142
|
+
),
|
|
143
|
+
url: T.nilable(String)
|
|
144
|
+
).returns(T.attached_class)
|
|
145
|
+
end
|
|
146
|
+
def self.new(
|
|
147
|
+
# Description of the product
|
|
148
|
+
description:,
|
|
149
|
+
# List of product features
|
|
150
|
+
features:,
|
|
151
|
+
# Name of the product
|
|
152
|
+
name:,
|
|
153
|
+
# Tags associated with the product
|
|
154
|
+
tags:,
|
|
155
|
+
# Target audience for the product (array of strings)
|
|
156
|
+
target_audience:,
|
|
157
|
+
# Billing frequency for the product
|
|
158
|
+
billing_frequency: nil,
|
|
159
|
+
# Category of the product
|
|
160
|
+
category: nil,
|
|
161
|
+
# Currency code for the price (e.g., USD, EUR)
|
|
162
|
+
currency: nil,
|
|
163
|
+
# URL to the product image
|
|
164
|
+
image_url: nil,
|
|
165
|
+
# Price of the product
|
|
166
|
+
price: nil,
|
|
167
|
+
# Pricing model for the product
|
|
168
|
+
pricing_model: nil,
|
|
169
|
+
# URL to the product page
|
|
170
|
+
url: nil
|
|
171
|
+
)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
sig do
|
|
175
|
+
override.returns(
|
|
176
|
+
{
|
|
177
|
+
description: String,
|
|
178
|
+
features: T::Array[String],
|
|
179
|
+
name: String,
|
|
180
|
+
tags: T::Array[String],
|
|
181
|
+
target_audience: T::Array[String],
|
|
182
|
+
billing_frequency:
|
|
183
|
+
T.nilable(
|
|
184
|
+
BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency::TaggedSymbol
|
|
185
|
+
),
|
|
186
|
+
category: T.nilable(String),
|
|
187
|
+
currency: T.nilable(String),
|
|
188
|
+
image_url: T.nilable(String),
|
|
189
|
+
price: T.nilable(Float),
|
|
190
|
+
pricing_model:
|
|
191
|
+
T.nilable(
|
|
192
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel::TaggedSymbol
|
|
193
|
+
),
|
|
194
|
+
url: T.nilable(String)
|
|
195
|
+
}
|
|
196
|
+
)
|
|
197
|
+
end
|
|
198
|
+
def to_hash
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Billing frequency for the product
|
|
202
|
+
module BillingFrequency
|
|
203
|
+
extend BrandDev::Internal::Type::Enum
|
|
204
|
+
|
|
205
|
+
TaggedSymbol =
|
|
206
|
+
T.type_alias do
|
|
207
|
+
T.all(
|
|
208
|
+
Symbol,
|
|
209
|
+
BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency
|
|
210
|
+
)
|
|
211
|
+
end
|
|
212
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
213
|
+
|
|
214
|
+
MONTHLY =
|
|
215
|
+
T.let(
|
|
216
|
+
:monthly,
|
|
217
|
+
BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency::TaggedSymbol
|
|
218
|
+
)
|
|
219
|
+
YEARLY =
|
|
220
|
+
T.let(
|
|
221
|
+
:yearly,
|
|
222
|
+
BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency::TaggedSymbol
|
|
223
|
+
)
|
|
224
|
+
ONE_TIME =
|
|
225
|
+
T.let(
|
|
226
|
+
:one_time,
|
|
227
|
+
BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency::TaggedSymbol
|
|
228
|
+
)
|
|
229
|
+
USAGE_BASED =
|
|
230
|
+
T.let(
|
|
231
|
+
:usage_based,
|
|
232
|
+
BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency::TaggedSymbol
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
sig do
|
|
236
|
+
override.returns(
|
|
237
|
+
T::Array[
|
|
238
|
+
BrandDev::Models::BrandAIProductsResponse::Product::BillingFrequency::TaggedSymbol
|
|
239
|
+
]
|
|
240
|
+
)
|
|
241
|
+
end
|
|
242
|
+
def self.values
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Pricing model for the product
|
|
247
|
+
module PricingModel
|
|
248
|
+
extend BrandDev::Internal::Type::Enum
|
|
249
|
+
|
|
250
|
+
TaggedSymbol =
|
|
251
|
+
T.type_alias do
|
|
252
|
+
T.all(
|
|
253
|
+
Symbol,
|
|
254
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel
|
|
255
|
+
)
|
|
256
|
+
end
|
|
257
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
258
|
+
|
|
259
|
+
PER_SEAT =
|
|
260
|
+
T.let(
|
|
261
|
+
:per_seat,
|
|
262
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel::TaggedSymbol
|
|
263
|
+
)
|
|
264
|
+
FLAT =
|
|
265
|
+
T.let(
|
|
266
|
+
:flat,
|
|
267
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel::TaggedSymbol
|
|
268
|
+
)
|
|
269
|
+
TIERED =
|
|
270
|
+
T.let(
|
|
271
|
+
:tiered,
|
|
272
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel::TaggedSymbol
|
|
273
|
+
)
|
|
274
|
+
FREEMIUM =
|
|
275
|
+
T.let(
|
|
276
|
+
:freemium,
|
|
277
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel::TaggedSymbol
|
|
278
|
+
)
|
|
279
|
+
CUSTOM =
|
|
280
|
+
T.let(
|
|
281
|
+
:custom,
|
|
282
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel::TaggedSymbol
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
sig do
|
|
286
|
+
override.returns(
|
|
287
|
+
T::Array[
|
|
288
|
+
BrandDev::Models::BrandAIProductsResponse::Product::PricingModel::TaggedSymbol
|
|
289
|
+
]
|
|
290
|
+
)
|
|
291
|
+
end
|
|
292
|
+
def self.values
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
end
|
data/rbi/brand_dev/models.rbi
CHANGED
|
@@ -34,9 +34,33 @@ module BrandDev
|
|
|
34
34
|
)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
# Beta feature:
|
|
38
|
-
#
|
|
39
|
-
#
|
|
37
|
+
# Beta feature: Extract product information from a brand's website. Brand.dev will
|
|
38
|
+
# analyze the website and return a list of products with details such as name,
|
|
39
|
+
# description, image, pricing, features, and more.
|
|
40
|
+
sig do
|
|
41
|
+
params(
|
|
42
|
+
domain: String,
|
|
43
|
+
max_products: Integer,
|
|
44
|
+
timeout_ms: Integer,
|
|
45
|
+
request_options: BrandDev::RequestOptions::OrHash
|
|
46
|
+
).returns(BrandDev::Models::BrandAIProductsResponse)
|
|
47
|
+
end
|
|
48
|
+
def ai_products(
|
|
49
|
+
# The domain name to analyze
|
|
50
|
+
domain:,
|
|
51
|
+
# Maximum number of products to extract.
|
|
52
|
+
max_products: nil,
|
|
53
|
+
# Optional timeout in milliseconds for the request. If the request takes longer
|
|
54
|
+
# than this value, it will be aborted with a 408 status code. Maximum allowed
|
|
55
|
+
# value is 300000ms (5 minutes).
|
|
56
|
+
timeout_ms: nil,
|
|
57
|
+
request_options: {}
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Use AI to extract specific data points from a brand's website. The AI will crawl
|
|
62
|
+
# the website and extract the requested information based on the provided data
|
|
63
|
+
# points.
|
|
40
64
|
sig do
|
|
41
65
|
params(
|
|
42
66
|
data_to_extract:
|
|
@@ -62,8 +86,8 @@ module BrandDev
|
|
|
62
86
|
)
|
|
63
87
|
end
|
|
64
88
|
|
|
65
|
-
#
|
|
66
|
-
#
|
|
89
|
+
# Extract font information from a brand's website including font families, usage
|
|
90
|
+
# statistics, fallbacks, and element/word counts.
|
|
67
91
|
sig do
|
|
68
92
|
params(
|
|
69
93
|
domain: String,
|
|
@@ -353,10 +377,10 @@ module BrandDev
|
|
|
353
377
|
)
|
|
354
378
|
end
|
|
355
379
|
|
|
356
|
-
#
|
|
357
|
-
#
|
|
358
|
-
#
|
|
359
|
-
#
|
|
380
|
+
# Capture a screenshot of a website. Supports both viewport (standard browser
|
|
381
|
+
# view) and full-page screenshots. Can also screenshot specific page types (login,
|
|
382
|
+
# pricing, etc.) by using heuristics to find the appropriate URL. Returns a URL to
|
|
383
|
+
# the uploaded screenshot image hosted on our CDN.
|
|
360
384
|
sig do
|
|
361
385
|
params(
|
|
362
386
|
domain: String,
|
|
@@ -388,9 +412,8 @@ module BrandDev
|
|
|
388
412
|
)
|
|
389
413
|
end
|
|
390
414
|
|
|
391
|
-
#
|
|
392
|
-
#
|
|
393
|
-
# components.
|
|
415
|
+
# Automatically extract comprehensive design system information from a brand's
|
|
416
|
+
# website including colors, typography, spacing, shadows, and UI components.
|
|
394
417
|
sig do
|
|
395
418
|
params(
|
|
396
419
|
domain: String,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module BrandDev
|
|
2
|
+
module Models
|
|
3
|
+
type brand_ai_products_params =
|
|
4
|
+
{ domain: String, max_products: Integer, timeout_ms: Integer }
|
|
5
|
+
& BrandDev::Internal::Type::request_parameters
|
|
6
|
+
|
|
7
|
+
class BrandAIProductsParams < BrandDev::Internal::Type::BaseModel
|
|
8
|
+
extend BrandDev::Internal::Type::RequestParameters::Converter
|
|
9
|
+
include BrandDev::Internal::Type::RequestParameters
|
|
10
|
+
|
|
11
|
+
attr_accessor domain: String
|
|
12
|
+
|
|
13
|
+
attr_reader max_products: Integer?
|
|
14
|
+
|
|
15
|
+
def max_products=: (Integer) -> Integer
|
|
16
|
+
|
|
17
|
+
attr_reader timeout_ms: Integer?
|
|
18
|
+
|
|
19
|
+
def timeout_ms=: (Integer) -> Integer
|
|
20
|
+
|
|
21
|
+
def initialize: (
|
|
22
|
+
domain: String,
|
|
23
|
+
?max_products: Integer,
|
|
24
|
+
?timeout_ms: Integer,
|
|
25
|
+
?request_options: BrandDev::request_opts
|
|
26
|
+
) -> void
|
|
27
|
+
|
|
28
|
+
def to_hash: -> {
|
|
29
|
+
domain: String,
|
|
30
|
+
max_products: Integer,
|
|
31
|
+
timeout_ms: Integer,
|
|
32
|
+
request_options: BrandDev::RequestOptions
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
module BrandDev
|
|
2
|
+
module Models
|
|
3
|
+
type brand_ai_products_response =
|
|
4
|
+
{ products: ::Array[BrandDev::Models::BrandAIProductsResponse::Product] }
|
|
5
|
+
|
|
6
|
+
class BrandAIProductsResponse < BrandDev::Internal::Type::BaseModel
|
|
7
|
+
attr_reader products: ::Array[BrandDev::Models::BrandAIProductsResponse::Product]?
|
|
8
|
+
|
|
9
|
+
def products=: (
|
|
10
|
+
::Array[BrandDev::Models::BrandAIProductsResponse::Product]
|
|
11
|
+
) -> ::Array[BrandDev::Models::BrandAIProductsResponse::Product]
|
|
12
|
+
|
|
13
|
+
def initialize: (
|
|
14
|
+
?products: ::Array[BrandDev::Models::BrandAIProductsResponse::Product]
|
|
15
|
+
) -> void
|
|
16
|
+
|
|
17
|
+
def to_hash: -> {
|
|
18
|
+
products: ::Array[BrandDev::Models::BrandAIProductsResponse::Product]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type product =
|
|
22
|
+
{
|
|
23
|
+
description: String,
|
|
24
|
+
features: ::Array[String],
|
|
25
|
+
name: String,
|
|
26
|
+
tags: ::Array[String],
|
|
27
|
+
target_audience: ::Array[String],
|
|
28
|
+
billing_frequency: BrandDev::Models::BrandAIProductsResponse::Product::billing_frequency?,
|
|
29
|
+
category: String?,
|
|
30
|
+
currency: String?,
|
|
31
|
+
image_url: String?,
|
|
32
|
+
price: Float?,
|
|
33
|
+
pricing_model: BrandDev::Models::BrandAIProductsResponse::Product::pricing_model?,
|
|
34
|
+
url: String?
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
class Product < BrandDev::Internal::Type::BaseModel
|
|
38
|
+
attr_accessor description: String
|
|
39
|
+
|
|
40
|
+
attr_accessor features: ::Array[String]
|
|
41
|
+
|
|
42
|
+
attr_accessor name: String
|
|
43
|
+
|
|
44
|
+
attr_accessor tags: ::Array[String]
|
|
45
|
+
|
|
46
|
+
attr_accessor target_audience: ::Array[String]
|
|
47
|
+
|
|
48
|
+
attr_accessor billing_frequency: BrandDev::Models::BrandAIProductsResponse::Product::billing_frequency?
|
|
49
|
+
|
|
50
|
+
attr_accessor category: String?
|
|
51
|
+
|
|
52
|
+
attr_accessor currency: String?
|
|
53
|
+
|
|
54
|
+
attr_accessor image_url: String?
|
|
55
|
+
|
|
56
|
+
attr_accessor price: Float?
|
|
57
|
+
|
|
58
|
+
attr_accessor pricing_model: BrandDev::Models::BrandAIProductsResponse::Product::pricing_model?
|
|
59
|
+
|
|
60
|
+
attr_accessor url: String?
|
|
61
|
+
|
|
62
|
+
def initialize: (
|
|
63
|
+
description: String,
|
|
64
|
+
features: ::Array[String],
|
|
65
|
+
name: String,
|
|
66
|
+
tags: ::Array[String],
|
|
67
|
+
target_audience: ::Array[String],
|
|
68
|
+
?billing_frequency: BrandDev::Models::BrandAIProductsResponse::Product::billing_frequency?,
|
|
69
|
+
?category: String?,
|
|
70
|
+
?currency: String?,
|
|
71
|
+
?image_url: String?,
|
|
72
|
+
?price: Float?,
|
|
73
|
+
?pricing_model: BrandDev::Models::BrandAIProductsResponse::Product::pricing_model?,
|
|
74
|
+
?url: String?
|
|
75
|
+
) -> void
|
|
76
|
+
|
|
77
|
+
def to_hash: -> {
|
|
78
|
+
description: String,
|
|
79
|
+
features: ::Array[String],
|
|
80
|
+
name: String,
|
|
81
|
+
tags: ::Array[String],
|
|
82
|
+
target_audience: ::Array[String],
|
|
83
|
+
billing_frequency: BrandDev::Models::BrandAIProductsResponse::Product::billing_frequency?,
|
|
84
|
+
category: String?,
|
|
85
|
+
currency: String?,
|
|
86
|
+
image_url: String?,
|
|
87
|
+
price: Float?,
|
|
88
|
+
pricing_model: BrandDev::Models::BrandAIProductsResponse::Product::pricing_model?,
|
|
89
|
+
url: String?
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
type billing_frequency = :monthly | :yearly | :one_time | :usage_based
|
|
93
|
+
|
|
94
|
+
module BillingFrequency
|
|
95
|
+
extend BrandDev::Internal::Type::Enum
|
|
96
|
+
|
|
97
|
+
MONTHLY: :monthly
|
|
98
|
+
YEARLY: :yearly
|
|
99
|
+
ONE_TIME: :one_time
|
|
100
|
+
USAGE_BASED: :usage_based
|
|
101
|
+
|
|
102
|
+
def self?.values: -> ::Array[BrandDev::Models::BrandAIProductsResponse::Product::billing_frequency]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
type pricing_model = :per_seat | :flat | :tiered | :freemium | :custom
|
|
106
|
+
|
|
107
|
+
module PricingModel
|
|
108
|
+
extend BrandDev::Internal::Type::Enum
|
|
109
|
+
|
|
110
|
+
PER_SEAT: :per_seat
|
|
111
|
+
FLAT: :flat
|
|
112
|
+
TIERED: :tiered
|
|
113
|
+
FREEMIUM: :freemium
|
|
114
|
+
CUSTOM: :custom
|
|
115
|
+
|
|
116
|
+
def self?.values: -> ::Array[BrandDev::Models::BrandAIProductsResponse::Product::pricing_model]
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
data/sig/brand_dev/models.rbs
CHANGED
|
@@ -9,6 +9,13 @@ module BrandDev
|
|
|
9
9
|
?request_options: BrandDev::request_opts
|
|
10
10
|
) -> BrandDev::Models::BrandRetrieveResponse
|
|
11
11
|
|
|
12
|
+
def ai_products: (
|
|
13
|
+
domain: String,
|
|
14
|
+
?max_products: Integer,
|
|
15
|
+
?timeout_ms: Integer,
|
|
16
|
+
?request_options: BrandDev::request_opts
|
|
17
|
+
) -> BrandDev::Models::BrandAIProductsResponse
|
|
18
|
+
|
|
12
19
|
def ai_query: (
|
|
13
20
|
data_to_extract: ::Array[BrandDev::BrandAIQueryParams::DataToExtract],
|
|
14
21
|
domain: String,
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: brand.dev
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.20.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brand Dev
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: connection_pool
|
|
@@ -54,6 +54,8 @@ files:
|
|
|
54
54
|
- lib/brand_dev/internal/type/unknown.rb
|
|
55
55
|
- lib/brand_dev/internal/util.rb
|
|
56
56
|
- lib/brand_dev/models.rb
|
|
57
|
+
- lib/brand_dev/models/brand_ai_products_params.rb
|
|
58
|
+
- lib/brand_dev/models/brand_ai_products_response.rb
|
|
57
59
|
- lib/brand_dev/models/brand_ai_query_params.rb
|
|
58
60
|
- lib/brand_dev/models/brand_ai_query_response.rb
|
|
59
61
|
- lib/brand_dev/models/brand_fonts_params.rb
|
|
@@ -105,6 +107,8 @@ files:
|
|
|
105
107
|
- rbi/brand_dev/internal/type/unknown.rbi
|
|
106
108
|
- rbi/brand_dev/internal/util.rbi
|
|
107
109
|
- rbi/brand_dev/models.rbi
|
|
110
|
+
- rbi/brand_dev/models/brand_ai_products_params.rbi
|
|
111
|
+
- rbi/brand_dev/models/brand_ai_products_response.rbi
|
|
108
112
|
- rbi/brand_dev/models/brand_ai_query_params.rbi
|
|
109
113
|
- rbi/brand_dev/models/brand_ai_query_response.rbi
|
|
110
114
|
- rbi/brand_dev/models/brand_fonts_params.rbi
|
|
@@ -155,6 +159,8 @@ files:
|
|
|
155
159
|
- sig/brand_dev/internal/type/unknown.rbs
|
|
156
160
|
- sig/brand_dev/internal/util.rbs
|
|
157
161
|
- sig/brand_dev/models.rbs
|
|
162
|
+
- sig/brand_dev/models/brand_ai_products_params.rbs
|
|
163
|
+
- sig/brand_dev/models/brand_ai_products_response.rbs
|
|
158
164
|
- sig/brand_dev/models/brand_ai_query_params.rbs
|
|
159
165
|
- sig/brand_dev/models/brand_ai_query_response.rbs
|
|
160
166
|
- sig/brand_dev/models/brand_fonts_params.rbs
|