@actions/artifact 1.1.2 → 2.0.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.
Files changed (125) hide show
  1. package/README.md +111 -174
  2. package/lib/artifact.d.ts +6 -0
  3. package/lib/artifact.js +23 -0
  4. package/lib/artifact.js.map +1 -0
  5. package/lib/generated/google/protobuf/timestamp.d.ts +145 -0
  6. package/lib/generated/google/protobuf/timestamp.js +136 -0
  7. package/lib/generated/google/protobuf/timestamp.js.map +1 -0
  8. package/lib/generated/google/protobuf/wrappers.d.ts +307 -0
  9. package/lib/generated/google/protobuf/wrappers.js +609 -0
  10. package/lib/generated/google/protobuf/wrappers.js.map +1 -0
  11. package/lib/generated/index.d.ts +4 -0
  12. package/lib/generated/index.js +21 -0
  13. package/lib/generated/index.js.map +1 -0
  14. package/lib/generated/results/api/v1/artifact.d.ts +286 -0
  15. package/lib/generated/results/api/v1/artifact.js +588 -0
  16. package/lib/generated/results/api/v1/artifact.js.map +1 -0
  17. package/lib/generated/results/api/v1/artifact.twirp.d.ts +43 -0
  18. package/lib/generated/results/api/v1/artifact.twirp.js +416 -0
  19. package/lib/generated/results/api/v1/artifact.twirp.js.map +1 -0
  20. package/lib/internal/client.d.ts +61 -0
  21. package/lib/internal/client.js +121 -0
  22. package/lib/internal/client.js.map +1 -0
  23. package/lib/internal/download/download-artifact.d.ts +3 -0
  24. package/lib/internal/download/download-artifact.js +168 -0
  25. package/lib/internal/download/download-artifact.js.map +1 -0
  26. package/lib/internal/find/get-artifact.d.ts +3 -0
  27. package/lib/internal/find/get-artifact.js +118 -0
  28. package/lib/internal/find/get-artifact.js.map +1 -0
  29. package/lib/internal/find/list-artifacts.d.ts +3 -0
  30. package/lib/internal/find/list-artifacts.js +139 -0
  31. package/lib/internal/find/list-artifacts.js.map +1 -0
  32. package/lib/internal/find/retry-options.d.ts +7 -0
  33. package/lib/internal/find/retry-options.js +50 -0
  34. package/lib/internal/find/retry-options.js.map +1 -0
  35. package/lib/internal/shared/artifact-twirp-client.d.ts +6 -0
  36. package/lib/internal/shared/artifact-twirp-client.js +153 -0
  37. package/lib/internal/shared/artifact-twirp-client.js.map +1 -0
  38. package/lib/internal/shared/config.d.ts +6 -0
  39. package/lib/internal/shared/config.js +55 -0
  40. package/lib/internal/shared/config.js.map +1 -0
  41. package/lib/internal/shared/errors.d.ts +22 -0
  42. package/lib/internal/shared/errors.js +70 -0
  43. package/lib/internal/shared/errors.js.map +1 -0
  44. package/lib/internal/shared/interfaces.d.ts +136 -0
  45. package/lib/internal/{contracts.js → shared/interfaces.js} +1 -1
  46. package/lib/internal/shared/interfaces.js.map +1 -0
  47. package/lib/internal/shared/user-agent.d.ts +4 -0
  48. package/lib/internal/shared/user-agent.js +13 -0
  49. package/lib/internal/shared/user-agent.js.map +1 -0
  50. package/lib/internal/shared/util.d.ts +5 -0
  51. package/lib/internal/shared/util.js +81 -0
  52. package/lib/internal/shared/util.js.map +1 -0
  53. package/lib/internal/upload/blob-upload.d.ts +12 -0
  54. package/lib/internal/upload/blob-upload.js +87 -0
  55. package/lib/internal/upload/blob-upload.js.map +1 -0
  56. package/lib/internal/upload/path-and-artifact-name-validation.d.ts +8 -0
  57. package/lib/internal/{path-and-artifact-name-validation.js → upload/path-and-artifact-name-validation.js} +11 -11
  58. package/lib/internal/upload/path-and-artifact-name-validation.js.map +1 -0
  59. package/lib/internal/upload/retention.d.ts +2 -0
  60. package/lib/internal/upload/retention.js +54 -0
  61. package/lib/internal/upload/retention.js.map +1 -0
  62. package/lib/internal/upload/upload-artifact.d.ts +2 -0
  63. package/lib/internal/upload/upload-artifact.js +103 -0
  64. package/lib/internal/upload/upload-artifact.js.map +1 -0
  65. package/lib/internal/upload/upload-zip-specification.d.ts +21 -0
  66. package/lib/internal/{upload-specification.js → upload/upload-zip-specification.js} +44 -36
  67. package/lib/internal/upload/upload-zip-specification.js.map +1 -0
  68. package/lib/internal/upload/zip.d.ts +9 -0
  69. package/lib/internal/upload/zip.js +113 -0
  70. package/lib/internal/upload/zip.js.map +1 -0
  71. package/package.json +25 -11
  72. package/lib/artifact-client.d.ts +0 -10
  73. package/lib/artifact-client.js +0 -12
  74. package/lib/artifact-client.js.map +0 -1
  75. package/lib/internal/artifact-client.d.ts +0 -41
  76. package/lib/internal/artifact-client.js +0 -182
  77. package/lib/internal/artifact-client.js.map +0 -1
  78. package/lib/internal/config-variables.d.ts +0 -12
  79. package/lib/internal/config-variables.js +0 -77
  80. package/lib/internal/config-variables.js.map +0 -1
  81. package/lib/internal/contracts.d.ts +0 -67
  82. package/lib/internal/contracts.js.map +0 -1
  83. package/lib/internal/crc64.d.ts +0 -21
  84. package/lib/internal/crc64.js +0 -303
  85. package/lib/internal/crc64.js.map +0 -1
  86. package/lib/internal/download-http-client.d.ts +0 -39
  87. package/lib/internal/download-http-client.js +0 -296
  88. package/lib/internal/download-http-client.js.map +0 -1
  89. package/lib/internal/download-options.d.ts +0 -7
  90. package/lib/internal/download-options.js +0 -3
  91. package/lib/internal/download-options.js.map +0 -1
  92. package/lib/internal/download-response.d.ts +0 -10
  93. package/lib/internal/download-response.js +0 -3
  94. package/lib/internal/download-response.js.map +0 -1
  95. package/lib/internal/download-specification.d.ts +0 -19
  96. package/lib/internal/download-specification.js +0 -78
  97. package/lib/internal/download-specification.js.map +0 -1
  98. package/lib/internal/http-manager.d.ts +0 -12
  99. package/lib/internal/http-manager.js +0 -32
  100. package/lib/internal/http-manager.js.map +0 -1
  101. package/lib/internal/path-and-artifact-name-validation.d.ts +0 -8
  102. package/lib/internal/path-and-artifact-name-validation.js.map +0 -1
  103. package/lib/internal/requestUtils.d.ts +0 -3
  104. package/lib/internal/requestUtils.js +0 -92
  105. package/lib/internal/requestUtils.js.map +0 -1
  106. package/lib/internal/status-reporter.d.ts +0 -21
  107. package/lib/internal/status-reporter.js +0 -52
  108. package/lib/internal/status-reporter.js.map +0 -1
  109. package/lib/internal/upload-gzip.d.ts +0 -14
  110. package/lib/internal/upload-gzip.js +0 -147
  111. package/lib/internal/upload-gzip.js.map +0 -1
  112. package/lib/internal/upload-http-client.d.ts +0 -48
  113. package/lib/internal/upload-http-client.js +0 -415
  114. package/lib/internal/upload-http-client.js.map +0 -1
  115. package/lib/internal/upload-options.d.ts +0 -34
  116. package/lib/internal/upload-options.js +0 -3
  117. package/lib/internal/upload-options.js.map +0 -1
  118. package/lib/internal/upload-response.d.ts +0 -19
  119. package/lib/internal/upload-response.js +0 -3
  120. package/lib/internal/upload-response.js.map +0 -1
  121. package/lib/internal/upload-specification.d.ts +0 -11
  122. package/lib/internal/upload-specification.js.map +0 -1
  123. package/lib/internal/utils.d.ts +0 -71
  124. package/lib/internal/utils.js +0 -292
  125. package/lib/internal/utils.js.map +0 -1
package/README.md CHANGED
@@ -1,213 +1,150 @@
1
1
  # `@actions/artifact`
2
2
 
3
- ## Usage
4
-
5
- You can use this package to interact with the actions artifacts.
6
- - [Upload an Artifact](#Upload-an-Artifact)
7
- - [Download a Single Artifact](#Download-a-Single-Artifact)
8
- - [Download All Artifacts](#Download-all-Artifacts)
9
- - [Additional Documentation](#Additional-Documentation)
10
- - [Contributions](#Contributions)
11
-
12
- Relative paths and absolute paths are both allowed. Relative paths are rooted against the current working directory.
13
-
14
- ## Upload an Artifact
15
-
16
- Method Name: `uploadArtifact`
17
-
18
- #### Inputs
19
- - `name`
20
- - The name of the artifact that is being uploaded
21
- - Required
22
- - `files`
23
- - A list of file paths that describe what should be uploaded as part of the artifact
24
- - If a path is provided that does not exist, an error will be thrown
25
- - Can be absolute or relative. Internally everything is normalized and resolved
26
- - Required
27
- - `rootDirectory`
28
- - A file path that denotes the root directory of the files being uploaded. This path is used to strip the paths provided in `files` to control how they are uploaded and structured
29
- - If a file specified in `files` is not in the `rootDirectory`, an error will be thrown
30
- - Required
31
- - `options`
32
- - Extra options that allow for the customization of the upload behavior
33
- - Optional
34
-
35
- #### Available Options
36
-
37
- - `continueOnError`
38
- - Indicates if the artifact upload should continue in the event a file fails to upload. If there is a error during upload, a partial artifact will always be created and available for download at the end. The `size` reported will be the amount of storage that the user or org will be charged for the partial artifact.
39
- - If set to `false`, and an error is encountered, all other uploads will stop and any files that were queued will not be attempted to be uploaded. The partial artifact available will only include files up until the failure.
40
- - If set to `true` and an error is encountered, the failed file will be skipped and ignored and all other queued files will be attempted to be uploaded. There will be an artifact available for download at the end with everything excluding the file that failed to upload
41
- - Optional, defaults to `true` if not specified
42
- - `retentionDays`
43
- - Duration after which artifact will expire in days
44
- - Minimum value: 1
45
- - Maximum value: 90 unless changed by repository setting
46
- - If this is set to a greater value than the retention settings allowed, the retention on artifacts will be reduced to match the max value allowed on the server, and the upload process will continue. An input of 0 assumes default retention value.
47
-
48
- #### Example using Absolute File Paths
3
+ Interact programmatically with [Actions Artifacts](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts).
49
4
 
50
- ```js
51
- const artifact = require('@actions/artifact');
52
- const artifactClient = artifact.create()
53
- const artifactName = 'my-artifact';
54
- const files = [
55
- '/home/user/files/plz-upload/file1.txt',
56
- '/home/user/files/plz-upload/file2.txt',
57
- '/home/user/files/plz-upload/dir/file3.txt'
58
- ]
59
- const rootDirectory = '/home/user/files/plz-upload'
60
- const options = {
61
- continueOnError: true
62
- }
5
+ This is the core library that powers the [`@actions/upload-artifact`](https://github.com/actions/upload-artifact) and [`@actions/download-artifact`](https://github.com/actions/download-artifact) actions.
63
6
 
64
- const uploadResult = await artifactClient.uploadArtifact(artifactName, files, rootDirectory, options)
65
- ```
66
7
 
67
- #### Example using Relative File Paths
68
- ```js
69
- // Assuming the current working directory is /home/user/files/plz-upload
70
- const artifact = require('@actions/artifact');
71
- const artifactClient = artifact.create()
72
- const artifactName = 'my-artifact';
73
- const files = [
74
- 'file1.txt',
75
- 'file2.txt',
76
- 'dir/file3.txt'
77
- ]
78
-
79
- const rootDirectory = '.' // Also possible to use __dirname
80
- const options = {
81
- continueOnError: false
82
- }
8
+ - [`@actions/artifact`](#actionsartifact)
9
+ - [v2 - What's New](#v2---whats-new)
10
+ - [Improvements](#improvements)
11
+ - [Breaking changes](#breaking-changes)
12
+ - [Quick Start](#quick-start)
13
+ - [Examples](#examples)
14
+ - [Upload and Download](#upload-and-download)
15
+ - [Downloading from other workflow runs or repos](#downloading-from-other-workflow-runs-or-repos)
16
+ - [Speeding up large uploads](#speeding-up-large-uploads)
17
+ - [Additional Resources](#additional-resources)
83
18
 
84
- const uploadResponse = await artifactClient.uploadArtifact(artifactName, files, rootDirectory, options)
85
- ```
19
+ ## v2 - What's New
86
20
 
87
- #### Upload Result
21
+ > [!IMPORTANT]
22
+ > @actions/artifact v2+, upload-artifact@v4+ download-artifact@v4+ are not currently supported on GHES yet. The previous version of this package can be found at [this tag](https://github.com/actions/toolkit/tree/@actions/artifact@1.1.2/packages/artifact) and [on npm](https://www.npmjs.com/package/@actions/artifact/v/1.1.2).
88
23
 
89
- The returned `UploadResponse` will contain the following information
24
+ The release of `@actions/artifact@v2` (including `upload-artifact@v4` and `download-artifact@v4`) are major changes to the backend architecture of Artifacts. They have numerous performance and behavioral improvements.
90
25
 
91
- - `artifactName`
92
- - The name of the artifact that was uploaded
93
- - `artifactItems`
94
- - A list of all files that describe what is uploaded if there are no errors encountered. Usually this will be equal to the inputted `files` with the exception of empty directories (will not be uploaded)
95
- - `size`
96
- - Total size of the artifact that was uploaded in bytes
97
- - `failedItems`
98
- - A list of items that were not uploaded successfully (this will include queued items that were not uploaded if `continueOnError` is set to false). This is a subset of `artifactItems`
26
+ ### Improvements
99
27
 
100
- ## Download a Single Artifact
28
+ 1. All upload and download operations are much quicker, up to 80% faster download times and 96% faster upload times in worst case scenarios.
29
+ 2. Once uploaded, an Artifact ID is returned and Artifacts are immediately available in the UI and [REST API](https://docs.github.com/en/rest/actions/artifacts). Previously, you would have to wait for the run to be completed before an ID was available or any APIs could be utilized.
30
+ 3. Artifacts can now be downloaded and deleted from the UI _before_ the entire workflow run finishes.
31
+ 4. The contents of an Artifact are uploaded together into an _immutable_ archive. They cannot be altered by subsequent jobs. Both of these factors help reduce the possibility of accidentally corrupting Artifact files. (Digest/integrity hash coming soon in the API!)
32
+ 5. This library (and `actions/download-artifact`) now support downloading Artifacts from _other_ repositories and runs if a `GITHUB_TOKEN` with sufficient `actions:read` permissions are provided.
101
33
 
102
- Method Name: `downloadArtifact`
34
+ ### Breaking changes
103
35
 
104
- #### Inputs
105
- - `name`
106
- - The name of the artifact to download
107
- - Required
108
- - `path`
109
- - Path that denotes where the artifact will be downloaded to
110
- - Optional. Defaults to the GitHub workspace directory(`$GITHUB_WORKSPACE`) if not specified
111
- - `options`
112
- - Extra options that allow for the customization of the download behavior
113
- - Optional
36
+ 1. Firewall rules required for self-hosted runners.
114
37
 
38
+ If you are using self-hosted runners behind a firewall, you must have flows open to [Actions endpoints](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#communication-between-self-hosted-runners-and-github). If you cannot use wildcard rules for your firewall, see the GitHub [meta endpoint](https://api.github.com/meta) for specific endpoints.
115
39
 
116
- #### Available Options
40
+ e.g.
117
41
 
118
- - `createArtifactFolder`
119
- - Specifies if a folder (the artifact name) is created for the artifact that is downloaded (contents downloaded into this folder),
120
- - Optional. Defaults to false if not specified
42
+ ```bash
43
+ curl https://api.github.com/meta | jq .domains.actions
44
+ ```
121
45
 
122
- #### Example
46
+ 2. Uploading to the same named Artifact multiple times.
123
47
 
124
- ```js
125
- const artifact = require('@actions/artifact');
126
- const artifactClient = artifact.create()
127
- const artifactName = 'my-artifact';
128
- const path = 'some/directory'
129
- const options = {
130
- createArtifactFolder: false
131
- }
48
+ Due to how Artifacts are created in this new version, it is no longer possible to upload to the same named Artifact multiple times. You must either split the uploads into multiple Artifacts with different names, or only upload once.
49
+
50
+ 3. Limit of Artifacts for an individual job.
51
+
52
+ Each job in a workflow run now has a limit of 10 artifacts.
53
+
54
+ ## Quick Start
132
55
 
133
- const downloadResponse = await artifactClient.downloadArtifact(artifactName, path, options)
134
-
135
- // Post download, the directory structure will look like this
136
- /some
137
- /directory
138
- /file1.txt
139
- /file2.txt
140
- /dir
141
- /file3.txt
142
-
143
- // If createArtifactFolder is set to true, the directory structure will look like this
144
- /some
145
- /directory
146
- /my-artifact
147
- /file1.txt
148
- /file2.txt
149
- /dir
150
- /file3.txt
56
+ Install the package:
57
+
58
+ ```bash
59
+ npm i @actions/artifact
151
60
  ```
152
61
 
153
- #### Download Response
62
+ Import the module:
154
63
 
155
- The returned `DownloadResponse` will contain the following information
64
+ ```js
65
+ // ES6 module
66
+ import artifact from '@actions/artifact'
156
67
 
157
- - `artifactName`
158
- - The name of the artifact that was downloaded
159
- - `downloadPath`
160
- - The full Path to where the artifact was downloaded
68
+ // CommonJS
69
+ const {default: artifact} = require('@actions/artifact')
70
+ ```
161
71
 
72
+ ℹ️ For a comprehensive list of classes, interfaces, functions and more, see the [generated documentation](./docs/generated/README.md).
162
73
 
163
- ## Download All Artifacts
74
+ ## Examples
164
75
 
165
- Method Name: `downloadAllArtifacts`
76
+ ### Upload and Download
166
77
 
167
- #### Inputs
168
- - `path`
169
- - Path that denotes where the artifact will be downloaded to
170
- - Optional. Defaults to the GitHub workspace directory(`$GITHUB_WORKSPACE`) if not specified
78
+ The most basic scenario is uploading one or more files to an Artifact, then downloading that Artifact. Downloads are based on the Artifact ID, which can be obtained in the response of `uploadArtifact`, `getArtifact`, `listArtifacts` or via the [REST API](https://docs.github.com/en/rest/actions/artifacts).
171
79
 
172
80
  ```js
173
- const artifact = require('@actions/artifact');
174
- const artifactClient = artifact.create();
175
- const downloadResponse = await artifactClient.downloadAllArtifacts();
176
-
177
- // output result
178
- for (response in downloadResponse) {
179
- console.log(response.artifactName);
180
- console.log(response.downloadPath);
181
- }
81
+ const {id, size} = await artifact.uploadArtifact(
82
+ // name of the artifact
83
+ 'my-artifact',
84
+ // files to include (supports absolute and relative paths)
85
+ ['/absolute/path/file1.txt', './relative/file2.txt'],
86
+ {
87
+ // optional: how long to retain the artifact
88
+ // if unspecified, defaults to repository/org retention settings (the limit of this value)
89
+ retentionDays: 10
90
+ }
91
+ )
92
+
93
+ console.log(`Created artifact with id: ${id} (bytes: ${size}`)
94
+
95
+ const {downloadPath} = await artifact.downloadArtifact(id, {
96
+ // optional: download destination path. otherwise defaults to $GITHUB_WORKSPACE
97
+ path: '/tmp/dst/path',
98
+ })
99
+
100
+ console.log(`Downloaded artifact ${id} to: ${downloadPath}`)
182
101
  ```
183
102
 
184
- Because there are multiple artifacts, an extra directory (denoted by the name of the artifact) will be created for each artifact in the path. With 2 artifacts(`my-artifact-1` and `my-artifact-2` for example) and the default path, the directory structure will be as follows:
185
- ```js
186
- /GITHUB_WORKSPACE
187
- /my-artifact-1
188
- / .. contents of `my-artifact-1`
189
- /my-artifact-2
190
- / .. contents of `my-artifact-2`
191
- ```
103
+ ### Downloading from other workflow runs or repos
192
104
 
193
- #### Download Result
105
+ It may be useful to download Artifacts from other workflow runs, or even other repositories. By default, the permissions are scoped so they can only download Artifacts within the current workflow run. To elevate permissions for this scenario, you must specify `options.findBy` to `downloadArtifact`.
194
106
 
195
- An array will be returned that describes the results for downloading all artifacts. The number of items in the array indicates the number of artifacts that were downloaded.
107
+ ```ts
108
+ const findBy = {
109
+ // must have actions:read permission on target repository
110
+ token: process.env['GITHUB_TOKEN'],
111
+ workflowRunId: 123,
112
+ repositoryOwner: 'actions',
113
+ repositoryName: 'toolkit'
114
+ }
115
+
116
+ await artifact.downloadArtifact(1337, {
117
+ findBy
118
+ })
196
119
 
197
- Each artifact will have the same `DownloadResponse` as if it was individually downloaded
198
- - `artifactName`
199
- - The name of the artifact that was downloaded
200
- - `downloadPath`
201
- - The full Path to where the artifact was downloaded
120
+ // can also be used in other methods
202
121
 
203
- ## Additional Documentation
122
+ await artifact.getArtifact('my-artifact', {
123
+ findBy
124
+ })
204
125
 
205
- Check out [additional-information](docs/additional-information.md) for extra documentation around usage, restrictions and behavior.
126
+ await artifact.listArtifacts({
127
+ findBy
128
+ })
129
+ ```
206
130
 
207
- Check out [implementation-details](docs/implementation-details.md) for extra information about the implementation of this package.
131
+ ### Speeding up large uploads
208
132
 
209
- ## Contributions
133
+ If you have large files that need to be uploaded (or file types that don't compress well), you may benefit from changing the compression level of the Artifact archive. NOTE: This is a tradeoff between artifact upload time and stored data size.
134
+
135
+ ```ts
136
+ await artifact.uploadArtifact('my-massive-artifact', ['big_file.bin'], {
137
+ // The level of compression for Zlib to be applied to the artifact archive.
138
+ // - 0: No compression
139
+ // - 1: Best speed
140
+ // - 6: Default compression (same as GNU Gzip)
141
+ // - 9: Best compression
142
+ compressionLevel: 0
143
+ })
144
+ ```
210
145
 
211
- See [contributor guidelines](https://github.com/actions/toolkit/blob/main/.github/CONTRIBUTING.md) for general guidelines and information about toolkit contributions.
146
+ ## Additional Resources
212
147
 
213
- For contributions related to this package, see [artifact contributions](CONTRIBUTIONS.md) for more information.
148
+ - [Releases](./RELEASES.md)
149
+ - [Contribution Guide](./CONTRIBUTIONS.md)
150
+ - [Frequently Asked Questions](./docs/faq.md)
@@ -0,0 +1,6 @@
1
+ import { ArtifactClient } from './internal/client';
2
+ export * from './internal/shared/interfaces';
3
+ export * from './internal/shared/errors';
4
+ export * from './internal/client';
5
+ declare const client: ArtifactClient;
6
+ export default client;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ const client_1 = require("./internal/client");
18
+ __exportStar(require("./internal/shared/interfaces"), exports);
19
+ __exportStar(require("./internal/shared/errors"), exports);
20
+ __exportStar(require("./internal/client"), exports);
21
+ const client = new client_1.DefaultArtifactClient();
22
+ exports.default = client;
23
+ //# sourceMappingURL=artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../src/artifact.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAAuE;AAEvE,+DAA4C;AAC5C,2DAAwC;AACxC,oDAAiC;AAEjC,MAAM,MAAM,GAAmB,IAAI,8BAAqB,EAAE,CAAA;AAC1D,kBAAe,MAAM,CAAA"}
@@ -0,0 +1,145 @@
1
+ import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
2
+ import type { IBinaryWriter } from "@protobuf-ts/runtime";
3
+ import type { BinaryReadOptions } from "@protobuf-ts/runtime";
4
+ import type { IBinaryReader } from "@protobuf-ts/runtime";
5
+ import type { PartialMessage } from "@protobuf-ts/runtime";
6
+ import type { JsonValue } from "@protobuf-ts/runtime";
7
+ import type { JsonReadOptions } from "@protobuf-ts/runtime";
8
+ import type { JsonWriteOptions } from "@protobuf-ts/runtime";
9
+ import { MessageType } from "@protobuf-ts/runtime";
10
+ /**
11
+ * A Timestamp represents a point in time independent of any time zone
12
+ * or calendar, represented as seconds and fractions of seconds at
13
+ * nanosecond resolution in UTC Epoch time. It is encoded using the
14
+ * Proleptic Gregorian Calendar which extends the Gregorian calendar
15
+ * backwards to year one. It is encoded assuming all minutes are 60
16
+ * seconds long, i.e. leap seconds are "smeared" so that no leap second
17
+ * table is needed for interpretation. Range is from
18
+ * 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
19
+ * By restricting to that range, we ensure that we can convert to
20
+ * and from RFC 3339 date strings.
21
+ * See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
22
+ *
23
+ * # Examples
24
+ *
25
+ * Example 1: Compute Timestamp from POSIX `time()`.
26
+ *
27
+ * Timestamp timestamp;
28
+ * timestamp.set_seconds(time(NULL));
29
+ * timestamp.set_nanos(0);
30
+ *
31
+ * Example 2: Compute Timestamp from POSIX `gettimeofday()`.
32
+ *
33
+ * struct timeval tv;
34
+ * gettimeofday(&tv, NULL);
35
+ *
36
+ * Timestamp timestamp;
37
+ * timestamp.set_seconds(tv.tv_sec);
38
+ * timestamp.set_nanos(tv.tv_usec * 1000);
39
+ *
40
+ * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
41
+ *
42
+ * FILETIME ft;
43
+ * GetSystemTimeAsFileTime(&ft);
44
+ * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
45
+ *
46
+ * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
47
+ * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
48
+ * Timestamp timestamp;
49
+ * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
50
+ * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
51
+ *
52
+ * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
53
+ *
54
+ * long millis = System.currentTimeMillis();
55
+ *
56
+ * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
57
+ * .setNanos((int) ((millis % 1000) * 1000000)).build();
58
+ *
59
+ *
60
+ * Example 5: Compute Timestamp from current time in Python.
61
+ *
62
+ * timestamp = Timestamp()
63
+ * timestamp.GetCurrentTime()
64
+ *
65
+ * # JSON Mapping
66
+ *
67
+ * In JSON format, the Timestamp type is encoded as a string in the
68
+ * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
69
+ * format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
70
+ * where {year} is always expressed using four digits while {month}, {day},
71
+ * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
72
+ * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
73
+ * are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
74
+ * is required. A proto3 JSON serializer should always use UTC (as indicated by
75
+ * "Z") when printing the Timestamp type and a proto3 JSON parser should be
76
+ * able to accept both UTC and other timezones (as indicated by an offset).
77
+ *
78
+ * For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
79
+ * 01:30 UTC on January 15, 2017.
80
+ *
81
+ * In JavaScript, one can convert a Date object to this format using the
82
+ * standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString]
83
+ * method. In Python, a standard `datetime.datetime` object can be converted
84
+ * to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
85
+ * with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
86
+ * can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
87
+ * http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--
88
+ * ) to obtain a formatter capable of generating timestamps in this format.
89
+ *
90
+ *
91
+ *
92
+ * @generated from protobuf message google.protobuf.Timestamp
93
+ */
94
+ export interface Timestamp {
95
+ /**
96
+ * Represents seconds of UTC time since Unix epoch
97
+ * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
98
+ * 9999-12-31T23:59:59Z inclusive.
99
+ *
100
+ * @generated from protobuf field: int64 seconds = 1;
101
+ */
102
+ seconds: string;
103
+ /**
104
+ * Non-negative fractions of a second at nanosecond resolution. Negative
105
+ * second values with fractions must still have non-negative nanos values
106
+ * that count forward in time. Must be from 0 to 999,999,999
107
+ * inclusive.
108
+ *
109
+ * @generated from protobuf field: int32 nanos = 2;
110
+ */
111
+ nanos: number;
112
+ }
113
+ declare class Timestamp$Type extends MessageType<Timestamp> {
114
+ constructor();
115
+ /**
116
+ * Creates a new `Timestamp` for the current time.
117
+ */
118
+ now(): Timestamp;
119
+ /**
120
+ * Converts a `Timestamp` to a JavaScript Date.
121
+ */
122
+ toDate(message: Timestamp): Date;
123
+ /**
124
+ * Converts a JavaScript Date to a `Timestamp`.
125
+ */
126
+ fromDate(date: Date): Timestamp;
127
+ /**
128
+ * In JSON format, the `Timestamp` type is encoded as a string
129
+ * in the RFC 3339 format.
130
+ */
131
+ internalJsonWrite(message: Timestamp, options: JsonWriteOptions): JsonValue;
132
+ /**
133
+ * In JSON format, the `Timestamp` type is encoded as a string
134
+ * in the RFC 3339 format.
135
+ */
136
+ internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Timestamp): Timestamp;
137
+ create(value?: PartialMessage<Timestamp>): Timestamp;
138
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Timestamp): Timestamp;
139
+ internalBinaryWrite(message: Timestamp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
140
+ }
141
+ /**
142
+ * @generated MessageType for protobuf message google.protobuf.Timestamp
143
+ */
144
+ export declare const Timestamp: Timestamp$Type;
145
+ export {};
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Timestamp = void 0;
4
+ const runtime_1 = require("@protobuf-ts/runtime");
5
+ const runtime_2 = require("@protobuf-ts/runtime");
6
+ const runtime_3 = require("@protobuf-ts/runtime");
7
+ const runtime_4 = require("@protobuf-ts/runtime");
8
+ const runtime_5 = require("@protobuf-ts/runtime");
9
+ const runtime_6 = require("@protobuf-ts/runtime");
10
+ const runtime_7 = require("@protobuf-ts/runtime");
11
+ // @generated message type with reflection information, may provide speed optimized methods
12
+ class Timestamp$Type extends runtime_7.MessageType {
13
+ constructor() {
14
+ super("google.protobuf.Timestamp", [
15
+ { no: 1, name: "seconds", kind: "scalar", T: 3 /*ScalarType.INT64*/ },
16
+ { no: 2, name: "nanos", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
17
+ ]);
18
+ }
19
+ /**
20
+ * Creates a new `Timestamp` for the current time.
21
+ */
22
+ now() {
23
+ const msg = this.create();
24
+ const ms = Date.now();
25
+ msg.seconds = runtime_6.PbLong.from(Math.floor(ms / 1000)).toString();
26
+ msg.nanos = (ms % 1000) * 1000000;
27
+ return msg;
28
+ }
29
+ /**
30
+ * Converts a `Timestamp` to a JavaScript Date.
31
+ */
32
+ toDate(message) {
33
+ return new Date(runtime_6.PbLong.from(message.seconds).toNumber() * 1000 + Math.ceil(message.nanos / 1000000));
34
+ }
35
+ /**
36
+ * Converts a JavaScript Date to a `Timestamp`.
37
+ */
38
+ fromDate(date) {
39
+ const msg = this.create();
40
+ const ms = date.getTime();
41
+ msg.seconds = runtime_6.PbLong.from(Math.floor(ms / 1000)).toString();
42
+ msg.nanos = (ms % 1000) * 1000000;
43
+ return msg;
44
+ }
45
+ /**
46
+ * In JSON format, the `Timestamp` type is encoded as a string
47
+ * in the RFC 3339 format.
48
+ */
49
+ internalJsonWrite(message, options) {
50
+ let ms = runtime_6.PbLong.from(message.seconds).toNumber() * 1000;
51
+ if (ms < Date.parse("0001-01-01T00:00:00Z") || ms > Date.parse("9999-12-31T23:59:59Z"))
52
+ throw new Error("Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.");
53
+ if (message.nanos < 0)
54
+ throw new Error("Unable to encode invalid Timestamp to JSON. Nanos must not be negative.");
55
+ let z = "Z";
56
+ if (message.nanos > 0) {
57
+ let nanosStr = (message.nanos + 1000000000).toString().substring(1);
58
+ if (nanosStr.substring(3) === "000000")
59
+ z = "." + nanosStr.substring(0, 3) + "Z";
60
+ else if (nanosStr.substring(6) === "000")
61
+ z = "." + nanosStr.substring(0, 6) + "Z";
62
+ else
63
+ z = "." + nanosStr + "Z";
64
+ }
65
+ return new Date(ms).toISOString().replace(".000Z", z);
66
+ }
67
+ /**
68
+ * In JSON format, the `Timestamp` type is encoded as a string
69
+ * in the RFC 3339 format.
70
+ */
71
+ internalJsonRead(json, options, target) {
72
+ if (typeof json !== "string")
73
+ throw new Error("Unable to parse Timestamp from JSON " + (0, runtime_5.typeofJsonValue)(json) + ".");
74
+ let matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);
75
+ if (!matches)
76
+ throw new Error("Unable to parse Timestamp from JSON. Invalid format.");
77
+ let ms = Date.parse(matches[1] + "-" + matches[2] + "-" + matches[3] + "T" + matches[4] + ":" + matches[5] + ":" + matches[6] + (matches[8] ? matches[8] : "Z"));
78
+ if (Number.isNaN(ms))
79
+ throw new Error("Unable to parse Timestamp from JSON. Invalid value.");
80
+ if (ms < Date.parse("0001-01-01T00:00:00Z") || ms > Date.parse("9999-12-31T23:59:59Z"))
81
+ throw new globalThis.Error("Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.");
82
+ if (!target)
83
+ target = this.create();
84
+ target.seconds = runtime_6.PbLong.from(ms / 1000).toString();
85
+ target.nanos = 0;
86
+ if (matches[7])
87
+ target.nanos = (parseInt("1" + matches[7] + "0".repeat(9 - matches[7].length)) - 1000000000);
88
+ return target;
89
+ }
90
+ create(value) {
91
+ const message = { seconds: "0", nanos: 0 };
92
+ globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this });
93
+ if (value !== undefined)
94
+ (0, runtime_3.reflectionMergePartial)(this, message, value);
95
+ return message;
96
+ }
97
+ internalBinaryRead(reader, length, options, target) {
98
+ let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
99
+ while (reader.pos < end) {
100
+ let [fieldNo, wireType] = reader.tag();
101
+ switch (fieldNo) {
102
+ case /* int64 seconds */ 1:
103
+ message.seconds = reader.int64().toString();
104
+ break;
105
+ case /* int32 nanos */ 2:
106
+ message.nanos = reader.int32();
107
+ break;
108
+ default:
109
+ let u = options.readUnknownField;
110
+ if (u === "throw")
111
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
112
+ let d = reader.skip(wireType);
113
+ if (u !== false)
114
+ (u === true ? runtime_2.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
115
+ }
116
+ }
117
+ return message;
118
+ }
119
+ internalBinaryWrite(message, writer, options) {
120
+ /* int64 seconds = 1; */
121
+ if (message.seconds !== "0")
122
+ writer.tag(1, runtime_1.WireType.Varint).int64(message.seconds);
123
+ /* int32 nanos = 2; */
124
+ if (message.nanos !== 0)
125
+ writer.tag(2, runtime_1.WireType.Varint).int32(message.nanos);
126
+ let u = options.writeUnknownFields;
127
+ if (u !== false)
128
+ (u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
129
+ return writer;
130
+ }
131
+ }
132
+ /**
133
+ * @generated MessageType for protobuf message google.protobuf.Timestamp
134
+ */
135
+ exports.Timestamp = new Timestamp$Type();
136
+ //# sourceMappingURL=timestamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timestamp.js","sourceRoot":"","sources":["../../../../src/generated/google/protobuf/timestamp.ts"],"names":[],"mappings":"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"}