@psnext/slingcli 2.5.20260724-1 → 2.5.20260727-1
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/bin/sling.js +1 -1
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/httpAuthSchemes/index.js +66 -28
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +133 -15
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.js +7 -2
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.js +28 -14
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.js +1 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.js +3 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.js +8 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/index.js +1 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.js +3 -3
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/index.browser.js +9 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/index.js +5 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getDateHeader.js +1 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.js +12 -6
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/index.js +2 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/isClockSkewed.js +1 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeDeserializer.js +10 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeSerializer.js +10 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/detectBufferParsing.js +18 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/BufferJsonShapeDeserializer.js +13 -15
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/ByteJsonShapeSerializer.js +27 -17
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/jsonReviver.js +22 -3
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/needsReviver.js +41 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/parseJsonBody.js +33 -13
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/writeKey.js +3 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeDeserializer.js +4 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.d.ts +2 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.d.ts +6 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.d.ts +7 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.d.ts +13 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/index.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.d.ts +22 -6
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/index.browser.d.ts +11 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/index.d.ts +7 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/getDateHeader.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.d.ts +22 -6
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/index.d.ts +2 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/detectBufferParsing.d.ts +1 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/experimental/ByteJsonShapeSerializer.d.ts +0 -2
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/needsReviver.d.ts +11 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/parseJsonBody.d.ts +7 -2
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/writeKey.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/api-extractor-type-index.d.ts +7 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/index.d.ts +21 -61
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.d.ts +27 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConstants.d.ts +16 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/NodeAccountIdEndpointModeConfigOptions.d.ts +14 -5
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/index.d.ts +5 -16
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/emitWarningIfUnsupportedVersion.d.ts +11 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.browser.d.ts +47 -107
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.d.ts +39 -112
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.native.d.ts +48 -107
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/longPollMiddleware.d.ts +14 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-host-header/hostHeaderMiddleware.d.ts +35 -25
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-logger/loggerMiddleware.d.ts +4 -14
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/configuration.d.ts +6 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.browser.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.browser.d.ts +6 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.d.ts +10 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.native.d.ts +6 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/check-features.d.ts +20 -16
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/configurations.d.ts +44 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/constants.d.ts +7 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/encode-features.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/user-agent-middleware.d.ts +18 -18
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/awsRegionConfig.d.ts +11 -8
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/extensions.d.ts +16 -14
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.browser.d.ts +4 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.d.ts +14 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.native.d.ts +4 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setCredentialFeature.d.ts +7 -6
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setFeature.d.ts +12 -6
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setTokenFeature.d.ts +7 -6
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/aws.d.ts +2 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/isVirtualHostableS3Bucket.d.ts +5 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/parseArn.d.ts +7 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partition.d.ts +38 -28
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partitions.d.ts +638 -647
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/isIpAddress.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveDefaultAwsRegionalEndpointsConfig.d.ts +56 -29
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveEndpoint.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointError.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointRuleObject.d.ts +1 -6
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/ErrorRuleObject.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/RuleSetObject.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/TreeRuleObject.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/shared.d.ts +1 -12
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/configurations.d.ts +7 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/createUserAgentStringParsingProvider.d.ts +14 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.browser.d.ts +2 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.d.ts +27 -18
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.native.d.ts +18 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/crt-availability.d.ts +8 -3
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/defaultUserAgent.d.ts +28 -17
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/getRuntimeUserAgentPair.d.ts +6 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/is-crt-available.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/nodeAppIdConfigOptions.d.ts +13 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.d.ts +10 -9
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.d.ts +44 -37
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/NODE_AUTH_SCHEME_PREFERENCE_OPTIONS.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.d.ts +6 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.d.ts +7 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.d.ts +13 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/index.d.ts +7 -23
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.d.ts +38 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.d.ts +133 -56
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.browser.d.ts +11 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.d.ts +9 -24
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getArrayForCommaSeparatedString.d.ts +8 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getBearerTokenEnvKey.d.ts +6 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getDateHeader.d.ts +8 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.d.ts +8 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.d.ts +26 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/index.d.ts +4 -3
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/isClockSkewed.d.ts +9 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ConfigurableSerdeContext.d.ts +8 -5
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ProtocolLib.d.ts +74 -40
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/UnionSerde.d.ts +24 -9
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.d.ts +25 -36
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/coercing-serializers.d.ts +18 -3
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/common.d.ts +2 -5
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/index.d.ts +22 -27
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_0Protocol.d.ts +22 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_1Protocol.d.ts +22 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJsonRpcProtocol.d.ts +29 -49
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsRestJsonProtocol.d.ts +36 -49
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonCodec.d.ts +19 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeDeserializer.d.ts +13 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeSerializer.d.ts +28 -18
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/awsExpectUnion.d.ts +7 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/detectBufferParsing.d.ts +1 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/BufferJsonShapeDeserializer.d.ts +29 -14
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/ByteJsonShapeSerializer.d.ts +57 -30
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReplacer.d.ts +21 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReviver.d.ts +15 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/needsReviver.d.ts +11 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/parseJsonBody.d.ts +22 -9
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsEc2QueryProtocol.d.ts +27 -18
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsQueryProtocol.d.ts +49 -57
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QuerySerializerSettings.d.ts +13 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QueryShapeSerializer.d.ts +16 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/writeKey.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/AwsRestXmlProtocol.d.ts +31 -47
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlCodec.d.ts +14 -17
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeDeserializer.d.ts +20 -15
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeSerializer.d.ts +21 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/parseXmlBody.d.ts +13 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/simpleFormatXml.d.ts +6 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/index.d.ts +3 -3
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-arn-parser/arn.d.ts +32 -14
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-format-url/format-url.d.ts +2 -4
- package/node_modules/@aws-sdk/core/package.json +10 -6
- package/node_modules/@aws-sdk/credential-provider-env/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +11 -11
- package/node_modules/@aws-sdk/credential-provider-login/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-node/package.json +9 -9
- package/node_modules/@aws-sdk/credential-provider-process/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +4 -4
- package/node_modules/@aws-sdk/eventstream-handler-node/package.json +2 -2
- package/node_modules/@aws-sdk/middleware-eventstream/package.json +2 -2
- package/node_modules/@aws-sdk/middleware-websocket/package.json +5 -5
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/package.json +2 -2
- package/node_modules/@aws-sdk/nested-clients/package.json +6 -6
- package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +2 -2
- package/node_modules/@aws-sdk/xml-builder/dist-cjs/index.js +14 -4
- package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +14 -4
- package/node_modules/@aws-sdk/xml-builder/package.json +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +17 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +8 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +118 -11
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js +132 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js +386 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +95 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js +46 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js +106 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js +5 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js +26 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +110 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +31 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +90 -35
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js +10 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js +1 -0
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +26 -10
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +21 -8
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +25 -13
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +100 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +7 -11
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js +17 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +7 -11
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +13 -9
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +68 -27
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +131 -34
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +173 -66
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +29 -7
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js +8 -3
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js +222 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.js +37 -35
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +11 -1
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +9 -3
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +5 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +30 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/ant-ling.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js +8 -3
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +94 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +3 -0
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +7 -8
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +11 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +4 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-config.js +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +20 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-runtime.js +3 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/remote-catalog-provider.js +24 -11
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +34 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.js +3 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.js +7 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.js +10 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.js +16 -46
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js +22 -13
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/external-editor.js +37 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +67 -74
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard.js +19 -8
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/version-check.js +3 -1
- package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +16 -15
- package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -4
- package/node_modules/@earendil-works/pi-server/package.json +2 -2
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +15 -12
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +6 -3
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +1 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +1 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.browser.js +2 -2
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.js +2 -2
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.native.js +2 -2
- package/node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/constants.js +1 -0
- package/node_modules/@smithy/core/dist-es/submodules/serde/value/NumericValue.js +2 -2
- package/node_modules/@smithy/core/dist-types/submodules/retry/service-error-classification/constants.d.ts +1 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/retry/service-error-classification/constants.d.ts +1 -0
- package/node_modules/@smithy/core/package.json +1 -1
- package/node_modules/@smithy/credential-provider-imds/package.json +2 -2
- package/node_modules/@smithy/fetch-http-handler/package.json +2 -2
- package/node_modules/@smithy/signature-v4/package.json +2 -2
- package/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
- package/node_modules/gaxios/package.json +1 -1
- package/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
- package/node_modules/google-auth-library/package.json +1 -1
- package/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
- package/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
- package/node_modules/undici/lib/core/request.js +12 -1
- package/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
- package/node_modules/undici/lib/handler/cache-handler.js +246 -64
- package/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
- package/node_modules/undici/lib/handler/retry-handler.js +24 -0
- package/node_modules/undici/lib/interceptor/cache.js +159 -52
- package/node_modules/undici/lib/util/cache.js +324 -62
- package/node_modules/undici/lib/util/date.js +23 -6
- package/node_modules/undici/lib/web/cookies/util.js +79 -9
- package/node_modules/undici/package.json +1 -1
- package/package.json +7 -7
- package/sling-default-packages.json +2 -1
- package/slingshot/index.js +337 -339
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter OAuth PKCE flow.
|
|
3
|
+
*
|
|
4
|
+
* OpenRouter exchanges an authorization code for a permanent, user-controlled
|
|
5
|
+
* API key rather than an expiring access/refresh token pair. The callback is
|
|
6
|
+
* handled by a one-shot loopback server on an ephemeral port.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: This module uses Node.js http.createServer for the OAuth callback server.
|
|
9
|
+
* It is only intended for CLI use, not browser environments.
|
|
10
|
+
*/
|
|
11
|
+
import { createServer } from "node:http";
|
|
12
|
+
import { getProviderEnvValue } from "../../utils/provider-env.js";
|
|
13
|
+
import { oauthErrorHtml, oauthSuccessHtml } from "./oauth-page.js";
|
|
14
|
+
import { generatePKCE } from "./pkce.js";
|
|
15
|
+
const AUTHORIZE_URL = "https://openrouter.ai/auth";
|
|
16
|
+
const TOKEN_URL = "https://openrouter.ai/api/v1/auth/keys";
|
|
17
|
+
const LOGIN_TIMEOUT_MS = 5 * 60 * 1000;
|
|
18
|
+
const TOKEN_EXCHANGE_TIMEOUT_MS = 30_000;
|
|
19
|
+
function getCallbackHost() {
|
|
20
|
+
return getProviderEnvValue("PI_OAUTH_CALLBACK_HOST") || "127.0.0.1";
|
|
21
|
+
}
|
|
22
|
+
function sendHtml(response, status, html) {
|
|
23
|
+
response.statusCode = status;
|
|
24
|
+
response.setHeader("content-type", "text/html; charset=utf-8");
|
|
25
|
+
response.setHeader("cache-control", "no-store");
|
|
26
|
+
response.end(html);
|
|
27
|
+
}
|
|
28
|
+
function errorDetail(body) {
|
|
29
|
+
if (typeof body.error_description === "string")
|
|
30
|
+
return body.error_description;
|
|
31
|
+
if (typeof body.message === "string")
|
|
32
|
+
return body.message;
|
|
33
|
+
if (typeof body.error === "string")
|
|
34
|
+
return body.error;
|
|
35
|
+
if (body.error && typeof body.error === "object" && !Array.isArray(body.error)) {
|
|
36
|
+
const message = body.error.message;
|
|
37
|
+
if (typeof message === "string")
|
|
38
|
+
return message;
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
async function exchangeAuthorizationCode(code, verifier, signal) {
|
|
43
|
+
if (signal?.aborted)
|
|
44
|
+
throw new Error("Login cancelled");
|
|
45
|
+
const controller = new AbortController();
|
|
46
|
+
const onAbort = () => controller.abort(signal?.reason);
|
|
47
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
48
|
+
const timeout = setTimeout(() => controller.abort(new Error("OpenRouter OAuth token exchange timed out")), TOKEN_EXCHANGE_TIMEOUT_MS);
|
|
49
|
+
let response;
|
|
50
|
+
let body = {};
|
|
51
|
+
try {
|
|
52
|
+
response = await fetch(TOKEN_URL, {
|
|
53
|
+
method: "POST",
|
|
54
|
+
headers: { accept: "application/json", "content-type": "application/json" },
|
|
55
|
+
body: JSON.stringify({ code, code_verifier: verifier, code_challenge_method: "S256" }),
|
|
56
|
+
signal: controller.signal,
|
|
57
|
+
});
|
|
58
|
+
try {
|
|
59
|
+
const parsed = (await response.json());
|
|
60
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
|
|
61
|
+
body = parsed;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
if (response.ok)
|
|
65
|
+
throw new Error("OpenRouter OAuth returned invalid JSON");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (signal?.aborted)
|
|
70
|
+
throw new Error("Login cancelled");
|
|
71
|
+
if (controller.signal.aborted)
|
|
72
|
+
throw new Error("OpenRouter OAuth token exchange timed out");
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
clearTimeout(timeout);
|
|
77
|
+
signal?.removeEventListener("abort", onAbort);
|
|
78
|
+
}
|
|
79
|
+
if (!response.ok) {
|
|
80
|
+
const detail = errorDetail(body);
|
|
81
|
+
throw new Error(`OpenRouter OAuth key exchange failed (HTTP ${response.status})${detail ? `: ${detail}` : ""}`);
|
|
82
|
+
}
|
|
83
|
+
if (typeof body.key !== "string" || body.key.length === 0) {
|
|
84
|
+
throw new Error('OpenRouter OAuth response carries no "key"');
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
type: "oauth",
|
|
88
|
+
access: body.key,
|
|
89
|
+
refresh: "",
|
|
90
|
+
expires: Number.MAX_SAFE_INTEGER,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
async function startCallbackServer(callbackPath, verifier, signal) {
|
|
94
|
+
if (signal?.aborted)
|
|
95
|
+
throw new Error("Login cancelled");
|
|
96
|
+
const callbackHost = getCallbackHost();
|
|
97
|
+
let resolveCredential = () => { };
|
|
98
|
+
let rejectCredential = () => { };
|
|
99
|
+
const credential = new Promise((resolve, reject) => {
|
|
100
|
+
resolveCredential = resolve;
|
|
101
|
+
rejectCredential = reject;
|
|
102
|
+
});
|
|
103
|
+
let server;
|
|
104
|
+
let claimed = false;
|
|
105
|
+
let settled = false;
|
|
106
|
+
let timeout;
|
|
107
|
+
let onAbort;
|
|
108
|
+
const finish = (result) => {
|
|
109
|
+
if (settled)
|
|
110
|
+
return;
|
|
111
|
+
settled = true;
|
|
112
|
+
if (timeout)
|
|
113
|
+
clearTimeout(timeout);
|
|
114
|
+
if (onAbort)
|
|
115
|
+
signal?.removeEventListener("abort", onAbort);
|
|
116
|
+
server.close();
|
|
117
|
+
if ("credential" in result)
|
|
118
|
+
resolveCredential(result.credential);
|
|
119
|
+
else
|
|
120
|
+
rejectCredential(result.error);
|
|
121
|
+
};
|
|
122
|
+
server = createServer((request, response) => {
|
|
123
|
+
void (async () => {
|
|
124
|
+
const requestUrl = new URL(request.url ?? "/", `http://${callbackHost}`);
|
|
125
|
+
if (request.method !== "GET" || requestUrl.pathname !== callbackPath) {
|
|
126
|
+
sendHtml(response, 404, oauthErrorHtml("OAuth callback route not found."));
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (claimed || settled) {
|
|
130
|
+
sendHtml(response, 409, oauthErrorHtml("This OAuth callback has already been used."));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const oauthError = requestUrl.searchParams.get("error");
|
|
134
|
+
if (oauthError) {
|
|
135
|
+
const description = requestUrl.searchParams.get("error_description") ?? oauthError;
|
|
136
|
+
sendHtml(response, 400, oauthErrorHtml("OpenRouter authorization was denied.", description));
|
|
137
|
+
finish({ error: new Error(`OpenRouter authorization failed: ${description}`) });
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const code = requestUrl.searchParams.get("code");
|
|
141
|
+
if (!code) {
|
|
142
|
+
sendHtml(response, 400, oauthErrorHtml("OpenRouter returned no authorization code."));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
claimed = true;
|
|
146
|
+
try {
|
|
147
|
+
const result = await exchangeAuthorizationCode(code, verifier, signal);
|
|
148
|
+
sendHtml(response, 200, oauthSuccessHtml("Signed in to OpenRouter. You may now close this page."));
|
|
149
|
+
finish({ credential: result });
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
const message = error instanceof Error ? error.message : "Unknown token exchange error";
|
|
153
|
+
sendHtml(response, 502, oauthErrorHtml("OpenRouter key exchange failed.", message));
|
|
154
|
+
finish({ error: error instanceof Error ? error : new Error(message) });
|
|
155
|
+
}
|
|
156
|
+
})();
|
|
157
|
+
});
|
|
158
|
+
await new Promise((resolve, reject) => {
|
|
159
|
+
server.once("error", reject);
|
|
160
|
+
server.listen(0, callbackHost, () => {
|
|
161
|
+
server.removeListener("error", reject);
|
|
162
|
+
resolve();
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
server.on("error", (error) => finish({ error }));
|
|
166
|
+
onAbort = () => finish({ error: new Error("Login cancelled") });
|
|
167
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
168
|
+
if (signal?.aborted) {
|
|
169
|
+
signal.removeEventListener("abort", onAbort);
|
|
170
|
+
server.close();
|
|
171
|
+
throw new Error("Login cancelled");
|
|
172
|
+
}
|
|
173
|
+
timeout = setTimeout(() => finish({ error: new Error("OpenRouter OAuth login timed out") }), LOGIN_TIMEOUT_MS);
|
|
174
|
+
const address = server.address();
|
|
175
|
+
if (!address || typeof address === "string") {
|
|
176
|
+
finish({ error: new Error("Could not determine the OpenRouter OAuth callback port") });
|
|
177
|
+
throw new Error("Could not determine the OpenRouter OAuth callback port");
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
callbackUrl: `http://${callbackHost}:${address.port}${callbackPath}`,
|
|
181
|
+
credential,
|
|
182
|
+
close: () => finish({ error: new Error("Login cancelled") }),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
async function loginOpenRouter(interaction) {
|
|
186
|
+
const { verifier, challenge } = await generatePKCE();
|
|
187
|
+
const callbackPath = `/oauth/callback/${crypto.randomUUID()}`;
|
|
188
|
+
const callback = await startCallbackServer(callbackPath, verifier, interaction.signal);
|
|
189
|
+
const authorizeUrl = new URL(AUTHORIZE_URL);
|
|
190
|
+
authorizeUrl.search = new URLSearchParams({
|
|
191
|
+
callback_url: callback.callbackUrl,
|
|
192
|
+
code_challenge: challenge,
|
|
193
|
+
code_challenge_method: "S256",
|
|
194
|
+
}).toString();
|
|
195
|
+
interaction.notify({
|
|
196
|
+
type: "progress",
|
|
197
|
+
message: `Listening for OpenRouter OAuth callback on ${callback.callbackUrl}`,
|
|
198
|
+
});
|
|
199
|
+
interaction.notify({
|
|
200
|
+
type: "auth_url",
|
|
201
|
+
url: authorizeUrl.toString(),
|
|
202
|
+
instructions: "Complete sign-in in your browser.",
|
|
203
|
+
});
|
|
204
|
+
try {
|
|
205
|
+
return await callback.credential;
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
callback.close();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
export const openRouterOAuth = {
|
|
212
|
+
name: "OpenRouter OAuth",
|
|
213
|
+
loginLabel: "Sign in with OpenRouter",
|
|
214
|
+
login: loginOpenRouter,
|
|
215
|
+
async refresh(credential) {
|
|
216
|
+
return credential;
|
|
217
|
+
},
|
|
218
|
+
async toAuth(credential) {
|
|
219
|
+
return { apiKey: credential.access };
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
//# sourceMappingURL=openrouter.js.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Radius gateway OAuth flow.
|
|
3
3
|
*
|
|
4
|
-
* Radius is a pi-messages gateway. OAuth
|
|
5
|
-
* gateway
|
|
4
|
+
* Radius is a pi-messages gateway. OAuth client APIs live on the configured
|
|
5
|
+
* gateway; only the interactive browser authorization endpoint is discovered.
|
|
6
|
+
* Model catalog loading is owned by the Radius provider.
|
|
6
7
|
*
|
|
7
8
|
* NOTE: This module uses node:http for the OAuth callback server.
|
|
8
9
|
* It is only intended for CLI use, not browser environments.
|
|
@@ -25,14 +26,21 @@ const REDIRECT_URI = `http://${CALLBACK_HOST}:${CALLBACK_PORT}${CALLBACK_PATH}`;
|
|
|
25
26
|
const TOKEN_EXPIRY_SKEW_MS = 60_000;
|
|
26
27
|
const LOGIN_METHOD_BROWSER = "browser";
|
|
27
28
|
const LOGIN_METHOD_DEVICE_CODE = "device-code";
|
|
28
|
-
|
|
29
|
+
const OAUTH_CLIENT_ID = "pi-gateway";
|
|
30
|
+
const OAUTH_SCOPE = "gateway offline_access";
|
|
31
|
+
const OAUTH_DEVICE_CODE_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:device_code";
|
|
32
|
+
async function loadRadiusOAuthDiscovery(gateway) {
|
|
29
33
|
const response = await fetch(new URL("/v1/oauth", gateway), {
|
|
30
34
|
headers: { accept: "application/json" },
|
|
31
35
|
});
|
|
32
36
|
if (!response.ok) {
|
|
33
37
|
throw new Error(`Could not load Radius OAuth config from ${gateway}: ${response.status} ${await response.text()}`);
|
|
34
38
|
}
|
|
35
|
-
|
|
39
|
+
const discovery = (await response.json());
|
|
40
|
+
if (typeof discovery.authorizationEndpoint !== "string") {
|
|
41
|
+
throw new Error(`Invalid Radius OAuth config from ${gateway}`);
|
|
42
|
+
}
|
|
43
|
+
return { authorizationEndpoint: discovery.authorizationEndpoint };
|
|
36
44
|
}
|
|
37
45
|
class OAuthResponseError extends Error {
|
|
38
46
|
status;
|
|
@@ -64,10 +72,10 @@ async function readOAuthResponseError(response, message) {
|
|
|
64
72
|
}
|
|
65
73
|
return new OAuthResponseError(response.status, oauthError, description, message);
|
|
66
74
|
}
|
|
67
|
-
async function requestOAuthToken(
|
|
75
|
+
async function requestOAuthToken(gateway, body, signal) {
|
|
68
76
|
let response;
|
|
69
77
|
try {
|
|
70
|
-
response = await fetch(oauth
|
|
78
|
+
response = await fetch(new URL("/v1/oauth/token", gateway), {
|
|
71
79
|
method: "POST",
|
|
72
80
|
headers: { accept: "application/json", "content-type": "application/x-www-form-urlencoded" },
|
|
73
81
|
body,
|
|
@@ -157,15 +165,15 @@ function startOAuthCallbackServer(expectedState, signal) {
|
|
|
157
165
|
});
|
|
158
166
|
});
|
|
159
167
|
}
|
|
160
|
-
async function loginWithBrowser(
|
|
168
|
+
async function loginWithBrowser(gateway, authorizationEndpoint, interaction) {
|
|
161
169
|
const { verifier, challenge } = await generatePKCE();
|
|
162
170
|
const state = crypto.randomUUID();
|
|
163
|
-
const authorizeUrl = new URL(
|
|
171
|
+
const authorizeUrl = new URL(authorizationEndpoint);
|
|
164
172
|
authorizeUrl.search = new URLSearchParams({
|
|
165
173
|
response_type: "code",
|
|
166
|
-
client_id:
|
|
174
|
+
client_id: OAUTH_CLIENT_ID,
|
|
167
175
|
redirect_uri: REDIRECT_URI,
|
|
168
|
-
scope:
|
|
176
|
+
scope: OAUTH_SCOPE,
|
|
169
177
|
code_challenge: challenge,
|
|
170
178
|
code_challenge_method: "S256",
|
|
171
179
|
handoff: "url",
|
|
@@ -186,9 +194,9 @@ async function loginWithBrowser(oauth, interaction) {
|
|
|
186
194
|
}
|
|
187
195
|
throw new Error("OAuth callback did not complete.");
|
|
188
196
|
}
|
|
189
|
-
return await requestOAuthToken(
|
|
197
|
+
return await requestOAuthToken(gateway, new URLSearchParams({
|
|
190
198
|
grant_type: "authorization_code",
|
|
191
|
-
client_id:
|
|
199
|
+
client_id: OAUTH_CLIENT_ID,
|
|
192
200
|
redirect_uri: REDIRECT_URI,
|
|
193
201
|
code,
|
|
194
202
|
code_verifier: verifier,
|
|
@@ -198,13 +206,13 @@ async function loginWithBrowser(oauth, interaction) {
|
|
|
198
206
|
callbackServer.close();
|
|
199
207
|
}
|
|
200
208
|
}
|
|
201
|
-
async function requestDeviceAuthorization(
|
|
209
|
+
async function requestDeviceAuthorization(gateway, signal) {
|
|
202
210
|
let response;
|
|
203
211
|
try {
|
|
204
|
-
response = await fetch(oauth
|
|
212
|
+
response = await fetch(new URL("/v1/oauth/device", gateway), {
|
|
205
213
|
method: "POST",
|
|
206
214
|
headers: { accept: "application/json", "content-type": "application/x-www-form-urlencoded" },
|
|
207
|
-
body: new URLSearchParams({ client_id:
|
|
215
|
+
body: new URLSearchParams({ client_id: OAUTH_CLIENT_ID, scope: OAUTH_SCOPE }),
|
|
208
216
|
signal,
|
|
209
217
|
});
|
|
210
218
|
}
|
|
@@ -218,24 +226,23 @@ async function requestDeviceAuthorization(oauth, signal) {
|
|
|
218
226
|
throw await readOAuthResponseError(response, "Radius OAuth device authorization failed");
|
|
219
227
|
}
|
|
220
228
|
const data = (await response.json());
|
|
221
|
-
if (!data.device_code || !data.user_code || !data.expires_in) {
|
|
229
|
+
if (!data.device_code || !data.user_code || !data.verification_uri || !data.expires_in) {
|
|
222
230
|
throw new Error("Radius OAuth device authorization response is missing required fields");
|
|
223
231
|
}
|
|
224
232
|
return {
|
|
225
233
|
device_code: data.device_code,
|
|
226
234
|
user_code: data.user_code,
|
|
227
235
|
verification_uri: data.verification_uri,
|
|
228
|
-
verification_uri_complete: data.verification_uri_complete,
|
|
229
236
|
expires_in: data.expires_in,
|
|
230
237
|
interval: data.interval,
|
|
231
238
|
};
|
|
232
239
|
}
|
|
233
|
-
async function loginWithDeviceCode(
|
|
234
|
-
const device = await requestDeviceAuthorization(
|
|
240
|
+
async function loginWithDeviceCode(gateway, interaction) {
|
|
241
|
+
const device = await requestDeviceAuthorization(gateway, interaction.signal);
|
|
235
242
|
interaction.notify({
|
|
236
243
|
type: "device_code",
|
|
237
244
|
userCode: device.user_code,
|
|
238
|
-
verificationUri: device.verification_uri
|
|
245
|
+
verificationUri: device.verification_uri,
|
|
239
246
|
intervalSeconds: device.interval,
|
|
240
247
|
expiresInSeconds: device.expires_in,
|
|
241
248
|
});
|
|
@@ -245,9 +252,9 @@ async function loginWithDeviceCode(oauth, interaction) {
|
|
|
245
252
|
signal: interaction.signal,
|
|
246
253
|
poll: async () => {
|
|
247
254
|
try {
|
|
248
|
-
const credentials = await requestOAuthToken(
|
|
249
|
-
grant_type:
|
|
250
|
-
client_id:
|
|
255
|
+
const credentials = await requestOAuthToken(gateway, new URLSearchParams({
|
|
256
|
+
grant_type: OAUTH_DEVICE_CODE_GRANT_TYPE,
|
|
257
|
+
client_id: OAUTH_CLIENT_ID,
|
|
251
258
|
device_code: device.device_code,
|
|
252
259
|
}), interaction.signal);
|
|
253
260
|
return { status: "complete", value: credentials };
|
|
@@ -277,7 +284,6 @@ export function createRadiusOAuth(options) {
|
|
|
277
284
|
return {
|
|
278
285
|
name: options.name,
|
|
279
286
|
async login(interaction) {
|
|
280
|
-
const oauth = await loadRadiusOAuthConfig(gateway);
|
|
281
287
|
const loginMethod = await interaction.prompt({
|
|
282
288
|
type: "select",
|
|
283
289
|
message: `Sign in to ${options.name}:`,
|
|
@@ -289,23 +295,19 @@ export function createRadiusOAuth(options) {
|
|
|
289
295
|
},
|
|
290
296
|
],
|
|
291
297
|
});
|
|
292
|
-
let credential;
|
|
293
298
|
if (loginMethod === LOGIN_METHOD_DEVICE_CODE) {
|
|
294
|
-
|
|
295
|
-
}
|
|
296
|
-
else if (loginMethod === LOGIN_METHOD_BROWSER) {
|
|
297
|
-
credential = await loginWithBrowser(oauth, interaction);
|
|
299
|
+
return loginWithDeviceCode(gateway, interaction);
|
|
298
300
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
+
if (loginMethod === LOGIN_METHOD_BROWSER) {
|
|
302
|
+
const discovery = await loadRadiusOAuthDiscovery(gateway);
|
|
303
|
+
return loginWithBrowser(gateway, discovery.authorizationEndpoint, interaction);
|
|
301
304
|
}
|
|
302
|
-
|
|
305
|
+
throw new Error(`Unknown ${options.name} sign-in method: ${loginMethod}`);
|
|
303
306
|
},
|
|
304
307
|
async refresh(credential, signal) {
|
|
305
|
-
const
|
|
306
|
-
const refreshed = await requestOAuthToken(oauth, new URLSearchParams({
|
|
308
|
+
const refreshed = await requestOAuthToken(gateway, new URLSearchParams({
|
|
307
309
|
grant_type: "refresh_token",
|
|
308
|
-
client_id:
|
|
310
|
+
client_id: OAUTH_CLIENT_ID,
|
|
309
311
|
refresh_token: credential.refresh,
|
|
310
312
|
}), signal);
|
|
311
313
|
return refreshed;
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
+
import { formatThrownValue } from "../utils/diagnostics.js";
|
|
1
2
|
export class ModelsError extends Error {
|
|
2
3
|
code;
|
|
3
4
|
constructor(code, message, options) {
|
|
4
|
-
super(message, options);
|
|
5
|
+
super(withCauseDetail(message, options?.cause), options);
|
|
5
6
|
this.name = "ModelsError";
|
|
6
7
|
this.code = code;
|
|
7
8
|
}
|
|
8
9
|
}
|
|
10
|
+
/** Callers surface `error.message` only, so keep the underlying reason in it. */
|
|
11
|
+
function withCauseDetail(message, cause) {
|
|
12
|
+
if (cause === undefined || cause === null)
|
|
13
|
+
return message;
|
|
14
|
+
const detail = formatThrownValue(cause).trim();
|
|
15
|
+
if (!detail || message.includes(detail))
|
|
16
|
+
return message;
|
|
17
|
+
return `${message}: ${detail}`;
|
|
18
|
+
}
|
|
9
19
|
/**
|
|
10
20
|
* Auth resolution shared by the `Models` and `ImagesModels` collections.
|
|
11
21
|
* A stored credential owns the provider: ambient/env is consulted only when
|
|
@@ -3,6 +3,7 @@ import { githubCopilotOAuth } from "./auth/oauth/github-copilot.js";
|
|
|
3
3
|
import { kimiCodingOAuth } from "./auth/oauth/kimi-coding.js";
|
|
4
4
|
import { registerBundledOAuthFlowLoaders } from "./auth/oauth/load.js";
|
|
5
5
|
import { openaiCodexOAuth } from "./auth/oauth/openai-codex.js";
|
|
6
|
+
import { openRouterOAuth } from "./auth/oauth/openrouter.js";
|
|
6
7
|
import { createRadiusOAuth } from "./auth/oauth/radius.js";
|
|
7
8
|
import { xaiOAuth } from "./auth/oauth/xai.js";
|
|
8
9
|
/** Register OAuth flows statically embedded in the standalone Bun binary. */
|
|
@@ -11,6 +12,7 @@ export function registerBunOAuthFlows() {
|
|
|
11
12
|
anthropic: () => anthropicOAuth,
|
|
12
13
|
openaiCodex: () => openaiCodexOAuth,
|
|
13
14
|
githubCopilot: () => githubCopilotOAuth,
|
|
15
|
+
openrouter: () => openRouterOAuth,
|
|
14
16
|
kimiCoding: () => kimiCodingOAuth,
|
|
15
17
|
xai: () => xaiOAuth,
|
|
16
18
|
radius: createRadiusOAuth,
|
|
@@ -27,6 +27,9 @@ if (typeof process !== "undefined" && (process.versions?.node || process.version
|
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
import { getProviderEnvValue } from "./utils/provider-env.js";
|
|
30
|
+
export const ANTHROPIC_AUTH_TOKEN_ENV = "ANTHROPIC_AUTH_TOKEN";
|
|
31
|
+
export const ANTHROPIC_OAUTH_TOKEN_ENV = "ANTHROPIC_OAUTH_TOKEN";
|
|
32
|
+
export const ANTHROPIC_API_KEY_ENV = "ANTHROPIC_API_KEY";
|
|
30
33
|
let cachedVertexAdcCredentialsExists = null;
|
|
31
34
|
function hasVertexAdcCredentials(env) {
|
|
32
35
|
const explicitCredentialsPath = env?.GOOGLE_APPLICATION_CREDENTIALS;
|
|
@@ -61,9 +64,10 @@ function getApiKeyEnvVars(provider) {
|
|
|
61
64
|
if (provider === "github-copilot") {
|
|
62
65
|
return ["COPILOT_GITHUB_TOKEN"];
|
|
63
66
|
}
|
|
64
|
-
//
|
|
67
|
+
// ANTHROPIC_AUTH_TOKEN participates in env discovery/status, but
|
|
68
|
+
// getEnvApiKey() skips it because requests must pass it as Authorization: Bearer.
|
|
65
69
|
if (provider === "anthropic") {
|
|
66
|
-
return [
|
|
70
|
+
return [ANTHROPIC_AUTH_TOKEN_ENV, ANTHROPIC_OAUTH_TOKEN_ENV, ANTHROPIC_API_KEY_ENV];
|
|
67
71
|
}
|
|
68
72
|
const envMap = {
|
|
69
73
|
"ant-ling": "ANT_LING_API_KEY",
|
|
@@ -114,7 +118,9 @@ export function findEnvKeys(provider, env) {
|
|
|
114
118
|
export function getEnvApiKey(provider, env) {
|
|
115
119
|
const envKeys = findEnvKeys(provider, env);
|
|
116
120
|
if (envKeys?.[0]) {
|
|
117
|
-
|
|
121
|
+
const apiKeyEnv = provider === "anthropic" ? envKeys.find((key) => key !== ANTHROPIC_AUTH_TOKEN_ENV) : envKeys[0];
|
|
122
|
+
if (apiKeyEnv)
|
|
123
|
+
return getProviderEnvValue(apiKeyEnv, env);
|
|
118
124
|
}
|
|
119
125
|
// Vertex AI supports either an explicit API key or Application Default Credentials.
|
|
120
126
|
// Auth is configured via `gcloud auth application-default login`.
|
|
@@ -227,6 +227,21 @@ export const IMAGE_MODELS = {
|
|
|
227
227
|
cacheWrite: 0,
|
|
228
228
|
},
|
|
229
229
|
},
|
|
230
|
+
"microsoft/mai-image-2.5-pro": {
|
|
231
|
+
id: "microsoft/mai-image-2.5-pro",
|
|
232
|
+
name: "Microsoft: MAI-Image-2.5 Pro",
|
|
233
|
+
api: "openrouter-images",
|
|
234
|
+
provider: "openrouter",
|
|
235
|
+
baseUrl: "https://openrouter.ai/api/v1",
|
|
236
|
+
input: ["text", "image"],
|
|
237
|
+
output: ["image"],
|
|
238
|
+
cost: {
|
|
239
|
+
input: 5,
|
|
240
|
+
output: 0,
|
|
241
|
+
cacheRead: 0,
|
|
242
|
+
cacheWrite: 0,
|
|
243
|
+
},
|
|
244
|
+
},
|
|
230
245
|
"openai/gpt-5-image": {
|
|
231
246
|
id: "openai/gpt-5-image",
|
|
232
247
|
name: "OpenAI: GPT-5 Image",
|
|
@@ -8,6 +8,7 @@ import { azureOpenAIResponsesProvider } from "./azure-openai-responses.js";
|
|
|
8
8
|
import { cerebrasProvider } from "./cerebras.js";
|
|
9
9
|
import { cloudflareAIGatewayProvider } from "./cloudflare-ai-gateway.js";
|
|
10
10
|
import { cloudflareWorkersAIProvider } from "./cloudflare-workers-ai.js";
|
|
11
|
+
import modelDataManifest from "./data/.manifest.json" with { type: "json" };
|
|
11
12
|
import { deepseekProvider } from "./deepseek.js";
|
|
12
13
|
import { fireworksProvider } from "./fireworks.js";
|
|
13
14
|
import { githubCopilotProvider } from "./github-copilot.js";
|
|
@@ -49,9 +50,10 @@ export function getBuiltinModel(provider, modelId) {
|
|
|
49
50
|
export function getBuiltinProviders() {
|
|
50
51
|
return Object.keys(MODELS);
|
|
51
52
|
}
|
|
52
|
-
/**
|
|
53
|
-
export function
|
|
54
|
-
|
|
53
|
+
/** Generation timestamp shared by all built-in provider catalogs. */
|
|
54
|
+
export function getBuiltinModelDataGeneratedAt() {
|
|
55
|
+
const generatedAt = Date.parse(modelDataManifest.generatedAt);
|
|
56
|
+
return Number.isNaN(generatedAt) ? undefined : generatedAt;
|
|
55
57
|
}
|
|
56
58
|
export function getBuiltinModels(provider) {
|
|
57
59
|
const models = MODELS[provider];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// This file is auto-generated by scripts/generate-models.ts
|
|
2
2
|
// Do not edit manually - run 'npm run generate-models' to update
|
|
3
3
|
import values from "./data/amazon-bedrock.json" with { type: "json" };
|
|
4
|
-
|
|
4
|
+
import { flattenModelCatalog } from "../model-catalog.js";
|
|
5
|
+
export const AMAZON_BEDROCK_MODELS = flattenModelCatalog("amazon-bedrock", values);
|
|
5
6
|
//# sourceMappingURL=amazon-bedrock.models.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// This file is auto-generated by scripts/generate-models.ts
|
|
2
2
|
// Do not edit manually - run 'npm run generate-models' to update
|
|
3
3
|
import values from "./data/ant-ling.json" with { type: "json" };
|
|
4
|
-
|
|
4
|
+
import { flattenModelCatalog } from "../model-catalog.js";
|
|
5
|
+
export const ANT_LING_MODELS = flattenModelCatalog("ant-ling", values);
|
|
5
6
|
//# sourceMappingURL=ant-ling.models.js.map
|
|
@@ -1,16 +1,43 @@
|
|
|
1
1
|
import { anthropicMessagesApi } from "../api/anthropic-messages.lazy.js";
|
|
2
|
-
import {
|
|
2
|
+
import { lazyOAuth } from "../auth/helpers.js";
|
|
3
3
|
import { loadAnthropicOAuth } from "../auth/oauth/load.js";
|
|
4
|
+
import { ANTHROPIC_API_KEY_ENV, ANTHROPIC_AUTH_TOKEN_ENV, ANTHROPIC_OAUTH_TOKEN_ENV } from "../env-api-keys.js";
|
|
4
5
|
import { createProvider } from "../models.js";
|
|
5
6
|
import { ANTHROPIC_MODELS } from "./anthropic.models.js";
|
|
7
|
+
function anthropicApiKeyAuth() {
|
|
8
|
+
return {
|
|
9
|
+
name: "Anthropic API key",
|
|
10
|
+
login: async (interaction) => ({
|
|
11
|
+
type: "api_key",
|
|
12
|
+
key: await interaction.prompt({ type: "secret", message: "Enter Anthropic API key" }),
|
|
13
|
+
}),
|
|
14
|
+
resolve: async ({ ctx, credential }) => {
|
|
15
|
+
if (credential?.key) {
|
|
16
|
+
return { auth: { apiKey: credential.key }, env: credential.env, source: "stored credential" };
|
|
17
|
+
}
|
|
18
|
+
const authToken = await ctx.env(ANTHROPIC_AUTH_TOKEN_ENV);
|
|
19
|
+
if (authToken) {
|
|
20
|
+
return {
|
|
21
|
+
auth: { headers: { Authorization: `Bearer ${authToken}` } },
|
|
22
|
+
source: ANTHROPIC_AUTH_TOKEN_ENV,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
for (const envVar of [ANTHROPIC_OAUTH_TOKEN_ENV, ANTHROPIC_API_KEY_ENV]) {
|
|
26
|
+
const apiKey = await ctx.env(envVar);
|
|
27
|
+
if (apiKey)
|
|
28
|
+
return { auth: { apiKey }, source: envVar };
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
6
34
|
export function anthropicProvider() {
|
|
7
35
|
return createProvider({
|
|
8
36
|
id: "anthropic",
|
|
9
37
|
name: "Anthropic",
|
|
10
38
|
baseUrl: "https://api.anthropic.com",
|
|
11
39
|
auth: {
|
|
12
|
-
|
|
13
|
-
apiKey: envApiKeyAuth("Anthropic API key", ["ANTHROPIC_OAUTH_TOKEN", "ANTHROPIC_API_KEY"]),
|
|
40
|
+
apiKey: anthropicApiKeyAuth(),
|
|
14
41
|
oauth: lazyOAuth({ name: "Anthropic (Claude Pro/Max)", load: loadAnthropicOAuth }),
|
|
15
42
|
},
|
|
16
43
|
models: Object.values(ANTHROPIC_MODELS),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// This file is auto-generated by scripts/generate-models.ts
|
|
2
2
|
// Do not edit manually - run 'npm run generate-models' to update
|
|
3
3
|
import values from "./data/anthropic.json" with { type: "json" };
|
|
4
|
-
|
|
4
|
+
import { flattenModelCatalog } from "../model-catalog.js";
|
|
5
|
+
export const ANTHROPIC_MODELS = flattenModelCatalog("anthropic", values);
|
|
5
6
|
//# sourceMappingURL=anthropic.models.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// This file is auto-generated by scripts/generate-models.ts
|
|
2
2
|
// Do not edit manually - run 'npm run generate-models' to update
|
|
3
3
|
import values from "./data/azure-openai-responses.json" with { type: "json" };
|
|
4
|
-
|
|
4
|
+
import { flattenModelCatalog } from "../model-catalog.js";
|
|
5
|
+
export const AZURE_OPENAI_RESPONSES_MODELS = flattenModelCatalog("azure-openai-responses", values);
|
|
5
6
|
//# sourceMappingURL=azure-openai-responses.models.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// This file is auto-generated by scripts/generate-models.ts
|
|
2
2
|
// Do not edit manually - run 'npm run generate-models' to update
|
|
3
3
|
import values from "./data/cerebras.json" with { type: "json" };
|
|
4
|
-
|
|
4
|
+
import { flattenModelCatalog } from "../model-catalog.js";
|
|
5
|
+
export const CEREBRAS_MODELS = flattenModelCatalog("cerebras", values);
|
|
5
6
|
//# sourceMappingURL=cerebras.models.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// This file is auto-generated by scripts/generate-models.ts
|
|
2
2
|
// Do not edit manually - run 'npm run generate-models' to update
|
|
3
3
|
import values from "./data/cloudflare-ai-gateway.json" with { type: "json" };
|
|
4
|
-
|
|
4
|
+
import { flattenModelCatalog } from "../model-catalog.js";
|
|
5
|
+
export const CLOUDFLARE_AI_GATEWAY_MODELS = flattenModelCatalog("cloudflare-ai-gateway", values);
|
|
5
6
|
//# sourceMappingURL=cloudflare-ai-gateway.models.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// This file is auto-generated by scripts/generate-models.ts
|
|
2
2
|
// Do not edit manually - run 'npm run generate-models' to update
|
|
3
3
|
import values from "./data/cloudflare-workers-ai.json" with { type: "json" };
|
|
4
|
-
|
|
4
|
+
import { flattenModelCatalog } from "../model-catalog.js";
|
|
5
|
+
export const CLOUDFLARE_WORKERS_AI_MODELS = flattenModelCatalog("cloudflare-workers-ai", values);
|
|
5
6
|
//# sourceMappingURL=cloudflare-workers-ai.models.js.map
|