@package-broker/runtime-node 0.0.0-stage → 2.0.0-rc.2

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 (100) hide show
  1. package/LICENSE +661 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/assets.d.ts +4 -0
  4. package/dist/assets.d.ts.map +1 -0
  5. package/dist/assets.js +68 -0
  6. package/dist/assets.js.map +1 -0
  7. package/dist/blob/archive-staging.d.ts +15 -0
  8. package/dist/blob/archive-staging.d.ts.map +1 -0
  9. package/dist/blob/archive-staging.js +154 -0
  10. package/dist/blob/archive-staging.js.map +1 -0
  11. package/dist/blob/filesystem.d.ts +18 -0
  12. package/dist/blob/filesystem.d.ts.map +1 -0
  13. package/dist/blob/filesystem.js +631 -0
  14. package/dist/blob/filesystem.js.map +1 -0
  15. package/dist/blob/hasher.d.ts +3 -0
  16. package/dist/blob/hasher.d.ts.map +1 -0
  17. package/dist/blob/hasher.js +26 -0
  18. package/dist/blob/hasher.js.map +1 -0
  19. package/dist/blob/s3.d.ts +40 -0
  20. package/dist/blob/s3.d.ts.map +1 -0
  21. package/dist/blob/s3.js +494 -0
  22. package/dist/blob/s3.js.map +1 -0
  23. package/dist/cache/lru.d.ts +8 -0
  24. package/dist/cache/lru.d.ts.map +1 -0
  25. package/dist/cache/lru.js +103 -0
  26. package/dist/cache/lru.js.map +1 -0
  27. package/dist/client-ip.d.ts +22 -0
  28. package/dist/client-ip.d.ts.map +1 -0
  29. package/dist/client-ip.js +104 -0
  30. package/dist/client-ip.js.map +1 -0
  31. package/dist/codec/node-codec.d.ts +3 -0
  32. package/dist/codec/node-codec.d.ts.map +1 -0
  33. package/dist/codec/node-codec.js +163 -0
  34. package/dist/codec/node-codec.js.map +1 -0
  35. package/dist/db/better-sqlite3-executor.d.ts +10 -0
  36. package/dist/db/better-sqlite3-executor.d.ts.map +1 -0
  37. package/dist/db/better-sqlite3-executor.js +129 -0
  38. package/dist/db/better-sqlite3-executor.js.map +1 -0
  39. package/dist/entry.d.ts +32 -0
  40. package/dist/entry.d.ts.map +1 -0
  41. package/dist/entry.js +158 -0
  42. package/dist/entry.js.map +1 -0
  43. package/dist/import-jobs.d.ts +18 -0
  44. package/dist/import-jobs.d.ts.map +1 -0
  45. package/dist/import-jobs.js +56 -0
  46. package/dist/import-jobs.js.map +1 -0
  47. package/dist/index.d.ts +113 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +981 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/internal/seams-key.d.ts +2 -0
  52. package/dist/internal/seams-key.d.ts.map +1 -0
  53. package/dist/internal/seams-key.js +2 -0
  54. package/dist/internal/seams-key.js.map +1 -0
  55. package/dist/jobs/loop.d.ts +38 -0
  56. package/dist/jobs/loop.d.ts.map +1 -0
  57. package/dist/jobs/loop.js +318 -0
  58. package/dist/jobs/loop.js.map +1 -0
  59. package/dist/observability/stdio.d.ts +11 -0
  60. package/dist/observability/stdio.d.ts.map +1 -0
  61. package/dist/observability/stdio.js +47 -0
  62. package/dist/observability/stdio.js.map +1 -0
  63. package/dist/organization-administration.d.ts +5 -0
  64. package/dist/organization-administration.d.ts.map +1 -0
  65. package/dist/organization-administration.js +16 -0
  66. package/dist/organization-administration.js.map +1 -0
  67. package/dist/sources/dns-guard.d.ts +33 -0
  68. package/dist/sources/dns-guard.d.ts.map +1 -0
  69. package/dist/sources/dns-guard.js +202 -0
  70. package/dist/sources/dns-guard.js.map +1 -0
  71. package/dist/sources/git-provider.d.ts +30 -0
  72. package/dist/sources/git-provider.d.ts.map +1 -0
  73. package/dist/sources/git-provider.js +213 -0
  74. package/dist/sources/git-provider.js.map +1 -0
  75. package/dist/sources/guarded-fetch.d.ts +15 -0
  76. package/dist/sources/guarded-fetch.d.ts.map +1 -0
  77. package/dist/sources/guarded-fetch.js +217 -0
  78. package/dist/sources/guarded-fetch.js.map +1 -0
  79. package/dist/sources/ssh-archive-store.d.ts +19 -0
  80. package/dist/sources/ssh-archive-store.d.ts.map +1 -0
  81. package/dist/sources/ssh-archive-store.js +284 -0
  82. package/dist/sources/ssh-archive-store.js.map +1 -0
  83. package/dist/sources/ssh-git.d.ts +46 -0
  84. package/dist/sources/ssh-git.d.ts.map +1 -0
  85. package/dist/sources/ssh-git.js +430 -0
  86. package/dist/sources/ssh-git.js.map +1 -0
  87. package/dist/sources/ssh-provider.d.ts +55 -0
  88. package/dist/sources/ssh-provider.d.ts.map +1 -0
  89. package/dist/sources/ssh-provider.js +369 -0
  90. package/dist/sources/ssh-provider.js.map +1 -0
  91. package/dist/startup.d.ts +49 -0
  92. package/dist/startup.d.ts.map +1 -0
  93. package/dist/startup.js +688 -0
  94. package/dist/startup.js.map +1 -0
  95. package/dist/token-jobs.d.ts +18 -0
  96. package/dist/token-jobs.d.ts.map +1 -0
  97. package/dist/token-jobs.js +45 -0
  98. package/dist/token-jobs.js.map +1 -0
  99. package/package.json +45 -3
  100. package/README.md +0 -3
@@ -0,0 +1,4 @@
1
+ import type { StaticAssets } from '@package-broker/core/platform/assets';
2
+ /** A hard link inside the root to an outside inode is served; deployments own the dist directory. */
3
+ export declare function createNodeAssets(rootDir: string): Promise<StaticAssets>;
4
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAGzE,qGAAqG;AACrG,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAuD7E"}
package/dist/assets.js ADDED
@@ -0,0 +1,68 @@
1
+ import { constants } from 'node:fs';
2
+ import { open, realpath } from 'node:fs/promises';
3
+ import { join, sep } from 'node:path';
4
+ import { parseUiManifest } from '@package-broker/core/platform/ui-manifest';
5
+ /** A hard link inside the root to an outside inode is served; deployments own the dist directory. */
6
+ export async function createNodeAssets(rootDir) {
7
+ let root;
8
+ async function readContained(name, bytes) {
9
+ try {
10
+ const path = await realpath(join(root, name));
11
+ if (!path.startsWith(root.endsWith(sep) ? root : root + sep))
12
+ return null;
13
+ const handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
14
+ try {
15
+ const stat = await handle.stat();
16
+ if (!stat.isFile())
17
+ return null;
18
+ if (bytes !== undefined && stat.size !== bytes)
19
+ return null;
20
+ return new Uint8Array(await handle.readFile());
21
+ }
22
+ finally {
23
+ await handle.close();
24
+ }
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ try {
31
+ root = await realpath(rootDir);
32
+ }
33
+ catch (error) {
34
+ if (error.code === 'ENOENT') {
35
+ throw Object.assign(new Error('UI assets directory is absent'), { code: 'UI_ASSETS_ABSENT' });
36
+ }
37
+ throw new Error('UI manifest is invalid', { cause: error });
38
+ }
39
+ let manifest;
40
+ try {
41
+ const body = await readContained('manifest.json');
42
+ if (body === null)
43
+ throw new Error();
44
+ manifest = parseUiManifest(new TextDecoder().decode(body));
45
+ }
46
+ catch {
47
+ throw new Error('UI manifest is invalid');
48
+ }
49
+ for (const file of Object.values(manifest.files))
50
+ Object.freeze(file);
51
+ Object.freeze(manifest.files);
52
+ Object.freeze(manifest);
53
+ return {
54
+ async manifest() {
55
+ return manifest;
56
+ },
57
+ async read(name) {
58
+ if (!Object.hasOwn(manifest.files, name))
59
+ return null;
60
+ const file = manifest.files[name];
61
+ const body = await readContained(name, file.bytes);
62
+ if (body === null || body.byteLength !== file.bytes)
63
+ return null;
64
+ return { body, ...file };
65
+ },
66
+ };
67
+ }
68
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ArchiveStaging } from '@package-broker/core/sources/git/archive';
2
+ export interface NodeArchiveStagingOptions {
3
+ readonly directory: string;
4
+ readonly randomName?: () => string;
5
+ }
6
+ export declare class ArchiveStagingDirectoryError extends Error {
7
+ name: string;
8
+ constructor();
9
+ }
10
+ export declare class ArchiveStagingError extends Error {
11
+ name: string;
12
+ constructor();
13
+ }
14
+ export declare function createNodeArchiveStaging(options: NodeArchiveStagingOptions): Promise<ArchiveStaging>;
15
+ //# sourceMappingURL=archive-staging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-staging.d.ts","sourceRoot":"","sources":["../../src/blob/archive-staging.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,0CAA0C,CAAC;AAE3F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;CACpC;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IAC5C,IAAI,SAAkC;;CAIhD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACnC,IAAI,SAAyB;;CAIvC;AAuFD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,CA4DzB"}
@@ -0,0 +1,154 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { constants } from 'node:fs';
3
+ import { lstat, mkdir, open, unlink } from 'node:fs/promises';
4
+ import { isAbsolute, join } from 'node:path';
5
+ export class ArchiveStagingDirectoryError extends Error {
6
+ name = 'ArchiveStagingDirectoryError';
7
+ constructor() {
8
+ super('invalid archive staging directory');
9
+ }
10
+ }
11
+ export class ArchiveStagingError extends Error {
12
+ name = 'ArchiveStagingError';
13
+ constructor() {
14
+ super('archive staging operation failed');
15
+ }
16
+ }
17
+ function code(error) {
18
+ return error?.code;
19
+ }
20
+ function stagedFile(path, handle) {
21
+ let closed = false;
22
+ let discarded = false;
23
+ let pending = Promise.resolve();
24
+ function exclusive(task) {
25
+ const result = pending.catch(() => undefined).then(task);
26
+ pending = result;
27
+ return result;
28
+ }
29
+ async function close() {
30
+ if (closed)
31
+ return;
32
+ closed = true;
33
+ await handle.close();
34
+ }
35
+ async function remove() {
36
+ let closeFailed = false;
37
+ try {
38
+ await close();
39
+ }
40
+ catch {
41
+ closeFailed = true;
42
+ }
43
+ try {
44
+ await unlink(path);
45
+ }
46
+ catch (error) {
47
+ if (code(error) !== 'ENOENT')
48
+ throw error;
49
+ }
50
+ if (closeFailed)
51
+ throw new ArchiveStagingError();
52
+ }
53
+ async function guarded(task) {
54
+ try {
55
+ await task();
56
+ }
57
+ catch {
58
+ discarded = true;
59
+ await remove().catch(() => undefined);
60
+ throw new ArchiveStagingError();
61
+ }
62
+ }
63
+ const discard = () => {
64
+ discarded = true;
65
+ return exclusive(() => guarded(remove));
66
+ };
67
+ const writable = new WritableStream({
68
+ write(chunk) {
69
+ return exclusive(() => guarded(async () => {
70
+ if (discarded || closed || !(chunk instanceof Uint8Array))
71
+ throw new ArchiveStagingError();
72
+ let offset = 0;
73
+ while (offset < chunk.byteLength) {
74
+ const { bytesWritten } = await handle.write(chunk, offset, chunk.byteLength - offset, null);
75
+ if (bytesWritten <= 0)
76
+ throw new ArchiveStagingError();
77
+ offset += bytesWritten;
78
+ }
79
+ }));
80
+ },
81
+ close() {
82
+ return exclusive(() => guarded(async () => {
83
+ if (discarded)
84
+ throw new ArchiveStagingError();
85
+ await handle.sync();
86
+ await close();
87
+ }));
88
+ },
89
+ abort: discard,
90
+ });
91
+ return { path, writable, discard };
92
+ }
93
+ export async function createNodeArchiveStaging(options) {
94
+ const { directory } = options;
95
+ if (typeof directory !== 'string' || !isAbsolute(directory)) {
96
+ throw new TypeError('archive staging directory must be absolute');
97
+ }
98
+ async function inspectDirectory() {
99
+ try {
100
+ const stats = await lstat(directory);
101
+ if (stats.isSymbolicLink() ||
102
+ !stats.isDirectory() ||
103
+ stats.uid !== process.getuid() ||
104
+ (stats.mode & 0o022) !== 0) {
105
+ throw new ArchiveStagingDirectoryError();
106
+ }
107
+ return stats;
108
+ }
109
+ catch {
110
+ throw new ArchiveStagingDirectoryError();
111
+ }
112
+ }
113
+ try {
114
+ try {
115
+ await mkdir(directory, { mode: 0o700, recursive: true });
116
+ }
117
+ catch (error) {
118
+ if (code(error) !== 'EEXIST')
119
+ throw error;
120
+ }
121
+ }
122
+ catch {
123
+ throw new ArchiveStagingDirectoryError();
124
+ }
125
+ const initial = await inspectDirectory();
126
+ const randomName = options.randomName ?? (() => randomBytes(16).toString('hex'));
127
+ return {
128
+ async create() {
129
+ const current = await inspectDirectory();
130
+ if (current.dev !== initial.dev || current.ino !== initial.ino) {
131
+ throw new ArchiveStagingDirectoryError();
132
+ }
133
+ let name;
134
+ try {
135
+ name = randomName();
136
+ }
137
+ catch {
138
+ throw new ArchiveStagingError();
139
+ }
140
+ if (typeof name !== 'string' || !/^[0-9a-f]{32}$/.test(name)) {
141
+ throw new TypeError('invalid archive staging name');
142
+ }
143
+ const path = join(directory, `archive-${name}.zip.part`);
144
+ try {
145
+ const handle = await open(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
146
+ return stagedFile(path, handle);
147
+ }
148
+ catch {
149
+ throw new ArchiveStagingError();
150
+ }
151
+ },
152
+ };
153
+ }
154
+ //# sourceMappingURL=archive-staging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-staging.js","sourceRoot":"","sources":["../../src/blob/archive-staging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ByteStore } from '@package-broker/core/platform/blob';
2
+ export interface FilesystemByteStoreOptions {
3
+ readonly root: string;
4
+ }
5
+ export declare class FilesystemUnsafePathError extends Error {
6
+ name: string;
7
+ constructor();
8
+ }
9
+ export declare class FilesystemRootError extends Error {
10
+ name: string;
11
+ constructor(problem: string);
12
+ }
13
+ export declare class FilesystemIntegrityError extends Error {
14
+ name: string;
15
+ constructor();
16
+ }
17
+ export declare function openFilesystemByteStore(options: FilesystemByteStoreOptions): Promise<ByteStore>;
18
+ //# sourceMappingURL=filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/blob/filesystem.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAE/E,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IACzC,IAAI,SAA+B;;CAI7C;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACnC,IAAI,SAAyB;gBAC1B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACxC,IAAI,SAA8B;;CAI5C;AAmRD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,SAAS,CAAC,CAqSpB"}