Edits history of script submission #14007 for ' Creates a rule (ably)'

  • bun
    One script reply has been approved by the moderators
    Ap­pro­ved
    //native
    type Ably = {
      accessToken: string;
    };
    /**
     * Creates a rule
     * Creates a rule for the application with the specified application ID.
     */
    export async function main(
      auth: Ably,
      app_id: string,
      body:
        | {
            status?: string;
            ruleType: "http";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              url: string;
              headers?: { name?: string; value?: string }[];
              signingKeyId?: string;
              enveloped?: false | true;
              format: string;
            };
          }
        | {
            status?: string;
            ruleType: "http/ifttt";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: { webhookKey: string; eventName: string };
          }
        | {
            status?: string;
            ruleType: "http/zapier";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              url: string;
              headers?: { name?: string; value?: string }[];
              signingKeyId?: string;
            };
          }
        | {
            status?: string;
            ruleType: "http/cloudflare-worker";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              url: string;
              headers?: { name?: string; value?: string }[];
              signingKeyId?: string;
            };
          }
        | {
            status?: string;
            ruleType: "http/azure-function";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              azureAppId: string;
              azureFunctionName: string;
              headers?: { name?: string; value?: string }[];
              signingKeyId?: string;
              enveloped?: false | true;
              format?: string;
            };
          }
        | {
            ruleType: "http/google-cloud-function";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              region: string;
              projectId: string;
              functionName: string;
              headers?: { name?: string; value?: string }[];
              signingKeyId?: string;
              enveloped?: false | true;
              format?: string;
            };
          }
        | {
            status?: string;
            ruleType: "aws/lambda";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              region: string;
              functionName: string;
              authentication:
                | {
                    authenticationMode?: "credentials";
                    accessKeyId: string;
                    secretAccessKey: string;
                  }
                | { authenticationMode?: "assumeRole"; assumeRoleArn: string };
              enveloped?: false | true;
            };
          }
        | {
            status?: string;
            ruleType: "aws/kinesis";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              region: string;
              streamName: string;
              partitionKey: string;
              authentication:
                | {
                    authenticationMode?: "credentials";
                    accessKeyId: string;
                    secretAccessKey: string;
                  }
                | { authenticationMode?: "assumeRole"; assumeRoleArn: string };
              enveloped?: false | true;
              format: string;
            };
          }
        | {
            status?: string;
            ruleType: "aws/sqs";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              region: string;
              awsAccountId: string;
              queueName: string;
              authentication:
                | {
                    authenticationMode?: "credentials";
                    accessKeyId: string;
                    secretAccessKey: string;
                  }
                | { authenticationMode?: "assumeRole"; assumeRoleArn: string };
              enveloped?: false | true;
              format?: string;
            };
          }
        | {
            status?: string;
            ruleType: "amqp";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              queueId: string;
              headers?: { name?: string; value?: string }[];
              enveloped?: false | true;
              format?: string;
            };
          }
        | {
            ruleType: "amqp/external";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              url: string;
              routingKey: string;
              mandatoryRoute: false | true;
              persistentMessages: false | true;
              messageTtl?: number;
              headers?: { name?: string; value?: string }[];
              enveloped?: false | true;
              format?: string;
            };
          }
        | {
            status?: string;
            ruleType: "kafka";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              routingKey: string;
              brokers: string[];
              auth: {
                sasl?: {
                  mechanism?: "plain" | "scram-sha-256" | "scram-sha-512";
                  username?: string;
                  password?: string;
                };
              };
              enveloped?: false | true;
              format?: string;
            };
          }
        | {
            status?: string;
            ruleType: "pulsar";
            requestMode: string;
            source: { channelFilter: string; type: string };
            target: {
              routingKey?: string;
              topic: string;
              serviceUrl: string;
              tlsTrustCerts?: string[];
              authentication: { authenticationMode: "token"; token: string };
              enveloped?: false | true;
              format?: string;
            };
          }
        | {
            status?: string;
            ruleType: "ingress-postgres-outbox";
            target: {
              url: string;
              outboxTableSchema: string;
              outboxTableName: string;
              nodesTableSchema: string;
              nodesTableName: string;
              sslMode: "prefer" | "require" | "verify-ca" | "verify-full";
              sslRootCert?: string;
            };
          },
    ) {
      const url = new URL(`https://control.ably.net/v1/apps/${app_id}/rules`);
    
      const response = await fetch(url, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Authorization: "Bearer " + auth.accessToken,
        },
        body: JSON.stringify(body),
      });
      if (!response.ok) {
        const text = await response.text();
        throw new Error(`${response.status} ${text}`);
      }
      return await response.json();
    }
    

    Submitted by hugo697 220 days ago