@toa.io/extensions.storages 1.0.0-alpha.31 → 1.0.0-alpha.310

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.
Files changed (122) hide show
  1. package/package.json +38 -18
  2. package/readme.md +115 -47
  3. package/transpiled/Aspect.d.ts +8 -4
  4. package/transpiled/Aspect.js +12 -14
  5. package/transpiled/Aspect.js.map +1 -1
  6. package/transpiled/Entry.d.ts +14 -11
  7. package/transpiled/Entry.js +1 -2
  8. package/transpiled/Factory.d.ts +1 -1
  9. package/transpiled/Factory.js +29 -30
  10. package/transpiled/Factory.js.map +1 -1
  11. package/transpiled/Provider.d.ts +17 -19
  12. package/transpiled/Provider.js +10 -33
  13. package/transpiled/Provider.js.map +1 -1
  14. package/transpiled/Scanner.d.ts +5 -4
  15. package/transpiled/Scanner.js +33 -26
  16. package/transpiled/Scanner.js.map +1 -1
  17. package/transpiled/Secrets.d.ts +5 -0
  18. package/transpiled/Secrets.js +2 -0
  19. package/transpiled/Secrets.js.map +1 -0
  20. package/transpiled/Storage.d.ts +23 -22
  21. package/transpiled/Storage.js +79 -142
  22. package/transpiled/Storage.js.map +1 -1
  23. package/transpiled/errors.d.ts +7 -0
  24. package/transpiled/errors.js +4 -0
  25. package/transpiled/errors.js.map +1 -0
  26. package/transpiled/index.d.ts +4 -4
  27. package/transpiled/index.js +1 -9
  28. package/transpiled/index.js.map +1 -1
  29. package/transpiled/measurements.d.ts +3 -0
  30. package/transpiled/measurements.js +23 -0
  31. package/transpiled/measurements.js.map +1 -0
  32. package/transpiled/providers/Cloudinary.d.ts +50 -0
  33. package/transpiled/providers/Cloudinary.js +223 -0
  34. package/transpiled/providers/Cloudinary.js.map +1 -0
  35. package/transpiled/providers/Declaration.d.ts +9 -5
  36. package/transpiled/providers/Declaration.js +1 -2
  37. package/transpiled/providers/FileSystem.d.ts +16 -11
  38. package/transpiled/providers/FileSystem.js +64 -43
  39. package/transpiled/providers/FileSystem.js.map +1 -1
  40. package/transpiled/providers/S3.d.ts +14 -19
  41. package/transpiled/providers/S3.js +72 -123
  42. package/transpiled/providers/S3.js.map +1 -1
  43. package/transpiled/providers/Spaces.d.ts +12 -0
  44. package/transpiled/providers/Spaces.js +13 -0
  45. package/transpiled/providers/Spaces.js.map +1 -0
  46. package/transpiled/providers/Temporary.d.ts +2 -3
  47. package/transpiled/providers/Temporary.js +7 -11
  48. package/transpiled/providers/Temporary.js.map +1 -1
  49. package/transpiled/providers/Test.d.ts +4 -4
  50. package/transpiled/providers/Test.js +6 -12
  51. package/transpiled/providers/Test.js.map +1 -1
  52. package/transpiled/providers/index.d.ts +23 -11
  53. package/transpiled/providers/index.js +30 -14
  54. package/transpiled/providers/index.js.map +1 -1
  55. package/transpiled/providers/index.types.d.ts +5 -0
  56. package/transpiled/providers/index.types.js +2 -0
  57. package/transpiled/providers/index.types.js.map +1 -0
  58. package/transpiled/test/util.d.ts +113 -6
  59. package/transpiled/test/util.js +68 -15
  60. package/transpiled/test/util.js.map +1 -1
  61. package/schemas/annotation.cos.yaml +0 -10
  62. package/schemas/fs.cos.yaml +0 -9
  63. package/schemas/mem.cos.yaml +0 -6
  64. package/schemas/s3.cos.yaml +0 -16
  65. package/schemas/test.cos.yaml +0 -8
  66. package/schemas/tmp.cos.yaml +0 -9
  67. package/source/Annotation.ts +0 -39
  68. package/source/Aspect.ts +0 -25
  69. package/source/Entry.ts +0 -14
  70. package/source/Factory.ts +0 -68
  71. package/source/Provider.ts +0 -37
  72. package/source/Scanner.ts +0 -153
  73. package/source/Storage.test.ts +0 -472
  74. package/source/Storage.ts +0 -235
  75. package/source/deployment.ts +0 -57
  76. package/source/index.ts +0 -5
  77. package/source/manifest.ts +0 -8
  78. package/source/providers/Declaration.ts +0 -10
  79. package/source/providers/FileSystem.test.ts +0 -5
  80. package/source/providers/FileSystem.ts +0 -63
  81. package/source/providers/Memory.ts +0 -55
  82. package/source/providers/S3.test.ts +0 -134
  83. package/source/providers/S3.ts +0 -196
  84. package/source/providers/Temporary.ts +0 -16
  85. package/source/providers/Test.ts +0 -13
  86. package/source/providers/index.test.ts +0 -136
  87. package/source/providers/index.ts +0 -16
  88. package/source/providers/readme.md +0 -25
  89. package/source/schemas.test.ts +0 -58
  90. package/source/schemas.ts +0 -15
  91. package/source/test/.env.example +0 -1
  92. package/source/test/albert.jpg +0 -0
  93. package/source/test/empty.txt +0 -0
  94. package/source/test/lenna.ascii +0 -64
  95. package/source/test/lenna.png +0 -0
  96. package/source/test/sample.avi +0 -0
  97. package/source/test/sample.avif +0 -0
  98. package/source/test/sample.gif +0 -0
  99. package/source/test/sample.heic +0 -0
  100. package/source/test/sample.jpeg +0 -0
  101. package/source/test/sample.jxl +0 -0
  102. package/source/test/sample.svg +0 -4
  103. package/source/test/sample.wav +0 -0
  104. package/source/test/sample.webp +0 -0
  105. package/source/test/util.ts +0 -45
  106. package/transpiled/Annotation.d.ts +0 -3
  107. package/transpiled/Annotation.js +0 -57
  108. package/transpiled/Annotation.js.map +0 -1
  109. package/transpiled/deployment.d.ts +0 -5
  110. package/transpiled/deployment.js +0 -68
  111. package/transpiled/deployment.js.map +0 -1
  112. package/transpiled/manifest.d.ts +0 -1
  113. package/transpiled/manifest.js +0 -9
  114. package/transpiled/manifest.js.map +0 -1
  115. package/transpiled/providers/Memory.d.ts +0 -15
  116. package/transpiled/providers/Memory.js +0 -72
  117. package/transpiled/providers/Memory.js.map +0 -1
  118. package/transpiled/schemas.d.ts +0 -9
  119. package/transpiled/schemas.js +0 -14
  120. package/transpiled/schemas.js.map +0 -1
  121. package/transpiled/tsconfig.tsbuildinfo +0 -1
  122. package/tsconfig.json +0 -12
@@ -1,24 +1,22 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Scanner = void 0;
4
- const node_stream_1 = require("node:stream");
5
- const node_crypto_1 = require("node:crypto");
6
- const agent_1 = require("@toa.io/agent");
7
- const error_value_1 = require("error-value");
8
- class Scanner extends node_stream_1.PassThrough {
1
+ import { PassThrough } from 'node:stream';
2
+ import { createHash } from 'node:crypto';
3
+ import Negotiator from 'negotiator';
4
+ export class Scanner extends PassThrough {
9
5
  size = 0;
10
6
  type = 'application/octet-stream';
11
- error = null;
12
- hash = (0, node_crypto_1.createHash)('md5');
7
+ error;
8
+ hash = createHash('md5');
13
9
  claim;
14
10
  accept;
11
+ limit;
15
12
  position = 0;
16
- detected = false;
13
+ completed = false;
17
14
  chunks = [];
18
15
  constructor(control) {
19
16
  super();
20
17
  this.claim = control?.claim;
21
18
  this.accept = control?.accept;
19
+ this.limit = control?.limit;
22
20
  }
23
21
  digest() {
24
22
  return this.hash.digest('hex');
@@ -30,7 +28,7 @@ class Scanner extends node_stream_1.PassThrough {
30
28
  process = (buffer) => {
31
29
  this.size += buffer.length;
32
30
  this.hash.update(buffer);
33
- if (this.detected)
31
+ if (this.completed)
34
32
  return;
35
33
  if (this.position + buffer.length > HEADER_SIZE)
36
34
  buffer = buffer.subarray(0, HEADER_SIZE - this.position);
@@ -38,15 +36,14 @@ class Scanner extends node_stream_1.PassThrough {
38
36
  this.position += buffer.length;
39
37
  if (this.position === HEADER_SIZE)
40
38
  this.complete();
39
+ if (this.limit !== undefined && this.size > this.limit)
40
+ this.interrupt(ERR_LIMIT_EXCEEDED);
41
41
  };
42
42
  complete() {
43
43
  const header = Buffer.concat(this.chunks).toString('hex');
44
- const signature = SIGNATURES
45
- .find(({ off, hex, expression }) => {
44
+ const signature = SIGNATURES.find(({ off, hex, expression }) => {
46
45
  const sig = header.slice(off, off + hex.length);
47
- return expression === undefined
48
- ? sig === hex
49
- : expression.test(sig);
46
+ return expression === undefined ? sig === hex : expression.test(sig);
50
47
  });
51
48
  const type = signature?.type ?? this.claim;
52
49
  if (type !== undefined) {
@@ -54,7 +51,7 @@ class Scanner extends node_stream_1.PassThrough {
54
51
  this.type = type;
55
52
  }
56
53
  this.verify(signature);
57
- this.detected = true;
54
+ this.completed = true;
58
55
  }
59
56
  verify(signature) {
60
57
  if (this.claim === undefined || this.claim === 'application/octet-stream')
@@ -68,20 +65,24 @@ class Scanner extends node_stream_1.PassThrough {
68
65
  match(type) {
69
66
  if (this.accept === undefined)
70
67
  return;
71
- const unacceptable = (0, agent_1.negotiate)(this.accept, [type]) === null;
68
+ const unacceptable = this.negotiate(this.accept, [type]) === null;
72
69
  if (unacceptable)
73
70
  this.interrupt(ERR_NOT_ACCEPTABLE);
74
71
  }
72
+ negotiate(accept, type) {
73
+ return new Negotiator({ headers: { accept } }).mediaType(type) ?? null;
74
+ }
75
75
  interrupt(error) {
76
+ this.completed = true;
76
77
  this.error = error;
77
- this.end();
78
+ this.destroy(error);
78
79
  }
79
80
  }
80
- exports.Scanner = Scanner;
81
81
  // https://en.wikipedia.org/wiki/List_of_file_signatures
82
82
  const SIGNATURES = [
83
83
  { hex: 'ff d8 ff e0', off: 0, type: 'image/jpeg' },
84
84
  { hex: 'ff d8 ff e1', off: 0, type: 'image/jpeg' },
85
+ { hex: 'ff d8 ff e2', off: 0, type: 'image/jpeg' },
85
86
  { hex: 'ff d8 ff ee', off: 0, type: 'image/jpeg' },
86
87
  { hex: 'ff d8 ff db', off: 0, type: 'image/jpeg' },
87
88
  { hex: '89 50 4e 47', off: 0, type: 'image/png' },
@@ -94,7 +95,7 @@ const SIGNATURES = [
94
95
  { hex: '52 49 46 46 ?? ?? ?? ?? 57 41 56 45', off: 0, type: 'audio/wav' }
95
96
  /*
96
97
  When adding a new signature, include a copyright-free sample file in the `.tests` directory
97
- and update the 'signatures' test group in `Storage.test.ts`.
98
+ and update the `signatures` test group in `Storage.test.ts`.
98
99
  */
99
100
  ].map((signature) => {
100
101
  signature.hex = signature.hex.replaceAll(' ', '');
@@ -104,9 +105,15 @@ const SIGNATURES = [
104
105
  }
105
106
  return signature;
106
107
  });
107
- const HEADER_SIZE = SIGNATURES
108
- .reduce((max, { off, hex }) => Math.max(max, off + hex.length), 0) / 2;
108
+ const HEADER_SIZE = SIGNATURES.reduce((max, { off, hex }) => Math.max(max, off + hex.length), 0) / 2;
109
109
  const KNOWN_TYPES = new Set(SIGNATURES.map(({ type }) => type));
110
- const ERR_TYPE_MISMATCH = (0, error_value_1.Err)('TYPE_MISMATCH');
111
- const ERR_NOT_ACCEPTABLE = (0, error_value_1.Err)('NOT_ACCEPTABLE');
110
+ const ERR_TYPE_MISMATCH = new (class TypeMismatchError extends Error {
111
+ code = 'TYPE_MISMATCH';
112
+ })();
113
+ const ERR_NOT_ACCEPTABLE = new (class NotAcceptableError extends Error {
114
+ code = 'NOT_ACCEPTABLE';
115
+ })();
116
+ const ERR_LIMIT_EXCEEDED = new (class LimitExceededError extends Error {
117
+ code = 'LIMIT_EXCEEDED';
118
+ })();
112
119
  //# sourceMappingURL=Scanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Scanner.js","sourceRoot":"","sources":["../source/Scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Scanner.js","sourceRoot":"","sources":["../source/Scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type Secrets<K extends string = string> = Record<K | string, string | undefined>;
2
+ export interface Secret {
3
+ readonly name: string;
4
+ readonly optional?: boolean;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Secrets.js","sourceRoot":"","sources":["../source/Secrets.ts"],"names":[],"mappings":""}
@@ -1,30 +1,31 @@
1
- /// <reference types="node" />
2
- import { Readable } from 'node:stream';
3
- import type { ScanOptions } from './Scanner';
4
- import type { Provider } from './Provider';
5
- import type { Entry } from './Entry';
6
- export declare class Storage {
1
+ import type { Readable } from 'node:stream';
2
+ import type { Attributes, Entry, Stream } from './Entry.ts';
3
+ import type { ScanOptions } from './Scanner.ts';
4
+ import type { Provider } from './Provider.ts';
5
+ export declare class Storage<T extends Provider = Provider> {
7
6
  private readonly provider;
8
- constructor(provider: Provider);
7
+ private readonly scope?;
8
+ constructor(provider: T, scope?: Scope);
9
+ options(): T['options'];
9
10
  put(path: string, stream: Readable, options?: Options): Maybe<Entry>;
10
- get(path: string): Maybe<Entry>;
11
- list(path: string): Promise<string[]>;
12
- fetch(path: string): Maybe<Readable>;
11
+ get(path: string, options?: unknown): Maybe<Stream>;
12
+ head(path: string): Promise<Maybe<Entry>>;
13
13
  delete(path: string): Maybe<void>;
14
- move(path: string, to: string): Maybe<void>;
15
- diversify(path: string, name: string, stream: Readable): Maybe<void>;
16
- annotate(path: string, key: string, value?: unknown): Maybe<void>;
17
- private transit;
18
- private persist;
19
- private create;
20
- private save;
21
- private parse;
22
- private destruct;
14
+ path(): string | null;
15
+ private locate;
16
+ private span;
23
17
  }
24
- type Maybe<T> = Promise<T | Error>;
25
- type Meta = Record<string, string>;
26
18
  interface Options extends ScanOptions {
27
- meta?: Meta;
19
+ id?: string;
20
+ origin?: string;
21
+ attributes?: Attributes;
22
+ }
23
+ type Maybe<T> = Promise<T | Error>;
24
+ export interface Scope {
25
+ /** the logical storage name, e.g. `octets` */
26
+ name: string;
27
+ /** the provider id, e.g. `s3` */
28
+ provider: string;
28
29
  }
29
30
  export type Storages = Record<string, Storage>;
30
31
  export {};
@@ -1,157 +1,94 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Storage = void 0;
4
- const node_stream_1 = require("node:stream");
5
- const node_path_1 = require("node:path");
6
- const consumers_1 = require("node:stream/consumers");
7
- const msgpackr_1 = require("msgpackr");
8
- const generic_1 = require("@toa.io/generic");
9
- const error_value_1 = require("error-value");
10
- const Scanner_1 = require("./Scanner");
11
- class Storage {
1
+ import { basename, dirname, join } from 'node:path';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { console } from 'openspan';
4
+ import { Scanner } from './Scanner.js';
5
+ import { operation } from './measurements.js';
6
+ export class Storage {
12
7
  provider;
13
- constructor(provider) {
8
+ scope;
9
+ constructor(provider, scope) {
14
10
  this.provider = provider;
11
+ this.scope = scope;
15
12
  }
16
- async put(path, stream, options) {
17
- const scanner = new Scanner_1.Scanner(options);
18
- const pipe = stream.pipe(scanner);
19
- const tempname = await this.transit(pipe);
20
- if (scanner.error !== null)
21
- return scanner.error;
22
- const id = scanner.digest();
23
- await this.persist(tempname, id);
24
- return await this.create(path, id, scanner.size, scanner.type, options?.meta);
13
+ options() {
14
+ return this.provider.options;
25
15
  }
26
- async get(path) {
27
- const paths = this.destruct(path);
28
- const result = await this.provider.get(paths.metafile);
29
- if (result === null)
30
- return ERR_NOT_FOUND;
31
- else
32
- return (0, msgpackr_1.decode)(await (0, consumers_1.buffer)(result));
16
+ async put(path, stream, options) {
17
+ return await console.span(this.span('put', path), async () => {
18
+ const scanner = new Scanner(options);
19
+ const pipe = stream.pipe(scanner).on('error', () => undefined);
20
+ const id = options?.id ?? randomUUID().replace(/-/g, '');
21
+ const location = this.locate(path, id);
22
+ /**
23
+ * Provider can return or throw an error.
24
+ * If thrown error is TYPE_MISMATCH from the Scanner, it should be returned.
25
+ */
26
+ const error = await this.provider
27
+ .put(location, pipe)
28
+ .catch((error) => {
29
+ if (error === scanner.error)
30
+ return error;
31
+ else
32
+ throw error;
33
+ });
34
+ if (error instanceof Error)
35
+ return error;
36
+ const metadata = {
37
+ id,
38
+ size: scanner.size,
39
+ type: scanner.type,
40
+ checksum: scanner.digest(),
41
+ created: new Date().toISOString(),
42
+ attributes: options?.attributes ?? {}
43
+ };
44
+ if (options?.origin !== undefined)
45
+ metadata.attributes.origin = options.origin;
46
+ await this.provider.commit(location, metadata);
47
+ return metadata;
48
+ });
33
49
  }
34
- async list(path) {
35
- const dir = node_path_1.posix.join(ENTRIES_ROOT, path, ENTRIES_DIR);
36
- return await this.provider.list(dir);
50
+ async get(path, options) {
51
+ return await console.span(this.span('get', dirname(path)), async () => {
52
+ const location = this.locate(path);
53
+ return await this.provider.get(location, options);
54
+ });
37
55
  }
38
- async fetch(path) {
39
- const { rel, id, variant } = this.parse(path);
40
- if (variant === null && rel !== '') {
41
- const entry = await this.get(path);
42
- if (entry instanceof Error)
43
- return entry;
44
- }
45
- const blob = variant === null
46
- ? node_path_1.posix.join(BLOBs, id)
47
- : node_path_1.posix.join(ENTRIES_ROOT, rel, id, variant);
48
- const stream = await this.provider.get(blob);
49
- if (stream === null)
50
- return ERR_NOT_FOUND;
51
- else
52
- return stream;
56
+ async head(path) {
57
+ return await console.span(this.span('head', dirname(path)), async () => {
58
+ const id = basename(path).split('.')[0];
59
+ const location = this.locate(path);
60
+ const metadata = await this.provider.head(location);
61
+ if (metadata instanceof Error)
62
+ return metadata;
63
+ return {
64
+ id,
65
+ ...metadata
66
+ };
67
+ });
53
68
  }
54
69
  async delete(path) {
55
- const entry = await this.get(path);
56
- if (entry instanceof Error)
57
- return entry;
58
- const paths = this.destruct(path);
59
- await Promise.all([
60
- this.provider.delete(paths.metafile),
61
- this.provider.delete(paths.vardir)
62
- ]);
63
- }
64
- async move(path, to) {
65
- const source = this.destruct(path);
66
- const rel = to.startsWith('.');
67
- const dir = to.endsWith('/');
68
- if (rel)
69
- to = node_path_1.posix.resolve(source.rel + '/', to);
70
- if (dir)
71
- to = node_path_1.posix.join(to, source.ent);
72
- const target = this.destruct(to);
73
- await Promise.all([
74
- this.provider.move(source.metafile, target.metafile),
75
- this.provider.moveDir(source.vardir, target.vardir)
76
- ]);
77
- }
78
- async diversify(path, name, stream) {
79
- const scanner = new Scanner_1.Scanner();
80
- const pipe = stream.pipe(scanner);
81
- await this.provider.put(node_path_1.posix.join(ENTRIES_ROOT, path), name, pipe);
82
- if (scanner.error !== null)
83
- return scanner.error;
84
- const { size, type } = scanner;
85
- const entry = await this.get(path);
86
- if (entry instanceof Error)
87
- return entry;
88
- entry.variants = entry.variants.filter((variant) => variant.name !== name);
89
- entry.variants.push({ name, size, type });
90
- await this.save(path, entry);
70
+ return await console.span(this.span('delete', dirname(path)), async () => {
71
+ const location = this.locate(path);
72
+ return await this.provider.delete(location);
73
+ });
91
74
  }
92
- async annotate(path, key, value) {
93
- const entry = await this.get(path);
94
- if (entry instanceof Error)
95
- return entry;
96
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
97
- if (value === undefined)
98
- delete entry.meta[key];
99
- else
100
- entry.meta[key] = value;
101
- await this.save(path, entry);
75
+ path() {
76
+ return this.provider.root ?? null;
102
77
  }
103
- async transit(stream) {
104
- const tempname = (0, generic_1.newid)();
105
- await this.provider.put(TEMP, tempname, stream);
106
- return tempname;
78
+ locate(...rel) {
79
+ return join(ENTRIES, ...rel);
107
80
  }
108
- async persist(tempname, id) {
109
- const temp = node_path_1.posix.join(TEMP, tempname);
110
- const blob = node_path_1.posix.join(BLOBs, id);
111
- await this.provider.move(temp, blob);
112
- }
113
- // eslint-disable-next-line max-params
114
- async create(path, id, size, type, meta = {}) {
115
- const entry = {
116
- id,
117
- size,
118
- type,
119
- created: Date.now(),
120
- variants: [],
121
- meta
81
+ span(method, path) {
82
+ return {
83
+ name: `${method} ${this.scope?.name ?? 'storage'}`,
84
+ kind: 'client',
85
+ attributes: {
86
+ ...(this.scope === undefined ? {} : { provider: this.scope.provider }),
87
+ path
88
+ },
89
+ measure: operation(method, this.scope)
122
90
  };
123
- const metafile = node_path_1.posix.join(path, entry.id);
124
- const existing = await this.get(metafile);
125
- if (existing instanceof Error)
126
- await this.save(metafile, entry);
127
- return entry;
128
- }
129
- async save(path, entry) {
130
- const paths = this.destruct(path);
131
- const stream = node_stream_1.Readable.from((0, msgpackr_1.encode)(entry));
132
- await this.provider.put(paths.metadir, paths.ent, stream);
133
- }
134
- parse(path) {
135
- const [last, ...segments] = path.split('/').reverse();
136
- const [id, ...rest] = last.split('.');
137
- const variant = rest.length > 0 ? rest.join('.') : null;
138
- const rel = segments.reverse().join('/');
139
- return { rel, id, variant };
140
- }
141
- destruct(path) {
142
- const rel = node_path_1.posix.dirname(path);
143
- const dir = node_path_1.posix.join(ENTRIES_ROOT, rel);
144
- const ent = node_path_1.posix.basename(path);
145
- const metadir = node_path_1.posix.join(dir, ENTRIES_DIR);
146
- const metafile = node_path_1.posix.join(metadir, ent);
147
- const vardir = node_path_1.posix.join(dir, ent);
148
- return { rel, dir, ent, metadir, metafile, vardir };
149
91
  }
150
92
  }
151
- exports.Storage = Storage;
152
- const ERR_NOT_FOUND = (0, error_value_1.Err)('NOT_FOUND');
153
- const TEMP = '/temp';
154
- const BLOBs = '/blobs';
155
- const ENTRIES_ROOT = '/entries';
156
- const ENTRIES_DIR = '.meta';
93
+ const ENTRIES = '/';
157
94
  //# sourceMappingURL=Storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.js","sourceRoot":"","sources":["../source/Storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Storage.js","sourceRoot":"","sources":["../source/Storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const ERR_NOT_FOUND: {
2
+ readonly code: "NOT_FOUND";
3
+ name: string;
4
+ message: string;
5
+ stack?: string;
6
+ cause?: unknown;
7
+ };
@@ -0,0 +1,4 @@
1
+ export const ERR_NOT_FOUND = new (class NotFoundError extends Error {
2
+ code = 'NOT_FOUND';
3
+ })();
4
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../source/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,aAAc,SAAQ,KAAK;IACjD,IAAI,GAAG,WAAW,CAAA;CACnC,CAAC,EAAE,CAAA"}
@@ -1,4 +1,4 @@
1
- export { Factory } from './Factory';
2
- export { deployment } from './deployment';
3
- export { manifest } from './manifest';
4
- export type { Entry } from './Entry';
1
+ export { Factory } from './Factory.ts';
2
+ export type { Entry, Stream } from './Entry.ts';
3
+ export type { Storage } from './Storage.ts';
4
+ export type * from './providers/index.ts';
@@ -1,10 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.manifest = exports.deployment = exports.Factory = void 0;
4
- var Factory_1 = require("./Factory");
5
- Object.defineProperty(exports, "Factory", { enumerable: true, get: function () { return Factory_1.Factory; } });
6
- var deployment_1 = require("./deployment");
7
- Object.defineProperty(exports, "deployment", { enumerable: true, get: function () { return deployment_1.deployment; } });
8
- var manifest_1 = require("./manifest");
9
- Object.defineProperty(exports, "manifest", { enumerable: true, get: function () { return manifest_1.manifest; } });
1
+ export { Factory } from './Factory.js';
10
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";;;AAAA,qCAAmC;AAA1B,kGAAA,OAAO,OAAA;AAChB,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AACnB,uCAAqC;AAA5B,oGAAA,QAAQ,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Measure } from 'openspan';
2
+ import type { Scope } from './Storage.ts';
3
+ export declare function operation(method: string, scope?: Scope): Measure;
@@ -0,0 +1,23 @@
1
+ import { registry } from 'openspan';
2
+ /**
3
+ * What a BLOB storage measures. Network I/O to a third party, and nothing else reports it.
4
+ *
5
+ * `storage` is the name the component declared it under and `provider` is what stands behind it:
6
+ * a component declares several and uses them for different things, so the provider alone does not
7
+ * say which one was slow where two declarations share one.
8
+ */
9
+ const meters = registry();
10
+ /** Wider than a query's, because a third party over the network is slower than a database. */
11
+ const DURATIONS = [0.01, 0.05, 0.1, 0.5, 1, 2.5, 5, 10, 30];
12
+ const duration = meters.histogram('toa.blob.operation.duration', { buckets: DURATIONS, unit: 's' }, { storage: null, provider: null, operation: null });
13
+ export function operation(method, scope) {
14
+ return {
15
+ histogram: duration,
16
+ labels: {
17
+ storage: scope?.name,
18
+ provider: scope?.provider,
19
+ operation: method
20
+ }
21
+ };
22
+ }
23
+ //# sourceMappingURL=measurements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurements.js","sourceRoot":"","sources":["../source/measurements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAInC;;;;;;GAMG;AACH,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;AAEzB,8FAA8F;AAC9F,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAE3D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAC/B,6BAA6B,EAC7B,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,EACjC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CACnD,CAAA;AAED,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,KAAa;IACrD,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE;YACN,OAAO,EAAE,KAAK,EAAE,IAAI;YACpB,QAAQ,EAAE,KAAK,EAAE,QAAQ;YACzB,SAAS,EAAE,MAAM;SAClB;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { Readable } from 'node:stream';
2
+ import { Provider } from '../Provider.ts';
3
+ import type { Maybe } from '@toa.io/core/types';
4
+ import type { Metadata, Stream } from '../Entry.ts';
5
+ import type { Secret, Secrets } from '../Secrets.ts';
6
+ import type { TransformationOptions } from 'cloudinary';
7
+ export type CloudinarySecrets = Secrets<'API_KEY' | 'API_SECRET'>;
8
+ export declare class Cloudinary extends Provider<CloudinaryOptions> {
9
+ static readonly SECRETS: readonly Secret[];
10
+ private readonly type;
11
+ private readonly eager;
12
+ private readonly transformations;
13
+ private readonly config;
14
+ private readonly prefix;
15
+ constructor(options: CloudinaryOptions, secrets?: CloudinarySecrets);
16
+ get(path: string, options?: GetOptions): Promise<Maybe<Stream>>;
17
+ head(path: string): Promise<Maybe<Metadata>>;
18
+ put(path: string, stream: Readable): Promise<void>;
19
+ commit(): Promise<void>;
20
+ delete(path: string): Promise<void>;
21
+ move(from: string, to: string): Promise<void | Error>;
22
+ private fetch;
23
+ private url;
24
+ private toTransformation;
25
+ private mapTransformation;
26
+ private metadata;
27
+ private cloudinary;
28
+ }
29
+ interface GetOptions {
30
+ agent?: string;
31
+ range?: string;
32
+ }
33
+ export interface CloudinaryOptions {
34
+ environment: string;
35
+ type: StorageType;
36
+ prefix?: string;
37
+ eager?: TransformationOptions[];
38
+ transformations?: TransformationDeclaration[];
39
+ }
40
+ type TransformationDeclaration = Omit<Transformation, 'extension'> & {
41
+ extension: string;
42
+ };
43
+ interface Transformation {
44
+ extension: RegExp;
45
+ condition?: string;
46
+ transformation: Record<string, unknown> | Array<Record<string, unknown>>;
47
+ optional?: boolean;
48
+ }
49
+ type StorageType = 'image' | 'video';
50
+ export {};