@zshannon/streamstore 0.22.3
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/LICENSE +21 -0
- package/README.md +93 -0
- package/dist/cjs/accessTokens.d.ts +51 -0
- package/dist/cjs/accessTokens.d.ts.map +1 -0
- package/dist/cjs/accessTokens.js +127 -0
- package/dist/cjs/accessTokens.js.map +1 -0
- package/dist/cjs/auth/biscuit.d.ts +42 -0
- package/dist/cjs/auth/biscuit.d.ts.map +1 -0
- package/dist/cjs/auth/biscuit.js +72 -0
- package/dist/cjs/auth/biscuit.js.map +1 -0
- package/dist/cjs/auth/index.d.ts +5 -0
- package/dist/cjs/auth/index.d.ts.map +1 -0
- package/dist/cjs/auth/index.js +14 -0
- package/dist/cjs/auth/index.js.map +1 -0
- package/dist/cjs/auth/pki-auth.d.ts +60 -0
- package/dist/cjs/auth/pki-auth.d.ts.map +1 -0
- package/dist/cjs/auth/pki-auth.js +102 -0
- package/dist/cjs/auth/pki-auth.js.map +1 -0
- package/dist/cjs/auth/sign.d.ts +39 -0
- package/dist/cjs/auth/sign.d.ts.map +1 -0
- package/dist/cjs/auth/sign.js +128 -0
- package/dist/cjs/auth/sign.js.map +1 -0
- package/dist/cjs/auth/signing-key.d.ts +42 -0
- package/dist/cjs/auth/signing-key.d.ts.map +1 -0
- package/dist/cjs/auth/signing-key.js +66 -0
- package/dist/cjs/auth/signing-key.js.map +1 -0
- package/dist/cjs/basin.d.ts +33 -0
- package/dist/cjs/basin.d.ts.map +1 -0
- package/dist/cjs/basin.js +54 -0
- package/dist/cjs/basin.js.map +1 -0
- package/dist/cjs/basins.d.ts +62 -0
- package/dist/cjs/basins.d.ts.map +1 -0
- package/dist/cjs/basins.js +201 -0
- package/dist/cjs/basins.js.map +1 -0
- package/dist/cjs/batch-transform.d.ts +60 -0
- package/dist/cjs/batch-transform.d.ts.map +1 -0
- package/dist/cjs/batch-transform.js +171 -0
- package/dist/cjs/batch-transform.js.map +1 -0
- package/dist/cjs/common.d.ts +156 -0
- package/dist/cjs/common.d.ts.map +1 -0
- package/dist/cjs/common.js +54 -0
- package/dist/cjs/common.js.map +1 -0
- package/dist/cjs/endpoints.d.ts +63 -0
- package/dist/cjs/endpoints.d.ts.map +1 -0
- package/dist/cjs/endpoints.js +120 -0
- package/dist/cjs/endpoints.js.map +1 -0
- package/dist/cjs/error.d.ts +119 -0
- package/dist/cjs/error.d.ts.map +1 -0
- package/dist/cjs/error.js +373 -0
- package/dist/cjs/error.js.map +1 -0
- package/dist/cjs/generated/client/client.gen.d.ts +3 -0
- package/dist/cjs/generated/client/client.gen.d.ts.map +1 -0
- package/dist/cjs/generated/client/client.gen.js +209 -0
- package/dist/cjs/generated/client/client.gen.js.map +1 -0
- package/dist/cjs/generated/client/index.d.ts +9 -0
- package/dist/cjs/generated/client/index.d.ts.map +1 -0
- package/dist/cjs/generated/client/index.js +18 -0
- package/dist/cjs/generated/client/index.js.map +1 -0
- package/dist/cjs/generated/client/types.gen.d.ts +125 -0
- package/dist/cjs/generated/client/types.gen.d.ts.map +1 -0
- package/dist/cjs/generated/client/types.gen.js +4 -0
- package/dist/cjs/generated/client/types.gen.js.map +1 -0
- package/dist/cjs/generated/client/utils.gen.d.ts +34 -0
- package/dist/cjs/generated/client/utils.gen.d.ts.map +1 -0
- package/dist/cjs/generated/client/utils.gen.js +243 -0
- package/dist/cjs/generated/client/utils.gen.js.map +1 -0
- package/dist/cjs/generated/client.gen.d.ts +13 -0
- package/dist/cjs/generated/client.gen.d.ts.map +1 -0
- package/dist/cjs/generated/client.gen.js +9 -0
- package/dist/cjs/generated/client.gen.js.map +1 -0
- package/dist/cjs/generated/core/auth.gen.d.ts +19 -0
- package/dist/cjs/generated/core/auth.gen.d.ts.map +1 -0
- package/dist/cjs/generated/core/auth.gen.js +19 -0
- package/dist/cjs/generated/core/auth.gen.js.map +1 -0
- package/dist/cjs/generated/core/bodySerializer.gen.d.ts +26 -0
- package/dist/cjs/generated/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/cjs/generated/core/bodySerializer.gen.js +61 -0
- package/dist/cjs/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/cjs/generated/core/params.gen.d.ts +44 -0
- package/dist/cjs/generated/core/params.gen.d.ts.map +1 -0
- package/dist/cjs/generated/core/params.gen.js +105 -0
- package/dist/cjs/generated/core/params.gen.js.map +1 -0
- package/dist/cjs/generated/core/pathSerializer.gen.d.ts +34 -0
- package/dist/cjs/generated/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/cjs/generated/core/pathSerializer.gen.js +124 -0
- package/dist/cjs/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/cjs/generated/core/queryKeySerializer.gen.d.ts +19 -0
- package/dist/cjs/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/cjs/generated/core/queryKeySerializer.gen.js +106 -0
- package/dist/cjs/generated/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/cjs/generated/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/cjs/generated/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/cjs/generated/core/serverSentEvents.gen.js +140 -0
- package/dist/cjs/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/cjs/generated/core/types.gen.d.ts +79 -0
- package/dist/cjs/generated/core/types.gen.d.ts.map +1 -0
- package/dist/cjs/generated/core/types.gen.js +4 -0
- package/dist/cjs/generated/core/types.gen.js.map +1 -0
- package/dist/cjs/generated/core/utils.gen.d.ts +20 -0
- package/dist/cjs/generated/core/utils.gen.d.ts.map +1 -0
- package/dist/cjs/generated/core/utils.gen.js +94 -0
- package/dist/cjs/generated/core/utils.gen.js.map +1 -0
- package/dist/cjs/generated/index.d.ts +3 -0
- package/dist/cjs/generated/index.d.ts.map +1 -0
- package/dist/cjs/generated/index.js +19 -0
- package/dist/cjs/generated/index.js.map +1 -0
- package/dist/cjs/generated/proto/s2.d.ts +250 -0
- package/dist/cjs/generated/proto/s2.d.ts.map +1 -0
- package/dist/cjs/generated/proto/s2.js +426 -0
- package/dist/cjs/generated/proto/s2.js.map +1 -0
- package/dist/cjs/generated/sdk.gen.d.ts +100 -0
- package/dist/cjs/generated/sdk.gen.d.ts.map +1 -0
- package/dist/cjs/generated/sdk.gen.js +374 -0
- package/dist/cjs/generated/sdk.gen.js.map +1 -0
- package/dist/cjs/generated/types.gen.d.ts +1064 -0
- package/dist/cjs/generated/types.gen.d.ts.map +1 -0
- package/dist/cjs/generated/types.gen.js +4 -0
- package/dist/cjs/generated/types.gen.js.map +1 -0
- package/dist/cjs/index.d.ts +42 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +81 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/case-transform.d.ts +59 -0
- package/dist/cjs/internal/case-transform.d.ts.map +1 -0
- package/dist/cjs/internal/case-transform.js +80 -0
- package/dist/cjs/internal/case-transform.js.map +1 -0
- package/dist/cjs/internal/mappers.d.ts +51 -0
- package/dist/cjs/internal/mappers.d.ts.map +1 -0
- package/dist/cjs/internal/mappers.js +225 -0
- package/dist/cjs/internal/mappers.js.map +1 -0
- package/dist/cjs/internal/sdk-types.d.ts +127 -0
- package/dist/cjs/internal/sdk-types.d.ts.map +1 -0
- package/dist/cjs/internal/sdk-types.js +9 -0
- package/dist/cjs/internal/sdk-types.js.map +1 -0
- package/dist/cjs/lib/base64.d.ts +12 -0
- package/dist/cjs/lib/base64.d.ts.map +1 -0
- package/dist/cjs/lib/base64.js +172 -0
- package/dist/cjs/lib/base64.js.map +1 -0
- package/dist/cjs/lib/event-stream.d.ts +26 -0
- package/dist/cjs/lib/event-stream.d.ts.map +1 -0
- package/dist/cjs/lib/event-stream.js +154 -0
- package/dist/cjs/lib/event-stream.js.map +1 -0
- package/dist/cjs/lib/paginate.d.ts +61 -0
- package/dist/cjs/lib/paginate.d.ts.map +1 -0
- package/dist/cjs/lib/paginate.js +51 -0
- package/dist/cjs/lib/paginate.js.map +1 -0
- package/dist/cjs/lib/redacted.d.ts +17 -0
- package/dist/cjs/lib/redacted.d.ts.map +1 -0
- package/dist/cjs/lib/redacted.js +34 -0
- package/dist/cjs/lib/redacted.js.map +1 -0
- package/dist/cjs/lib/result.d.ts +57 -0
- package/dist/cjs/lib/result.d.ts.map +1 -0
- package/dist/cjs/lib/result.js +43 -0
- package/dist/cjs/lib/result.js.map +1 -0
- package/dist/cjs/lib/retry.d.ts +167 -0
- package/dist/cjs/lib/retry.d.ts.map +1 -0
- package/dist/cjs/lib/retry.js +1011 -0
- package/dist/cjs/lib/retry.js.map +1 -0
- package/dist/cjs/lib/stream/factory.d.ts +14 -0
- package/dist/cjs/lib/stream/factory.d.ts.map +1 -0
- package/dist/cjs/lib/stream/factory.js +35 -0
- package/dist/cjs/lib/stream/factory.js.map +1 -0
- package/dist/cjs/lib/stream/runtime.d.ts +27 -0
- package/dist/cjs/lib/stream/runtime.d.ts.map +1 -0
- package/dist/cjs/lib/stream/runtime.js +70 -0
- package/dist/cjs/lib/stream/runtime.js.map +1 -0
- package/dist/cjs/lib/stream/transport/fetch/index.d.ts +64 -0
- package/dist/cjs/lib/stream/transport/fetch/index.d.ts.map +1 -0
- package/dist/cjs/lib/stream/transport/fetch/index.js +462 -0
- package/dist/cjs/lib/stream/transport/fetch/index.js.map +1 -0
- package/dist/cjs/lib/stream/transport/fetch/shared.d.ts +11 -0
- package/dist/cjs/lib/stream/transport/fetch/shared.d.ts.map +1 -0
- package/dist/cjs/lib/stream/transport/fetch/shared.js +118 -0
- package/dist/cjs/lib/stream/transport/fetch/shared.js.map +1 -0
- package/dist/cjs/lib/stream/transport/proto.d.ts +9 -0
- package/dist/cjs/lib/stream/transport/proto.d.ts.map +1 -0
- package/dist/cjs/lib/stream/transport/proto.js +118 -0
- package/dist/cjs/lib/stream/transport/proto.js.map +1 -0
- package/dist/cjs/lib/stream/transport/s2s/framing.d.ts +47 -0
- package/dist/cjs/lib/stream/transport/s2s/framing.d.ts.map +1 -0
- package/dist/cjs/lib/stream/transport/s2s/framing.js +123 -0
- package/dist/cjs/lib/stream/transport/s2s/framing.js.map +1 -0
- package/dist/cjs/lib/stream/transport/s2s/index.d.ts +24 -0
- package/dist/cjs/lib/stream/transport/s2s/index.d.ts.map +1 -0
- package/dist/cjs/lib/stream/transport/s2s/index.js +823 -0
- package/dist/cjs/lib/stream/transport/s2s/index.js.map +1 -0
- package/dist/cjs/lib/stream/types.d.ts +199 -0
- package/dist/cjs/lib/stream/types.d.ts.map +1 -0
- package/dist/cjs/lib/stream/types.js +21 -0
- package/dist/cjs/lib/stream/types.js.map +1 -0
- package/dist/cjs/metrics.d.ts +46 -0
- package/dist/cjs/metrics.d.ts.map +1 -0
- package/dist/cjs/metrics.js +127 -0
- package/dist/cjs/metrics.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/producer.d.ts +82 -0
- package/dist/cjs/producer.d.ts.map +1 -0
- package/dist/cjs/producer.js +305 -0
- package/dist/cjs/producer.js.map +1 -0
- package/dist/cjs/s2.d.ts +41 -0
- package/dist/cjs/s2.d.ts.map +1 -0
- package/dist/cjs/s2.js +119 -0
- package/dist/cjs/s2.js.map +1 -0
- package/dist/cjs/stream.d.ts +78 -0
- package/dist/cjs/stream.d.ts.map +1 -0
- package/dist/cjs/stream.js +176 -0
- package/dist/cjs/stream.js.map +1 -0
- package/dist/cjs/streams.d.ts +61 -0
- package/dist/cjs/streams.d.ts.map +1 -0
- package/dist/cjs/streams.js +201 -0
- package/dist/cjs/streams.js.map +1 -0
- package/dist/cjs/types.d.ts +633 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +129 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils.d.ts +25 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +108 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/cjs/version.d.ts +8 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +11 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/accessTokens.d.ts +51 -0
- package/dist/esm/accessTokens.d.ts.map +1 -0
- package/dist/esm/accessTokens.js +123 -0
- package/dist/esm/accessTokens.js.map +1 -0
- package/dist/esm/auth/biscuit.d.ts +42 -0
- package/dist/esm/auth/biscuit.d.ts.map +1 -0
- package/dist/esm/auth/biscuit.js +68 -0
- package/dist/esm/auth/biscuit.js.map +1 -0
- package/dist/esm/auth/index.d.ts +5 -0
- package/dist/esm/auth/index.d.ts.map +1 -0
- package/dist/esm/auth/index.js +5 -0
- package/dist/esm/auth/index.js.map +1 -0
- package/dist/esm/auth/pki-auth.d.ts +60 -0
- package/dist/esm/auth/pki-auth.d.ts.map +1 -0
- package/dist/esm/auth/pki-auth.js +99 -0
- package/dist/esm/auth/pki-auth.js.map +1 -0
- package/dist/esm/auth/sign.d.ts +39 -0
- package/dist/esm/auth/sign.d.ts.map +1 -0
- package/dist/esm/auth/sign.js +125 -0
- package/dist/esm/auth/sign.js.map +1 -0
- package/dist/esm/auth/signing-key.d.ts +42 -0
- package/dist/esm/auth/signing-key.d.ts.map +1 -0
- package/dist/esm/auth/signing-key.js +62 -0
- package/dist/esm/auth/signing-key.js.map +1 -0
- package/dist/esm/basin.d.ts +33 -0
- package/dist/esm/basin.d.ts.map +1 -0
- package/dist/esm/basin.js +50 -0
- package/dist/esm/basin.js.map +1 -0
- package/dist/esm/basins.d.ts +62 -0
- package/dist/esm/basins.d.ts.map +1 -0
- package/dist/esm/basins.js +197 -0
- package/dist/esm/basins.js.map +1 -0
- package/dist/esm/batch-transform.d.ts +60 -0
- package/dist/esm/batch-transform.d.ts.map +1 -0
- package/dist/esm/batch-transform.js +167 -0
- package/dist/esm/batch-transform.js.map +1 -0
- package/dist/esm/common.d.ts +156 -0
- package/dist/esm/common.d.ts.map +1 -0
- package/dist/esm/common.js +49 -0
- package/dist/esm/common.js.map +1 -0
- package/dist/esm/endpoints.d.ts +63 -0
- package/dist/esm/endpoints.d.ts.map +1 -0
- package/dist/esm/endpoints.js +115 -0
- package/dist/esm/endpoints.js.map +1 -0
- package/dist/esm/error.d.ts +119 -0
- package/dist/esm/error.d.ts.map +1 -0
- package/dist/esm/error.js +358 -0
- package/dist/esm/error.js.map +1 -0
- package/dist/esm/generated/client/client.gen.d.ts +3 -0
- package/dist/esm/generated/client/client.gen.d.ts.map +1 -0
- package/dist/esm/generated/client/client.gen.js +205 -0
- package/dist/esm/generated/client/client.gen.js.map +1 -0
- package/dist/esm/generated/client/index.d.ts +9 -0
- package/dist/esm/generated/client/index.d.ts.map +1 -0
- package/dist/esm/generated/client/index.js +7 -0
- package/dist/esm/generated/client/index.js.map +1 -0
- package/dist/esm/generated/client/types.gen.d.ts +125 -0
- package/dist/esm/generated/client/types.gen.d.ts.map +1 -0
- package/dist/esm/generated/client/types.gen.js +3 -0
- package/dist/esm/generated/client/types.gen.js.map +1 -0
- package/dist/esm/generated/client/utils.gen.d.ts +34 -0
- package/dist/esm/generated/client/utils.gen.d.ts.map +1 -0
- package/dist/esm/generated/client/utils.gen.js +232 -0
- package/dist/esm/generated/client/utils.gen.js.map +1 -0
- package/dist/esm/generated/client.gen.d.ts +13 -0
- package/dist/esm/generated/client.gen.d.ts.map +1 -0
- package/dist/esm/generated/client.gen.js +6 -0
- package/dist/esm/generated/client.gen.js.map +1 -0
- package/dist/esm/generated/core/auth.gen.d.ts +19 -0
- package/dist/esm/generated/core/auth.gen.d.ts.map +1 -0
- package/dist/esm/generated/core/auth.gen.js +15 -0
- package/dist/esm/generated/core/auth.gen.js.map +1 -0
- package/dist/esm/generated/core/bodySerializer.gen.d.ts +26 -0
- package/dist/esm/generated/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/esm/generated/core/bodySerializer.gen.js +58 -0
- package/dist/esm/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/esm/generated/core/params.gen.d.ts +44 -0
- package/dist/esm/generated/core/params.gen.d.ts.map +1 -0
- package/dist/esm/generated/core/params.gen.js +101 -0
- package/dist/esm/generated/core/params.gen.js.map +1 -0
- package/dist/esm/generated/core/pathSerializer.gen.d.ts +34 -0
- package/dist/esm/generated/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/esm/generated/core/pathSerializer.gen.js +115 -0
- package/dist/esm/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/esm/generated/core/queryKeySerializer.gen.d.ts +19 -0
- package/dist/esm/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/esm/generated/core/queryKeySerializer.gen.js +100 -0
- package/dist/esm/generated/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/esm/generated/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/esm/generated/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/esm/generated/core/serverSentEvents.gen.js +136 -0
- package/dist/esm/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/esm/generated/core/types.gen.d.ts +79 -0
- package/dist/esm/generated/core/types.gen.d.ts.map +1 -0
- package/dist/esm/generated/core/types.gen.js +3 -0
- package/dist/esm/generated/core/types.gen.js.map +1 -0
- package/dist/esm/generated/core/utils.gen.d.ts +20 -0
- package/dist/esm/generated/core/utils.gen.d.ts.map +1 -0
- package/dist/esm/generated/core/utils.gen.js +88 -0
- package/dist/esm/generated/core/utils.gen.js.map +1 -0
- package/dist/esm/generated/index.d.ts +3 -0
- package/dist/esm/generated/index.d.ts.map +1 -0
- package/dist/esm/generated/index.js +3 -0
- package/dist/esm/generated/index.js.map +1 -0
- package/dist/esm/generated/proto/s2.d.ts +250 -0
- package/dist/esm/generated/proto/s2.d.ts.map +1 -0
- package/dist/esm/generated/proto/s2.js +423 -0
- package/dist/esm/generated/proto/s2.js.map +1 -0
- package/dist/esm/generated/sdk.gen.d.ts +100 -0
- package/dist/esm/generated/sdk.gen.d.ts.map +1 -0
- package/dist/esm/generated/sdk.gen.js +350 -0
- package/dist/esm/generated/sdk.gen.js.map +1 -0
- package/dist/esm/generated/types.gen.d.ts +1064 -0
- package/dist/esm/generated/types.gen.d.ts.map +1 -0
- package/dist/esm/generated/types.gen.js +3 -0
- package/dist/esm/generated/types.gen.js.map +1 -0
- package/dist/esm/index.d.ts +42 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +47 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/case-transform.d.ts +59 -0
- package/dist/esm/internal/case-transform.d.ts.map +1 -0
- package/dist/esm/internal/case-transform.js +76 -0
- package/dist/esm/internal/case-transform.js.map +1 -0
- package/dist/esm/internal/mappers.d.ts +51 -0
- package/dist/esm/internal/mappers.d.ts.map +1 -0
- package/dist/esm/internal/mappers.js +218 -0
- package/dist/esm/internal/mappers.js.map +1 -0
- package/dist/esm/internal/sdk-types.d.ts +127 -0
- package/dist/esm/internal/sdk-types.d.ts.map +1 -0
- package/dist/esm/internal/sdk-types.js +8 -0
- package/dist/esm/internal/sdk-types.js.map +1 -0
- package/dist/esm/lib/base64.d.ts +12 -0
- package/dist/esm/lib/base64.d.ts.map +1 -0
- package/dist/esm/lib/base64.js +165 -0
- package/dist/esm/lib/base64.js.map +1 -0
- package/dist/esm/lib/event-stream.d.ts +26 -0
- package/dist/esm/lib/event-stream.d.ts.map +1 -0
- package/dist/esm/lib/event-stream.js +150 -0
- package/dist/esm/lib/event-stream.js.map +1 -0
- package/dist/esm/lib/paginate.d.ts +61 -0
- package/dist/esm/lib/paginate.d.ts.map +1 -0
- package/dist/esm/lib/paginate.js +48 -0
- package/dist/esm/lib/paginate.js.map +1 -0
- package/dist/esm/lib/redacted.d.ts +17 -0
- package/dist/esm/lib/redacted.d.ts.map +1 -0
- package/dist/esm/lib/redacted.js +28 -0
- package/dist/esm/lib/redacted.js.map +1 -0
- package/dist/esm/lib/result.d.ts +57 -0
- package/dist/esm/lib/result.d.ts.map +1 -0
- package/dist/esm/lib/result.js +37 -0
- package/dist/esm/lib/result.js.map +1 -0
- package/dist/esm/lib/retry.d.ts +167 -0
- package/dist/esm/lib/retry.d.ts.map +1 -0
- package/dist/esm/lib/retry.js +1003 -0
- package/dist/esm/lib/retry.js.map +1 -0
- package/dist/esm/lib/stream/factory.d.ts +14 -0
- package/dist/esm/lib/stream/factory.d.ts.map +1 -0
- package/dist/esm/lib/stream/factory.js +32 -0
- package/dist/esm/lib/stream/factory.js.map +1 -0
- package/dist/esm/lib/stream/runtime.d.ts +27 -0
- package/dist/esm/lib/stream/runtime.d.ts.map +1 -0
- package/dist/esm/lib/stream/runtime.js +71 -0
- package/dist/esm/lib/stream/runtime.js.map +1 -0
- package/dist/esm/lib/stream/transport/fetch/index.d.ts +64 -0
- package/dist/esm/lib/stream/transport/fetch/index.d.ts.map +1 -0
- package/dist/esm/lib/stream/transport/fetch/index.js +456 -0
- package/dist/esm/lib/stream/transport/fetch/index.js.map +1 -0
- package/dist/esm/lib/stream/transport/fetch/shared.d.ts +11 -0
- package/dist/esm/lib/stream/transport/fetch/shared.d.ts.map +1 -0
- package/dist/esm/lib/stream/transport/fetch/shared.js +114 -0
- package/dist/esm/lib/stream/transport/fetch/shared.js.map +1 -0
- package/dist/esm/lib/stream/transport/proto.d.ts +9 -0
- package/dist/esm/lib/stream/transport/proto.d.ts.map +1 -0
- package/dist/esm/lib/stream/transport/proto.js +110 -0
- package/dist/esm/lib/stream/transport/proto.js.map +1 -0
- package/dist/esm/lib/stream/transport/s2s/framing.d.ts +47 -0
- package/dist/esm/lib/stream/transport/s2s/framing.d.ts.map +1 -0
- package/dist/esm/lib/stream/transport/s2s/framing.js +118 -0
- package/dist/esm/lib/stream/transport/s2s/framing.js.map +1 -0
- package/dist/esm/lib/stream/transport/s2s/index.d.ts +24 -0
- package/dist/esm/lib/stream/transport/s2s/index.d.ts.map +1 -0
- package/dist/esm/lib/stream/transport/s2s/index.js +819 -0
- package/dist/esm/lib/stream/transport/s2s/index.js.map +1 -0
- package/dist/esm/lib/stream/types.d.ts +199 -0
- package/dist/esm/lib/stream/types.d.ts.map +1 -0
- package/dist/esm/lib/stream/types.js +18 -0
- package/dist/esm/lib/stream/types.js.map +1 -0
- package/dist/esm/metrics.d.ts +46 -0
- package/dist/esm/metrics.d.ts.map +1 -0
- package/dist/esm/metrics.js +122 -0
- package/dist/esm/metrics.js.map +1 -0
- package/dist/esm/producer.d.ts +82 -0
- package/dist/esm/producer.d.ts.map +1 -0
- package/dist/esm/producer.js +300 -0
- package/dist/esm/producer.js.map +1 -0
- package/dist/esm/s2.d.ts +41 -0
- package/dist/esm/s2.d.ts.map +1 -0
- package/dist/esm/s2.js +115 -0
- package/dist/esm/s2.js.map +1 -0
- package/dist/esm/stream.d.ts +78 -0
- package/dist/esm/stream.d.ts.map +1 -0
- package/dist/esm/stream.js +172 -0
- package/dist/esm/stream.js.map +1 -0
- package/dist/esm/streams.d.ts +61 -0
- package/dist/esm/streams.d.ts.map +1 -0
- package/dist/esm/streams.js +197 -0
- package/dist/esm/streams.js.map +1 -0
- package/dist/esm/types.d.ts +633 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +126 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils.d.ts +25 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +103 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/version.d.ts +8 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +8 -0
- package/dist/esm/version.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { SigningKey } from "./signing-key.js";
|
|
2
|
+
import type { SignHeadersOptions } from "./sign.js";
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for PKI authentication.
|
|
5
|
+
*
|
|
6
|
+
* Two modes are supported:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Token + SigningKey mode** (for regular operations): Provide `token` and `signingKey`.
|
|
9
|
+
* Use this for basins, streams, and other regular operations.
|
|
10
|
+
*
|
|
11
|
+
* 2. **Root key mode** (for all operations): Provide only `rootKey`.
|
|
12
|
+
* The SDK generates tokens locally (signed by root key, bound to a generated client key).
|
|
13
|
+
*/
|
|
14
|
+
export type PkiAuthConfig = {
|
|
15
|
+
/** Biscuit token issued with the signing key's public key */
|
|
16
|
+
token?: string;
|
|
17
|
+
/** P256 signing key that matches the token's bound public key */
|
|
18
|
+
signingKey?: SigningKey;
|
|
19
|
+
/** P256 private key as base58-encoded 32 bytes (root key) */
|
|
20
|
+
rootKey?: string;
|
|
21
|
+
/** Token expiry in seconds (default: 3600 = 1 hour) */
|
|
22
|
+
tokenExpiresIn?: number;
|
|
23
|
+
/** Signature expiry in seconds (default: 300 = 5 minutes) */
|
|
24
|
+
signatureExpiresIn?: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Auth mode indicates what operations are allowed.
|
|
28
|
+
*/
|
|
29
|
+
export type PkiAuthMode = "root" | "token";
|
|
30
|
+
export type PkiAuthContext = {
|
|
31
|
+
/** The auth mode */
|
|
32
|
+
mode: PkiAuthMode;
|
|
33
|
+
/** The signing key's public key (base58) */
|
|
34
|
+
publicKey: string;
|
|
35
|
+
/** Get current token */
|
|
36
|
+
getToken: () => Promise<string>;
|
|
37
|
+
/** Sign a request with RFC 9421 HTTP message signatures */
|
|
38
|
+
signRequest: (request: Request) => Promise<Request>;
|
|
39
|
+
/** Sign headers with RFC 9421 HTTP message signatures */
|
|
40
|
+
signHeaders: (options: Omit<SignHeadersOptions, "signingKey" | "expiresIn">) => Promise<void>;
|
|
41
|
+
/** The signing key (for token mode, can be used to issue sub-tokens) */
|
|
42
|
+
signingKey: SigningKey;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Creates a PKI auth context.
|
|
46
|
+
*
|
|
47
|
+
* @example Token + SigningKey mode (for regular operations)
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const auth = createPkiAuth({ token: accessToken, signingKey });
|
|
50
|
+
* const s2 = new S2({ authContext: auth, endpoints: { ... } });
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @example Root key mode (for all operations)
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const auth = createPkiAuth({ rootKey: "..." });
|
|
56
|
+
* const s2 = new S2({ authContext: auth, endpoints: { ... } });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function createPkiAuth(config: PkiAuthConfig): PkiAuthContext;
|
|
60
|
+
//# sourceMappingURL=pki-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pki-auth.d.ts","sourceRoot":"","sources":["../../../src/auth/pki-auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,GAAG;IAC3B,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG;IAC5B,oBAAoB;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,2DAA2D;IAC3D,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,yDAAyD;IACzD,WAAW,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,WAAW,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,wEAAwE;IACxE,UAAU,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAcnE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { createBiscuitToken } from "./biscuit.js";
|
|
2
|
+
import { signRequest, signHeaders } from "./sign.js";
|
|
3
|
+
import { SigningKey } from "./signing-key.js";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a PKI auth context.
|
|
6
|
+
*
|
|
7
|
+
* @example Token + SigningKey mode (for regular operations)
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const auth = createPkiAuth({ token: accessToken, signingKey });
|
|
10
|
+
* const s2 = new S2({ authContext: auth, endpoints: { ... } });
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @example Root key mode (for all operations)
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const auth = createPkiAuth({ rootKey: "..." });
|
|
16
|
+
* const s2 = new S2({ authContext: auth, endpoints: { ... } });
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function createPkiAuth(config) {
|
|
20
|
+
const { signatureExpiresIn = 300 } = config;
|
|
21
|
+
if (config.token && config.signingKey) {
|
|
22
|
+
return createTokenAuth(config.token, config.signingKey, signatureExpiresIn);
|
|
23
|
+
}
|
|
24
|
+
else if (config.rootKey) {
|
|
25
|
+
return createRootKeyAuth(config.rootKey, config.tokenExpiresIn ?? 3600, signatureExpiresIn);
|
|
26
|
+
}
|
|
27
|
+
else if (config.token && !config.signingKey) {
|
|
28
|
+
throw new Error("PKI auth: token provided without signingKey");
|
|
29
|
+
}
|
|
30
|
+
else if (!config.token && config.signingKey) {
|
|
31
|
+
throw new Error("PKI auth: signingKey provided without token");
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
throw new Error("PKI auth: either (token + signingKey) or rootKey required");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function createTokenAuth(token, signingKey, signatureExpiresIn) {
|
|
38
|
+
const publicKey = signingKey.publicKeyBase58();
|
|
39
|
+
function isAccessTokenEndpoint(path) {
|
|
40
|
+
return /^\/v\d+\/access-tokens(\/[^\/]+)?$/.test(path);
|
|
41
|
+
}
|
|
42
|
+
function extractPath(urlOrRequest) {
|
|
43
|
+
const url = typeof urlOrRequest === "string" ? new URL(urlOrRequest) : new URL(urlOrRequest.url);
|
|
44
|
+
return url.pathname;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
mode: "token",
|
|
48
|
+
publicKey,
|
|
49
|
+
signingKey,
|
|
50
|
+
async getToken() {
|
|
51
|
+
return token;
|
|
52
|
+
},
|
|
53
|
+
async signRequest(request) {
|
|
54
|
+
const path = extractPath(request);
|
|
55
|
+
if (isAccessTokenEndpoint(path)) {
|
|
56
|
+
throw new Error("Token mode cannot be used for access token endpoints. Use root key mode instead.");
|
|
57
|
+
}
|
|
58
|
+
return signRequest({ request, signingKey, expiresIn: signatureExpiresIn });
|
|
59
|
+
},
|
|
60
|
+
async signHeaders(options) {
|
|
61
|
+
const path = extractPath(options.url);
|
|
62
|
+
if (isAccessTokenEndpoint(path)) {
|
|
63
|
+
throw new Error("Token mode cannot be used for access token endpoints. Use root key mode instead.");
|
|
64
|
+
}
|
|
65
|
+
return signHeaders({ ...options, signingKey, expiresIn: signatureExpiresIn });
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function createRootKeyAuth(rootKey, tokenExpiresIn, signatureExpiresIn) {
|
|
70
|
+
const clientKey = SigningKey.generate();
|
|
71
|
+
const clientPublicKey = clientKey.publicKeyBase58();
|
|
72
|
+
let cachedToken = null;
|
|
73
|
+
let tokenExpiry = 0;
|
|
74
|
+
async function getToken() {
|
|
75
|
+
const now = Date.now();
|
|
76
|
+
if (!cachedToken || now >= tokenExpiry - 60000) {
|
|
77
|
+
cachedToken = await createBiscuitToken({
|
|
78
|
+
privateKey: rootKey,
|
|
79
|
+
publicKey: clientPublicKey,
|
|
80
|
+
expiresIn: tokenExpiresIn,
|
|
81
|
+
});
|
|
82
|
+
tokenExpiry = now + tokenExpiresIn * 1000;
|
|
83
|
+
}
|
|
84
|
+
return cachedToken;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
mode: "root",
|
|
88
|
+
publicKey: clientPublicKey,
|
|
89
|
+
signingKey: clientKey,
|
|
90
|
+
getToken,
|
|
91
|
+
async signRequest(request) {
|
|
92
|
+
return signRequest({ request, signingKey: clientKey, expiresIn: signatureExpiresIn });
|
|
93
|
+
},
|
|
94
|
+
async signHeaders(options) {
|
|
95
|
+
return signHeaders({ ...options, signingKey: clientKey, expiresIn: signatureExpiresIn });
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=pki-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pki-auth.js","sourceRoot":"","sources":["../../../src/auth/pki-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { SigningKey } from "./signing-key.js";
|
|
2
|
+
export type SignRequestOptions = {
|
|
3
|
+
/** Request to sign */
|
|
4
|
+
request: Request;
|
|
5
|
+
/** P256 signing key */
|
|
6
|
+
signingKey: SigningKey;
|
|
7
|
+
/** Duration until signature expires (default: 300 seconds) */
|
|
8
|
+
expiresIn?: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Signs a Request using RFC 9421 HTTP Message Signatures with a P256 key.
|
|
12
|
+
*
|
|
13
|
+
* Components signed: @method, @path, @authority, authorization, content-digest (if body present)
|
|
14
|
+
*
|
|
15
|
+
* @returns A new Request with signature headers added
|
|
16
|
+
*/
|
|
17
|
+
export declare function signRequest(options: SignRequestOptions): Promise<Request>;
|
|
18
|
+
export type SignHeadersOptions = {
|
|
19
|
+
/** HTTP method */
|
|
20
|
+
method: string;
|
|
21
|
+
/** Full URL */
|
|
22
|
+
url: string;
|
|
23
|
+
/** Headers to sign (will be mutated to add signature headers) */
|
|
24
|
+
headers: Record<string, string>;
|
|
25
|
+
/** P256 signing key */
|
|
26
|
+
signingKey: SigningKey;
|
|
27
|
+
/** Request body (optional, for content-digest) */
|
|
28
|
+
body?: Uint8Array;
|
|
29
|
+
/** Duration until signature expires (default: 300 seconds) */
|
|
30
|
+
expiresIn?: number;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Signs HTTP headers using RFC 9421 HTTP Message Signatures with a P256 key.
|
|
34
|
+
* Mutates the headers object to add signature headers.
|
|
35
|
+
*
|
|
36
|
+
* Components signed: @method, @path, @authority, authorization, content-digest (if body present)
|
|
37
|
+
*/
|
|
38
|
+
export declare function signHeaders(options: SignHeadersOptions): Promise<void>;
|
|
39
|
+
//# sourceMappingURL=sign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../../src/auth/sign.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAAG;IAChC,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAoDF;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8D/E;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uBAAuB;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,kDAAkD;IAClD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B5E"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { p256 } from "@noble/curves/nist.js";
|
|
2
|
+
import { sha256 } from "@noble/hashes/sha256";
|
|
3
|
+
import { base64 } from "@scure/base";
|
|
4
|
+
import { SigningKey } from "./signing-key.js";
|
|
5
|
+
/**
|
|
6
|
+
* Build the signature base string per RFC 9421.
|
|
7
|
+
* The @signature-params line uses the same parameter order as the Rust httpsig crate:
|
|
8
|
+
* created, alg, keyid (to ensure compatibility with server verification).
|
|
9
|
+
*/
|
|
10
|
+
function buildSignatureBase(method, path, authority, headers, components, created, keyid) {
|
|
11
|
+
const lines = [];
|
|
12
|
+
for (const component of components) {
|
|
13
|
+
let value;
|
|
14
|
+
if (component === "@method") {
|
|
15
|
+
value = method.toUpperCase();
|
|
16
|
+
}
|
|
17
|
+
else if (component === "@path") {
|
|
18
|
+
value = path;
|
|
19
|
+
}
|
|
20
|
+
else if (component === "@authority") {
|
|
21
|
+
value = authority;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
// Regular header
|
|
25
|
+
value = headers.get(component) ?? "";
|
|
26
|
+
}
|
|
27
|
+
lines.push(`"${component}": ${value}`);
|
|
28
|
+
}
|
|
29
|
+
// Build signature-params with Rust httpsig order: created, alg, keyid
|
|
30
|
+
const componentsList = components.map((c) => `"${c}"`).join(" ");
|
|
31
|
+
const signatureParams = `(${componentsList});created=${created};alg="ecdsa-p256-sha256";keyid="${keyid}"`;
|
|
32
|
+
lines.push(`"@signature-params": ${signatureParams}`);
|
|
33
|
+
return lines.join("\n");
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Extract authority from URL, stripping default ports per RFC 9421.
|
|
37
|
+
*/
|
|
38
|
+
function getAuthority(url) {
|
|
39
|
+
const port = url.port ? parseInt(url.port, 10) : null;
|
|
40
|
+
if (port && ![80, 443].includes(port)) {
|
|
41
|
+
return `${url.hostname}:${port}`;
|
|
42
|
+
}
|
|
43
|
+
return url.hostname;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Signs a Request using RFC 9421 HTTP Message Signatures with a P256 key.
|
|
47
|
+
*
|
|
48
|
+
* Components signed: @method, @path, @authority, authorization, content-digest (if body present)
|
|
49
|
+
*
|
|
50
|
+
* @returns A new Request with signature headers added
|
|
51
|
+
*/
|
|
52
|
+
export async function signRequest(options) {
|
|
53
|
+
const { request, signingKey } = options;
|
|
54
|
+
// Clone request headers
|
|
55
|
+
const headers = new Headers(request.headers);
|
|
56
|
+
// Determine components to sign
|
|
57
|
+
const components = ["@method", "@path", "@authority", "authorization"];
|
|
58
|
+
// Compute content-digest if body exists
|
|
59
|
+
const body = await request.clone().arrayBuffer();
|
|
60
|
+
if (body.byteLength > 0) {
|
|
61
|
+
const hash = sha256(new Uint8Array(body));
|
|
62
|
+
const hashBase64 = base64.encode(hash);
|
|
63
|
+
headers.set("Content-Digest", `sha-256=:${hashBase64}:`);
|
|
64
|
+
components.push("content-digest");
|
|
65
|
+
}
|
|
66
|
+
// Extract URL components
|
|
67
|
+
// Per RFC 9421: @path is the path without query string
|
|
68
|
+
const url = new URL(request.url);
|
|
69
|
+
const path = url.pathname;
|
|
70
|
+
const authority = getAuthority(url);
|
|
71
|
+
// Get signing parameters
|
|
72
|
+
const created = Math.floor(Date.now() / 1000);
|
|
73
|
+
const keyid = signingKey.publicKeyBase58();
|
|
74
|
+
const privateKeyBytes = signingKey.getPrivateKeyBytes();
|
|
75
|
+
// Build signature base (RFC 9421 format, Rust httpsig-compatible param order)
|
|
76
|
+
const signatureBase = buildSignatureBase(request.method, path, authority, headers, components, created, keyid);
|
|
77
|
+
// Sign the signature base
|
|
78
|
+
const signatureBytes = p256.sign(new TextEncoder().encode(signatureBase), privateKeyBytes, { lowS: true });
|
|
79
|
+
const signatureB64 = base64.encode(signatureBytes);
|
|
80
|
+
// Build signature-input header (same param order as signature base)
|
|
81
|
+
const componentsList = components.map((c) => `"${c}"`).join(" ");
|
|
82
|
+
const signatureInput = `sig1=(${componentsList});created=${created};alg="ecdsa-p256-sha256";keyid="${keyid}"`;
|
|
83
|
+
// Apply signature headers
|
|
84
|
+
headers.set("Signature", `sig1=:${signatureB64}:`);
|
|
85
|
+
headers.set("Signature-Input", signatureInput);
|
|
86
|
+
// Create new request with signed headers
|
|
87
|
+
return new Request(request.url, {
|
|
88
|
+
body: body.byteLength > 0 ? body : undefined,
|
|
89
|
+
headers,
|
|
90
|
+
method: request.method,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Signs HTTP headers using RFC 9421 HTTP Message Signatures with a P256 key.
|
|
95
|
+
* Mutates the headers object to add signature headers.
|
|
96
|
+
*
|
|
97
|
+
* Components signed: @method, @path, @authority, authorization, content-digest (if body present)
|
|
98
|
+
*/
|
|
99
|
+
export async function signHeaders(options) {
|
|
100
|
+
const { method, url, headers, signingKey, body, expiresIn = 300 } = options;
|
|
101
|
+
// Build headers (skip pseudo-headers for HTTP/2)
|
|
102
|
+
const requestHeaders = new Headers();
|
|
103
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
104
|
+
if (!key.startsWith(":")) {
|
|
105
|
+
requestHeaders.set(key, value);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const request = new Request(url, {
|
|
109
|
+
method,
|
|
110
|
+
headers: requestHeaders,
|
|
111
|
+
body: body && body.byteLength > 0 ? body.slice().buffer : undefined,
|
|
112
|
+
});
|
|
113
|
+
const signedRequest = await signRequest({ request, signingKey, expiresIn });
|
|
114
|
+
// Extract signature headers and apply to original headers object
|
|
115
|
+
const signature = signedRequest.headers.get("Signature");
|
|
116
|
+
const signatureInput = signedRequest.headers.get("Signature-Input");
|
|
117
|
+
const contentDigest = signedRequest.headers.get("Content-Digest");
|
|
118
|
+
if (signature)
|
|
119
|
+
headers["signature"] = signature;
|
|
120
|
+
if (signatureInput)
|
|
121
|
+
headers["signature-input"] = signatureInput;
|
|
122
|
+
if (contentDigest)
|
|
123
|
+
headers["content-digest"] = contentDigest;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=sign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../../../src/auth/sign.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P-256 signing key for RFC 9421 HTTP message signatures.
|
|
3
|
+
*
|
|
4
|
+
* When configured, the SDK will sign every HTTP request per RFC 9421,
|
|
5
|
+
* binding the request to both the bearer token and this cryptographic key.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Generate a new key
|
|
10
|
+
* const key = SigningKey.generate();
|
|
11
|
+
* console.log("Public key:", key.publicKeyBase58());
|
|
12
|
+
*
|
|
13
|
+
* // Import from base58
|
|
14
|
+
* const key = SigningKey.fromBase58("your-base58-encoded-private-key");
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare class SigningKey {
|
|
18
|
+
private readonly privateKeyBytes;
|
|
19
|
+
private constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Generate a new random P-256 signing key.
|
|
22
|
+
*/
|
|
23
|
+
static generate(): SigningKey;
|
|
24
|
+
/**
|
|
25
|
+
* Create a signing key from a base58-encoded 32-byte private key.
|
|
26
|
+
*/
|
|
27
|
+
static fromBase58(encoded: string): SigningKey;
|
|
28
|
+
/**
|
|
29
|
+
* Export the private key as a base58-encoded string.
|
|
30
|
+
*/
|
|
31
|
+
toBase58(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Get the public key as a base58-encoded compressed point (33 bytes).
|
|
34
|
+
*/
|
|
35
|
+
publicKeyBase58(): string;
|
|
36
|
+
/**
|
|
37
|
+
* Get the raw private key bytes (for internal use).
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
getPrivateKeyBytes(): Uint8Array;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=signing-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-key.d.ts","sourceRoot":"","sources":["../../../src/auth/signing-key.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAa;IAE7C,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,QAAQ,IAAI,UAAU;IAK7B;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAU9C;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,eAAe,IAAI,MAAM;IAKzB;;;OAGG;IACH,kBAAkB,IAAI,UAAU;CAGhC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { p256 } from "@noble/curves/nist.js";
|
|
2
|
+
import { base58 } from "@scure/base";
|
|
3
|
+
/**
|
|
4
|
+
* P-256 signing key for RFC 9421 HTTP message signatures.
|
|
5
|
+
*
|
|
6
|
+
* When configured, the SDK will sign every HTTP request per RFC 9421,
|
|
7
|
+
* binding the request to both the bearer token and this cryptographic key.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Generate a new key
|
|
12
|
+
* const key = SigningKey.generate();
|
|
13
|
+
* console.log("Public key:", key.publicKeyBase58());
|
|
14
|
+
*
|
|
15
|
+
* // Import from base58
|
|
16
|
+
* const key = SigningKey.fromBase58("your-base58-encoded-private-key");
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export class SigningKey {
|
|
20
|
+
privateKeyBytes;
|
|
21
|
+
constructor(privateKeyBytes) {
|
|
22
|
+
this.privateKeyBytes = privateKeyBytes;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate a new random P-256 signing key.
|
|
26
|
+
*/
|
|
27
|
+
static generate() {
|
|
28
|
+
const privateKey = p256.utils.randomSecretKey();
|
|
29
|
+
return new SigningKey(privateKey);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a signing key from a base58-encoded 32-byte private key.
|
|
33
|
+
*/
|
|
34
|
+
static fromBase58(encoded) {
|
|
35
|
+
const privateKey = base58.decode(encoded);
|
|
36
|
+
if (privateKey.length !== 32) {
|
|
37
|
+
throw new Error(`Invalid signing key: expected 32 bytes, got ${privateKey.length}`);
|
|
38
|
+
}
|
|
39
|
+
return new SigningKey(privateKey);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Export the private key as a base58-encoded string.
|
|
43
|
+
*/
|
|
44
|
+
toBase58() {
|
|
45
|
+
return base58.encode(this.privateKeyBytes);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get the public key as a base58-encoded compressed point (33 bytes).
|
|
49
|
+
*/
|
|
50
|
+
publicKeyBase58() {
|
|
51
|
+
const publicKey = p256.getPublicKey(this.privateKeyBytes, true);
|
|
52
|
+
return base58.encode(publicKey);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get the raw private key bytes (for internal use).
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
getPrivateKeyBytes() {
|
|
59
|
+
return this.privateKeyBytes;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=signing-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-key.js","sourceRoot":"","sources":["../../../src/auth/signing-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,UAAU;IACL,eAAe,CAAa;IAE7C,YAAoB,eAA2B;QAC9C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAChD,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,OAAe;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACd,+CAA+C,UAAU,CAAC,MAAM,EAAE,CAClE,CAAC;QACH,CAAC;QACD,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,QAAQ;QACP,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,eAAe;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,kBAAkB;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC7B,CAAC;CACD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type AuthProvider, type RetryConfig } from "./common.js";
|
|
2
|
+
import type { SessionTransports } from "./lib/stream/types.js";
|
|
3
|
+
import { S2Stream } from "./stream.js";
|
|
4
|
+
import { S2Streams } from "./streams.js";
|
|
5
|
+
export declare class S2Basin {
|
|
6
|
+
private readonly client;
|
|
7
|
+
private readonly transportConfig;
|
|
8
|
+
private readonly retryConfig?;
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly streams: S2Streams;
|
|
11
|
+
/**
|
|
12
|
+
* Create a basin-scoped client that talks to `https://{basin}.b.aws.s2.dev/v1`.
|
|
13
|
+
*
|
|
14
|
+
* Use this to work with streams inside a single basin.
|
|
15
|
+
* @param name Basin name
|
|
16
|
+
* @param options Configuration for the basin-scoped client
|
|
17
|
+
*/
|
|
18
|
+
constructor(name: string, options: {
|
|
19
|
+
authProvider: AuthProvider;
|
|
20
|
+
baseUrl: string;
|
|
21
|
+
includeBasinHeader: boolean;
|
|
22
|
+
retryConfig?: RetryConfig;
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Create a stream-scoped helper bound to `this` basin.
|
|
26
|
+
* @param name Stream name
|
|
27
|
+
*/
|
|
28
|
+
stream(name: string, options?: StreamOptions): S2Stream;
|
|
29
|
+
}
|
|
30
|
+
export interface StreamOptions {
|
|
31
|
+
forceTransport?: SessionTransports;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=basin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basin.d.ts","sourceRoot":"","sources":["../../src/basin.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAG7F,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,qBAAa,OAAO;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;IAC3C,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,SAAS,CAAC;IAEnC;;;;;;OAMG;gBAEF,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACR,YAAY,EAAE,YAAY,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;KAC1B;IAuBF;;;OAGG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa;CAWnD;AAED,MAAM,WAAW,aAAa;IAC7B,cAAc,CAAC,EAAE,iBAAiB,CAAC;CACnC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createAuthenticatedClient } from "./common.js";
|
|
2
|
+
import { canSetUserAgentHeader, DEFAULT_USER_AGENT } from "./lib/stream/runtime.js";
|
|
3
|
+
import { S2Stream } from "./stream.js";
|
|
4
|
+
import { S2Streams } from "./streams.js";
|
|
5
|
+
export class S2Basin {
|
|
6
|
+
client;
|
|
7
|
+
transportConfig;
|
|
8
|
+
retryConfig;
|
|
9
|
+
name;
|
|
10
|
+
streams;
|
|
11
|
+
/**
|
|
12
|
+
* Create a basin-scoped client that talks to `https://{basin}.b.aws.s2.dev/v1`.
|
|
13
|
+
*
|
|
14
|
+
* Use this to work with streams inside a single basin.
|
|
15
|
+
* @param name Basin name
|
|
16
|
+
* @param options Configuration for the basin-scoped client
|
|
17
|
+
*/
|
|
18
|
+
constructor(name, options) {
|
|
19
|
+
this.name = name;
|
|
20
|
+
this.retryConfig = options.retryConfig;
|
|
21
|
+
this.transportConfig = {
|
|
22
|
+
baseUrl: options.baseUrl,
|
|
23
|
+
authProvider: options.authProvider,
|
|
24
|
+
basinName: options.includeBasinHeader ? name : undefined,
|
|
25
|
+
connectionTimeoutMillis: options.retryConfig?.connectionTimeoutMillis,
|
|
26
|
+
requestTimeoutMillis: options.retryConfig?.requestTimeoutMillis,
|
|
27
|
+
retry: options.retryConfig,
|
|
28
|
+
};
|
|
29
|
+
const headers = {};
|
|
30
|
+
if (options.includeBasinHeader) {
|
|
31
|
+
headers["s2-basin"] = name;
|
|
32
|
+
}
|
|
33
|
+
if (canSetUserAgentHeader()) {
|
|
34
|
+
headers["user-agent"] = DEFAULT_USER_AGENT;
|
|
35
|
+
}
|
|
36
|
+
this.client = createAuthenticatedClient(options.baseUrl, options.authProvider, headers);
|
|
37
|
+
this.streams = new S2Streams(this.client, this.retryConfig);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a stream-scoped helper bound to `this` basin.
|
|
41
|
+
* @param name Stream name
|
|
42
|
+
*/
|
|
43
|
+
stream(name, options) {
|
|
44
|
+
return new S2Stream(name, this.client, {
|
|
45
|
+
...this.transportConfig,
|
|
46
|
+
forceTransport: options?.forceTransport,
|
|
47
|
+
}, this.retryConfig);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=basin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basin.js","sourceRoot":"","sources":["../../src/basin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAuC,MAAM,aAAa,CAAC;AAE7F,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,OAAO,OAAO;IACF,MAAM,CAAS;IACf,eAAe,CAAkB;IACjC,WAAW,CAAe;IAC3B,IAAI,CAAS;IACb,OAAO,CAAY;IAEnC;;;;;;OAMG;IACH,YACC,IAAY,EACZ,OAKC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,eAAe,GAAG;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,SAAS,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACxD,uBAAuB,EAAE,OAAO,CAAC,WAAW,EAAE,uBAAuB;YACrE,oBAAoB,EAAE,OAAO,CAAC,WAAW,EAAE,oBAAoB;YAC/D,KAAK,EAAE,OAAO,CAAC,WAAW;SAC1B,CAAC;QACF,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAChC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,qBAAqB,EAAE,EAAE,CAAC;YAC7B,OAAO,CAAC,YAAY,CAAC,GAAG,kBAAkB,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,IAAY,EAAE,OAAuB;QAClD,OAAO,IAAI,QAAQ,CAClB,IAAI,EACJ,IAAI,CAAC,MAAM,EACX;YACC,GAAG,IAAI,CAAC,eAAe;YACvB,cAAc,EAAE,OAAO,EAAE,cAAc;SACvC,EACD,IAAI,CAAC,WAAW,CAChB,CAAC;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { RetryConfig, S2RequestOptions } from "./common.js";
|
|
2
|
+
import type { Client } from "./generated/client/types.gen.js";
|
|
3
|
+
import type * as Types from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Account-scoped helper for listing, creating, deleting, and reconfiguring basins.
|
|
6
|
+
*
|
|
7
|
+
* Retrieve this via {@link S2.basins}. Each method retries according to the client-level retry config.
|
|
8
|
+
*/
|
|
9
|
+
export declare class S2Basins {
|
|
10
|
+
private readonly client;
|
|
11
|
+
private readonly retryConfig;
|
|
12
|
+
constructor(client: Client, retryConfig: RetryConfig);
|
|
13
|
+
/**
|
|
14
|
+
* List basins.
|
|
15
|
+
*
|
|
16
|
+
* @param args.prefix Return basins whose names start with the given prefix
|
|
17
|
+
* @param args.startAfter Name to start after (for pagination)
|
|
18
|
+
* @param args.limit Max results (up to 1000)
|
|
19
|
+
*/
|
|
20
|
+
list(args?: Types.ListBasinsInput, options?: S2RequestOptions): Promise<Types.ListBasinsResponse>;
|
|
21
|
+
/**
|
|
22
|
+
* List all basins with automatic pagination.
|
|
23
|
+
* Returns a lazy async iterable that fetches pages as needed.
|
|
24
|
+
*
|
|
25
|
+
* @param args - Optional options: `prefix` to filter by name prefix, `limit` for max results per page, `includeDeleted` to include basins pending deletion
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* for await (const basin of s2.basins.listAll({ prefix: "my-" })) {
|
|
30
|
+
* console.log(basin.name);
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
listAll(args?: Types.ListAllBasinsInput, options?: S2RequestOptions): AsyncIterable<Types.BasinInfo>;
|
|
35
|
+
/**
|
|
36
|
+
* Create a basin.
|
|
37
|
+
*
|
|
38
|
+
* @param args.basin Globally unique basin name (8-48 chars, lowercase letters, numbers, hyphens; cannot begin or end with a hyphen)
|
|
39
|
+
* @param args.config Optional basin configuration (e.g. defaultStreamConfig)
|
|
40
|
+
* @param args.scope Basin scope
|
|
41
|
+
*/
|
|
42
|
+
create(args: Types.CreateBasinInput, options?: S2RequestOptions): Promise<Types.CreateBasinResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Get basin configuration.
|
|
45
|
+
*
|
|
46
|
+
* @param args.basin Basin name
|
|
47
|
+
*/
|
|
48
|
+
getConfig(args: Types.GetBasinConfigInput, options?: S2RequestOptions): Promise<Types.BasinConfig>;
|
|
49
|
+
/**
|
|
50
|
+
* Delete a basin.
|
|
51
|
+
*
|
|
52
|
+
* @param args.basin Basin name
|
|
53
|
+
*/
|
|
54
|
+
delete(args: Types.DeleteBasinInput, options?: S2RequestOptions): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Reconfigure a basin.
|
|
57
|
+
*
|
|
58
|
+
* @param args Configuration for the basin to reconfigure (including basin name and fields to change)
|
|
59
|
+
*/
|
|
60
|
+
reconfigure(args: Types.ReconfigureBasinInput, options?: S2RequestOptions): Promise<Types.ReconfigureBasinResponse>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=basins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basins.d.ts","sourceRoot":"","sources":["../../src/basins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAa9D,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAC;AAsEzC;;;;GAIG;AACH,qBAAa,QAAQ;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW;IAKpD;;;;;;OAMG;IACU,IAAI,CAChB,IAAI,CAAC,EAAE,KAAK,CAAC,eAAe,EAC5B,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;IAapC;;;;;;;;;;;;OAYG;IACI,OAAO,CACb,IAAI,CAAC,EAAE,KAAK,CAAC,kBAAkB,EAC/B,OAAO,CAAC,EAAE,gBAAgB,GACxB,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;IAejC;;;;;;OAMG;IACU,MAAM,CAClB,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAC5B,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC;IAoBrC;;;;OAIG;IACU,SAAS,CACrB,IAAI,EAAE,KAAK,CAAC,mBAAmB,EAC/B,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;IAc7B;;;;OAIG;IACU,MAAM,CAClB,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAC5B,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;IAYhB;;;;OAIG;IACU,WAAW,CACvB,IAAI,EAAE,KAAK,CAAC,qBAAqB,EACjC,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC;CAmB1C"}
|