@trillboards/cli 0.1.6 → 0.1.7

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 CHANGED
@@ -20,7 +20,7 @@ $ npm install -g @trillboards/cli
20
20
  $ trillboards COMMAND
21
21
  running command...
22
22
  $ trillboards (--version)
23
- @trillboards/cli/0.1.6 linux-x64 node-v22.23.3
23
+ @trillboards/cli/0.1.7 linux-x64 node-v22.23.4
24
24
  $ trillboards --help [COMMAND]
25
25
  USAGE
26
26
  $ trillboards COMMAND
@@ -55,6 +55,8 @@ USAGE
55
55
  * [`trillboards generated generated-creative-feedback-variants-register EXPERIMENT_ID`](#trillboards-generated-generated-creative-feedback-variants-register-experiment_id)
56
56
  * [`trillboards generated generated-csi-venue-history SCREENID`](#trillboards-generated-generated-csi-venue-history-screenid)
57
57
  * [`trillboards generated generated-csi-venue-occupancy SCREENID`](#trillboards-generated-generated-csi-venue-occupancy-screenid)
58
+ * [`trillboards generated generated-data-api-ad-sightings`](#trillboards-generated-generated-data-api-ad-sightings)
59
+ * [`trillboards generated generated-data-api-ad-sightings-history`](#trillboards-generated-generated-data-api-ad-sightings-history)
58
60
  * [`trillboards generated generated-data-api-aggregate`](#trillboards-generated-generated-data-api-aggregate)
59
61
  * [`trillboards generated generated-data-api-list-screens`](#trillboards-generated-generated-data-api-list-screens)
60
62
  * [`trillboards generated generated-data-api-lookalike-screens`](#trillboards-generated-generated-data-api-lookalike-screens)
@@ -66,6 +68,7 @@ USAGE
66
68
  * [`trillboards generated generated-data-api-stream`](#trillboards-generated-generated-data-api-stream)
67
69
  * [`trillboards generated generated-data-api-usage`](#trillboards-generated-generated-data-api-usage)
68
70
  * [`trillboards generated generated-device-ota-manifest`](#trillboards-generated-generated-device-ota-manifest)
71
+ * [`trillboards generated generated-device-retained-cctv-review`](#trillboards-generated-generated-device-retained-cctv-review)
69
72
  * [`trillboards generated generated-device-sensing-profile`](#trillboards-generated-generated-device-sensing-profile)
70
73
  * [`trillboards generated generated-error-code-get CODE`](#trillboards-generated-generated-error-code-get-code)
71
74
  * [`trillboards generated generated-error-codes-list`](#trillboards-generated-generated-error-codes-list)
@@ -791,6 +794,73 @@ EXAMPLES
791
794
  $ trillboards generated csi-venue-occupancy
792
795
  ```
793
796
 
797
+ ## `trillboards generated generated-data-api-ad-sightings`
798
+
799
+ Ad-sighting records: outdoor ads our cab cameras read, each with a signed photo link.
800
+
801
+ ```
802
+ USAGE
803
+ $ trillboards generated generated-data-api-ad-sightings [--api-key <value>] [--base-url <value>] [--format json|table|yaml] [--brand <value>]
804
+ [--brand_id <value>] [--market <value>] [--surface <value>] [--board_id <value>] [--creative_id <value>]
805
+ [--instrument <value>] [--from <value>] [--to <value>] [--limit <value>] [--cursor <value>]
806
+
807
+ FLAGS
808
+ --api-key=<value> [env: TRILLBOARDS_API_KEY] API key (or set TRILLBOARDS_API_KEY env var)
809
+ --base-url=<value> [default: https://api.trillboards.com] API base URL
810
+ --board_id=<value> A board the sighting was matched to, repeatable.
811
+ --brand=<value> A brand, repeatable for a brand set (competitors). Matched however it is typed: "McDonald's",
812
+ "mcdonalds" and "Mc Donalds" find the same records.
813
+ --brand_id=<value> A resolved brand id, repeatable. Combined with `brand` as either-or.
814
+ --creative_id=<value> A sighted creative (the campaign artwork), repeatable.
815
+ --cursor=<value> The `next_cursor` of the previous page.
816
+ --format=<option> Output format
817
+ <options: json|table|yaml>
818
+ --from=<value> Start (inclusive), YYYY-MM-DD or an ISO-8601 instant. Default: 30 days before `to`.
819
+ --instrument=<value> The reading instrument (ssr-v2, ssr-v1, vlmtext-v1, edge_ocr_v1), repeatable.
820
+ --limit=<value> Records per page, 1..500 (default 50). The page limit is reserved; the records returned are
821
+ billed.
822
+ --market=<value> A market as COUNTRY:CODE (US DMA or CA CMA), repeatable.
823
+ --surface=<value> The surface kind as read (billboard, storefront, bus_shelter, ...), repeatable.
824
+ --to=<value> End (exclusive). Default: now. The span is at most 400 days.
825
+
826
+ DESCRIPTION
827
+ Ad-sighting records: outdoor ads our cab cameras read, each with a signed photo link.
828
+
829
+ EXAMPLES
830
+ $ trillboards generated data-api-ad-sightings
831
+ ```
832
+
833
+ ## `trillboards generated generated-data-api-ad-sightings-history`
834
+
835
+ Outdoor creative history by brand, market and month, from the creative ledger.
836
+
837
+ ```
838
+ USAGE
839
+ $ trillboards generated generated-data-api-ad-sightings-history [--api-key <value>] [--base-url <value>] [--format json|table|yaml] [--brand <value>]
840
+ [--brand_id <value>] [--market <value>] [--from <value>] [--to <value>] [--grain <value>] [--limit <value>]
841
+ [--cursor <value>]
842
+
843
+ FLAGS
844
+ --api-key=<value> [env: TRILLBOARDS_API_KEY] API key (or set TRILLBOARDS_API_KEY env var)
845
+ --base-url=<value> [default: https://api.trillboards.com] API base URL
846
+ --brand=<value> A brand by name, repeatable (competitors). Resolved to its brand id the way the brand search does.
847
+ --brand_id=<value> A resolved brand id, repeatable.
848
+ --cursor=<value> The `next_cursor` of the previous page.
849
+ --format=<option> Output format
850
+ <options: json|table|yaml>
851
+ --from=<value> First month (YYYY-MM) or day. Default: 12 months before `to`.
852
+ --grain=<value> market_month (default) or fleet_month.
853
+ --limit=<value> Rows per page, 1..500 (default 100). The page limit is reserved; the rows returned are billed.
854
+ --market=<value> A market as COUNTRY:CODE, repeatable.
855
+ --to=<value> Last month (YYYY-MM, inclusive) or day. Default: this month.
856
+
857
+ DESCRIPTION
858
+ Outdoor creative history by brand, market and month, from the creative ledger.
859
+
860
+ EXAMPLES
861
+ $ trillboards generated data-api-ad-sightings-history
862
+ ```
863
+
794
864
  ## `trillboards generated generated-data-api-aggregate`
795
865
 
796
866
  Aggregate audience analytics for a time window.
@@ -1061,6 +1131,29 @@ EXAMPLES
1061
1131
  $ trillboards generated device-ota-manifest
1062
1132
  ```
1063
1133
 
1134
+ ## `trillboards generated generated-device-retained-cctv-review`
1135
+
1136
+ Store original CCTV evidence and its completed local review.
1137
+
1138
+ ```
1139
+ USAGE
1140
+ $ trillboards generated generated-device-retained-cctv-review [--api-key <value>] [--base-url <value>] [--format
1141
+ json|table|yaml] [--data <value>]
1142
+
1143
+ FLAGS
1144
+ --api-key=<value> [env: TRILLBOARDS_API_KEY] API key (or set TRILLBOARDS_API_KEY env var)
1145
+ --base-url=<value> [default: https://api.trillboards.com] API base URL
1146
+ --data=<value> JSON request body
1147
+ --format=<option> Output format
1148
+ <options: json|table|yaml>
1149
+
1150
+ DESCRIPTION
1151
+ Store original CCTV evidence and its completed local review.
1152
+
1153
+ EXAMPLES
1154
+ $ trillboards generated device-retained-cctv-review
1155
+ ```
1156
+
1064
1157
  ## `trillboards generated generated-device-sensing-profile`
1065
1158
 
1066
1159
  Active sensing profile for the calling connector's bound screen.
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class Dataapiadsightingshistory extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {};
6
+ static flags: {
7
+ brand: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ brand_id: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ market: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ from: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ to: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ grain: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ limit: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ cursor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'base-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
+ format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ };
19
+ run(): Promise<void>;
20
+ }
@@ -0,0 +1,53 @@
1
+ // AUTO-GENERATED from OpenAPI spec (data-api) -- do not edit manually
2
+ // Regenerate with: npm run generate
3
+ import { Flags } from '@oclif/core';
4
+ import { BaseCommand } from '../../base-command.js';
5
+ import { apiRequest } from '../../http.js';
6
+ import { formatOutput } from '../../output.js';
7
+ export default class Dataapiadsightingshistory extends BaseCommand {
8
+ static description = "Outdoor creative history by brand, market and month, from the creative ledger.";
9
+ static examples = [`$ trillboards generated data-api-ad-sightings-history`];
10
+ static args = {};
11
+ static flags = {
12
+ ...BaseCommand.baseFlags,
13
+ 'brand': Flags.string({ description: 'A brand by name, repeatable (competitors). Resolved to its brand id the way the brand search does.' }),
14
+ 'brand_id': Flags.string({ description: 'A resolved brand id, repeatable.' }),
15
+ 'market': Flags.string({ description: 'A market as COUNTRY:CODE, repeatable.' }),
16
+ 'from': Flags.string({ description: 'First month (YYYY-MM) or day. Default: 12 months before `to`.' }),
17
+ 'to': Flags.string({ description: 'Last month (YYYY-MM, inclusive) or day. Default: this month.' }),
18
+ 'grain': Flags.string({ description: 'market_month (default) or fleet_month.' }),
19
+ 'limit': Flags.string({ description: 'Rows per page, 1..500 (default 100). The page limit is reserved; the rows returned are billed.' }),
20
+ 'cursor': Flags.string({ description: 'The `next_cursor` of the previous page.' }),
21
+ };
22
+ async run() {
23
+ const { args, flags } = await this.parse(Dataapiadsightingshistory);
24
+ this.setParsedFlags(flags);
25
+ const apiKey = this.getApiKey();
26
+ if (!apiKey)
27
+ this.error('Not logged in. Run: trillboards login');
28
+ let urlPath = '/v1/data/ad-sightings/history';
29
+ const params = {};
30
+ if (flags['brand'])
31
+ params['brand'] = flags['brand'];
32
+ if (flags['brand_id'])
33
+ params['brand_id'] = flags['brand_id'];
34
+ if (flags['market'])
35
+ params['market'] = flags['market'];
36
+ if (flags['from'])
37
+ params['from'] = flags['from'];
38
+ if (flags['to'])
39
+ params['to'] = flags['to'];
40
+ if (flags['grain'])
41
+ params['grain'] = flags['grain'];
42
+ if (flags['limit'])
43
+ params['limit'] = flags['limit'];
44
+ if (flags['cursor'])
45
+ params['cursor'] = flags['cursor'];
46
+ const result = await apiRequest('GET', urlPath, {
47
+ apiKey,
48
+ baseUrl: flags['base-url'] ?? 'https://api.trillboards.com',
49
+ params: Object.keys(params).length > 0 ? params : undefined,
50
+ });
51
+ this.log(formatOutput(result, this.getFormat()));
52
+ }
53
+ }
@@ -0,0 +1,23 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class Dataapiadsightings extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {};
6
+ static flags: {
7
+ brand: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ brand_id: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ market: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ surface: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ board_id: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ creative_id: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ instrument: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ from: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ to: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ limit: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ cursor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ 'base-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
20
+ format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ };
22
+ run(): Promise<void>;
23
+ }
@@ -0,0 +1,62 @@
1
+ // AUTO-GENERATED from OpenAPI spec (data-api) -- do not edit manually
2
+ // Regenerate with: npm run generate
3
+ import { Flags } from '@oclif/core';
4
+ import { BaseCommand } from '../../base-command.js';
5
+ import { apiRequest } from '../../http.js';
6
+ import { formatOutput } from '../../output.js';
7
+ export default class Dataapiadsightings extends BaseCommand {
8
+ static description = "Ad-sighting records: outdoor ads our cab cameras read, each with a signed photo link.";
9
+ static examples = [`$ trillboards generated data-api-ad-sightings`];
10
+ static args = {};
11
+ static flags = {
12
+ ...BaseCommand.baseFlags,
13
+ 'brand': Flags.string({ description: 'A brand, repeatable for a brand set (competitors). Matched however it is typed: "McDonald\'s", "mcdonalds" and "Mc Donalds" find the same records.' }),
14
+ 'brand_id': Flags.string({ description: 'A resolved brand id, repeatable. Combined with `brand` as either-or.' }),
15
+ 'market': Flags.string({ description: 'A market as COUNTRY:CODE (US DMA or CA CMA), repeatable.' }),
16
+ 'surface': Flags.string({ description: 'The surface kind as read (billboard, storefront, bus_shelter, ...), repeatable.' }),
17
+ 'board_id': Flags.string({ description: 'A board the sighting was matched to, repeatable.' }),
18
+ 'creative_id': Flags.string({ description: 'A sighted creative (the campaign artwork), repeatable.' }),
19
+ 'instrument': Flags.string({ description: 'The reading instrument (ssr-v2, ssr-v1, vlmtext-v1, edge_ocr_v1), repeatable.' }),
20
+ 'from': Flags.string({ description: 'Start (inclusive), YYYY-MM-DD or an ISO-8601 instant. Default: 30 days before `to`.' }),
21
+ 'to': Flags.string({ description: 'End (exclusive). Default: now. The span is at most 400 days.' }),
22
+ 'limit': Flags.string({ description: 'Records per page, 1..500 (default 50). The page limit is reserved; the records returned are billed.' }),
23
+ 'cursor': Flags.string({ description: 'The `next_cursor` of the previous page.' }),
24
+ };
25
+ async run() {
26
+ const { args, flags } = await this.parse(Dataapiadsightings);
27
+ this.setParsedFlags(flags);
28
+ const apiKey = this.getApiKey();
29
+ if (!apiKey)
30
+ this.error('Not logged in. Run: trillboards login');
31
+ let urlPath = '/v1/data/ad-sightings';
32
+ const params = {};
33
+ if (flags['brand'])
34
+ params['brand'] = flags['brand'];
35
+ if (flags['brand_id'])
36
+ params['brand_id'] = flags['brand_id'];
37
+ if (flags['market'])
38
+ params['market'] = flags['market'];
39
+ if (flags['surface'])
40
+ params['surface'] = flags['surface'];
41
+ if (flags['board_id'])
42
+ params['board_id'] = flags['board_id'];
43
+ if (flags['creative_id'])
44
+ params['creative_id'] = flags['creative_id'];
45
+ if (flags['instrument'])
46
+ params['instrument'] = flags['instrument'];
47
+ if (flags['from'])
48
+ params['from'] = flags['from'];
49
+ if (flags['to'])
50
+ params['to'] = flags['to'];
51
+ if (flags['limit'])
52
+ params['limit'] = flags['limit'];
53
+ if (flags['cursor'])
54
+ params['cursor'] = flags['cursor'];
55
+ const result = await apiRequest('GET', urlPath, {
56
+ apiKey,
57
+ baseUrl: flags['base-url'] ?? 'https://api.trillboards.com',
58
+ params: Object.keys(params).length > 0 ? params : undefined,
59
+ });
60
+ this.log(formatOutput(result, this.getFormat()));
61
+ }
62
+ }
@@ -0,0 +1,13 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class Deviceretainedcctvreview extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {};
6
+ static flags: {
7
+ data: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ 'base-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
@@ -0,0 +1,32 @@
1
+ // AUTO-GENERATED from OpenAPI spec (device-api) -- do not edit manually
2
+ // Regenerate with: npm run generate
3
+ import { Flags } from '@oclif/core';
4
+ import { BaseCommand } from '../../base-command.js';
5
+ import { apiRequest } from '../../http.js';
6
+ import { formatOutput } from '../../output.js';
7
+ export default class Deviceretainedcctvreview extends BaseCommand {
8
+ static description = "Store original CCTV evidence and its completed local review.";
9
+ static examples = [`$ trillboards generated device-retained-cctv-review`];
10
+ static args = {};
11
+ static flags = {
12
+ ...BaseCommand.baseFlags,
13
+ data: Flags.string({ description: 'JSON request body' }),
14
+ };
15
+ async run() {
16
+ const { args, flags } = await this.parse(Deviceretainedcctvreview);
17
+ this.setParsedFlags(flags);
18
+ const apiKey = this.getApiKey();
19
+ if (!apiKey)
20
+ this.error('Not logged in. Run: trillboards login');
21
+ let urlPath = '/v2/earner/cctv-retained/reviews';
22
+ const params = {};
23
+ const body = flags.data ? JSON.parse(flags.data) : undefined;
24
+ const result = await apiRequest('POST', urlPath, {
25
+ apiKey,
26
+ baseUrl: flags['base-url'] ?? 'https://api.trillboards.com',
27
+ params: Object.keys(params).length > 0 ? params : undefined,
28
+ body,
29
+ });
30
+ this.log(formatOutput(result, this.getFormat()));
31
+ }
32
+ }
@@ -1276,69 +1276,6 @@
1276
1276
  "reconcile.js"
1277
1277
  ]
1278
1278
  },
1279
- "endpoints": {
1280
- "aliases": [],
1281
- "args": {},
1282
- "description": "Discover available API endpoints",
1283
- "examples": [
1284
- "<%= config.bin %> endpoints",
1285
- "<%= config.bin %> endpoints --search screens",
1286
- "<%= config.bin %> endpoints --format json"
1287
- ],
1288
- "flags": {
1289
- "api-key": {
1290
- "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1291
- "env": "TRILLBOARDS_API_KEY",
1292
- "name": "api-key",
1293
- "hasDynamicHelp": false,
1294
- "multiple": false,
1295
- "type": "option"
1296
- },
1297
- "base-url": {
1298
- "description": "API base URL",
1299
- "name": "base-url",
1300
- "default": "https://api.trillboards.com",
1301
- "hasDynamicHelp": false,
1302
- "multiple": false,
1303
- "type": "option"
1304
- },
1305
- "format": {
1306
- "description": "Output format",
1307
- "name": "format",
1308
- "hasDynamicHelp": false,
1309
- "multiple": false,
1310
- "options": [
1311
- "json",
1312
- "table",
1313
- "yaml"
1314
- ],
1315
- "type": "option"
1316
- },
1317
- "search": {
1318
- "char": "s",
1319
- "description": "Search query to filter endpoints",
1320
- "name": "search",
1321
- "hasDynamicHelp": false,
1322
- "multiple": false,
1323
- "type": "option"
1324
- }
1325
- },
1326
- "hasDynamicHelp": false,
1327
- "hiddenAliases": [],
1328
- "id": "endpoints",
1329
- "pluginAlias": "@trillboards/cli",
1330
- "pluginName": "@trillboards/cli",
1331
- "pluginType": "core",
1332
- "strict": true,
1333
- "enableJsonFlag": false,
1334
- "isESM": true,
1335
- "relativePath": [
1336
- "dist",
1337
- "commands",
1338
- "endpoints",
1339
- "index.js"
1340
- ]
1341
- },
1342
1279
  "errors": {
1343
1280
  "aliases": [],
1344
1281
  "args": {
@@ -2003,6 +1940,245 @@
2003
1940
  "generated-csi-venue-occupancy.js"
2004
1941
  ]
2005
1942
  },
1943
+ "generated:generated-data-api-ad-sightings-history": {
1944
+ "aliases": [],
1945
+ "args": {},
1946
+ "description": "Outdoor creative history by brand, market and month, from the creative ledger.",
1947
+ "examples": [
1948
+ "$ trillboards generated data-api-ad-sightings-history"
1949
+ ],
1950
+ "flags": {
1951
+ "api-key": {
1952
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1953
+ "env": "TRILLBOARDS_API_KEY",
1954
+ "name": "api-key",
1955
+ "hasDynamicHelp": false,
1956
+ "multiple": false,
1957
+ "type": "option"
1958
+ },
1959
+ "base-url": {
1960
+ "description": "API base URL",
1961
+ "name": "base-url",
1962
+ "default": "https://api.trillboards.com",
1963
+ "hasDynamicHelp": false,
1964
+ "multiple": false,
1965
+ "type": "option"
1966
+ },
1967
+ "format": {
1968
+ "description": "Output format",
1969
+ "name": "format",
1970
+ "hasDynamicHelp": false,
1971
+ "multiple": false,
1972
+ "options": [
1973
+ "json",
1974
+ "table",
1975
+ "yaml"
1976
+ ],
1977
+ "type": "option"
1978
+ },
1979
+ "brand": {
1980
+ "description": "A brand by name, repeatable (competitors). Resolved to its brand id the way the brand search does.",
1981
+ "name": "brand",
1982
+ "hasDynamicHelp": false,
1983
+ "multiple": false,
1984
+ "type": "option"
1985
+ },
1986
+ "brand_id": {
1987
+ "description": "A resolved brand id, repeatable.",
1988
+ "name": "brand_id",
1989
+ "hasDynamicHelp": false,
1990
+ "multiple": false,
1991
+ "type": "option"
1992
+ },
1993
+ "market": {
1994
+ "description": "A market as COUNTRY:CODE, repeatable.",
1995
+ "name": "market",
1996
+ "hasDynamicHelp": false,
1997
+ "multiple": false,
1998
+ "type": "option"
1999
+ },
2000
+ "from": {
2001
+ "description": "First month (YYYY-MM) or day. Default: 12 months before `to`.",
2002
+ "name": "from",
2003
+ "hasDynamicHelp": false,
2004
+ "multiple": false,
2005
+ "type": "option"
2006
+ },
2007
+ "to": {
2008
+ "description": "Last month (YYYY-MM, inclusive) or day. Default: this month.",
2009
+ "name": "to",
2010
+ "hasDynamicHelp": false,
2011
+ "multiple": false,
2012
+ "type": "option"
2013
+ },
2014
+ "grain": {
2015
+ "description": "market_month (default) or fleet_month.",
2016
+ "name": "grain",
2017
+ "hasDynamicHelp": false,
2018
+ "multiple": false,
2019
+ "type": "option"
2020
+ },
2021
+ "limit": {
2022
+ "description": "Rows per page, 1..500 (default 100). The page limit is reserved; the rows returned are billed.",
2023
+ "name": "limit",
2024
+ "hasDynamicHelp": false,
2025
+ "multiple": false,
2026
+ "type": "option"
2027
+ },
2028
+ "cursor": {
2029
+ "description": "The `next_cursor` of the previous page.",
2030
+ "name": "cursor",
2031
+ "hasDynamicHelp": false,
2032
+ "multiple": false,
2033
+ "type": "option"
2034
+ }
2035
+ },
2036
+ "hasDynamicHelp": false,
2037
+ "hiddenAliases": [],
2038
+ "id": "generated:generated-data-api-ad-sightings-history",
2039
+ "pluginAlias": "@trillboards/cli",
2040
+ "pluginName": "@trillboards/cli",
2041
+ "pluginType": "core",
2042
+ "strict": true,
2043
+ "enableJsonFlag": false,
2044
+ "isESM": true,
2045
+ "relativePath": [
2046
+ "dist",
2047
+ "commands",
2048
+ "generated",
2049
+ "generated-data-api-ad-sightings-history.js"
2050
+ ]
2051
+ },
2052
+ "generated:generated-data-api-ad-sightings": {
2053
+ "aliases": [],
2054
+ "args": {},
2055
+ "description": "Ad-sighting records: outdoor ads our cab cameras read, each with a signed photo link.",
2056
+ "examples": [
2057
+ "$ trillboards generated data-api-ad-sightings"
2058
+ ],
2059
+ "flags": {
2060
+ "api-key": {
2061
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
2062
+ "env": "TRILLBOARDS_API_KEY",
2063
+ "name": "api-key",
2064
+ "hasDynamicHelp": false,
2065
+ "multiple": false,
2066
+ "type": "option"
2067
+ },
2068
+ "base-url": {
2069
+ "description": "API base URL",
2070
+ "name": "base-url",
2071
+ "default": "https://api.trillboards.com",
2072
+ "hasDynamicHelp": false,
2073
+ "multiple": false,
2074
+ "type": "option"
2075
+ },
2076
+ "format": {
2077
+ "description": "Output format",
2078
+ "name": "format",
2079
+ "hasDynamicHelp": false,
2080
+ "multiple": false,
2081
+ "options": [
2082
+ "json",
2083
+ "table",
2084
+ "yaml"
2085
+ ],
2086
+ "type": "option"
2087
+ },
2088
+ "brand": {
2089
+ "description": "A brand, repeatable for a brand set (competitors). Matched however it is typed: \"McDonald's\", \"mcdonalds\" and \"Mc Donalds\" find the same records.",
2090
+ "name": "brand",
2091
+ "hasDynamicHelp": false,
2092
+ "multiple": false,
2093
+ "type": "option"
2094
+ },
2095
+ "brand_id": {
2096
+ "description": "A resolved brand id, repeatable. Combined with `brand` as either-or.",
2097
+ "name": "brand_id",
2098
+ "hasDynamicHelp": false,
2099
+ "multiple": false,
2100
+ "type": "option"
2101
+ },
2102
+ "market": {
2103
+ "description": "A market as COUNTRY:CODE (US DMA or CA CMA), repeatable.",
2104
+ "name": "market",
2105
+ "hasDynamicHelp": false,
2106
+ "multiple": false,
2107
+ "type": "option"
2108
+ },
2109
+ "surface": {
2110
+ "description": "The surface kind as read (billboard, storefront, bus_shelter, ...), repeatable.",
2111
+ "name": "surface",
2112
+ "hasDynamicHelp": false,
2113
+ "multiple": false,
2114
+ "type": "option"
2115
+ },
2116
+ "board_id": {
2117
+ "description": "A board the sighting was matched to, repeatable.",
2118
+ "name": "board_id",
2119
+ "hasDynamicHelp": false,
2120
+ "multiple": false,
2121
+ "type": "option"
2122
+ },
2123
+ "creative_id": {
2124
+ "description": "A sighted creative (the campaign artwork), repeatable.",
2125
+ "name": "creative_id",
2126
+ "hasDynamicHelp": false,
2127
+ "multiple": false,
2128
+ "type": "option"
2129
+ },
2130
+ "instrument": {
2131
+ "description": "The reading instrument (ssr-v2, ssr-v1, vlmtext-v1, edge_ocr_v1), repeatable.",
2132
+ "name": "instrument",
2133
+ "hasDynamicHelp": false,
2134
+ "multiple": false,
2135
+ "type": "option"
2136
+ },
2137
+ "from": {
2138
+ "description": "Start (inclusive), YYYY-MM-DD or an ISO-8601 instant. Default: 30 days before `to`.",
2139
+ "name": "from",
2140
+ "hasDynamicHelp": false,
2141
+ "multiple": false,
2142
+ "type": "option"
2143
+ },
2144
+ "to": {
2145
+ "description": "End (exclusive). Default: now. The span is at most 400 days.",
2146
+ "name": "to",
2147
+ "hasDynamicHelp": false,
2148
+ "multiple": false,
2149
+ "type": "option"
2150
+ },
2151
+ "limit": {
2152
+ "description": "Records per page, 1..500 (default 50). The page limit is reserved; the records returned are billed.",
2153
+ "name": "limit",
2154
+ "hasDynamicHelp": false,
2155
+ "multiple": false,
2156
+ "type": "option"
2157
+ },
2158
+ "cursor": {
2159
+ "description": "The `next_cursor` of the previous page.",
2160
+ "name": "cursor",
2161
+ "hasDynamicHelp": false,
2162
+ "multiple": false,
2163
+ "type": "option"
2164
+ }
2165
+ },
2166
+ "hasDynamicHelp": false,
2167
+ "hiddenAliases": [],
2168
+ "id": "generated:generated-data-api-ad-sightings",
2169
+ "pluginAlias": "@trillboards/cli",
2170
+ "pluginName": "@trillboards/cli",
2171
+ "pluginType": "core",
2172
+ "strict": true,
2173
+ "enableJsonFlag": false,
2174
+ "isESM": true,
2175
+ "relativePath": [
2176
+ "dist",
2177
+ "commands",
2178
+ "generated",
2179
+ "generated-data-api-ad-sightings.js"
2180
+ ]
2181
+ },
2006
2182
  "generated:generated-data-api-aggregate": {
2007
2183
  "aliases": [],
2008
2184
  "args": {},
@@ -2752,6 +2928,66 @@
2752
2928
  "generated-device-ota-manifest.js"
2753
2929
  ]
2754
2930
  },
2931
+ "generated:generated-device-retained-cctv-review": {
2932
+ "aliases": [],
2933
+ "args": {},
2934
+ "description": "Store original CCTV evidence and its completed local review.",
2935
+ "examples": [
2936
+ "$ trillboards generated device-retained-cctv-review"
2937
+ ],
2938
+ "flags": {
2939
+ "api-key": {
2940
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
2941
+ "env": "TRILLBOARDS_API_KEY",
2942
+ "name": "api-key",
2943
+ "hasDynamicHelp": false,
2944
+ "multiple": false,
2945
+ "type": "option"
2946
+ },
2947
+ "base-url": {
2948
+ "description": "API base URL",
2949
+ "name": "base-url",
2950
+ "default": "https://api.trillboards.com",
2951
+ "hasDynamicHelp": false,
2952
+ "multiple": false,
2953
+ "type": "option"
2954
+ },
2955
+ "format": {
2956
+ "description": "Output format",
2957
+ "name": "format",
2958
+ "hasDynamicHelp": false,
2959
+ "multiple": false,
2960
+ "options": [
2961
+ "json",
2962
+ "table",
2963
+ "yaml"
2964
+ ],
2965
+ "type": "option"
2966
+ },
2967
+ "data": {
2968
+ "description": "JSON request body",
2969
+ "name": "data",
2970
+ "hasDynamicHelp": false,
2971
+ "multiple": false,
2972
+ "type": "option"
2973
+ }
2974
+ },
2975
+ "hasDynamicHelp": false,
2976
+ "hiddenAliases": [],
2977
+ "id": "generated:generated-device-retained-cctv-review",
2978
+ "pluginAlias": "@trillboards/cli",
2979
+ "pluginName": "@trillboards/cli",
2980
+ "pluginType": "core",
2981
+ "strict": true,
2982
+ "enableJsonFlag": false,
2983
+ "isESM": true,
2984
+ "relativePath": [
2985
+ "dist",
2986
+ "commands",
2987
+ "generated",
2988
+ "generated-device-retained-cctv-review.js"
2989
+ ]
2990
+ },
2755
2991
  "generated:generated-device-sensing-profile": {
2756
2992
  "aliases": [],
2757
2993
  "args": {},
@@ -4416,7 +4652,70 @@
4416
4652
  "screens",
4417
4653
  "watch.js"
4418
4654
  ]
4655
+ },
4656
+ "endpoints": {
4657
+ "aliases": [],
4658
+ "args": {},
4659
+ "description": "Discover available API endpoints",
4660
+ "examples": [
4661
+ "<%= config.bin %> endpoints",
4662
+ "<%= config.bin %> endpoints --search screens",
4663
+ "<%= config.bin %> endpoints --format json"
4664
+ ],
4665
+ "flags": {
4666
+ "api-key": {
4667
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
4668
+ "env": "TRILLBOARDS_API_KEY",
4669
+ "name": "api-key",
4670
+ "hasDynamicHelp": false,
4671
+ "multiple": false,
4672
+ "type": "option"
4673
+ },
4674
+ "base-url": {
4675
+ "description": "API base URL",
4676
+ "name": "base-url",
4677
+ "default": "https://api.trillboards.com",
4678
+ "hasDynamicHelp": false,
4679
+ "multiple": false,
4680
+ "type": "option"
4681
+ },
4682
+ "format": {
4683
+ "description": "Output format",
4684
+ "name": "format",
4685
+ "hasDynamicHelp": false,
4686
+ "multiple": false,
4687
+ "options": [
4688
+ "json",
4689
+ "table",
4690
+ "yaml"
4691
+ ],
4692
+ "type": "option"
4693
+ },
4694
+ "search": {
4695
+ "char": "s",
4696
+ "description": "Search query to filter endpoints",
4697
+ "name": "search",
4698
+ "hasDynamicHelp": false,
4699
+ "multiple": false,
4700
+ "type": "option"
4701
+ }
4702
+ },
4703
+ "hasDynamicHelp": false,
4704
+ "hiddenAliases": [],
4705
+ "id": "endpoints",
4706
+ "pluginAlias": "@trillboards/cli",
4707
+ "pluginName": "@trillboards/cli",
4708
+ "pluginType": "core",
4709
+ "strict": true,
4710
+ "enableJsonFlag": false,
4711
+ "isESM": true,
4712
+ "relativePath": [
4713
+ "dist",
4714
+ "commands",
4715
+ "endpoints",
4716
+ "index.js"
4717
+ ]
4419
4718
  }
4420
4719
  },
4421
- "version": "0.1.6"
4720
+ "version": "0.1.7"
4422
4721
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@trillboards/cli",
3
3
  "description": "Official CLI for the Trillboards DOOH API",
4
- "version": "0.1.6",
4
+ "version": "0.1.7",
5
5
  "author": "Trillboards",
6
6
  "bin": {
7
7
  "trillboards": "./bin/run.js"