@signa-so/sdk 0.16.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,11 +19,14 @@ const signa = new Signa({ api_key: 'sig_xxx' });
19
19
  const tm = await signa.trademarks.retrieve('tm_abc123');
20
20
 
21
21
  // Search trademarks (POST with structured filters)
22
- const results = await signa.trademarks.search({ query: 'nike', filters: { offices: ['US'] } });
22
+ const results = await signa.trademarks.search({ q: 'nike', filters: { offices: ['US'] } });
23
23
 
24
24
  // Text search via GET
25
25
  const searched = await signa.trademarks.list({ q: 'nike', offices: 'US' });
26
26
 
27
+ // Exact marks, excluding one owner (lists go on the wire as repeated keys)
28
+ const variants = await signa.trademarks.list({ mark_text_is: ['nike', 'nikey'], owner_id_not: ['own_xxx'] });
29
+
27
30
  // List with auto-pagination
28
31
  const page = await signa.trademarks.list({ limit: 50 });
29
32
  for (const tm of page.data) {
@@ -61,7 +64,7 @@ await signa.trademarks.events('tm_xxx');
61
64
 
62
65
  ```ts
63
66
  await signa.owners.retrieve('own_xxx');
64
- await signa.owners.list({ query: 'Nike', country: 'US' });
67
+ await signa.owners.list({ q: 'Nike', country_code: 'US' });
65
68
  await signa.owners.trademarks('own_xxx');
66
69
  ```
67
70
 
@@ -69,7 +72,7 @@ await signa.owners.trademarks('own_xxx');
69
72
 
70
73
  ```ts
71
74
  await signa.attorneys.retrieve('att_xxx');
72
- await signa.attorneys.list({ query: 'Smith' });
75
+ await signa.attorneys.list({ q: 'Smith' });
73
76
  await signa.attorneys.trademarks('att_xxx');
74
77
  ```
75
78
 
@@ -77,7 +80,7 @@ await signa.attorneys.trademarks('att_xxx');
77
80
 
78
81
  ```ts
79
82
  await signa.firms.retrieve('firm_xxx');
80
- await signa.firms.list({ query: 'Baker McKenzie' });
83
+ await signa.firms.list({ q: 'Baker McKenzie' });
81
84
  await signa.firms.attorneys('firm_xxx');
82
85
  await signa.firms.trademarks('firm_xxx');
83
86
  ```
@@ -91,19 +94,26 @@ await signa.proceedings.list({ trademark_id: 'tm_xxx' });
91
94
 
92
95
  ### `signa.trademarks.search()` (POST)
93
96
 
94
- For complex queries with structured filters, aggregations, and strategies:
97
+ For structured filters, `mark_text` operators, exclusions and aggregations.
98
+ `q` ranks through the `similarity` channels; `Presets.knockout` and
99
+ `Presets.clearance` spread into any search request:
95
100
 
96
101
  ```ts
102
+ import Signa, { Presets } from '@signa-so/sdk';
103
+
97
104
  await signa.trademarks.search({
98
- query: 'nike',
99
- strategies: ['exact', 'phonetic'],
100
- filters: { offices: ['US'], status_primary: 'active', nice_classes: [25, 35] },
105
+ q: 'nike',
106
+ ...Presets.clearance,
107
+ filters: { offices: ['US'], status_primary: 'active', nice_classes: [25, 35], mark_text: { starts_with: ['ni'] } },
108
+ exclude: { owner_id: ['own_xxx'] },
101
109
  options: { aggregations: ['status_stage', 'office_code'], include_total: true },
102
- sort: '-filing_date',
103
110
  limit: 20,
104
111
  });
105
112
  ```
106
113
 
114
+ Upgrading from 0.16 or earlier: see the 0.17.0 migration table in
115
+ [CHANGELOG.md](./CHANGELOG.md).
116
+
107
117
  ### `signa.references`
108
118
 
109
119
  ```ts
@@ -1,11 +1,25 @@
1
+ /** The six trademark search text operators (`mark_text_<op>`, `mark_text_not_<op>`). */
2
+ export declare const MARK_TEXT_OPERATORS: readonly ["is", "word", "starts_with", "ends_with", "contains", "pattern"];
3
+ /** The id exclusions (`<key>_not` on GET, `exclude.<key>` on POST). */
4
+ export declare const ID_EXCLUSION_KEYS: readonly ["entity_id", "entity_group", "owner_id", "trademark_ids"];
5
+ /**
6
+ * GET list params sent as repeated keys (`mark_text_is=a&mark_text_is=b`),
7
+ * never comma-joined: commas are legal inside marks, and the API does not
8
+ * split these keys on commas.
9
+ */
10
+ export declare const REPEATED_LIST_KEYS: ReadonlySet<string>;
1
11
  /**
2
12
  * Build a URL query string from a params object.
3
13
  *
4
14
  * Conventions (see `.signa/docs/decisions/query-parameter-conventions.md`):
5
15
  * - Arrays serialize as comma-separated: `?offices=US,EM`
16
+ * - Keys in `repeatedKeys` (default {@link REPEATED_LIST_KEYS}) serialize as
17
+ * repeated keys instead: `?mark_text_is=a&mark_text_is=b`
6
18
  * - Date ranges live on flat underscore keys: `?filing_date_gte=2020-01-01`
7
- * - Undefined/null values are omitted
19
+ * - Undefined/null values and empty arrays are omitted
8
20
  * - Numbers and booleans are stringified
9
21
  */
10
- export declare function buildQueryString(params: Record<string, unknown>): string;
22
+ export declare function buildQueryString(params: Record<string, unknown>, { repeatedKeys }?: {
23
+ repeatedKeys?: ReadonlySet<string>;
24
+ }): string;
11
25
  //# sourceMappingURL=query-string.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-string.d.ts","sourceRoot":"","sources":["../../src/_internals/query-string.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAkBxE"}
1
+ {"version":3,"file":"query-string.d.ts","sourceRoot":"","sources":["../../src/_internals/query-string.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,4EAA6E,CAAC;AAE9G,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,qEAAsE,CAAC;AAErG;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAIjD,CAAC;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,EAAE,YAAiC,EAAE,GAAE;IAAE,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAO,GACjF,MAAM,CAkBR"}
@@ -1,24 +1,44 @@
1
+ /** The six trademark search text operators (`mark_text_<op>`, `mark_text_not_<op>`). */
2
+ export const MARK_TEXT_OPERATORS = ['is', 'word', 'starts_with', 'ends_with', 'contains', 'pattern'];
3
+ /** The id exclusions (`<key>_not` on GET, `exclude.<key>` on POST). */
4
+ export const ID_EXCLUSION_KEYS = ['entity_id', 'entity_group', 'owner_id', 'trademark_ids'];
5
+ /**
6
+ * GET list params sent as repeated keys (`mark_text_is=a&mark_text_is=b`),
7
+ * never comma-joined: commas are legal inside marks, and the API does not
8
+ * split these keys on commas.
9
+ */
10
+ export const REPEATED_LIST_KEYS = new Set([
11
+ ...MARK_TEXT_OPERATORS.map((op) => `mark_text_${op}`),
12
+ ...MARK_TEXT_OPERATORS.map((op) => `mark_text_not_${op}`),
13
+ ...ID_EXCLUSION_KEYS.map((key) => `${key}_not`),
14
+ ]);
1
15
  /**
2
16
  * Build a URL query string from a params object.
3
17
  *
4
18
  * Conventions (see `.signa/docs/decisions/query-parameter-conventions.md`):
5
19
  * - Arrays serialize as comma-separated: `?offices=US,EM`
20
+ * - Keys in `repeatedKeys` (default {@link REPEATED_LIST_KEYS}) serialize as
21
+ * repeated keys instead: `?mark_text_is=a&mark_text_is=b`
6
22
  * - Date ranges live on flat underscore keys: `?filing_date_gte=2020-01-01`
7
- * - Undefined/null values are omitted
23
+ * - Undefined/null values and empty arrays are omitted
8
24
  * - Numbers and booleans are stringified
9
25
  */
10
- export function buildQueryString(params) {
26
+ export function buildQueryString(params, { repeatedKeys = REPEATED_LIST_KEYS } = {}) {
11
27
  const parts = [];
28
+ const pair = (key, value) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`;
12
29
  for (const [key, value] of Object.entries(params)) {
13
30
  if (value === undefined || value === null)
14
31
  continue;
15
32
  if (Array.isArray(value)) {
16
- if (value.length > 0) {
17
- parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value.map(String).join(','))}`);
18
- }
33
+ if (value.length === 0)
34
+ continue;
35
+ if (repeatedKeys.has(key))
36
+ parts.push(...value.map((item) => pair(key, item)));
37
+ else
38
+ parts.push(pair(key, value.map(String).join(',')));
19
39
  }
20
40
  else {
21
- parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
41
+ parts.push(pair(key, value));
22
42
  }
23
43
  }
24
44
  return parts.length > 0 ? `?${parts.join('&')}` : '';
@@ -1 +1 @@
1
- {"version":3,"file":"query-string.js","sourceRoot":"","sources":["../../src/_internals/query-string.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA+B;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAEpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,IAAI,CACR,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAChF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"query-string.js","sourceRoot":"","sources":["../../src/_internals/query-string.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;AAE9G,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAU,CAAC;AAErG;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IAC7D,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC;IACrD,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC;IACzD,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC;CAChD,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA+B,EAC/B,EAAE,YAAY,GAAG,kBAAkB,KAA6C,EAAE;IAElF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAAc,EAAE,EAAE,CAC3C,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IAEpE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAEpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACjC,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;;gBAC1E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC"}