euclid-ndk 0.2.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 (127) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +603 -0
  3. package/dist/auth/index.d.ts +18 -0
  4. package/dist/auth/index.d.ts.map +1 -0
  5. package/dist/auth/index.js +17 -0
  6. package/dist/auth/index.js.map +1 -0
  7. package/dist/auth/rfc9421.d.ts +112 -0
  8. package/dist/auth/rfc9421.d.ts.map +1 -0
  9. package/dist/auth/rfc9421.js +452 -0
  10. package/dist/auth/rfc9421.js.map +1 -0
  11. package/dist/auth/scheme.d.ts +46 -0
  12. package/dist/auth/scheme.d.ts.map +1 -0
  13. package/dist/auth/scheme.js +44 -0
  14. package/dist/auth/scheme.js.map +1 -0
  15. package/dist/auth/signable.d.ts +37 -0
  16. package/dist/auth/signable.d.ts.map +1 -0
  17. package/dist/auth/signable.js +70 -0
  18. package/dist/auth/signable.js.map +1 -0
  19. package/dist/auth/sigv4.d.ts +72 -0
  20. package/dist/auth/sigv4.d.ts.map +1 -0
  21. package/dist/auth/sigv4.js +227 -0
  22. package/dist/auth/sigv4.js.map +1 -0
  23. package/dist/credentials.d.ts +56 -0
  24. package/dist/credentials.d.ts.map +1 -0
  25. package/dist/credentials.js +135 -0
  26. package/dist/credentials.js.map +1 -0
  27. package/dist/dto/com.d.ts +101 -0
  28. package/dist/dto/com.d.ts.map +1 -0
  29. package/dist/dto/com.js +132 -0
  30. package/dist/dto/com.js.map +1 -0
  31. package/dist/dto/eag.d.ts +104 -0
  32. package/dist/dto/eag.d.ts.map +1 -0
  33. package/dist/dto/eag.js +70 -0
  34. package/dist/dto/eag.js.map +1 -0
  35. package/dist/dto/eam.d.ts +105 -0
  36. package/dist/dto/eam.d.ts.map +1 -0
  37. package/dist/dto/eam.js +98 -0
  38. package/dist/dto/eam.js.map +1 -0
  39. package/dist/dto/eap.d.ts +88 -0
  40. package/dist/dto/eap.d.ts.map +1 -0
  41. package/dist/dto/eap.js +54 -0
  42. package/dist/dto/eap.js.map +1 -0
  43. package/dist/dto/ekm.d.ts +109 -0
  44. package/dist/dto/ekm.d.ts.map +1 -0
  45. package/dist/dto/ekm.js +78 -0
  46. package/dist/dto/ekm.js.map +1 -0
  47. package/dist/dto/ekv.d.ts +73 -0
  48. package/dist/dto/ekv.d.ts.map +1 -0
  49. package/dist/dto/ekv.js +45 -0
  50. package/dist/dto/ekv.js.map +1 -0
  51. package/dist/dto/ens.d.ts +84 -0
  52. package/dist/dto/ens.d.ts.map +1 -0
  53. package/dist/dto/ens.js +72 -0
  54. package/dist/dto/ens.js.map +1 -0
  55. package/dist/dto/eqs.d.ts +160 -0
  56. package/dist/dto/eqs.d.ts.map +1 -0
  57. package/dist/dto/eqs.js +120 -0
  58. package/dist/dto/eqs.js.map +1 -0
  59. package/dist/dto/esm.d.ts +192 -0
  60. package/dist/dto/esm.d.ts.map +1 -0
  61. package/dist/dto/esm.js +147 -0
  62. package/dist/dto/esm.js.map +1 -0
  63. package/dist/dto/ess.d.ts +49 -0
  64. package/dist/dto/ess.d.ts.map +1 -0
  65. package/dist/dto/ess.js +30 -0
  66. package/dist/dto/ess.js.map +1 -0
  67. package/dist/dto/json.d.ts +24 -0
  68. package/dist/dto/json.d.ts.map +1 -0
  69. package/dist/dto/json.js +47 -0
  70. package/dist/dto/json.js.map +1 -0
  71. package/dist/errors.d.ts +40 -0
  72. package/dist/errors.d.ts.map +1 -0
  73. package/dist/errors.js +73 -0
  74. package/dist/errors.js.map +1 -0
  75. package/dist/http/client.d.ts +96 -0
  76. package/dist/http/client.d.ts.map +1 -0
  77. package/dist/http/client.js +258 -0
  78. package/dist/http/client.js.map +1 -0
  79. package/dist/index.d.ts +93 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +110 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/modules/base.d.ts +121 -0
  84. package/dist/modules/base.d.ts.map +1 -0
  85. package/dist/modules/base.js +142 -0
  86. package/dist/modules/base.js.map +1 -0
  87. package/dist/modules/eag.d.ts +166 -0
  88. package/dist/modules/eag.d.ts.map +1 -0
  89. package/dist/modules/eag.js +189 -0
  90. package/dist/modules/eag.js.map +1 -0
  91. package/dist/modules/eam.d.ts +314 -0
  92. package/dist/modules/eam.d.ts.map +1 -0
  93. package/dist/modules/eam.js +641 -0
  94. package/dist/modules/eam.js.map +1 -0
  95. package/dist/modules/eap.d.ts +204 -0
  96. package/dist/modules/eap.d.ts.map +1 -0
  97. package/dist/modules/eap.js +218 -0
  98. package/dist/modules/eap.js.map +1 -0
  99. package/dist/modules/ekm.d.ts +182 -0
  100. package/dist/modules/ekm.d.ts.map +1 -0
  101. package/dist/modules/ekm.js +228 -0
  102. package/dist/modules/ekm.js.map +1 -0
  103. package/dist/modules/ekv.d.ts +189 -0
  104. package/dist/modules/ekv.d.ts.map +1 -0
  105. package/dist/modules/ekv.js +212 -0
  106. package/dist/modules/ekv.js.map +1 -0
  107. package/dist/modules/ens.d.ts +122 -0
  108. package/dist/modules/ens.d.ts.map +1 -0
  109. package/dist/modules/ens.js +167 -0
  110. package/dist/modules/ens.js.map +1 -0
  111. package/dist/modules/eqs.d.ts +283 -0
  112. package/dist/modules/eqs.d.ts.map +1 -0
  113. package/dist/modules/eqs.js +355 -0
  114. package/dist/modules/eqs.js.map +1 -0
  115. package/dist/modules/esm.d.ts +358 -0
  116. package/dist/modules/esm.d.ts.map +1 -0
  117. package/dist/modules/esm.js +660 -0
  118. package/dist/modules/esm.js.map +1 -0
  119. package/dist/modules/ess.d.ts +96 -0
  120. package/dist/modules/ess.d.ts.map +1 -0
  121. package/dist/modules/ess.js +110 -0
  122. package/dist/modules/ess.js.map +1 -0
  123. package/dist/url.d.ts +31 -0
  124. package/dist/url.d.ts.map +1 -0
  125. package/dist/url.js +47 -0
  126. package/dist/url.js.map +1 -0
  127. package/package.json +47 -0
@@ -0,0 +1,192 @@
1
+ /**
2
+ * The shapes ESM sends back.
3
+ *
4
+ * Interfaces and the functions that parse them, exactly as {@link import("./eam.js")} does and for
5
+ * the same reasons: a typo in a field name is a compile error here rather than an `undefined` that
6
+ * travels, and every parse is defensive - see {@link import("./json.js")}.
7
+ *
8
+ * Field names are the server's (`dto/include/euclid/dto/esm`), converted to camelCase where they
9
+ * differ; where they do not, the JSON name is the one on the wire. One rename is deliberate: the
10
+ * server's `async` flag - "the server answered before it had finished" - is `background` here,
11
+ * because `async` is a reserved word in the contexts that matter and a field nobody can write is
12
+ * worse than a field spelled differently from the wire.
13
+ */
14
+ import { type Variant } from "./com.js";
15
+ /** A bucket: a named container of objects, scoped to an account and a namespace. */
16
+ export interface Bucket {
17
+ name: string;
18
+ ern: string;
19
+ owner: string;
20
+ size: number;
21
+ objects: number;
22
+ tags: Record<string, string>;
23
+ /**
24
+ * Whether objects written from now on are encrypted at rest. Says nothing about the ones already
25
+ * stored - see {@link import("../modules/esm.js").EuclidEsm.enableEncryption}.
26
+ */
27
+ encrypted: boolean;
28
+ encryptionKeyErn: string;
29
+ /** One of euclid's own buckets rather than somebody's. Left out of a listing unless asked for. */
30
+ internal: boolean;
31
+ created: string;
32
+ modified: string;
33
+ }
34
+ /**
35
+ * One stored object, as a listing describes it.
36
+ *
37
+ * `key` is opaque: a bucket has directories only in the sense that keys share a prefix, which is why
38
+ * listing them is something a caller asks for rather than something that happens.
39
+ */
40
+ export interface EsmObject {
41
+ ern: string;
42
+ bucketErn: string;
43
+ key: string;
44
+ size: number;
45
+ status: string;
46
+ contentType: string;
47
+ md5Sum: string;
48
+ encrypted: boolean;
49
+ attributes: Record<string, Variant>;
50
+ created: string;
51
+ modified: string;
52
+ }
53
+ /** What a subscription delivers: one object event, as the body of an ordinary message. */
54
+ export interface BucketEvent {
55
+ eventType: string;
56
+ bucketErn: string;
57
+ key: string;
58
+ ern: string;
59
+ size: number;
60
+ contentType: string;
61
+ md5Sum: string;
62
+ }
63
+ /** One user-defined attribute of an object, as the server stored it. */
64
+ export interface ObjectAttribute {
65
+ ern: string;
66
+ name: string;
67
+ value: Variant;
68
+ }
69
+ /** A newly created bucket: its name, and the ERN everything else names it by. */
70
+ export interface CreateBucketResult {
71
+ name: string;
72
+ ern: string;
73
+ }
74
+ /**
75
+ * A renamed bucket, and how much was repointed at it.
76
+ *
77
+ * The ERN is new as well as the name, so this is the one later calls have to use - nothing answers to
78
+ * the old one afterwards.
79
+ */
80
+ export interface RenameBucketResult {
81
+ name: string;
82
+ ern: string;
83
+ objects: number;
84
+ subscriptions: number;
85
+ }
86
+ /** A bucket and the flag it now carries. */
87
+ export interface SetBucketInternalResult {
88
+ ern: string;
89
+ name: string;
90
+ internal: boolean;
91
+ }
92
+ /** A purged bucket, and how many objects went. */
93
+ export interface PurgeBucketResult {
94
+ ern: string;
95
+ count: number;
96
+ }
97
+ /**
98
+ * How many keys were asked for and how many objects went.
99
+ *
100
+ * The two differ when a key named nothing, which is not an error - it simply was not there to delete
101
+ * - so a caller that cares compares them. `background` says the server answered before it had
102
+ * finished, in which case `objects` is what it took on rather than what it removed.
103
+ */
104
+ export interface DeleteObjectsResult {
105
+ ern: string;
106
+ asked: number;
107
+ objects: number;
108
+ background: boolean;
109
+ }
110
+ /** The bucket whose objects were re-announced, and how many of them there were. */
111
+ export interface TouchObjectResult {
112
+ ern: string;
113
+ bucketName: string;
114
+ prefix: string;
115
+ objects: number;
116
+ background: boolean;
117
+ }
118
+ /**
119
+ * The key a bucket now encrypts under, and how many objects predate the change.
120
+ *
121
+ * Those objects are not re-encrypted and not touched: each one records the key it was written under
122
+ * and is read back through it. `keyCreated` says the key is new and belongs to EKM from that moment
123
+ * on - deleting it there is what makes this bucket's objects unrecoverable.
124
+ */
125
+ export interface EnableEncryptionResult {
126
+ ern: string;
127
+ name: string;
128
+ keyErn: string;
129
+ keyId: string;
130
+ algorithm: string;
131
+ keyCreated: boolean;
132
+ existingObjects: number;
133
+ }
134
+ /** The key a bucket was encrypting under, and how many objects are still under it. */
135
+ export interface DisableEncryptionResult {
136
+ ern: string;
137
+ name: string;
138
+ previousKeyErn: string;
139
+ previousKeyId: string;
140
+ encryptedObjects: number;
141
+ }
142
+ /**
143
+ * An object as it was stored, which is what both ways of writing one answer with.
144
+ *
145
+ * `put-object` and `complete-upload` return the same payload, so a caller that needs the object's ERN
146
+ * does not have to take the multipart path to get one.
147
+ */
148
+ export interface StoredObject {
149
+ ern: string;
150
+ bucketErn: string;
151
+ key: string;
152
+ size: number;
153
+ status: string;
154
+ contentType: string;
155
+ md5Sum: string;
156
+ }
157
+ /** An opened multipart upload: the ID every part of it carries. */
158
+ export interface CreateUploadResult {
159
+ uploadId: string;
160
+ bucketErn: string;
161
+ key: string;
162
+ }
163
+ /**
164
+ * An opened multipart download, and how large the object turned out to be.
165
+ *
166
+ * The size is what says how many parts there are to ask for: unlike an upload, whose source the
167
+ * caller has already stat'ed, a download's size is not known until the server is asked.
168
+ */
169
+ export interface CreateDownloadResult {
170
+ downloadId: string;
171
+ bucketErn: string;
172
+ key: string;
173
+ ern: string;
174
+ size: number;
175
+ contentType: string;
176
+ }
177
+ export declare function toBucket(document: unknown): Bucket;
178
+ export declare function toEsmObject(document: unknown): EsmObject;
179
+ export declare function toBucketEvent(document: unknown): BucketEvent;
180
+ export declare function toObjectAttribute(document: unknown): ObjectAttribute;
181
+ export declare function toCreateBucketResult(document: unknown): CreateBucketResult;
182
+ export declare function toRenameBucketResult(document: unknown): RenameBucketResult;
183
+ export declare function toSetBucketInternalResult(document: unknown): SetBucketInternalResult;
184
+ export declare function toPurgeBucketResult(document: unknown): PurgeBucketResult;
185
+ export declare function toDeleteObjectsResult(document: unknown): DeleteObjectsResult;
186
+ export declare function toTouchObjectResult(document: unknown): TouchObjectResult;
187
+ export declare function toEnableEncryptionResult(document: unknown): EnableEncryptionResult;
188
+ export declare function toDisableEncryptionResult(document: unknown): DisableEncryptionResult;
189
+ export declare function toStoredObject(document: unknown): StoredObject;
190
+ export declare function toCreateUploadResult(document: unknown): CreateUploadResult;
191
+ export declare function toCreateDownloadResult(document: unknown): CreateDownloadResult;
192
+ //# sourceMappingURL=esm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esm.d.ts","sourceRoot":"","sources":["../../src/dto/esm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * The shapes ESM sends back.
3
+ *
4
+ * Interfaces and the functions that parse them, exactly as {@link import("./eam.js")} does and for
5
+ * the same reasons: a typo in a field name is a compile error here rather than an `undefined` that
6
+ * travels, and every parse is defensive - see {@link import("./json.js")}.
7
+ *
8
+ * Field names are the server's (`dto/include/euclid/dto/esm`), converted to camelCase where they
9
+ * differ; where they do not, the JSON name is the one on the wire. One rename is deliberate: the
10
+ * server's `async` flag - "the server answered before it had finished" - is `background` here,
11
+ * because `async` is a reserved word in the contexts that matter and a field nobody can write is
12
+ * worse than a field spelled differently from the wire.
13
+ */
14
+ import { toVariant, toVariantMap } from "./com.js";
15
+ import { flag, number, object, stringMap, text } from "./json.js";
16
+ // -- parsers ---------------------------------------------------------------------------------------
17
+ export function toBucket(document) {
18
+ return {
19
+ name: text(document, "name"),
20
+ ern: text(document, "ern"),
21
+ owner: text(document, "owner"),
22
+ size: number(document, "size"),
23
+ objects: number(document, "objects"),
24
+ tags: stringMap(document, "tags"),
25
+ encrypted: flag(document, "encrypted"),
26
+ encryptionKeyErn: text(document, "encryptionKeyErn"),
27
+ internal: flag(document, "internal"),
28
+ created: text(document, "created"),
29
+ modified: text(document, "modified"),
30
+ };
31
+ }
32
+ export function toEsmObject(document) {
33
+ return {
34
+ ern: text(document, "ern"),
35
+ bucketErn: text(document, "bucketErn"),
36
+ key: text(document, "key"),
37
+ size: number(document, "size"),
38
+ status: text(document, "status"),
39
+ contentType: text(document, "contentType"),
40
+ md5Sum: text(document, "md5Sum"),
41
+ encrypted: flag(document, "encrypted"),
42
+ attributes: toVariantMap(object(document)["attributes"]),
43
+ created: text(document, "created"),
44
+ modified: text(document, "modified"),
45
+ };
46
+ }
47
+ export function toBucketEvent(document) {
48
+ return {
49
+ eventType: text(document, "eventType"),
50
+ bucketErn: text(document, "bucketErn"),
51
+ key: text(document, "key"),
52
+ ern: text(document, "ern"),
53
+ size: number(document, "size"),
54
+ contentType: text(document, "contentType"),
55
+ md5Sum: text(document, "md5Sum"),
56
+ };
57
+ }
58
+ export function toObjectAttribute(document) {
59
+ return {
60
+ ern: text(document, "ern"),
61
+ name: text(document, "name"),
62
+ value: toVariant(object(document)["value"]),
63
+ };
64
+ }
65
+ export function toCreateBucketResult(document) {
66
+ return { name: text(document, "name"), ern: text(document, "ern") };
67
+ }
68
+ export function toRenameBucketResult(document) {
69
+ return {
70
+ name: text(document, "name"),
71
+ ern: text(document, "ern"),
72
+ objects: number(document, "objects"),
73
+ subscriptions: number(document, "subscriptions"),
74
+ };
75
+ }
76
+ export function toSetBucketInternalResult(document) {
77
+ return { ern: text(document, "ern"), name: text(document, "name"), internal: flag(document, "internal") };
78
+ }
79
+ export function toPurgeBucketResult(document) {
80
+ return { ern: text(document, "ern"), count: number(document, "count") };
81
+ }
82
+ export function toDeleteObjectsResult(document) {
83
+ return {
84
+ ern: text(document, "ern"),
85
+ asked: number(document, "asked"),
86
+ objects: number(document, "objects"),
87
+ background: flag(document, "async"),
88
+ };
89
+ }
90
+ export function toTouchObjectResult(document) {
91
+ return {
92
+ ern: text(document, "ern"),
93
+ bucketName: text(document, "bucketName"),
94
+ prefix: text(document, "prefix"),
95
+ objects: number(document, "objects"),
96
+ background: flag(document, "async"),
97
+ };
98
+ }
99
+ export function toEnableEncryptionResult(document) {
100
+ return {
101
+ ern: text(document, "ern"),
102
+ name: text(document, "name"),
103
+ keyErn: text(document, "keyErn"),
104
+ keyId: text(document, "keyId"),
105
+ algorithm: text(document, "algorithm"),
106
+ keyCreated: flag(document, "keyCreated"),
107
+ existingObjects: number(document, "existingObjects"),
108
+ };
109
+ }
110
+ export function toDisableEncryptionResult(document) {
111
+ return {
112
+ ern: text(document, "ern"),
113
+ name: text(document, "name"),
114
+ previousKeyErn: text(document, "previousKeyErn"),
115
+ previousKeyId: text(document, "previousKeyId"),
116
+ encryptedObjects: number(document, "encryptedObjects"),
117
+ };
118
+ }
119
+ export function toStoredObject(document) {
120
+ return {
121
+ ern: text(document, "ern"),
122
+ bucketErn: text(document, "bucketErn"),
123
+ key: text(document, "key"),
124
+ size: number(document, "size"),
125
+ status: text(document, "status"),
126
+ contentType: text(document, "contentType"),
127
+ md5Sum: text(document, "md5Sum"),
128
+ };
129
+ }
130
+ export function toCreateUploadResult(document) {
131
+ return {
132
+ uploadId: text(document, "uploadId"),
133
+ bucketErn: text(document, "bucketErn"),
134
+ key: text(document, "key"),
135
+ };
136
+ }
137
+ export function toCreateDownloadResult(document) {
138
+ return {
139
+ downloadId: text(document, "downloadId"),
140
+ bucketErn: text(document, "bucketErn"),
141
+ key: text(document, "key"),
142
+ ern: text(document, "ern"),
143
+ size: number(document, "size"),
144
+ contentType: text(document, "contentType"),
145
+ };
146
+ }
147
+ //# sourceMappingURL=esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esm.js","sourceRoot":"","sources":["../../src/dto/esm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * The shapes ESS sends back.
3
+ *
4
+ * Parsed the same defensive way as every other module's. One thing is deliberately absent from
5
+ * {@link Secret}: the value. Every action but `get-secret` answers with a secret's metadata only, so a
6
+ * listing, a rotation and a tag change can be logged, printed and passed around without any of them being
7
+ * the thing that leaks it.
8
+ */
9
+ /**
10
+ * A secret's metadata: everything about it except what it is.
11
+ *
12
+ * `version` is how many times the value has been replaced, and `rotated` when that last happened - which
13
+ * together are what an audit of "has this been rotated since the incident" actually reads.
14
+ */
15
+ export interface Secret {
16
+ name: string;
17
+ ern: string;
18
+ description: string;
19
+ /**
20
+ * The EKM key the value is encrypted under. Deleting that key there is what makes this secret's value
21
+ * unrecoverable, whatever ESS still says about it.
22
+ */
23
+ encryptionKeyErn: string;
24
+ version: number;
25
+ rotated: string;
26
+ tags: Record<string, string>;
27
+ created: string;
28
+ modified: string;
29
+ }
30
+ /**
31
+ * A secret, decrypted: its value, and the metadata that goes with it.
32
+ *
33
+ * The only shape in this SDK that carries a secret's value, and the only action that produces one.
34
+ * Whatever a caller does with `value`, this object is the point at which the value entered the process -
35
+ * which is worth knowing when deciding what to log.
36
+ */
37
+ export interface SecretValue {
38
+ value: string;
39
+ secret: Secret;
40
+ }
41
+ /** The name and ERN of a deleted secret. */
42
+ export interface DeleteSecretResult {
43
+ name: string;
44
+ ern: string;
45
+ }
46
+ export declare function toSecret(document: unknown): Secret;
47
+ export declare function toSecretValue(document: unknown): SecretValue;
48
+ export declare function toDeleteSecretResult(document: unknown): DeleteSecretResult;
49
+ //# sourceMappingURL=ess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ess.d.ts","sourceRoot":"","sources":["../../src/dto/ess.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAID,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAYlD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,CAE5D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB,CAE1E"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The shapes ESS sends back.
3
+ *
4
+ * Parsed the same defensive way as every other module's. One thing is deliberately absent from
5
+ * {@link Secret}: the value. Every action but `get-secret` answers with a secret's metadata only, so a
6
+ * listing, a rotation and a tag change can be logged, printed and passed around without any of them being
7
+ * the thing that leaks it.
8
+ */
9
+ import { number, object, stringMap, text } from "./json.js";
10
+ // -- parsers ---------------------------------------------------------------------------------------
11
+ export function toSecret(document) {
12
+ return {
13
+ name: text(document, "name"),
14
+ ern: text(document, "ern"),
15
+ description: text(document, "description"),
16
+ encryptionKeyErn: text(document, "encryptionKeyErn"),
17
+ version: number(document, "version"),
18
+ rotated: text(document, "rotated"),
19
+ tags: stringMap(document, "tags"),
20
+ created: text(document, "created"),
21
+ modified: text(document, "modified"),
22
+ };
23
+ }
24
+ export function toSecretValue(document) {
25
+ return { value: text(document, "value"), secret: toSecret(object(document)["secret"]) };
26
+ }
27
+ export function toDeleteSecretResult(document) {
28
+ return { name: text(document, "name"), ern: text(document, "ern") };
29
+ }
30
+ //# sourceMappingURL=ess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ess.js","sourceRoot":"","sources":["../../src/dto/ess.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA0C5D,qGAAqG;AAErG,MAAM,UAAU,QAAQ,CAAC,QAAiB;IACxC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC5B,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC1B,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC1C,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QACpD,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;QACpC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;QAClC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;QACjC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;QAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAiB;IAC7C,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAiB;IACpD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;AACtE,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Reading fields out of a server response, defensively.
3
+ *
4
+ * Every response type in this package parses the same way: a field the server did not send reads as
5
+ * an empty string, an empty array or a zero rather than throwing. A client that insisted on a field
6
+ * being there would break on the release that adds one - the parse would reach a document shaped
7
+ * slightly differently from the one it was written against - which is the failure mode these
8
+ * helpers exist to avoid.
9
+ */
10
+ /** The document as an object, or an empty one when it is anything else. */
11
+ export declare function object(document: unknown): Record<string, unknown>;
12
+ /** A string field, empty when absent or null. */
13
+ export declare function text(document: unknown, name: string): string;
14
+ /** A boolean field, `fallback` when absent or not a boolean. */
15
+ export declare function flag(document: unknown, name: string, fallback?: boolean): boolean;
16
+ /** A number field, zero when absent or not a number. */
17
+ export declare function number(document: unknown, name: string): number;
18
+ /** An array of strings, empty when absent, with anything that is not a string left out. */
19
+ export declare function strings(document: unknown, name: string): string[];
20
+ /** An object of strings - a tag set - empty when absent, with non-string values left out. */
21
+ export declare function stringMap(document: unknown, name: string): Record<string, string>;
22
+ /** An array of sub-documents, empty when absent. The caller parses each one. */
23
+ export declare function documents(document: unknown, name: string): unknown[];
24
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/dto/json.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,2EAA2E;AAC3E,wBAAgB,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIjE;AAED,iDAAiD;AACjD,wBAAgB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,gEAAgE;AAChE,wBAAgB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAG/E;AAED,wDAAwD;AACxD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,2FAA2F;AAC3F,wBAAgB,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGjE;AAED,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMjF;AAED,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAGpE"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Reading fields out of a server response, defensively.
3
+ *
4
+ * Every response type in this package parses the same way: a field the server did not send reads as
5
+ * an empty string, an empty array or a zero rather than throwing. A client that insisted on a field
6
+ * being there would break on the release that adds one - the parse would reach a document shaped
7
+ * slightly differently from the one it was written against - which is the failure mode these
8
+ * helpers exist to avoid.
9
+ */
10
+ /** The document as an object, or an empty one when it is anything else. */
11
+ export function object(document) {
12
+ return document !== null && typeof document === "object" && !Array.isArray(document)
13
+ ? document
14
+ : {};
15
+ }
16
+ /** A string field, empty when absent or null. */
17
+ export function text(document, name) {
18
+ const value = object(document)[name];
19
+ return typeof value === "string" ? value : "";
20
+ }
21
+ /** A boolean field, `fallback` when absent or not a boolean. */
22
+ export function flag(document, name, fallback = false) {
23
+ const value = object(document)[name];
24
+ return typeof value === "boolean" ? value : fallback;
25
+ }
26
+ /** A number field, zero when absent or not a number. */
27
+ export function number(document, name) {
28
+ const value = object(document)[name];
29
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
30
+ }
31
+ /** An array of strings, empty when absent, with anything that is not a string left out. */
32
+ export function strings(document, name) {
33
+ const value = object(document)[name];
34
+ return Array.isArray(value) ? value.filter((entry) => typeof entry === "string") : [];
35
+ }
36
+ /** An object of strings - a tag set - empty when absent, with non-string values left out. */
37
+ export function stringMap(document, name) {
38
+ const value = object(document)[name];
39
+ const entries = Object.entries(object(value)).filter((entry) => typeof entry[1] === "string");
40
+ return Object.fromEntries(entries);
41
+ }
42
+ /** An array of sub-documents, empty when absent. The caller parses each one. */
43
+ export function documents(document, name) {
44
+ const value = object(document)[name];
45
+ return Array.isArray(value) ? value : [];
46
+ }
47
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/dto/json.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,2EAA2E;AAC3E,MAAM,UAAU,MAAM,CAAC,QAAiB;IACtC,OAAO,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAClF,CAAC,CAAE,QAAoC;QACvC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,IAAI,CAAC,QAAiB,EAAE,IAAY;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,IAAI,CAAC,QAAiB,EAAE,IAAY,EAAE,QAAQ,GAAG,KAAK;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,MAAM,CAAC,QAAiB,EAAE,IAAY;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,OAAO,CAAC,QAAiB,EAAE,IAAY;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,SAAS,CAAC,QAAiB,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAClD,CAAC,KAAK,EAA6B,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CACnE,CAAC;IACF,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,SAAS,CAAC,QAAiB,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Errors this SDK throws.
3
+ *
4
+ * The server answers every failure the same way - a non-2xx status and a JSON body of the form
5
+ * `{"error": "..."}` (`Core::HttpActionServer::ErrorResponse`) - so the message a caller sees is
6
+ * pulled out of that body when it is there, and falls back to the raw body when it is not.
7
+ */
8
+ /** Base class for everything this SDK throws. */
9
+ export declare class EuclidError extends Error {
10
+ constructor(message: string);
11
+ }
12
+ /**
13
+ * A login was refused.
14
+ *
15
+ * Separate from {@link EuclidServiceError} because it is the one failure a caller can nearly always
16
+ * do something about: the password is wrong, the account is disabled, or the user is a technical
17
+ * user the server refuses to log in interactively.
18
+ */
19
+ export declare class EuclidAuthenticationError extends EuclidError {
20
+ readonly status: number;
21
+ readonly body: string;
22
+ /** The server's own message, out of the `{"error": "..."}` body. */
23
+ readonly reason: string;
24
+ constructor(status: number, body?: string);
25
+ }
26
+ /**
27
+ * A module refused or failed an action.
28
+ *
29
+ * Carries the target and action alongside the status, so a caller catching one of these knows which
30
+ * call failed without having to have wrapped each one individually.
31
+ */
32
+ export declare class EuclidServiceError extends EuclidError {
33
+ readonly target: string;
34
+ readonly action: string;
35
+ readonly status: number;
36
+ readonly body: string;
37
+ readonly reason: string;
38
+ constructor(target: string, action: string, status: number, body?: string);
39
+ }
40
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iDAAiD;AACjD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,WAAW;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM,EAAE,IAAI,SAAK;CAOtC;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,SAAK;CAStE"}
package/dist/errors.js ADDED
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Errors this SDK throws.
3
+ *
4
+ * The server answers every failure the same way - a non-2xx status and a JSON body of the form
5
+ * `{"error": "..."}` (`Core::HttpActionServer::ErrorResponse`) - so the message a caller sees is
6
+ * pulled out of that body when it is there, and falls back to the raw body when it is not.
7
+ */
8
+ /** Base class for everything this SDK throws. */
9
+ export class EuclidError extends Error {
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = new.target.name;
13
+ }
14
+ }
15
+ /**
16
+ * A login was refused.
17
+ *
18
+ * Separate from {@link EuclidServiceError} because it is the one failure a caller can nearly always
19
+ * do something about: the password is wrong, the account is disabled, or the user is a technical
20
+ * user the server refuses to log in interactively.
21
+ */
22
+ export class EuclidAuthenticationError extends EuclidError {
23
+ status;
24
+ body;
25
+ /** The server's own message, out of the `{"error": "..."}` body. */
26
+ reason;
27
+ constructor(status, body = "") {
28
+ const reason = reasonOf(body);
29
+ super(`login failed with HTTP ${status}${reason ? `: ${reason}` : ""}`);
30
+ this.status = status;
31
+ this.body = body;
32
+ this.reason = reason;
33
+ }
34
+ }
35
+ /**
36
+ * A module refused or failed an action.
37
+ *
38
+ * Carries the target and action alongside the status, so a caller catching one of these knows which
39
+ * call failed without having to have wrapped each one individually.
40
+ */
41
+ export class EuclidServiceError extends EuclidError {
42
+ target;
43
+ action;
44
+ status;
45
+ body;
46
+ reason;
47
+ constructor(target, action, status, body = "") {
48
+ const reason = reasonOf(body);
49
+ super(`${target}/${action} failed with HTTP ${status}${reason ? `: ${reason}` : ""}`);
50
+ this.target = target;
51
+ this.action = action;
52
+ this.status = status;
53
+ this.body = body;
54
+ this.reason = reason;
55
+ }
56
+ }
57
+ /** The server's error message, or the body verbatim when it is not the shape we expect. */
58
+ function reasonOf(body) {
59
+ if (!body)
60
+ return "";
61
+ try {
62
+ const parsed = JSON.parse(body);
63
+ if (parsed && typeof parsed === "object" && typeof parsed.error === "string") {
64
+ return parsed.error;
65
+ }
66
+ }
67
+ catch {
68
+ // Not JSON at all, which is what a proxy's error page looks like. The body itself is then the
69
+ // most useful thing there is to say.
70
+ }
71
+ return body.trim();
72
+ }
73
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iDAAiD;AACjD,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,yBAA0B,SAAQ,WAAW;IAC/C,MAAM,CAAS;IACf,IAAI,CAAS;IACtB,oEAAoE;IAC3D,MAAM,CAAS;IAExB,YAAY,MAAc,EAAE,IAAI,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,CAAC,0BAA0B,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACxC,MAAM,CAAS;IACf,MAAM,CAAS;IACf,MAAM,CAAS;IACf,IAAI,CAAS;IACb,MAAM,CAAS;IAExB,YAAY,MAAc,EAAE,MAAc,EAAE,MAAc,EAAE,IAAI,GAAG,EAAE;QACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,CAAC,GAAG,MAAM,IAAI,MAAM,qBAAqB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,2FAA2F;AAC3F,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAQ,MAA8B,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtG,OAAQ,MAA4B,CAAC,KAAK,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8FAA8F;QAC9F,qCAAqC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC"}