@whitewall/blip-sdk 0.0.196 → 0.0.197

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.
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MediaNamespace = void 0;
4
+ const index_ts_1 = require("../types/index.js");
5
+ const logger_ts_1 = require("../utils/logger.js");
4
6
  const uri_ts_1 = require("../utils/uri.js");
5
7
  const namespace_ts_1 = require("./namespace.js");
6
8
  class MediaNamespace extends namespace_ts_1.Namespace {
@@ -28,13 +30,46 @@ class MediaNamespace extends namespace_ts_1.Namespace {
28
30
  const { mediaUri } = await uploadResponse.json();
29
31
  return mediaUri;
30
32
  }
31
- async refreshMedia(url, opts) {
32
- return await this.sendCommand({
33
- method: 'set',
34
- uri: (0, uri_ts_1.uri) `/refresh-media-uri`,
35
- type: 'text/plain',
36
- resource: url,
37
- }, opts);
33
+ async refreshMedia(target, opts) {
34
+ if (typeof target === 'string') {
35
+ return await this.sendCommand({
36
+ method: 'set',
37
+ uri: (0, uri_ts_1.uri) `/refresh-media-uri`,
38
+ type: 'text/plain',
39
+ resource: target,
40
+ }, opts);
41
+ }
42
+ if ((0, index_ts_1.isDocumentOfType)(target, 'application/vnd.lime.media-link+json')) {
43
+ return {
44
+ ...target,
45
+ value: { ...target.value, uri: await this.tryRefreshUri(target.value.uri, opts) },
46
+ };
47
+ }
48
+ if ((0, index_ts_1.isDocumentOfType)(target, 'application/vnd.lime.collection+json')) {
49
+ const { itemType, items } = target.value;
50
+ const refreshed = await Promise.all(items.map((item) => this.refreshMedia({ type: itemType, value: item }, opts)));
51
+ return { ...target, value: { ...target.value, items: refreshed.map((item) => item.value) } };
52
+ }
53
+ if ((0, index_ts_1.isDocumentOfType)(target, 'application/vnd.lime.reply+json')) {
54
+ const [replied, inReplyTo] = await Promise.all([
55
+ this.refreshMedia(target.value.replied, opts),
56
+ this.refreshMedia(target.value.inReplyTo, opts),
57
+ ]);
58
+ return { ...target, value: { replied, inReplyTo } };
59
+ }
60
+ return target;
61
+ }
62
+ async tryRefreshUri(url, opts) {
63
+ if (!URL.canParse(url)) {
64
+ return url;
65
+ }
66
+ try {
67
+ return await this.refreshMedia(url, opts);
68
+ }
69
+ catch (error) {
70
+ logger_ts_1.logger.warn('media', `Failed to refresh media: ${url}`, error);
71
+ return url;
72
+ }
38
73
  }
39
74
  }
40
75
  exports.MediaNamespace = MediaNamespace;
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/namespaces/media.ts"],"names":[],"mappings":";;;AACA,4CAAqC;AACrC,iDAAwF;AAExF,MAAa,cAAe,SAAQ,wBAAS;IACzC,YAAY,UAAsB,EAAE,cAAmC;QACnE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;IAC9C,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,IAAqB;QAChD,OAAO,MAAM,IAAI,CAAC,WAAW,CACzB;YACI,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,IAAA,YAAG,EAAA,mBAAmB;SAC9B,EACD,IAAI,CACP,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,WAAW,CACpB,QAAgB,EAChB,KAAoD,EACpD,IAAqB;QAErB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC9C,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,QAAQ;aAC3B;YACD,IAAI,EAAE,KAAK;SACd,CAAC,CAAA;QACF,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,cAAc,CAAC,UAAU,EAAE,CAAC,CAAA;QAC3E,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAA;QAChD,OAAO,QAAQ,CAAA;IACnB,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,IAAqB;QACxD,OAAO,MAAM,IAAI,CAAC,WAAW,CACzB;YACI,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,IAAA,YAAG,EAAA,oBAAoB;YAC5B,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,GAAG;SAChB,EACD,IAAI,CACP,CAAA;IACL,CAAC;CACJ;AA9CD,wCA8CC"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/namespaces/media.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { isDocumentOfType } from "../types/index.js";
2
+ import { logger } from "../utils/logger.js";
1
3
  import { uri } from "../utils/uri.js";
2
4
  import { Namespace } from "./namespace.js";
3
5
  export class MediaNamespace extends Namespace {
@@ -25,13 +27,46 @@ export class MediaNamespace extends Namespace {
25
27
  const { mediaUri } = await uploadResponse.json();
26
28
  return mediaUri;
27
29
  }
28
- async refreshMedia(url, opts) {
29
- return await this.sendCommand({
30
- method: 'set',
31
- uri: uri `/refresh-media-uri`,
32
- type: 'text/plain',
33
- resource: url,
34
- }, opts);
30
+ async refreshMedia(target, opts) {
31
+ if (typeof target === 'string') {
32
+ return await this.sendCommand({
33
+ method: 'set',
34
+ uri: uri `/refresh-media-uri`,
35
+ type: 'text/plain',
36
+ resource: target,
37
+ }, opts);
38
+ }
39
+ if (isDocumentOfType(target, 'application/vnd.lime.media-link+json')) {
40
+ return {
41
+ ...target,
42
+ value: { ...target.value, uri: await this.tryRefreshUri(target.value.uri, opts) },
43
+ };
44
+ }
45
+ if (isDocumentOfType(target, 'application/vnd.lime.collection+json')) {
46
+ const { itemType, items } = target.value;
47
+ const refreshed = await Promise.all(items.map((item) => this.refreshMedia({ type: itemType, value: item }, opts)));
48
+ return { ...target, value: { ...target.value, items: refreshed.map((item) => item.value) } };
49
+ }
50
+ if (isDocumentOfType(target, 'application/vnd.lime.reply+json')) {
51
+ const [replied, inReplyTo] = await Promise.all([
52
+ this.refreshMedia(target.value.replied, opts),
53
+ this.refreshMedia(target.value.inReplyTo, opts),
54
+ ]);
55
+ return { ...target, value: { replied, inReplyTo } };
56
+ }
57
+ return target;
58
+ }
59
+ async tryRefreshUri(url, opts) {
60
+ if (!URL.canParse(url)) {
61
+ return url;
62
+ }
63
+ try {
64
+ return await this.refreshMedia(url, opts);
65
+ }
66
+ catch (error) {
67
+ logger.warn('media', `Failed to refresh media: ${url}`, error);
68
+ return url;
69
+ }
35
70
  }
36
71
  }
37
72
  //# sourceMappingURL=media.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/namespaces/media.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAuB,SAAS,EAA2B,MAAM,gBAAgB,CAAA;AAExF,MAAM,OAAO,cAAe,SAAQ,SAAS;IACzC,YAAY,UAAsB,EAAE,cAAmC;QACnE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;IAC9C,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,IAAqB;QAChD,OAAO,MAAM,IAAI,CAAC,WAAW,CACzB;YACI,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,GAAG,CAAA,mBAAmB;SAC9B,EACD,IAAI,CACP,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,WAAW,CACpB,QAAgB,EAChB,KAAoD,EACpD,IAAqB;QAErB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC9C,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,QAAQ;aAC3B;YACD,IAAI,EAAE,KAAK;SACd,CAAC,CAAA;QACF,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,cAAc,CAAC,UAAU,EAAE,CAAC,CAAA;QAC3E,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAA;QAChD,OAAO,QAAQ,CAAA;IACnB,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,IAAqB;QACxD,OAAO,MAAM,IAAI,CAAC,WAAW,CACzB;YACI,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,GAAG,CAAA,oBAAoB;YAC5B,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,GAAG;SAChB,EACD,IAAI,CACP,CAAA;IACL,CAAC;CACJ"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/namespaces/media.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,12 @@
1
1
  import type { BlipClient } from '../client.ts';
2
+ import { type UnknownDocument } from '../types/index.ts';
2
3
  import { type ConsumeOptions, Namespace, type SendCommandOptions } from './namespace.ts';
3
4
  export declare class MediaNamespace extends Namespace {
4
5
  constructor(blipClient: BlipClient, defaultOptions?: SendCommandOptions);
5
6
  getMediaUploadUrl(opts?: ConsumeOptions): Promise<string>;
6
7
  uploadMedia(mimetype: string, media: BufferSource | Blob | string | ReadableStream, opts?: ConsumeOptions): Promise<string>;
7
8
  refreshMedia(url: string, opts?: ConsumeOptions): Promise<string>;
9
+ refreshMedia<TDocument extends UnknownDocument>(document: TDocument, opts?: ConsumeOptions): Promise<TDocument>;
10
+ private tryRefreshUri;
8
11
  }
9
12
  //# sourceMappingURL=media.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/namespaces/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExF,qBAAa,cAAe,SAAQ,SAAS;gBAC7B,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,kBAAkB;IAI1D,iBAAiB,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzD,WAAW,CACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,cAAc,EACpD,IAAI,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC;IAgBL,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAWjF"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/namespaces/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAG1E,OAAO,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExF,qBAAa,cAAe,SAAQ,SAAS;gBAC7B,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,kBAAkB;IAI1D,iBAAiB,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzD,WAAW,CACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,cAAc,EACpD,IAAI,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC;IAgBL,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IACjE,YAAY,CAAC,SAAS,SAAS,eAAe,EACvD,QAAQ,EAAE,SAAS,EACnB,IAAI,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,SAAS,CAAC;YA6CP,aAAa;CAY9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whitewall/blip-sdk",
3
- "version": "0.0.196",
3
+ "version": "0.0.197",
4
4
  "description": "Blip API wrapper",
5
5
  "exports": {
6
6
  "types": "./dist/types/index.d.ts",
@@ -1,4 +1,6 @@
1
1
  import type { BlipClient } from '../client.ts'
2
+ import { isDocumentOfType, type UnknownDocument } from '../types/index.ts'
3
+ import { logger } from '../utils/logger.ts'
2
4
  import { uri } from '../utils/uri.ts'
3
5
  import { type ConsumeOptions, Namespace, type SendCommandOptions } from './namespace.ts'
4
6
 
@@ -37,15 +39,65 @@ export class MediaNamespace extends Namespace {
37
39
  return mediaUri
38
40
  }
39
41
 
40
- public async refreshMedia(url: string, opts?: ConsumeOptions): Promise<string> {
41
- return await this.sendCommand(
42
- {
43
- method: 'set',
44
- uri: uri`/refresh-media-uri`,
45
- type: 'text/plain',
46
- resource: url,
47
- },
48
- opts,
49
- )
42
+ public async refreshMedia(url: string, opts?: ConsumeOptions): Promise<string>
43
+ public async refreshMedia<TDocument extends UnknownDocument>(
44
+ document: TDocument,
45
+ opts?: ConsumeOptions,
46
+ ): Promise<TDocument>
47
+ public async refreshMedia(
48
+ target: string | UnknownDocument,
49
+ opts?: ConsumeOptions,
50
+ ): Promise<string | UnknownDocument> {
51
+ if (typeof target === 'string') {
52
+ return await this.sendCommand(
53
+ {
54
+ method: 'set',
55
+ uri: uri`/refresh-media-uri`,
56
+ type: 'text/plain',
57
+ resource: target,
58
+ },
59
+ opts,
60
+ )
61
+ }
62
+
63
+ if (isDocumentOfType(target, 'application/vnd.lime.media-link+json')) {
64
+ return {
65
+ ...target,
66
+ value: { ...target.value, uri: await this.tryRefreshUri(target.value.uri, opts) },
67
+ }
68
+ }
69
+
70
+ if (isDocumentOfType(target, 'application/vnd.lime.collection+json')) {
71
+ const { itemType, items } = target.value
72
+ const refreshed = await Promise.all(
73
+ items.map((item) => this.refreshMedia({ type: itemType, value: item }, opts)),
74
+ )
75
+
76
+ return { ...target, value: { ...target.value, items: refreshed.map((item) => item.value) } }
77
+ }
78
+
79
+ if (isDocumentOfType(target, 'application/vnd.lime.reply+json')) {
80
+ const [replied, inReplyTo] = await Promise.all([
81
+ this.refreshMedia(target.value.replied, opts),
82
+ this.refreshMedia(target.value.inReplyTo, opts),
83
+ ])
84
+
85
+ return { ...target, value: { replied, inReplyTo } }
86
+ }
87
+
88
+ return target
89
+ }
90
+
91
+ private async tryRefreshUri(url: string, opts?: ConsumeOptions): Promise<string> {
92
+ if (!URL.canParse(url)) {
93
+ return url
94
+ }
95
+
96
+ try {
97
+ return await this.refreshMedia(url, opts)
98
+ } catch (error) {
99
+ logger.warn('media', `Failed to refresh media: ${url}`, error)
100
+ return url
101
+ }
50
102
  }
51
103
  }