@signa-so/sdk 0.4.0 → 0.8.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 +47 -6
- package/dist/_internals/fetch-with-retry.d.ts +0 -2
- package/dist/_internals/fetch-with-retry.d.ts.map +1 -1
- package/dist/_internals/fetch-with-retry.js +11 -8
- package/dist/_internals/fetch-with-retry.js.map +1 -1
- package/dist/_internals/query-string.d.ts +1 -1
- package/dist/_internals/query-string.js +1 -1
- package/dist/category-nice.d.ts +22 -0
- package/dist/category-nice.d.ts.map +1 -0
- package/dist/category-nice.js +109 -0
- package/dist/category-nice.js.map +1 -0
- package/dist/client.d.ts +26 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +34 -0
- package/dist/client.js.map +1 -1
- package/dist/generated/api-types.d.ts +7325 -2217
- package/dist/generated/api-types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/pagination.d.ts +23 -1
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +27 -0
- package/dist/pagination.js.map +1 -1
- package/dist/resource.d.ts +0 -2
- package/dist/resource.d.ts.map +1 -1
- package/dist/resource.js +0 -10
- package/dist/resource.js.map +1 -1
- package/dist/resources/analytics.d.ts +8 -0
- package/dist/resources/analytics.d.ts.map +1 -0
- package/dist/resources/analytics.js +13 -0
- package/dist/resources/analytics.js.map +1 -0
- package/dist/resources/assignments.d.ts +25 -0
- package/dist/resources/assignments.d.ts.map +1 -0
- package/dist/resources/assignments.js +33 -0
- package/dist/resources/assignments.js.map +1 -0
- package/dist/resources/attorneys.d.ts +2 -1
- package/dist/resources/attorneys.d.ts.map +1 -1
- package/dist/resources/attorneys.js +4 -0
- package/dist/resources/attorneys.js.map +1 -1
- package/dist/resources/compare.d.ts +29 -0
- package/dist/resources/compare.d.ts.map +1 -0
- package/dist/resources/compare.js +30 -0
- package/dist/resources/compare.js.map +1 -0
- package/dist/resources/deadlines.d.ts +24 -0
- package/dist/resources/deadlines.d.ts.map +1 -0
- package/dist/resources/deadlines.js +26 -0
- package/dist/resources/deadlines.js.map +1 -0
- package/dist/resources/entities.d.ts +2 -1
- package/dist/resources/entities.d.ts.map +1 -1
- package/dist/resources/entities.js +4 -0
- package/dist/resources/entities.js.map +1 -1
- package/dist/resources/events.d.ts +2 -2
- package/dist/resources/events.d.ts.map +1 -1
- package/dist/resources/events.js +2 -2
- package/dist/resources/events.js.map +1 -1
- package/dist/resources/feedback.d.ts +19 -0
- package/dist/resources/feedback.d.ts.map +1 -0
- package/dist/resources/feedback.js +29 -0
- package/dist/resources/feedback.js.map +1 -0
- package/dist/resources/firms.d.ts +3 -2
- package/dist/resources/firms.d.ts.map +1 -1
- package/dist/resources/firms.js +5 -1
- package/dist/resources/firms.js.map +1 -1
- package/dist/resources/goods-services.d.ts +1 -1
- package/dist/resources/goods-services.js +1 -1
- package/dist/resources/oppositions.d.ts +18 -0
- package/dist/resources/oppositions.d.ts.map +1 -0
- package/dist/resources/oppositions.js +20 -0
- package/dist/resources/oppositions.js.map +1 -0
- package/dist/resources/organization.d.ts +7 -1
- package/dist/resources/organization.d.ts.map +1 -1
- package/dist/resources/organization.js +8 -0
- package/dist/resources/organization.js.map +1 -1
- package/dist/resources/owners.d.ts +2 -1
- package/dist/resources/owners.d.ts.map +1 -1
- package/dist/resources/owners.js +4 -0
- package/dist/resources/owners.js.map +1 -1
- package/dist/resources/reconcile.d.ts +22 -0
- package/dist/resources/reconcile.d.ts.map +1 -0
- package/dist/resources/reconcile.js +24 -0
- package/dist/resources/reconcile.js.map +1 -0
- package/dist/resources/references.d.ts +2 -2
- package/dist/resources/references.js +2 -2
- package/dist/resources/screening.d.ts +63 -0
- package/dist/resources/screening.d.ts.map +1 -0
- package/dist/resources/screening.js +66 -0
- package/dist/resources/screening.js.map +1 -0
- package/dist/resources/trademarks.d.ts +67 -33
- package/dist/resources/trademarks.d.ts.map +1 -1
- package/dist/resources/trademarks.js +114 -50
- package/dist/resources/trademarks.js.map +1 -1
- package/dist/resources/watches.d.ts +14 -2
- package/dist/resources/watches.d.ts.map +1 -1
- package/dist/resources/watches.js +21 -1
- package/dist/resources/watches.js.map +1 -1
- package/dist/types.d.ts +1712 -141
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
import { BaseResource } from '../resource.js';
|
|
2
2
|
import { type SignaList } from '../pagination.js';
|
|
3
|
-
import type { Trademark, TrademarkSummary,
|
|
3
|
+
import type { Trademark, TrademarkSummary, TrademarkSearchResult, Event, TrademarkRetrieveParams, TrademarkListParams, TrademarkSearchBody, TrademarkEventsParams, TrademarkBatchBody, TrademarkBatchResponse, TrademarkProceedingsParams, TrademarkProceeding, TrademarkAssignmentsParams, TrademarkAssignment, TrademarkDocumentParams, TrademarkDocument, TrademarkSuggestParams, TrademarkSuggestion, TrademarkImageSearchParams, ImageSearchResults, RequestOptions } from '../types.js';
|
|
4
|
+
type TrademarkWithOwners = {
|
|
5
|
+
owners?: Array<{
|
|
6
|
+
name?: string | null;
|
|
7
|
+
}> | null;
|
|
8
|
+
};
|
|
9
|
+
export declare function primaryOwnerName(trademark: TrademarkWithOwners): string | null;
|
|
4
10
|
export declare class Trademarks extends BaseResource {
|
|
5
11
|
/**
|
|
6
12
|
* Retrieve a single trademark by ID.
|
|
7
13
|
*
|
|
8
14
|
* The full detail tier (owners, classifications, attorneys, media,
|
|
9
|
-
* priorities, proceedings,
|
|
10
|
-
*
|
|
11
|
-
*
|
|
15
|
+
* priorities, proceedings, plus the inline `coverage`, `relationships` and
|
|
16
|
+
* `provenance` blocks) is always returned inline.
|
|
17
|
+
* Pass `include: ['office_extensions']` to add the raw office-specific
|
|
18
|
+
* extension blob (omitted by default). Pass `language` to prefer matching
|
|
19
|
+
* goods/services classification variants without filtering unmatched groups.
|
|
12
20
|
*
|
|
13
21
|
* ```typescript
|
|
14
22
|
* const tm = await signa.trademarks.retrieve('tm_abc123');
|
|
15
|
-
* const tm = await signa.trademarks.retrieve('tm_abc123', { include: ['
|
|
23
|
+
* const tm = await signa.trademarks.retrieve('tm_abc123', { include: ['office_extensions'] });
|
|
24
|
+
* const tm = await signa.trademarks.retrieve('tm_abc123', { language: 'en' });
|
|
16
25
|
* ```
|
|
17
26
|
*/
|
|
18
27
|
retrieve(id: string, params?: TrademarkRetrieveParams, options?: RequestOptions): Promise<Trademark>;
|
|
@@ -31,7 +40,7 @@ export declare class Trademarks extends BaseResource {
|
|
|
31
40
|
* const results = await signa.trademarks.list({ q: 'SIGNA', jurisdictions: ['US'] });
|
|
32
41
|
*
|
|
33
42
|
* // Explicit sort
|
|
34
|
-
* const sorted = await signa.trademarks.list({ offices: ['
|
|
43
|
+
* const sorted = await signa.trademarks.list({ offices: ['US'], sort: '-registration_date' });
|
|
35
44
|
*
|
|
36
45
|
* // Auto-pagination
|
|
37
46
|
* for await (const tm of signa.trademarks.list({ jurisdictions: ['US'] })) {
|
|
@@ -59,49 +68,56 @@ export declare class Trademarks extends BaseResource {
|
|
|
59
68
|
*
|
|
60
69
|
* // Filter-only POST (no text query)
|
|
61
70
|
* const filtered = await signa.trademarks.search({
|
|
62
|
-
* filters: { offices: ['
|
|
71
|
+
* filters: { offices: ['US'], status_primary: 'active' },
|
|
63
72
|
* sort: '-filing_date',
|
|
64
73
|
* options: { include_total: true },
|
|
65
74
|
* });
|
|
66
75
|
* ```
|
|
67
76
|
*/
|
|
68
|
-
search(params: TrademarkSearchBody, options?: RequestOptions): Promise<SignaList<
|
|
77
|
+
search(params: TrademarkSearchBody, options?: RequestOptions): Promise<SignaList<TrademarkSearchResult>>;
|
|
69
78
|
/**
|
|
70
|
-
*
|
|
79
|
+
* Search trademarks by logo/image similarity (beta, internal). Requires the
|
|
80
|
+
* `image-search:read` scope. Provide EXACTLY ONE image source:
|
|
81
|
+
* - `image`: raw bytes (multipart upload — Blob / ArrayBuffer / Uint8Array)
|
|
82
|
+
* - `image_url`: an https URL (fetched + SSRF-guarded server-side)
|
|
83
|
+
* - `media_id`: an existing mark's media id (reuses its stored vector)
|
|
71
84
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* const filtered = await signa.trademarks.history('tm_abc123', { event_type: 'status_change' });
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
history(id: string, params?: TrademarkHistoryParams, options?: RequestOptions): Promise<SignaList<Event>>;
|
|
78
|
-
/**
|
|
79
|
-
* Look up multiple trademarks by ID or office identifiers.
|
|
85
|
+
* Returns mark-level hits, each with the §3.5 signal channels + a
|
|
86
|
+
* `thumbnail_url`. Results are a bounded top-K (limit ≤ 100, not paginable).
|
|
80
87
|
*
|
|
81
88
|
* ```typescript
|
|
82
|
-
* const
|
|
83
|
-
* const
|
|
84
|
-
*
|
|
89
|
+
* const bytes = await fs.readFile('logo.png');
|
|
90
|
+
* const res = await signa.trademarks.searchByImage({
|
|
91
|
+
* image: bytes,
|
|
92
|
+
* filters: { offices: ['US'], nice_classes: [9] },
|
|
93
|
+
* channels: ['visual', 'exact_dup'],
|
|
85
94
|
* });
|
|
95
|
+
* for (const hit of res.data) console.log(hit.trademark.mark_text, hit.band);
|
|
86
96
|
* ```
|
|
87
97
|
*/
|
|
88
|
-
|
|
98
|
+
searchByImage(params: TrademarkImageSearchParams, options?: RequestOptions): Promise<ImageSearchResults>;
|
|
89
99
|
/**
|
|
90
|
-
*
|
|
100
|
+
* List the prosecution event timeline for a trademark (reverse chronological).
|
|
101
|
+
*
|
|
102
|
+
* Renamed from `history()` in 0.8.0.
|
|
91
103
|
*
|
|
92
104
|
* ```typescript
|
|
93
|
-
* const
|
|
105
|
+
* const events = await signa.trademarks.events('tm_abc123');
|
|
106
|
+
* const filtered = await signa.trademarks.events('tm_abc123', { event_type: 'status_change' });
|
|
94
107
|
* ```
|
|
95
108
|
*/
|
|
96
|
-
|
|
109
|
+
events(id: string, params?: TrademarkEventsParams, options?: RequestOptions): Promise<SignaList<Event>>;
|
|
97
110
|
/**
|
|
98
|
-
*
|
|
111
|
+
* Look up multiple trademarks by ID or office identifiers.
|
|
99
112
|
*
|
|
100
113
|
* ```typescript
|
|
101
|
-
* const
|
|
114
|
+
* const result = await signa.trademarks.batch({ ids: ['tm_abc', 'tm_def'] });
|
|
115
|
+
* const result = await signa.trademarks.batch({
|
|
116
|
+
* identifiers: [{ application_number: '97123456', office: 'US' }],
|
|
117
|
+
* });
|
|
102
118
|
* ```
|
|
103
119
|
*/
|
|
104
|
-
|
|
120
|
+
batch(body: TrademarkBatchBody, options?: RequestOptions): Promise<TrademarkBatchResponse>;
|
|
105
121
|
/**
|
|
106
122
|
* Trademark-specific autocomplete suggestions.
|
|
107
123
|
*
|
|
@@ -110,13 +126,31 @@ export declare class Trademarks extends BaseResource {
|
|
|
110
126
|
* ```
|
|
111
127
|
*/
|
|
112
128
|
suggest(params: TrademarkSuggestParams, options?: RequestOptions): Promise<SignaList<TrademarkSuggestion>>;
|
|
113
|
-
/** Source provenance metadata for a trademark. */
|
|
114
|
-
source(id: string, options?: RequestOptions): Promise<TrademarkSource>;
|
|
115
|
-
/** Madrid IR coverage (designation territories) for a trademark. */
|
|
116
|
-
coverage(id: string, params?: TrademarkCoverageParams, options?: RequestOptions): Promise<SignaList<TrademarkCoverage>>;
|
|
117
129
|
/** Proceedings (oppositions, cancellations) linked to a trademark. */
|
|
118
130
|
proceedings(id: string, params?: TrademarkProceedingsParams, options?: RequestOptions): Promise<SignaList<TrademarkProceeding>>;
|
|
119
|
-
/**
|
|
120
|
-
|
|
131
|
+
/** Recorded assignment chain of title linked to a trademark. */
|
|
132
|
+
assignments(id: string, params?: TrademarkAssignmentsParams, options?: RequestOptions): Promise<SignaList<TrademarkAssignment>>;
|
|
133
|
+
/** Office documents linked to a trademark. */
|
|
134
|
+
documents(id: string, params?: TrademarkDocumentParams, options?: RequestOptions): Promise<SignaList<TrademarkDocument>>;
|
|
135
|
+
/**
|
|
136
|
+
* Absolute URL for the unauthenticated media proxy — safe to drop straight
|
|
137
|
+
* into an `<img src>`.
|
|
138
|
+
*
|
|
139
|
+
* This performs NO network request: it builds the URL. The endpoint is a
|
|
140
|
+
* server-side STREAMING proxy that answers `200` with the image bytes (it
|
|
141
|
+
* follows any upstream redirects internally and never emits a `Location`
|
|
142
|
+
* header to the caller), so there is nothing to resolve client-side.
|
|
143
|
+
*
|
|
144
|
+
* You rarely need this: `media[].url`, `primary_image_url` and
|
|
145
|
+
* `documents[].url` on a retrieved trademark are already absolute URLs
|
|
146
|
+
* pointing here — prefer following those.
|
|
147
|
+
*
|
|
148
|
+
* ```typescript
|
|
149
|
+
* const url = signa.trademarks.media('tm_abc123', 'med_def456');
|
|
150
|
+
* // => https://api.signa.so/v1/trademarks/tm_abc123/media/med_def456
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
media(id: string, mediaId: string): string;
|
|
121
154
|
}
|
|
155
|
+
export {};
|
|
122
156
|
//# sourceMappingURL=trademarks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trademarks.d.ts","sourceRoot":"","sources":["../../src/resources/trademarks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"trademarks.d.ts","sourceRoot":"","sources":["../../src/resources/trademarks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
import { BaseResource } from '../resource.js';
|
|
2
2
|
import { createList } from '../pagination.js';
|
|
3
|
+
export function primaryOwnerName(trademark) {
|
|
4
|
+
return trademark.owners?.[0]?.name ?? null;
|
|
5
|
+
}
|
|
3
6
|
export class Trademarks extends BaseResource {
|
|
4
7
|
/**
|
|
5
8
|
* Retrieve a single trademark by ID.
|
|
6
9
|
*
|
|
7
10
|
* The full detail tier (owners, classifications, attorneys, media,
|
|
8
|
-
* priorities, proceedings,
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
+
* priorities, proceedings, plus the inline `coverage`, `relationships` and
|
|
12
|
+
* `provenance` blocks) is always returned inline.
|
|
13
|
+
* Pass `include: ['office_extensions']` to add the raw office-specific
|
|
14
|
+
* extension blob (omitted by default). Pass `language` to prefer matching
|
|
15
|
+
* goods/services classification variants without filtering unmatched groups.
|
|
11
16
|
*
|
|
12
17
|
* ```typescript
|
|
13
18
|
* const tm = await signa.trademarks.retrieve('tm_abc123');
|
|
14
|
-
* const tm = await signa.trademarks.retrieve('tm_abc123', { include: ['
|
|
19
|
+
* const tm = await signa.trademarks.retrieve('tm_abc123', { include: ['office_extensions'] });
|
|
20
|
+
* const tm = await signa.trademarks.retrieve('tm_abc123', { language: 'en' });
|
|
15
21
|
* ```
|
|
16
22
|
*/
|
|
17
23
|
async retrieve(id, params, options) {
|
|
18
24
|
this._validateId(id);
|
|
19
25
|
return this._get(`/v1/trademarks/${encodeURIComponent(id)}`, {
|
|
20
26
|
include: params?.include,
|
|
27
|
+
fields: params?.fields,
|
|
28
|
+
language: params?.language,
|
|
21
29
|
}, options);
|
|
22
30
|
}
|
|
23
31
|
/**
|
|
@@ -35,7 +43,7 @@ export class Trademarks extends BaseResource {
|
|
|
35
43
|
* const results = await signa.trademarks.list({ q: 'SIGNA', jurisdictions: ['US'] });
|
|
36
44
|
*
|
|
37
45
|
* // Explicit sort
|
|
38
|
-
* const sorted = await signa.trademarks.list({ offices: ['
|
|
46
|
+
* const sorted = await signa.trademarks.list({ offices: ['US'], sort: '-registration_date' });
|
|
39
47
|
*
|
|
40
48
|
* // Auto-pagination
|
|
41
49
|
* for await (const tm of signa.trademarks.list({ jurisdictions: ['US'] })) {
|
|
@@ -69,7 +77,7 @@ export class Trademarks extends BaseResource {
|
|
|
69
77
|
*
|
|
70
78
|
* // Filter-only POST (no text query)
|
|
71
79
|
* const filtered = await signa.trademarks.search({
|
|
72
|
-
* filters: { offices: ['
|
|
80
|
+
* filters: { offices: ['US'], status_primary: 'active' },
|
|
73
81
|
* sort: '-filing_date',
|
|
74
82
|
* options: { include_total: true },
|
|
75
83
|
* });
|
|
@@ -84,17 +92,79 @@ export class Trademarks extends BaseResource {
|
|
|
84
92
|
});
|
|
85
93
|
}
|
|
86
94
|
/**
|
|
87
|
-
*
|
|
95
|
+
* Search trademarks by logo/image similarity (beta, internal). Requires the
|
|
96
|
+
* `image-search:read` scope. Provide EXACTLY ONE image source:
|
|
97
|
+
* - `image`: raw bytes (multipart upload — Blob / ArrayBuffer / Uint8Array)
|
|
98
|
+
* - `image_url`: an https URL (fetched + SSRF-guarded server-side)
|
|
99
|
+
* - `media_id`: an existing mark's media id (reuses its stored vector)
|
|
100
|
+
*
|
|
101
|
+
* Returns mark-level hits, each with the §3.5 signal channels + a
|
|
102
|
+
* `thumbnail_url`. Results are a bounded top-K (limit ≤ 100, not paginable).
|
|
103
|
+
*
|
|
104
|
+
* ```typescript
|
|
105
|
+
* const bytes = await fs.readFile('logo.png');
|
|
106
|
+
* const res = await signa.trademarks.searchByImage({
|
|
107
|
+
* image: bytes,
|
|
108
|
+
* filters: { offices: ['US'], nice_classes: [9] },
|
|
109
|
+
* channels: ['visual', 'exact_dup'],
|
|
110
|
+
* });
|
|
111
|
+
* for (const hit of res.data) console.log(hit.trademark.mark_text, hit.band);
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
async searchByImage(params, options) {
|
|
115
|
+
const { image, image_filename, image_url, media_id, filters, territory_match, crop, limit, channels } = params;
|
|
116
|
+
if (image !== undefined) {
|
|
117
|
+
// Multipart upload — the file part plus JSON-encoded scalars/objects.
|
|
118
|
+
const form = new FormData();
|
|
119
|
+
const blob = image instanceof Blob
|
|
120
|
+
? image
|
|
121
|
+
: new Blob([(image instanceof Uint8Array ? image : new Uint8Array(image)).slice()]);
|
|
122
|
+
form.append('image', blob, image_filename ?? 'image');
|
|
123
|
+
if (filters !== undefined)
|
|
124
|
+
form.append('filters', JSON.stringify(filters));
|
|
125
|
+
// territory_match is a plain enum string on the multipart transport (not JSON-encoded).
|
|
126
|
+
if (territory_match !== undefined)
|
|
127
|
+
form.append('territory_match', territory_match);
|
|
128
|
+
if (crop !== undefined)
|
|
129
|
+
form.append('crop', JSON.stringify(crop));
|
|
130
|
+
if (channels !== undefined)
|
|
131
|
+
form.append('channels', JSON.stringify(channels));
|
|
132
|
+
if (limit !== undefined)
|
|
133
|
+
form.append('limit', String(limit));
|
|
134
|
+
return this._post('/v1/trademarks/search/image', form, options);
|
|
135
|
+
}
|
|
136
|
+
// JSON body — image_url or media_id.
|
|
137
|
+
const body = {};
|
|
138
|
+
if (image_url !== undefined)
|
|
139
|
+
body.image_url = image_url;
|
|
140
|
+
if (media_id !== undefined)
|
|
141
|
+
body.media_id = media_id;
|
|
142
|
+
if (filters !== undefined)
|
|
143
|
+
body.filters = filters;
|
|
144
|
+
if (territory_match !== undefined)
|
|
145
|
+
body.territory_match = territory_match;
|
|
146
|
+
if (crop !== undefined)
|
|
147
|
+
body.crop = crop;
|
|
148
|
+
if (channels !== undefined)
|
|
149
|
+
body.channels = channels;
|
|
150
|
+
if (limit !== undefined)
|
|
151
|
+
body.limit = limit;
|
|
152
|
+
return this._post('/v1/trademarks/search/image', body, options);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* List the prosecution event timeline for a trademark (reverse chronological).
|
|
156
|
+
*
|
|
157
|
+
* Renamed from `history()` in 0.8.0.
|
|
88
158
|
*
|
|
89
159
|
* ```typescript
|
|
90
|
-
* const events = await signa.trademarks.
|
|
91
|
-
* const filtered = await signa.trademarks.
|
|
160
|
+
* const events = await signa.trademarks.events('tm_abc123');
|
|
161
|
+
* const filtered = await signa.trademarks.events('tm_abc123', { event_type: 'status_change' });
|
|
92
162
|
* ```
|
|
93
163
|
*/
|
|
94
|
-
async
|
|
164
|
+
async events(id, params, options) {
|
|
95
165
|
this._validateId(id);
|
|
96
166
|
const fetchPage = async (cursor) => {
|
|
97
|
-
return this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/
|
|
167
|
+
return this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/events`, { ...params, cursor }, options);
|
|
98
168
|
};
|
|
99
169
|
const firstPage = await fetchPage(params?.cursor);
|
|
100
170
|
return createList(firstPage, fetchPage);
|
|
@@ -105,37 +175,13 @@ export class Trademarks extends BaseResource {
|
|
|
105
175
|
* ```typescript
|
|
106
176
|
* const result = await signa.trademarks.batch({ ids: ['tm_abc', 'tm_def'] });
|
|
107
177
|
* const result = await signa.trademarks.batch({
|
|
108
|
-
* identifiers: [{ application_number: '97123456', office: '
|
|
178
|
+
* identifiers: [{ application_number: '97123456', office: 'US' }],
|
|
109
179
|
* });
|
|
110
180
|
* ```
|
|
111
181
|
*/
|
|
112
182
|
async batch(body, options) {
|
|
113
183
|
return this._post('/v1/trademarks/batch', body, options);
|
|
114
184
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Version-level change history for a trademark.
|
|
117
|
-
*
|
|
118
|
-
* ```typescript
|
|
119
|
-
* const changes = await signa.trademarks.changes('tm_abc123');
|
|
120
|
-
* ```
|
|
121
|
-
*/
|
|
122
|
-
async changes(id, params, options) {
|
|
123
|
-
this._validateId(id);
|
|
124
|
-
const response = await this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/changes`, params, options);
|
|
125
|
-
return createList(response, (cursor) => this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/changes`, { ...params, cursor }, options));
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Mark-to-mark relationships for a trademark.
|
|
129
|
-
*
|
|
130
|
-
* ```typescript
|
|
131
|
-
* const related = await signa.trademarks.related('tm_abc123');
|
|
132
|
-
* ```
|
|
133
|
-
*/
|
|
134
|
-
async related(id, params, options) {
|
|
135
|
-
this._validateId(id);
|
|
136
|
-
const response = await this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/related`, params, options);
|
|
137
|
-
return createList(response, (cursor) => this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/related`, { ...params, cursor }, options));
|
|
138
|
-
}
|
|
139
185
|
/**
|
|
140
186
|
* Trademark-specific autocomplete suggestions.
|
|
141
187
|
*
|
|
@@ -147,28 +193,46 @@ export class Trademarks extends BaseResource {
|
|
|
147
193
|
const response = await this._getListResponse('/v1/trademarks/suggest', params, options);
|
|
148
194
|
return createList({ ...response, has_more: false }, () => Promise.resolve({ ...response, data: [], has_more: false }));
|
|
149
195
|
}
|
|
150
|
-
/** Source provenance metadata for a trademark. */
|
|
151
|
-
async source(id, options) {
|
|
152
|
-
this._validateId(id);
|
|
153
|
-
return this._get(`/v1/trademarks/${encodeURIComponent(id)}/source`, undefined, options);
|
|
154
|
-
}
|
|
155
|
-
/** Madrid IR coverage (designation territories) for a trademark. */
|
|
156
|
-
async coverage(id, params, options) {
|
|
157
|
-
this._validateId(id);
|
|
158
|
-
const response = await this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/coverage`, params, options);
|
|
159
|
-
return createList(response, (cursor) => this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/coverage`, { ...params, cursor }, options));
|
|
160
|
-
}
|
|
161
196
|
/** Proceedings (oppositions, cancellations) linked to a trademark. */
|
|
162
197
|
async proceedings(id, params, options) {
|
|
163
198
|
this._validateId(id);
|
|
164
199
|
const response = await this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/proceedings`, params, options);
|
|
165
200
|
return createList(response, (cursor) => this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/proceedings`, { ...params, cursor }, options));
|
|
166
201
|
}
|
|
167
|
-
/**
|
|
168
|
-
async
|
|
202
|
+
/** Recorded assignment chain of title linked to a trademark. */
|
|
203
|
+
async assignments(id, params, options) {
|
|
204
|
+
this._validateId(id);
|
|
205
|
+
const response = await this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/assignments`, params, options);
|
|
206
|
+
return createList(response, (cursor) => this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/assignments`, { ...params, cursor }, options));
|
|
207
|
+
}
|
|
208
|
+
/** Office documents linked to a trademark. */
|
|
209
|
+
async documents(id, params, options) {
|
|
210
|
+
this._validateId(id);
|
|
211
|
+
const response = await this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/documents`, params, options);
|
|
212
|
+
return createList(response, (cursor) => this._getListResponse(`/v1/trademarks/${encodeURIComponent(id)}/documents`, { ...params, cursor }, options));
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Absolute URL for the unauthenticated media proxy — safe to drop straight
|
|
216
|
+
* into an `<img src>`.
|
|
217
|
+
*
|
|
218
|
+
* This performs NO network request: it builds the URL. The endpoint is a
|
|
219
|
+
* server-side STREAMING proxy that answers `200` with the image bytes (it
|
|
220
|
+
* follows any upstream redirects internally and never emits a `Location`
|
|
221
|
+
* header to the caller), so there is nothing to resolve client-side.
|
|
222
|
+
*
|
|
223
|
+
* You rarely need this: `media[].url`, `primary_image_url` and
|
|
224
|
+
* `documents[].url` on a retrieved trademark are already absolute URLs
|
|
225
|
+
* pointing here — prefer following those.
|
|
226
|
+
*
|
|
227
|
+
* ```typescript
|
|
228
|
+
* const url = signa.trademarks.media('tm_abc123', 'med_def456');
|
|
229
|
+
* // => https://api.signa.so/v1/trademarks/tm_abc123/media/med_def456
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
media(id, mediaId) {
|
|
169
233
|
this._validateId(id, 'id');
|
|
170
234
|
this._validateId(mediaId, 'mediaId');
|
|
171
|
-
return this.
|
|
235
|
+
return `${this._config.baseUrl}/v1/trademarks/${encodeURIComponent(id)}/media/${encodeURIComponent(mediaId)}`;
|
|
172
236
|
}
|
|
173
237
|
}
|
|
174
238
|
//# sourceMappingURL=trademarks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trademarks.js","sourceRoot":"","sources":["../../src/resources/trademarks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"trademarks.js","sourceRoot":"","sources":["../../src/resources/trademarks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseResource } from '../resource.js';
|
|
2
2
|
import { type SignaList } from '../pagination.js';
|
|
3
|
-
import type { Watch, Alert, DeletedResponse, WatchCreateParams, WatchCreateQueryParams, WatchUpdateParams, WatchListParams, WatchReplayParams, WatchPreviewParams, WatchPreviewResponse, WatchBulkParams, WatchDiagnostics, WatchDiagnosticsParams, AlertListParams, RequestOptions } from '../types.js';
|
|
3
|
+
import type { Watch, Alert, DeletedResponse, WatchCreateParams, WatchCreateQueryParams, WatchUpdateParams, WatchListParams, WatchReplayParams, WatchPreviewParams, WatchPreviewResponse, WatchBulkParams, WatchDiagnostics, WatchDiagnosticsParams, WatchAttestation, WatchAttestationParams, AlertListParams, RequestOptions } from '../types.js';
|
|
4
4
|
/**
|
|
5
5
|
* Watch management — monitoring v1 (TSK-111).
|
|
6
6
|
*
|
|
@@ -8,7 +8,7 @@ import type { Watch, Alert, DeletedResponse, WatchCreateParams, WatchCreateQuery
|
|
|
8
8
|
* `'mark' | 'portfolio' | 'owner' | 'class' | 'similarity'`. `query.match`
|
|
9
9
|
* is rejected in ANY form (object or string) — use `filters.ownerId`,
|
|
10
10
|
* `filters.trademarkIds`, `filters.niceClasses` for scoping and
|
|
11
|
-
* `
|
|
11
|
+
* `min_match_tier` for similarity precision. See {@link WatchQuery} and
|
|
12
12
|
* the watches guide for worked examples.
|
|
13
13
|
*/
|
|
14
14
|
export declare class Watches extends BaseResource {
|
|
@@ -57,6 +57,18 @@ export declare class Watches extends BaseResource {
|
|
|
57
57
|
* return 404.
|
|
58
58
|
*/
|
|
59
59
|
diagnostics(watchId: string, params: WatchDiagnosticsParams, options?: RequestOptions): Promise<WatchDiagnostics>;
|
|
60
|
+
/**
|
|
61
|
+
* Fetch the monthly proof-of-monitoring attestation (JSON) for a closed UTC
|
|
62
|
+
* calendar month. Defaults to the previous month. The current (open) month
|
|
63
|
+
* returns 422 unless `{ partial: true }`. Deterministic: re-fetch a closed
|
|
64
|
+
* period later and compare `content_hash` to verify integrity.
|
|
65
|
+
*
|
|
66
|
+
* The PDF business record is available at the HTTP layer via
|
|
67
|
+
* `GET /v1/watches/{id}/attestation?format=pdf` (or `Accept: application/pdf`).
|
|
68
|
+
*
|
|
69
|
+
* Required scope: `portfolios:manage`. Cross-org / unknown watch returns 404.
|
|
70
|
+
*/
|
|
71
|
+
attestation(watchId: string, params?: WatchAttestationParams, options?: RequestOptions): Promise<WatchAttestation>;
|
|
60
72
|
/** List alerts scoped to a single watch (cursor pagination). */
|
|
61
73
|
listAlerts(watchId: string, params?: AlertListParams, options?: RequestOptions): Promise<SignaList<Alert>>;
|
|
62
74
|
/** @internal Build a query string from a flat params object. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watches.d.ts","sourceRoot":"","sources":["../../src/resources/watches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EACV,KAAK,EACL,KAAK,EACL,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAC;AAErB;;;;;;;;;GASG;AACH,qBAAa,OAAQ,SAAQ,YAAY;IACvC,iFAAiF;IAC3E,MAAM,CACV,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,sBAAsB,CAAA;KAAE,GAC5D,OAAO,CAAC,KAAK,CAAC;IAQjB,0EAA0E;IACpE,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAOzF,sDAAsD;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAKpE,6CAA6C;IACvC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAK3F,+CAA+C;IACzC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAK5E,8EAA8E;IACxE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAKjE,6BAA6B;IACvB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAKlE;;;;;;;;OAQG;IACG,MAAM,CACV,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC;IAKjB;;;;;OAKG;IACG,OAAO,CACX,IAAI,EAAE,kBAAkB,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,oBAAoB,CAAC;IAIhC,iFAAiF;IAC3E,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAS7E;;;;;;;;OAQG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,sBAAsB,EAC9B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,CAAC;IAY5B,gEAAgE;IAC1D,UAAU,CACd,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAY5B,gEAAgE;IAChE,OAAO,CAAC,QAAQ;CAQjB"}
|
|
1
|
+
{"version":3,"file":"watches.d.ts","sourceRoot":"","sources":["../../src/resources/watches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EACV,KAAK,EACL,KAAK,EACL,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAC;AAErB;;;;;;;;;GASG;AACH,qBAAa,OAAQ,SAAQ,YAAY;IACvC,iFAAiF;IAC3E,MAAM,CACV,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,sBAAsB,CAAA;KAAE,GAC5D,OAAO,CAAC,KAAK,CAAC;IAQjB,0EAA0E;IACpE,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAOzF,sDAAsD;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAKpE,6CAA6C;IACvC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAK3F,+CAA+C;IACzC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAK5E,8EAA8E;IACxE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAKjE,6BAA6B;IACvB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAKlE;;;;;;;;OAQG;IACG,MAAM,CACV,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC;IAKjB;;;;;OAKG;IACG,OAAO,CACX,IAAI,EAAE,kBAAkB,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,oBAAoB,CAAC;IAIhC,iFAAiF;IAC3E,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAS7E;;;;;;;;OAQG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,sBAAsB,EAC9B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,CAAC;IAY5B;;;;;;;;;;OAUG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,sBAAsB,EAC/B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,CAAC;IAY5B,gEAAgE;IAC1D,UAAU,CACd,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAY5B,gEAAgE;IAChE,OAAO,CAAC,QAAQ;CAQjB"}
|
|
@@ -7,7 +7,7 @@ import { createList } from '../pagination.js';
|
|
|
7
7
|
* `'mark' | 'portfolio' | 'owner' | 'class' | 'similarity'`. `query.match`
|
|
8
8
|
* is rejected in ANY form (object or string) — use `filters.ownerId`,
|
|
9
9
|
* `filters.trademarkIds`, `filters.niceClasses` for scoping and
|
|
10
|
-
* `
|
|
10
|
+
* `min_match_tier` for similarity precision. See {@link WatchQuery} and
|
|
11
11
|
* the watches guide for worked examples.
|
|
12
12
|
*/
|
|
13
13
|
export class Watches extends BaseResource {
|
|
@@ -93,6 +93,26 @@ export class Watches extends BaseResource {
|
|
|
93
93
|
}
|
|
94
94
|
return this._get(`/v1/watches/${encodeURIComponent(watchId)}/diagnostics`, { trademark_id: params.trademarkId }, options);
|
|
95
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Fetch the monthly proof-of-monitoring attestation (JSON) for a closed UTC
|
|
98
|
+
* calendar month. Defaults to the previous month. The current (open) month
|
|
99
|
+
* returns 422 unless `{ partial: true }`. Deterministic: re-fetch a closed
|
|
100
|
+
* period later and compare `content_hash` to verify integrity.
|
|
101
|
+
*
|
|
102
|
+
* The PDF business record is available at the HTTP layer via
|
|
103
|
+
* `GET /v1/watches/{id}/attestation?format=pdf` (or `Accept: application/pdf`).
|
|
104
|
+
*
|
|
105
|
+
* Required scope: `portfolios:manage`. Cross-org / unknown watch returns 404.
|
|
106
|
+
*/
|
|
107
|
+
async attestation(watchId, params, options) {
|
|
108
|
+
this._validateId(watchId);
|
|
109
|
+
const query = {};
|
|
110
|
+
if (params?.period)
|
|
111
|
+
query.period = params.period;
|
|
112
|
+
if (params?.partial)
|
|
113
|
+
query.partial = 'true';
|
|
114
|
+
return this._get(`/v1/watches/${encodeURIComponent(watchId)}/attestation`, query, options);
|
|
115
|
+
}
|
|
96
116
|
/** List alerts scoped to a single watch (cursor pagination). */
|
|
97
117
|
async listAlerts(watchId, params, options) {
|
|
98
118
|
this._validateId(watchId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watches.js","sourceRoot":"","sources":["../../src/resources/watches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"watches.js","sourceRoot":"","sources":["../../src/resources/watches.ts"],"names":[],"mappings":"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"}
|