pipework 0.116.0 → 0.118.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.
- package/CHANGELOG.md +9 -0
- package/REFERENCE.md +5 -3
- package/dist/core/config/aws-env.d.ts +14 -0
- package/dist/core/config/aws-env.d.ts.map +1 -0
- package/dist/core/config/aws-env.js +18 -0
- package/dist/core/config/aws-env.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/aws/credentials.d.ts +20 -0
- package/dist/infra/aws/credentials.d.ts.map +1 -0
- package/dist/infra/aws/credentials.js +135 -0
- package/dist/infra/aws/credentials.js.map +1 -0
- package/dist/infra/email/index.d.ts +1 -0
- package/dist/infra/email/index.d.ts.map +1 -1
- package/dist/infra/email/index.js +1 -0
- package/dist/infra/email/index.js.map +1 -1
- package/dist/infra/email/providers.d.ts +3 -3
- package/dist/infra/email/providers.d.ts.map +1 -1
- package/dist/infra/email/providers.js +4 -2
- package/dist/infra/email/providers.js.map +1 -1
- package/dist/infra/storage/handle.d.ts +14 -0
- package/dist/infra/storage/handle.d.ts.map +1 -1
- package/dist/infra/storage/handle.js +41 -0
- package/dist/infra/storage/handle.js.map +1 -1
- package/dist/infra/storage/index.d.ts +1 -1
- package/dist/infra/storage/index.d.ts.map +1 -1
- package/dist/infra/storage/s3.d.ts +2 -2
- package/dist/infra/storage/s3.d.ts.map +1 -1
- package/dist/infra/storage/s3.js +4 -2
- package/dist/infra/storage/s3.js.map +1 -1
- package/package.json +1 -1
- package/dist/REFERENCE.md +0 -1477
- package/dist/infra/access-links/rate-limit.d.ts +0 -10
- package/dist/infra/access-links/rate-limit.d.ts.map +0 -1
- package/dist/infra/access-links/rate-limit.js +0 -28
- package/dist/infra/access-links/rate-limit.js.map +0 -1
- package/dist/infra/email/sigv4.d.ts +0 -24
- package/dist/infra/email/sigv4.d.ts.map +0 -1
- package/dist/infra/email/sigv4.js +0 -55
- package/dist/infra/email/sigv4.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.118.0
|
|
4
|
+
|
|
5
|
+
- **Added: `awsCredentials()`, the default AWS credential provider** (#604). Environment keys (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN`), re-read on every call; else the ECS task role through the container credentials endpoint (`AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`, or `_FULL_URI` with `AWS_CONTAINER_AUTHORIZATION_TOKEN[_FILE]`); else EC2 instance metadata (IMDSv2; `AWS_EC2_METADATA_DISABLED=true` skips it). Endpoint credentials are cached until five minutes before `Expiration`, concurrent calls share one fetch, and a failed refresh keeps serving unexpired credentials. Every fetch has a timeout. Nothing found throws an error listing each source looked at; a configured container endpoint that fails is an error, not a fall-through. Profiles and SSO are not read.
|
|
6
|
+
- **Changed: `storage.s3()` and `mail.ses()` `credentials` is optional**; omitted, each uses `awsCredentials()`.
|
|
7
|
+
|
|
8
|
+
## 0.117.0
|
|
9
|
+
|
|
10
|
+
- **Added: `storage.create(...).find({ sha256?, metadata?, limit? })` and `findFor(tenantId, query)`** (#603). The tenant's live files (unexpired, not deleted) matching every filter given, oldest first: `sha256` (hex, any case) and/or `metadata` by jsonb containment (`{ documentId }` finds the rows whose metadata holds it). Runs in the Flow's tenant and transaction, under the same RLS as `get`. `limit` defaults to 1000, at most 10000. No filter, a malformed hash, non-object metadata or an out-of-range limit throws `ValidationError` (422). Type `StorageFindOptions`.
|
|
11
|
+
|
|
3
12
|
## 0.116.0
|
|
4
13
|
|
|
5
14
|
- **Added: a step graph run carries the requesting actor** (#601). `request()` records the requesting Flow's actor (`auth.userId`) on the run (new nullable `pipework_step_run.actor` column; run `pipework generate` for an existing database). Every step job, the `finish` job that delivers `onDone`, and `onFailed` run with `auth = { userId }`, so audited writes in them name the user who started the run. A later request by another user carries that user for the steps it queues. `RequestOptions.carryActor: false` records none.
|
package/REFERENCE.md
CHANGED
|
@@ -1167,7 +1167,7 @@ Creates the transactional email interface: `send(db, { to, template, data, key }
|
|
|
1167
1167
|
|
|
1168
1168
|
Amazon SES v2 provider, SigV4-signed without the AWS SDK.
|
|
1169
1169
|
|
|
1170
|
-
`mail.ses({ region, credentials
|
|
1170
|
+
`mail.ses({ region, credentials?, configurationSet?, endpoint? })` posts JSON to `https://email.<region>.amazonaws.com/v2/email/outbound-emails` (`endpoint` replaces the base URL, for tests). `credentials` is `async () => ({ accessKeyId, secretAccessKey, sessionToken? })`, asked for on every send; omitted, it is `awsCredentials()` (see `storage.s3`). A non-2xx answer throws with the status and AWS's message.
|
|
1171
1171
|
|
|
1172
1172
|
### `mail.devStandIn`
|
|
1173
1173
|
|
|
@@ -1422,7 +1422,9 @@ Opt in with blueprint `storage: {}`; the generated migration adds `storage_file`
|
|
|
1422
1422
|
|
|
1423
1423
|
### `storage.s3`
|
|
1424
1424
|
|
|
1425
|
-
`storage.s3({ bucket, region, credentials
|
|
1425
|
+
`storage.s3({ bucket, region, credentials?, endpoint?, forcePathStyle?, prefix?, encryption? })` — the S3 backend. `credentials` is called per request and returns `{ accessKeyId, secretAccessKey, sessionToken? }`; omitted, it is `awsCredentials()`.
|
|
1426
|
+
|
|
1427
|
+
`awsCredentials()` (exported from the package root; `mail.ses` uses it too) returns a `() => Promise<AwsCredentials>` that resolves, in order: `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY` (+ `AWS_SESSION_TOKEN`), re-read on every call; the ECS task role (`AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`, or `AWS_CONTAINER_CREDENTIALS_FULL_URI` with `AWS_CONTAINER_AUTHORIZATION_TOKEN` or `_TOKEN_FILE`); then EC2 instance metadata (IMDSv2; skipped when `AWS_EC2_METADATA_DISABLED=true`). Temporary credentials are cached and refreshed 5 minutes before `Expiration`; a failed refresh keeps serving the cached ones until they expire. A configured container endpoint that fails is an error, not a fall-through. With no source it throws `[pipework] No AWS credentials found.` listing each place looked. Profiles (`~/.aws`) and SSO are not read. `endpoint` names an S3-compatible server (path-style addressing is then the default; `forcePathStyle` overrides). `prefix` is prepended to every key. `encryption` (`{ type: 'AES256' }` or `{ type: 'aws:kms', keyId? }`) adds the server-side encryption headers to every write (PutObject, CreateMultipartUpload, CopyObject). Bodies upload as 8 MiB multipart parts, or one PutObject when the whole body fits in a part; the signature does not cover the payload (`UNSIGNED-PAYLOAD`), so use an `https` endpoint in production. A failed upload aborts its multipart upload.
|
|
1426
1428
|
|
|
1427
1429
|
### `storage.local`
|
|
1428
1430
|
|
|
@@ -1434,6 +1436,7 @@ Opt in with blueprint `storage: {}`; the generated migration adds `storage_file`
|
|
|
1434
1436
|
|
|
1435
1437
|
- `put({ body, mediaType, filename?, expectedSha256?, expiresAt?, metadata? })` — streams `body` (a Readable of unknown length) to a temporary object while hashing and counting it, then moves it to its content address. Returns the `StoredFile`. Over `maxBytes` throws `PayloadTooLargeError` (413); a digest other than `expectedSha256` throws `ValidationError` (422); either leaves no row and no object. The blob is written before the row, and the row joins the Flow's transaction, so a rolled-back transaction leaves an object that `sweep()` removes.
|
|
1436
1438
|
- `get(id)` — the row or `null`. A file past `expiresAt` is treated as gone.
|
|
1439
|
+
- `find({ sha256?, metadata?, limit? })` — live rows of the tenant matching every filter, oldest first; metadata matches by containment (`{ documentId }` finds rows whose metadata holds it). Give `sha256`, `metadata` or both; `limit` defaults to 1000, at most 10000. `findFor(tenantId, ...)` for no Flow tenant.
|
|
1437
1440
|
- `open(id)` — `{ file, stream }`; `NotFoundError` when there is no row. Plugs into `http.file({ body: stream, length: file.size, mediaType: file.mediaType, filename })`.
|
|
1438
1441
|
- `signedUrl(id, { expiresInSeconds?, disposition?, filename? })` — `{ url, expiresAt }`: a presigned GET that works with plain `fetch` until it expires (default 900 s, at most 604800), with `Content-Disposition` (`attachment` or `inline`, encoded as `http.file()` does) and the stored media type. S3 only. Signed upload URLs (direct-to-storage upload) are not supported yet.
|
|
1439
1442
|
- `delete(id)` — deletes the row, returns whether there was one. The object is removed by the next `sweep()` once no row references it.
|
|
@@ -1447,7 +1450,6 @@ Opt in with blueprint `storage: {}`; the generated migration adds `storage_file`
|
|
|
1447
1450
|
const files = pipework.storage.create({
|
|
1448
1451
|
backend: pipework.storage.s3({
|
|
1449
1452
|
bucket: 'verity-files', region: 'eu-west-1',
|
|
1450
|
-
credentials: async () => ({ accessKeyId: env.AWS_KEY, secretAccessKey: env.AWS_SECRET }),
|
|
1451
1453
|
encryption: { type: 'aws:kms', keyId: env.KMS_KEY },
|
|
1452
1454
|
}),
|
|
1453
1455
|
maxBytes: 200 * 1024 * 1024,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** The environment variables AWS credential discovery reads. Empty strings count as unset. */
|
|
2
|
+
export interface AwsEnv {
|
|
3
|
+
readonly AWS_ACCESS_KEY_ID: string | undefined;
|
|
4
|
+
readonly AWS_SECRET_ACCESS_KEY: string | undefined;
|
|
5
|
+
readonly AWS_SESSION_TOKEN: string | undefined;
|
|
6
|
+
readonly AWS_CONTAINER_CREDENTIALS_RELATIVE_URI: string | undefined;
|
|
7
|
+
readonly AWS_CONTAINER_CREDENTIALS_FULL_URI: string | undefined;
|
|
8
|
+
readonly AWS_CONTAINER_AUTHORIZATION_TOKEN: string | undefined;
|
|
9
|
+
readonly AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE: string | undefined;
|
|
10
|
+
readonly AWS_EC2_METADATA_DISABLED: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
/** Reads the AWS variables now; called on every resolve, never at import. */
|
|
13
|
+
export declare function readAwsEnv(): AwsEnv;
|
|
14
|
+
//# sourceMappingURL=aws-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-env.d.ts","sourceRoot":"","sources":["../../../src/core/config/aws-env.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,sCAAsC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnE,QAAQ,CAAC,kCAAkC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/D,QAAQ,CAAC,iCAAiC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9D,QAAQ,CAAC,sCAAsC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnE,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAA;CACvD;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,IAAI,MAAM,CAenC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Reads the AWS variables now; called on every resolve, never at import. */
|
|
2
|
+
export function readAwsEnv() {
|
|
3
|
+
const get = (name) => {
|
|
4
|
+
const v = process.env[name];
|
|
5
|
+
return v === undefined || v === '' ? undefined : v;
|
|
6
|
+
};
|
|
7
|
+
return {
|
|
8
|
+
AWS_ACCESS_KEY_ID: get('AWS_ACCESS_KEY_ID'),
|
|
9
|
+
AWS_SECRET_ACCESS_KEY: get('AWS_SECRET_ACCESS_KEY'),
|
|
10
|
+
AWS_SESSION_TOKEN: get('AWS_SESSION_TOKEN'),
|
|
11
|
+
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI: get('AWS_CONTAINER_CREDENTIALS_RELATIVE_URI'),
|
|
12
|
+
AWS_CONTAINER_CREDENTIALS_FULL_URI: get('AWS_CONTAINER_CREDENTIALS_FULL_URI'),
|
|
13
|
+
AWS_CONTAINER_AUTHORIZATION_TOKEN: get('AWS_CONTAINER_AUTHORIZATION_TOKEN'),
|
|
14
|
+
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE: get('AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE'),
|
|
15
|
+
AWS_EC2_METADATA_DISABLED: get('AWS_EC2_METADATA_DISABLED'),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=aws-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-env.js","sourceRoot":"","sources":["../../../src/core/config/aws-env.ts"],"names":[],"mappings":"AAYA,6EAA6E;AAC7E,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,CAAC,IAAY,EAAsB,EAAE;QAC/C,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC3B,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC,CAAA;IACD,OAAO;QACL,iBAAiB,EAAE,GAAG,CAAC,mBAAmB,CAAC;QAC3C,qBAAqB,EAAE,GAAG,CAAC,uBAAuB,CAAC;QACnD,iBAAiB,EAAE,GAAG,CAAC,mBAAmB,CAAC;QAC3C,sCAAsC,EAAE,GAAG,CAAC,wCAAwC,CAAC;QACrF,kCAAkC,EAAE,GAAG,CAAC,oCAAoC,CAAC;QAC7E,iCAAiC,EAAE,GAAG,CAAC,mCAAmC,CAAC;QAC3E,sCAAsC,EAAE,GAAG,CAAC,wCAAwC,CAAC;QACrF,yBAAyB,EAAE,GAAG,CAAC,2BAA2B,CAAC;KAC5D,CAAA;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -76,6 +76,7 @@ export { webhook } from './infra/webhook/namespace.js';
|
|
|
76
76
|
export { defineInboundWebhook, createOutboundWebhook } from './infra/webhook/index.js';
|
|
77
77
|
export type { InboundWebhookConfig, InboundWebhookContext, SignatureVerifier, OutboundWebhookConfig, OutboundWebhook, WebhookEndpoint, DeliveryAttempt, SignedPayload, WebhookSignatureOptions } from './infra/webhook/index.js';
|
|
78
78
|
export { mail } from './infra/email/namespace.js';
|
|
79
|
+
export { awsCredentials } from './infra/email/index.js';
|
|
79
80
|
export type { Mail, MailConfig, SendInput, SendResult, RenderedEmail, EmailTemplates, MailProvider, OutgoingMessage, SesConfig, SnsWebhookConfig, AwsCredentials } from './infra/email/index.js';
|
|
80
81
|
export { credits } from './infra/credits/namespace.js';
|
|
81
82
|
export type { Credits, CreditsConfig, CreditGrant, GrantOptions, GrantResult, CreditReservation, ReserveResult, CreditBalance, CreditLedgerEntry, HistoryOptions, HistoryPage } from './infra/credits/index.js';
|
|
@@ -86,7 +87,7 @@ export { DraftStateError } from './infra/support/index.js';
|
|
|
86
87
|
export type { Support, SupportConfig, TicketApi as SupportTicketApi, Ticket as SupportTicket, TicketMessage as SupportMessage, TicketLink as SupportLink, TicketDetail as SupportTicketDetail, TicketState as SupportTicketState, ListOptions as SupportListOptions, ListPage as SupportListPage, DraftInput as SupportDraftInput, ReceiveResult as SupportReceiveResult, ReceiveInput as SupportReceiveInput, SupportEventKind, SupportEventPayload, SupportSink, SupportDelivery, ScreenVerdict as SupportScreenVerdict } from './infra/support/index.js';
|
|
87
88
|
export type { Sink, SinkDelivery } from './infra/outbox/core.js';
|
|
88
89
|
export { storage } from './infra/storage/namespace.js';
|
|
89
|
-
export type { Storage, StorageConfig, StoredFile, PutOptions as StoragePutOptions, SignedUrlOptions as StorageSignedUrlOptions, SweepOptions as StorageSweepOptions, SweepResult as StorageSweepResult, StorageBackend, S3Config, S3Encryption, LocalConfig as StorageLocalConfig } from './infra/storage/index.js';
|
|
90
|
+
export type { Storage, StorageConfig, StoredFile, PutOptions as StoragePutOptions, FindOptions as StorageFindOptions, SignedUrlOptions as StorageSignedUrlOptions, SweepOptions as StorageSweepOptions, SweepResult as StorageSweepResult, StorageBackend, S3Config, S3Encryption, LocalConfig as StorageLocalConfig } from './infra/storage/index.js';
|
|
90
91
|
export { accessLinks } from './infra/access-links/namespace.js';
|
|
91
92
|
export type { AccessLinks, AccessLinksConfig, AccessLink, PublicLink, AccessLinkUse, AccessLinkTarget, AccessLinkListed, AccessLinkPage, AccessLinkCheck, AccessLinkCheckArgs, LinkOptions, ResolveResult, BeginUseResult, CompleteUseResult, AbandonUseResult, PersonCheck, PersonCheckConfig, PersonChallenge, PersonPass } from './infra/access-links/index.js';
|
|
92
93
|
export { surface } from './core/surface/namespace.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACxE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAE7G,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACvF,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAKpE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC1E,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;AAE5F,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EACxH,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAC9E,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EACtD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClO,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC3G,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAExF,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EACrE,sBAAsB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAC7F,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAChG,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE5E,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC5F,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACzF,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAClF,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAChH,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACtG,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC/F,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAChE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAErH,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAEzF,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAEjG,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/C,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,EACtE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEpG,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAClF,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAClF,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,kBAAkB,EACtF,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzF,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAC/J,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAC/G,cAAc,EAAE,cAAc,IAAI,kBAAkB,EAAE,aAAa,IAAI,iBAAiB,EAAE,WAAW,IAAI,eAAe,EACxH,UAAU,IAAI,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,IAAI,aAAa,EAAE,QAAQ,IAAI,YAAY,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,aAAa,IAAI,iBAAiB,EACtL,gBAAgB,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,gBAAgB,IAAI,oBAAoB,EACtG,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAC/E,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EACpF,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,sBAAsB,EACvE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE7E,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAEvI,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACjD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EACnF,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAC/D,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EACtE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAC9C,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EACrE,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAC5F,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EACtE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEzG,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AACxD,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EACzE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE/E,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAClF,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,qBAAqB,EAC1E,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EACnE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEjI,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AACtF,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,EAC1E,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EACxE,aAAa,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AACjD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAClF,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5G,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAC5G,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACjG,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;AACpD,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,IAAI,iBAAiB,EAAE,WAAW,IAAI,gBAAgB,EACxI,UAAU,IAAI,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,WAAW,EAC/J,cAAc,EAAE,WAAW,EAAE,SAAS,IAAI,cAAc,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAE,WAAW,EAAE,cAAc,IAAI,mBAAmB,EAChJ,cAAc,IAAI,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAChH,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,IAAI,aAAa,EAAE,aAAa,IAAI,cAAc,EAC3H,UAAU,IAAI,WAAW,EAAE,YAAY,IAAI,mBAAmB,EAAE,WAAW,IAAI,kBAAkB,EAAE,WAAW,IAAI,kBAAkB,EACpI,QAAQ,IAAI,eAAe,EAAE,UAAU,IAAI,iBAAiB,EAAE,aAAa,IAAI,oBAAoB,EAAE,YAAY,IAAI,mBAAmB,EACxI,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC9I,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,IAAI,iBAAiB,EAAE,gBAAgB,IAAI,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -34,6 +34,7 @@ export { createIdempotency } from './infra/idempotency/index.js';
|
|
|
34
34
|
export { webhook } from './infra/webhook/namespace.js';
|
|
35
35
|
export { defineInboundWebhook, createOutboundWebhook } from './infra/webhook/index.js';
|
|
36
36
|
export { mail } from './infra/email/namespace.js';
|
|
37
|
+
export { awsCredentials } from './infra/email/index.js';
|
|
37
38
|
export { credits } from './infra/credits/namespace.js';
|
|
38
39
|
export { alerts } from './infra/alerts/namespace.js';
|
|
39
40
|
export { support } from './infra/support/namespace.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA8C,MAAM,4BAA4B,CAAA;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAGxE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAM/D,wFAAwF;AACxF,wFAAwF;AACxF,yFAAyF;AACzF,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AASvC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAKxD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AASvD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAW/C,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAI/C,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAOlD,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAKzF,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAMlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAKxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAUjD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAIxD,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAI1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAI1D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAIzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAGhE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAKtF,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA8C,MAAM,4BAA4B,CAAA;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAGxE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAM/D,wFAAwF;AACxF,wFAAwF;AACxF,yFAAyF;AACzF,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AASvC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAKxD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AASvD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAW/C,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAI/C,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAOlD,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAKzF,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAMlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAKxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAUjD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAIxD,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAI1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAI1D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAIzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAGhE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAKtF,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAIvD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAGtD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;AAKpD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAM1D,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAItD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAK/D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAMrD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAC9G,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAEvI,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAA;AAGjD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAGzD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type AwsEnv } from '../../core/config/aws-env.js';
|
|
2
|
+
import type { AwsCredentials } from './sigv4.js';
|
|
3
|
+
export interface AwsCredentialsOptions {
|
|
4
|
+
/** For tests: where the AWS variables come from. Default: the process environment. */
|
|
5
|
+
readonly env?: () => AwsEnv;
|
|
6
|
+
/** For tests: replaces global `fetch`. */
|
|
7
|
+
readonly fetch?: typeof fetch;
|
|
8
|
+
/** For tests: the clock, in epoch milliseconds. */
|
|
9
|
+
readonly now?: () => number;
|
|
10
|
+
/** For tests: reads AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE. */
|
|
11
|
+
readonly readFile?: (path: string) => Promise<string>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Default AWS credential provider: environment keys, then the ECS container
|
|
15
|
+
* endpoint, then EC2 instance metadata (IMDSv2). Container and IMDS credentials
|
|
16
|
+
* are cached until five minutes before `Expiration`. Profiles and SSO are not read.
|
|
17
|
+
* `storage.s3` and `mail.ses` use it when `credentials` is omitted.
|
|
18
|
+
*/
|
|
19
|
+
export declare function awsCredentials(options?: AwsCredentialsOptions): () => Promise<AwsCredentials>;
|
|
20
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/infra/aws/credentials.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CACtD;AAUD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAqHjG"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { readFile as fsReadFile } from 'node:fs/promises';
|
|
2
|
+
import { readAwsEnv } from '../../core/config/aws-env.js';
|
|
3
|
+
const REFRESH_BEFORE_MS = 5 * 60 * 1000;
|
|
4
|
+
const ECS_HOST = 'http://169.254.170.2';
|
|
5
|
+
const IMDS_HOST = 'http://169.254.169.254';
|
|
6
|
+
const IMDS_TIMEOUT_MS = 1000;
|
|
7
|
+
const CONTAINER_TIMEOUT_MS = 2000;
|
|
8
|
+
/**
|
|
9
|
+
* Default AWS credential provider: environment keys, then the ECS container
|
|
10
|
+
* endpoint, then EC2 instance metadata (IMDSv2). Container and IMDS credentials
|
|
11
|
+
* are cached until five minutes before `Expiration`. Profiles and SSO are not read.
|
|
12
|
+
* `storage.s3` and `mail.ses` use it when `credentials` is omitted.
|
|
13
|
+
*/
|
|
14
|
+
export function awsCredentials(options = {}) {
|
|
15
|
+
const env = options.env ?? readAwsEnv;
|
|
16
|
+
const doFetch = options.fetch ?? fetch;
|
|
17
|
+
const now = options.now ?? Date.now;
|
|
18
|
+
const readFile = options.readFile ?? ((path) => fsReadFile(path, 'utf8'));
|
|
19
|
+
let cached;
|
|
20
|
+
let inflight;
|
|
21
|
+
async function fetchJson(url, init, timeoutMs, what) {
|
|
22
|
+
let res;
|
|
23
|
+
try {
|
|
24
|
+
res = await doFetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
throw new Error(`[pipework] ${what} at ${url} could not be reached: ${err instanceof Error ? err.message : String(err)}`);
|
|
28
|
+
}
|
|
29
|
+
if (!res.ok)
|
|
30
|
+
throw new Error(`[pipework] ${what} at ${url} answered HTTP ${res.status}`);
|
|
31
|
+
const raw = await res.text();
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(raw);
|
|
34
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
35
|
+
throw new Error('not an object');
|
|
36
|
+
return parsed;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
throw new Error(`[pipework] ${what} at ${url} answered HTTP ${res.status} with malformed JSON`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function parse(body, url, what) {
|
|
43
|
+
const id = body['AccessKeyId'];
|
|
44
|
+
const secret = body['SecretAccessKey'];
|
|
45
|
+
const token = body['Token'];
|
|
46
|
+
const expiration = body['Expiration'];
|
|
47
|
+
const expiresAt = typeof expiration === 'string' ? Date.parse(expiration) : NaN;
|
|
48
|
+
if (typeof id !== 'string' || typeof secret !== 'string' || Number.isNaN(expiresAt)) {
|
|
49
|
+
throw new Error(`[pipework] ${what} at ${url} answered HTTP 200 without AccessKeyId, SecretAccessKey and Expiration`);
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
credentials: { accessKeyId: id, secretAccessKey: secret, ...(typeof token === 'string' ? { sessionToken: token } : {}) },
|
|
53
|
+
expiresAt,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function fromContainer(e) {
|
|
57
|
+
const rel = e.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI;
|
|
58
|
+
const url = rel !== undefined ? `${ECS_HOST}${rel}` : e.AWS_CONTAINER_CREDENTIALS_FULL_URI;
|
|
59
|
+
let token = e.AWS_CONTAINER_AUTHORIZATION_TOKEN;
|
|
60
|
+
if (e.AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE !== undefined) {
|
|
61
|
+
token = (await readFile(e.AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE)).trim();
|
|
62
|
+
}
|
|
63
|
+
const headers = token !== undefined ? { Authorization: token } : {};
|
|
64
|
+
const what = 'the ECS container credentials endpoint';
|
|
65
|
+
return parse(await fetchJson(url, { method: 'GET', headers }, CONTAINER_TIMEOUT_MS, what), url, what);
|
|
66
|
+
}
|
|
67
|
+
async function fromImds() {
|
|
68
|
+
const tokenRes = await doFetch(`${IMDS_HOST}/latest/api/token`, {
|
|
69
|
+
method: 'PUT',
|
|
70
|
+
headers: { 'X-aws-ec2-metadata-token-ttl-seconds': '21600' },
|
|
71
|
+
signal: AbortSignal.timeout(IMDS_TIMEOUT_MS),
|
|
72
|
+
});
|
|
73
|
+
if (!tokenRes.ok)
|
|
74
|
+
throw new Error(`token request answered HTTP ${tokenRes.status}`);
|
|
75
|
+
const token = (await tokenRes.text()).trim();
|
|
76
|
+
const headers = { 'X-aws-ec2-metadata-token': token };
|
|
77
|
+
const listUrl = `${IMDS_HOST}/latest/meta-data/iam/security-credentials/`;
|
|
78
|
+
const listRes = await doFetch(listUrl, { method: 'GET', headers, signal: AbortSignal.timeout(IMDS_TIMEOUT_MS) });
|
|
79
|
+
if (!listRes.ok)
|
|
80
|
+
throw new Error(`role lookup at ${listUrl} answered HTTP ${listRes.status}`);
|
|
81
|
+
const role = (await listRes.text()).split(/\r?\n/)[0].trim();
|
|
82
|
+
if (role === '')
|
|
83
|
+
throw new Error(`no instance role attached (${listUrl} was empty)`);
|
|
84
|
+
const url = `${listUrl}${role}`;
|
|
85
|
+
return parse(await fetchJson(url, { method: 'GET', headers }, IMDS_TIMEOUT_MS, 'EC2 instance metadata'), url, 'EC2 instance metadata');
|
|
86
|
+
}
|
|
87
|
+
async function resolve() {
|
|
88
|
+
const e = env();
|
|
89
|
+
if (e.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI !== undefined || e.AWS_CONTAINER_CREDENTIALS_FULL_URI !== undefined) {
|
|
90
|
+
return fromContainer(e);
|
|
91
|
+
}
|
|
92
|
+
let imds;
|
|
93
|
+
if (e.AWS_EC2_METADATA_DISABLED?.toLowerCase() === 'true') {
|
|
94
|
+
imds = 'disabled (AWS_EC2_METADATA_DISABLED=true)';
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
try {
|
|
98
|
+
return await fromImds();
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
imds = `failed (${err instanceof Error ? err.message : String(err)})`;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
throw new Error('[pipework] No AWS credentials found. Looked at:\n' +
|
|
105
|
+
' - environment: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY (AWS_SESSION_TOKEN optional), not set\n' +
|
|
106
|
+
' - container endpoint: AWS_CONTAINER_CREDENTIALS_RELATIVE_URI, AWS_CONTAINER_CREDENTIALS_FULL_URI, not set\n' +
|
|
107
|
+
` - EC2 instance metadata (IMDSv2): ${imds}`);
|
|
108
|
+
}
|
|
109
|
+
return async () => {
|
|
110
|
+
const e = env();
|
|
111
|
+
const id = e.AWS_ACCESS_KEY_ID;
|
|
112
|
+
const secret = e.AWS_SECRET_ACCESS_KEY;
|
|
113
|
+
if (id !== undefined || secret !== undefined) {
|
|
114
|
+
if (id === undefined)
|
|
115
|
+
throw new Error('[pipework] AWS_SECRET_ACCESS_KEY is set but AWS_ACCESS_KEY_ID is missing.');
|
|
116
|
+
if (secret === undefined)
|
|
117
|
+
throw new Error('[pipework] AWS_ACCESS_KEY_ID is set but AWS_SECRET_ACCESS_KEY is missing.');
|
|
118
|
+
return { accessKeyId: id, secretAccessKey: secret, ...(e.AWS_SESSION_TOKEN !== undefined ? { sessionToken: e.AWS_SESSION_TOKEN } : {}) };
|
|
119
|
+
}
|
|
120
|
+
if (cached !== undefined && now() < cached.expiresAt - REFRESH_BEFORE_MS)
|
|
121
|
+
return cached.credentials;
|
|
122
|
+
if (inflight === undefined) {
|
|
123
|
+
inflight = resolve().then((c) => { cached = c; inflight = undefined; return c; }, (err) => { inflight = undefined; throw err; });
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
return (await inflight).credentials;
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
if (cached !== undefined && now() < cached.expiresAt)
|
|
130
|
+
return cached.credentials;
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/infra/aws/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,5 @@ export { ses, devStandIn, type MailProvider, type OutgoingMessage, type SesConfi
|
|
|
3
3
|
export { createInbound, sesReceipt, inboundFolder, RECEIVE_JOB, type Inbound, type InboundConfig, type InboundSource, type InboundRecord, type InboundScanResult, type InboundSweepResult, type ReceivedEmail, type ReceivedAttachment, type EmailAddress, type EmailVerdicts, type UnthreadedEmail, type SesReceiptConfig, } from './inbound.js';
|
|
4
4
|
export { snsWebhook, type SnsWebhookConfig } from './sns.js';
|
|
5
5
|
export { signV4, type SigV4Request, type AwsCredentials } from '../aws/sigv4.js';
|
|
6
|
+
export { awsCredentials, type AwsCredentialsOptions } from '../aws/credentials.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infra/email/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAC1G,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACzG,OAAO,EACL,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAC/H,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAC/G,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,GAChE,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infra/email/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAC1G,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACzG,OAAO,EACL,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAC/H,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAC/G,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,GAChE,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChF,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -3,4 +3,5 @@ export { ses, devStandIn } from './providers.js';
|
|
|
3
3
|
export { createInbound, sesReceipt, inboundFolder, RECEIVE_JOB, } from './inbound.js';
|
|
4
4
|
export { snsWebhook } from './sns.js';
|
|
5
5
|
export { signV4 } from '../aws/sigv4.js';
|
|
6
|
+
export { awsCredentials } from '../aws/credentials.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infra/email/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EACJ,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,GAAG,EAAE,UAAU,EAA2D,MAAM,gBAAgB,CAAA;AACzG,OAAO,EACL,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,GAGtD,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAyB,MAAM,UAAU,CAAA;AAC5D,OAAO,EAAE,MAAM,EAA0C,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infra/email/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EACJ,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,GAAG,EAAE,UAAU,EAA2D,MAAM,gBAAgB,CAAA;AACzG,OAAO,EACL,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,GAGtD,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAyB,MAAM,UAAU,CAAA;AAC5D,OAAO,EAAE,MAAM,EAA0C,MAAM,iBAAiB,CAAA;AAChF,OAAO,EAAE,cAAc,EAA8B,MAAM,uBAAuB,CAAA"}
|
|
@@ -21,15 +21,15 @@ export interface MailProvider {
|
|
|
21
21
|
}
|
|
22
22
|
export interface SesConfig {
|
|
23
23
|
readonly region: string;
|
|
24
|
-
/** Called for every send
|
|
25
|
-
readonly credentials
|
|
24
|
+
/** Called for every send. Default: `awsCredentials()` (environment, ECS task role, EC2 instance role). */
|
|
25
|
+
readonly credentials?: () => Promise<AwsCredentials>;
|
|
26
26
|
readonly configurationSet?: string;
|
|
27
27
|
/** Base URL instead of `https://email.<region>.amazonaws.com`; for tests against a local server. */
|
|
28
28
|
readonly endpoint?: string;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* Amazon SES v2 provider. Posts to `/v2/email/outbound-emails`, signed with SigV4
|
|
32
|
-
* (no AWS SDK). Credentials
|
|
32
|
+
* (no AWS SDK). Credentials default to `awsCredentials()`.
|
|
33
33
|
* A non-2xx answer throws with the status and AWS's message.
|
|
34
34
|
*/
|
|
35
35
|
export declare function ses(config: SesConfig): MailProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/infra/email/providers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/infra/email/providers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAG7D,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACpD;AAED,wFAAwF;AACxF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACvE;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,0GAA0G;IAC1G,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;IACpD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,CAyCnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAezE"}
|
|
@@ -2,12 +2,14 @@ import { mkdir, writeFile } from 'node:fs/promises';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { getBaseLogger } from '../../core/logging/index.js';
|
|
4
4
|
import { signV4 } from '../aws/sigv4.js';
|
|
5
|
+
import { awsCredentials } from '../aws/credentials.js';
|
|
5
6
|
/**
|
|
6
7
|
* Amazon SES v2 provider. Posts to `/v2/email/outbound-emails`, signed with SigV4
|
|
7
|
-
* (no AWS SDK). Credentials
|
|
8
|
+
* (no AWS SDK). Credentials default to `awsCredentials()`.
|
|
8
9
|
* A non-2xx answer throws with the status and AWS's message.
|
|
9
10
|
*/
|
|
10
11
|
export function ses(config) {
|
|
12
|
+
const getCredentials = config.credentials ?? awsCredentials();
|
|
11
13
|
const base = (config.endpoint ?? `https://email.${config.region}.amazonaws.com`).replace(/\/+$/, '');
|
|
12
14
|
return {
|
|
13
15
|
name: 'ses',
|
|
@@ -32,7 +34,7 @@ export function ses(config) {
|
|
|
32
34
|
const url = `${base}/v2/email/outbound-emails`;
|
|
33
35
|
const headers = signV4({
|
|
34
36
|
method: 'POST', url, headers: { 'content-type': 'application/json' }, body,
|
|
35
|
-
region: config.region, service: 'ses', credentials: await
|
|
37
|
+
region: config.region, service: 'ses', credentials: await getCredentials(),
|
|
36
38
|
});
|
|
37
39
|
const res = await fetch(url, { method: 'POST', headers, body });
|
|
38
40
|
const raw = await res.text();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/infra/email/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAuB,MAAM,iBAAiB,CAAA;AA+
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/infra/email/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,14 @@ export interface SignedUrlOptions {
|
|
|
42
42
|
/** Name the browser saves under; default the stored filename. */
|
|
43
43
|
readonly filename?: string;
|
|
44
44
|
}
|
|
45
|
+
export interface FindOptions {
|
|
46
|
+
/** Hex SHA-256 of the content, any case. */
|
|
47
|
+
readonly sha256?: string;
|
|
48
|
+
/** Rows whose metadata contains this object (jsonb `@>`); nested objects match by containment. */
|
|
49
|
+
readonly metadata?: Record<string, unknown>;
|
|
50
|
+
/** Most rows returned. Default 1000, at most 10000. */
|
|
51
|
+
readonly limit?: number;
|
|
52
|
+
}
|
|
45
53
|
export interface SweepOptions {
|
|
46
54
|
/** Most rows expired and most objects deleted in one call (each). Default 1000. */
|
|
47
55
|
readonly limit?: number;
|
|
@@ -69,6 +77,12 @@ export interface Storage {
|
|
|
69
77
|
/** The file's row, or `null` when there is none (or it has expired). */
|
|
70
78
|
get(id: string): Promise<StoredFile | null>;
|
|
71
79
|
getFor(tenantId: string, id: string): Promise<StoredFile | null>;
|
|
80
|
+
/**
|
|
81
|
+
* The tenant's live (unexpired) files matching every given filter, oldest first. Give `sha256`,
|
|
82
|
+
* `metadata` or both; none throws `ValidationError`. Runs in the Flow's transaction, under the same RLS as `get`.
|
|
83
|
+
*/
|
|
84
|
+
find(query: FindOptions): Promise<StoredFile[]>;
|
|
85
|
+
findFor(tenantId: string, query: FindOptions): Promise<StoredFile[]>;
|
|
72
86
|
/** The row and a stream of the content (pass `file.size` as `length` to `http.file()`). Throws `NotFoundError` when there is no row. */
|
|
73
87
|
open(id: string): Promise<{
|
|
74
88
|
file: StoredFile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../../src/infra/storage/handle.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../../src/infra/storage/handle.ts"],"names":[],"mappings":"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"}
|
|
@@ -193,6 +193,45 @@ export function createStorage(config) {
|
|
|
193
193
|
requireId('id', id);
|
|
194
194
|
return run(explicit, (tx, tenantId) => findFile(tx, tenantId, id, false));
|
|
195
195
|
}
|
|
196
|
+
async function doFind(explicit, query) {
|
|
197
|
+
if (query === null || typeof query !== 'object') {
|
|
198
|
+
throw new ValidationError({ query: ['give sha256, metadata or both'] }, 'Storage find needs sha256, metadata or both.');
|
|
199
|
+
}
|
|
200
|
+
let hash = null;
|
|
201
|
+
if (query.sha256 !== undefined) {
|
|
202
|
+
if (typeof query.sha256 !== 'string' || !/^[0-9a-f]{64}$/i.test(query.sha256)) {
|
|
203
|
+
throw new ValidationError({ sha256: ['must be 64 hex characters'] }, 'Storage find sha256 must be a hex SHA-256.');
|
|
204
|
+
}
|
|
205
|
+
hash = query.sha256.toLowerCase();
|
|
206
|
+
}
|
|
207
|
+
let contains = null;
|
|
208
|
+
if (query.metadata !== undefined) {
|
|
209
|
+
const given = query.metadata;
|
|
210
|
+
const proto = given === null || typeof given !== 'object' ? undefined : Object.getPrototypeOf(given);
|
|
211
|
+
if (proto !== Object.prototype && proto !== null) {
|
|
212
|
+
throw new ValidationError({ metadata: ['must be a plain object'] }, 'Storage find metadata must be a plain object.');
|
|
213
|
+
}
|
|
214
|
+
contains = JSON.stringify(query.metadata);
|
|
215
|
+
}
|
|
216
|
+
if (hash === null && contains === null) {
|
|
217
|
+
throw new ValidationError({ query: ['give sha256, metadata or both'] }, 'Storage find needs sha256, metadata or both.');
|
|
218
|
+
}
|
|
219
|
+
const limit = query.limit ?? 1000;
|
|
220
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > 10000) {
|
|
221
|
+
throw new ValidationError({ limit: ['must be an integer from 1 to 10000'] }, 'Storage find limit must be an integer from 1 to 10000.');
|
|
222
|
+
}
|
|
223
|
+
return run(explicit, async (tx, tenantId) => {
|
|
224
|
+
const rows = await tx.execute(sql `
|
|
225
|
+
SELECT * FROM storage_file
|
|
226
|
+
WHERE tenant_id = ${tenantId} AND (expires_at IS NULL OR expires_at > now())
|
|
227
|
+
${hash === null ? sql `` : sql `AND sha256 = ${hash}`}
|
|
228
|
+
${contains === null ? sql `` : sql `AND metadata @> ${contains}::jsonb`}
|
|
229
|
+
ORDER BY created_at, id
|
|
230
|
+
LIMIT ${limit}
|
|
231
|
+
`);
|
|
232
|
+
return rows.map(r => rowToFile(r));
|
|
233
|
+
});
|
|
234
|
+
}
|
|
196
235
|
async function doOpen(explicit, id) {
|
|
197
236
|
const file = await doGet(explicit, id);
|
|
198
237
|
if (file === null)
|
|
@@ -305,6 +344,8 @@ export function createStorage(config) {
|
|
|
305
344
|
putFor: (t, o) => doPut(t, o),
|
|
306
345
|
get: id => doGet(null, id),
|
|
307
346
|
getFor: (t, id) => doGet(t, id),
|
|
347
|
+
find: q => doFind(null, q),
|
|
348
|
+
findFor: (t, q) => doFind(t, q),
|
|
308
349
|
open: id => doOpen(null, id),
|
|
309
350
|
openFor: (t, id) => doOpen(t, id),
|
|
310
351
|
signedUrl: (id, o) => doSignedUrl(null, id, o),
|