@aloma.io/integration-sdk 3.6.6 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/builder/index.d.mts +1 -1
 - package/build/builder/index.mjs +13 -16
 - package/build/builder/runtime-context.mjs +3 -2
 - package/build/cli.mjs +15 -4
 - package/build/internal/dispatcher/index.d.mts +11 -17
 - package/build/internal/dispatcher/index.mjs +12 -1
 - package/build/internal/fetcher/fetcher.d.mts +15 -0
 - package/build/internal/fetcher/fetcher.mjs +97 -0
 - package/build/internal/fetcher/index.d.mts +1 -0
 - package/build/internal/fetcher/index.mjs +1 -0
 - package/build/internal/fetcher/oauth-fetcher.d.mts +32 -0
 - package/build/internal/fetcher/oauth-fetcher.mjs +114 -0
 - package/build/internal/index.d.mts +8 -7
 - package/build/internal/index.mjs +14 -241
 - package/build/internal/util/index.d.mts +5 -0
 - package/build/internal/util/index.mjs +45 -0
 - package/build/internal/util/jwe/index.d.mts +5 -8
 - package/build/internal/util/jwe/index.mjs +3 -0
 - package/build/transform/index.d.mts +5 -0
 - package/build/transform/index.mjs +79 -0
 - package/package.json +1 -1
 - package/src/builder/index.mts +14 -17
 - package/src/builder/runtime-context.mts +4 -1
 - package/src/cli.mts +19 -4
 - package/src/internal/dispatcher/{index.mjs → index.mts} +14 -2
 - package/src/internal/fetcher/fetcher.mts +126 -0
 - package/src/internal/fetcher/oauth-fetcher.mts +147 -0
 - package/src/internal/{index.mjs → index.mts} +18 -317
 - package/src/internal/util/index.mts +57 -0
 - package/src/internal/util/jwe/{index.mjs → index.mts} +7 -4
 - /package/src/internal/util/jwe/{cli.mjs → cli.mts} +0 -0
 - /package/src/{builder/transform → transform}/index.mts +0 -0
 
    
        package/build/builder/index.mjs
    CHANGED
    
    | 
         @@ -1,17 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import fs from "node:fs";
         
     | 
| 
       2 
     | 
    
         
            -
            import parseTypes from "./transform/index.mjs";
         
     | 
| 
       3 
     | 
    
         
            -
            import RuntimeContext from "./runtime-context.mjs";
         
     | 
| 
       4 
     | 
    
         
            -
            import { fileURLToPath } from "node:url";
         
     | 
| 
       5 
2 
     | 
    
         
             
            import path from "node:path";
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { fileURLToPath } from "node:url";
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { notEmpty } from "../internal/util/index.mjs";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import RuntimeContext from "./runtime-context.mjs";
         
     | 
| 
      
 6 
     | 
    
         
            +
            //const offset = '/../../../../../'; 
         
     | 
| 
      
 7 
     | 
    
         
            +
            const offset = '/../../../..//../../../..//../../../..//../../../..//../../../..//Users/xg04123/NetBeansProjects/automation/connector-google-drive/';
         
     | 
| 
       6 
8 
     | 
    
         
             
            const __dirname = path.dirname(fileURLToPath(import.meta.url));
         
     | 
| 
       7 
     | 
    
         
            -
            const notEmpty = (what, name) => {
         
     | 
| 
       8 
     | 
    
         
            -
                if (!what?.trim())
         
     | 
| 
       9 
     | 
    
         
            -
                    throw new Error(`${name} cannot be empty`);
         
     | 
| 
       10 
     | 
    
         
            -
                return what;
         
     | 
| 
       11 
     | 
    
         
            -
            };
         
     | 
| 
       12 
9 
     | 
    
         
             
            export class Builder {
         
     | 
| 
       13 
10 
     | 
    
         
             
                data = {
         
     | 
| 
       14 
     | 
    
         
            -
                    controller: "./build 
     | 
| 
      
 11 
     | 
    
         
            +
                    controller: "./build/.controller.json",
         
     | 
| 
       15 
12 
     | 
    
         
             
                };
         
     | 
| 
       16 
13 
     | 
    
         
             
                config(arg) {
         
     | 
| 
       17 
14 
     | 
    
         
             
                    this.data.config = arg;
         
     | 
| 
         @@ -27,29 +24,29 @@ export class Builder { 
     | 
|
| 
       27 
24 
     | 
    
         
             
                }
         
     | 
| 
       28 
25 
     | 
    
         
             
                async build() {
         
     | 
| 
       29 
26 
     | 
    
         
             
                    await this.parsePackageJson();
         
     | 
| 
       30 
     | 
    
         
            -
                    await this. 
     | 
| 
      
 27 
     | 
    
         
            +
                    await this.loadTypes();
         
     | 
| 
       31 
28 
     | 
    
         
             
                    await this.checkIcon();
         
     | 
| 
       32 
29 
     | 
    
         
             
                    // @ts-ignore
         
     | 
| 
       33 
     | 
    
         
            -
                    const Controller = (await import(__dirname + " 
     | 
| 
      
 30 
     | 
    
         
            +
                    const Controller = (await import(__dirname + offset + "build/controller/index.mjs")).default;
         
     | 
| 
       34 
31 
     | 
    
         
             
                    return new RuntimeContext(new Controller(), this.data);
         
     | 
| 
       35 
32 
     | 
    
         
             
                }
         
     | 
| 
       36 
33 
     | 
    
         
             
                async checkIcon() {
         
     | 
| 
       37 
34 
     | 
    
         
             
                    const data = this.data;
         
     | 
| 
       38 
     | 
    
         
            -
                    const root = __dirname +  
     | 
| 
      
 35 
     | 
    
         
            +
                    const root = __dirname + offset;
         
     | 
| 
       39 
36 
     | 
    
         
             
                    data.icon = `${root}/logo.png`;
         
     | 
| 
       40 
37 
     | 
    
         
             
                }
         
     | 
| 
       41 
38 
     | 
    
         
             
                async parsePackageJson() {
         
     | 
| 
       42 
39 
     | 
    
         
             
                    const data = this.data;
         
     | 
| 
       43 
     | 
    
         
            -
                    const packageJson = JSON.parse(fs.readFileSync(__dirname + " 
     | 
| 
      
 40 
     | 
    
         
            +
                    const packageJson = JSON.parse(fs.readFileSync(__dirname + offset + "package.json", {
         
     | 
| 
       44 
41 
     | 
    
         
             
                        encoding: "utf-8",
         
     | 
| 
       45 
42 
     | 
    
         
             
                    }));
         
     | 
| 
       46 
43 
     | 
    
         
             
                    notEmpty((data.id = packageJson.connectorId), "id");
         
     | 
| 
       47 
44 
     | 
    
         
             
                    notEmpty((data.version = packageJson.version), "version");
         
     | 
| 
       48 
45 
     | 
    
         
             
                }
         
     | 
| 
       49 
     | 
    
         
            -
                async  
     | 
| 
      
 46 
     | 
    
         
            +
                async loadTypes() {
         
     | 
| 
       50 
47 
     | 
    
         
             
                    notEmpty(this.data.controller, "controller");
         
     | 
| 
       51 
     | 
    
         
            -
                    const content = fs.readFileSync(this.data.controller);
         
     | 
| 
       52 
     | 
    
         
            -
                    const { text, methods } =  
     | 
| 
      
 48 
     | 
    
         
            +
                    const content = fs.readFileSync(this.data.controller, { encoding: 'utf-8' });
         
     | 
| 
      
 49 
     | 
    
         
            +
                    const { text, methods } = JSON.parse(content);
         
     | 
| 
       53 
50 
     | 
    
         
             
                    this.data.types = text;
         
     | 
| 
       54 
51 
     | 
    
         
             
                    this.data.methods = methods;
         
     | 
| 
       55 
52 
     | 
    
         
             
                }
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import fs from "node:fs";
         
     | 
| 
       1 
2 
     | 
    
         
             
            import { AbstractController } from "../controller/index.mjs";
         
     | 
| 
       2 
3 
     | 
    
         
             
            import { Connector } from "../internal/index.mjs";
         
     | 
| 
       3 
     | 
    
         
            -
            import fs from "node:fs";
         
     | 
| 
       4 
4 
     | 
    
         
             
            export default class RuntimeContext {
         
     | 
| 
       5 
5 
     | 
    
         
             
                controller;
         
     | 
| 
       6 
6 
     | 
    
         
             
                data;
         
     | 
| 
         @@ -10,8 +10,9 @@ export default class RuntimeContext { 
     | 
|
| 
       10 
10 
     | 
    
         
             
                }
         
     | 
| 
       11 
11 
     | 
    
         
             
                async start() {
         
     | 
| 
       12 
12 
     | 
    
         
             
                    const controller = this.controller;
         
     | 
| 
       13 
     | 
    
         
            -
                    if (!(controller instanceof AbstractController))
         
     | 
| 
      
 13 
     | 
    
         
            +
                    if (!(controller instanceof AbstractController)) {
         
     | 
| 
       14 
14 
     | 
    
         
             
                        throw new Error("the controller needs to extend AbstractController");
         
     | 
| 
      
 15 
     | 
    
         
            +
                    }
         
     | 
| 
       15 
16 
     | 
    
         
             
                    const data = this.data;
         
     | 
| 
       16 
17 
     | 
    
         
             
                    let icon;
         
     | 
| 
       17 
18 
     | 
    
         
             
                    try {
         
     | 
    
        package/build/cli.mjs
    CHANGED
    
    | 
         @@ -1,11 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env node
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { Command } from "commander";
         
     | 
| 
      
 3 
     | 
    
         
            +
            import ChildProcess from "node:child_process";
         
     | 
| 
       3 
4 
     | 
    
         
             
            import fs from "node:fs";
         
     | 
| 
       4 
     | 
    
         
            -
            import { fileURLToPath } from "node:url";
         
     | 
| 
       5 
5 
     | 
    
         
             
            import path from "node:path";
         
     | 
| 
       6 
     | 
    
         
            -
            import  
     | 
| 
      
 6 
     | 
    
         
            +
            import { fileURLToPath } from "node:url";
         
     | 
| 
       7 
7 
     | 
    
         
             
            import util from "node:util";
         
     | 
| 
       8 
     | 
    
         
            -
            import  
     | 
| 
      
 8 
     | 
    
         
            +
            import { notEmpty } from "./internal/util/index.mjs";
         
     | 
| 
      
 9 
     | 
    
         
            +
            import JWE from "./internal/util/jwe/index.mjs";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import parseTypes from "./transform/index.mjs";
         
     | 
| 
       9 
11 
     | 
    
         
             
            const exec = util.promisify(ChildProcess.exec);
         
     | 
| 
       10 
12 
     | 
    
         
             
            const __dirname = path.dirname(fileURLToPath(import.meta.url));
         
     | 
| 
       11 
13 
     | 
    
         
             
            const files = [
         
     | 
| 
         @@ -87,8 +89,17 @@ program 
     | 
|
| 
       87 
89 
     | 
    
         
             
                .command("build")
         
     | 
| 
       88 
90 
     | 
    
         
             
                .description("Build the current connector project")
         
     | 
| 
       89 
91 
     | 
    
         
             
                .action(async (str, options) => {
         
     | 
| 
       90 
     | 
    
         
            -
                const { stdout, stderr } = await exec(`rm -rf build; mkdir -p build 
     | 
| 
      
 92 
     | 
    
         
            +
                const { stdout, stderr } = await exec(`rm -rf build; mkdir -p build`);
         
     | 
| 
       91 
93 
     | 
    
         
             
                if (stdout)
         
     | 
| 
       92 
94 
     | 
    
         
             
                    console.log(stdout);
         
     | 
| 
      
 95 
     | 
    
         
            +
                new Extractor().extract('./src/controller/index.mts', './build/.controller.json');
         
     | 
| 
       93 
96 
     | 
    
         
             
            });
         
     | 
| 
      
 97 
     | 
    
         
            +
            class Extractor {
         
     | 
| 
      
 98 
     | 
    
         
            +
                async extract(source, target) {
         
     | 
| 
      
 99 
     | 
    
         
            +
                    notEmpty(source, "source");
         
     | 
| 
      
 100 
     | 
    
         
            +
                    fs.readFileSync(source);
         
     | 
| 
      
 101 
     | 
    
         
            +
                    const { text, methods } = await parseTypes(source);
         
     | 
| 
      
 102 
     | 
    
         
            +
                    fs.writeFileSync(target, JSON.stringify({ text, methods }), { encoding: 'utf-8' });
         
     | 
| 
      
 103 
     | 
    
         
            +
                }
         
     | 
| 
      
 104 
     | 
    
         
            +
            }
         
     | 
| 
       94 
105 
     | 
    
         
             
            program.parse();
         
     | 
| 
         @@ -1,29 +1,21 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            export class Dispatcher {
         
     | 
| 
       2 
     | 
    
         
            -
                _config 
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
                 
     | 
| 
      
 1 
     | 
    
         
            +
            export default class Dispatcher {
         
     | 
| 
      
 2 
     | 
    
         
            +
                private _config;
         
     | 
| 
      
 3 
     | 
    
         
            +
                private _main;
         
     | 
| 
      
 4 
     | 
    
         
            +
                _oauth: any;
         
     | 
| 
      
 5 
     | 
    
         
            +
                private _types;
         
     | 
| 
      
 6 
     | 
    
         
            +
                private _resolvers;
         
     | 
| 
      
 7 
     | 
    
         
            +
                constructor();
         
     | 
| 
       5 
8 
     | 
    
         
             
                main(what: any): this;
         
     | 
| 
       6 
     | 
    
         
            -
                _main: any;
         
     | 
| 
       7 
9 
     | 
    
         
             
                oauth(arg: any): this;
         
     | 
| 
       8 
     | 
    
         
            -
                _oauth: any;
         
     | 
| 
       9 
10 
     | 
    
         
             
                types(what: any): this;
         
     | 
| 
       10 
     | 
    
         
            -
                 
     | 
| 
       11 
     | 
    
         
            -
                config({ fields, oauth, description, summary }: {
         
     | 
| 
       12 
     | 
    
         
            -
                    fields: any;
         
     | 
| 
       13 
     | 
    
         
            -
                    oauth: any;
         
     | 
| 
       14 
     | 
    
         
            -
                    description: any;
         
     | 
| 
       15 
     | 
    
         
            -
                    summary: any;
         
     | 
| 
       16 
     | 
    
         
            -
                }): this;
         
     | 
| 
      
 11 
     | 
    
         
            +
                config({ fields, oauth, description, summary }: any): this;
         
     | 
| 
       17 
12 
     | 
    
         
             
                resolvers(what: any): this;
         
     | 
| 
       18 
     | 
    
         
            -
                _resolvers: any;
         
     | 
| 
       19 
13 
     | 
    
         
             
                endpoint(what: any, notOptional: any): this;
         
     | 
| 
       20 
14 
     | 
    
         
             
                startOAuth(): void;
         
     | 
| 
       21 
15 
     | 
    
         
             
                finishOAuth(): void;
         
     | 
| 
       22 
16 
     | 
    
         
             
                build(): {
         
     | 
| 
       23 
17 
     | 
    
         
             
                    introspect: () => any;
         
     | 
| 
       24 
     | 
    
         
            -
                    configSchema: () =>  
     | 
| 
       25 
     | 
    
         
            -
                        fields: {};
         
     | 
| 
       26 
     | 
    
         
            -
                    };
         
     | 
| 
      
 18 
     | 
    
         
            +
                    configSchema: () => any;
         
     | 
| 
       27 
19 
     | 
    
         
             
                    execute: ({ query, variables }: {
         
     | 
| 
       28 
20 
     | 
    
         
             
                        query: any;
         
     | 
| 
       29 
21 
     | 
    
         
             
                        variables: any;
         
     | 
| 
         @@ -31,4 +23,6 @@ export class Dispatcher { 
     | 
|
| 
       31 
23 
     | 
    
         
             
                    processPacket: (packet: any) => Promise<any>;
         
     | 
| 
       32 
24 
     | 
    
         
             
                    start: (transport: any) => Promise<void>;
         
     | 
| 
       33 
25 
     | 
    
         
             
                };
         
     | 
| 
      
 26 
     | 
    
         
            +
                onConfig(arg0: any): void;
         
     | 
| 
       34 
27 
     | 
    
         
             
            }
         
     | 
| 
      
 28 
     | 
    
         
            +
            export { Dispatcher };
         
     | 
| 
         @@ -1,4 +1,9 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class Dispatcher {
         
     | 
| 
      
 1 
     | 
    
         
            +
            export default class Dispatcher {
         
     | 
| 
      
 2 
     | 
    
         
            +
                _config;
         
     | 
| 
      
 3 
     | 
    
         
            +
                _main;
         
     | 
| 
      
 4 
     | 
    
         
            +
                _oauth;
         
     | 
| 
      
 5 
     | 
    
         
            +
                _types;
         
     | 
| 
      
 6 
     | 
    
         
            +
                _resolvers;
         
     | 
| 
       2 
7 
     | 
    
         
             
                constructor() {
         
     | 
| 
       3 
8 
     | 
    
         
             
                    this._config = { fields: {} };
         
     | 
| 
       4 
9 
     | 
    
         
             
                }
         
     | 
| 
         @@ -152,11 +157,14 @@ ${arg.configurableClientScope} 
     | 
|
| 
       152 
157 
     | 
    
         
             
                    const processPacket = async (packet) => {
         
     | 
| 
       153 
158 
     | 
    
         
             
                        switch (packet.method()) {
         
     | 
| 
       154 
159 
     | 
    
         
             
                            case "connector.introspect":
         
     | 
| 
      
 160 
     | 
    
         
            +
                                // @ts-ignore
         
     | 
| 
       155 
161 
     | 
    
         
             
                                const intro = await introspect({});
         
     | 
| 
       156 
162 
     | 
    
         
             
                                return { configSchema: local._config, introspect: intro };
         
     | 
| 
       157 
163 
     | 
    
         
             
                            case "connector.start-oauth":
         
     | 
| 
      
 164 
     | 
    
         
            +
                                // @ts-ignore
         
     | 
| 
       158 
165 
     | 
    
         
             
                                return await local.startOAuth(packet.args());
         
     | 
| 
       159 
166 
     | 
    
         
             
                            case "connector.finish-oauth":
         
     | 
| 
      
 167 
     | 
    
         
            +
                                // @ts-ignore
         
     | 
| 
       160 
168 
     | 
    
         
             
                                return await local.finishOAuth(packet.args());
         
     | 
| 
       161 
169 
     | 
    
         
             
                            case "connector.query":
         
     | 
| 
       162 
170 
     | 
    
         
             
                                const ret = await execute(packet.args());
         
     | 
| 
         @@ -178,5 +186,8 @@ ${arg.configurableClientScope} 
     | 
|
| 
       178 
186 
     | 
    
         
             
                        start,
         
     | 
| 
       179 
187 
     | 
    
         
             
                    };
         
     | 
| 
       180 
188 
     | 
    
         
             
                }
         
     | 
| 
      
 189 
     | 
    
         
            +
                onConfig(arg0) {
         
     | 
| 
      
 190 
     | 
    
         
            +
                    throw new Error("Method not implemented.");
         
     | 
| 
      
 191 
     | 
    
         
            +
                }
         
     | 
| 
       181 
192 
     | 
    
         
             
            }
         
     | 
| 
       182 
193 
     | 
    
         
             
            export { Dispatcher };
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            export default class Fetcher {
         
     | 
| 
      
 2 
     | 
    
         
            +
                retry: number;
         
     | 
| 
      
 3 
     | 
    
         
            +
                baseUrl: any;
         
     | 
| 
      
 4 
     | 
    
         
            +
                onResponse: any;
         
     | 
| 
      
 5 
     | 
    
         
            +
                customize0: any;
         
     | 
| 
      
 6 
     | 
    
         
            +
                constructor({ retry, baseUrl, onResponse, customize }: {
         
     | 
| 
      
 7 
     | 
    
         
            +
                    retry?: number | undefined;
         
     | 
| 
      
 8 
     | 
    
         
            +
                    baseUrl: any;
         
     | 
| 
      
 9 
     | 
    
         
            +
                    onResponse: any;
         
     | 
| 
      
 10 
     | 
    
         
            +
                    customize: any;
         
     | 
| 
      
 11 
     | 
    
         
            +
                });
         
     | 
| 
      
 12 
     | 
    
         
            +
                customize(options?: {}, args?: {}): Promise<void>;
         
     | 
| 
      
 13 
     | 
    
         
            +
                onError(e: any, url: string, options: any, retries: number, args: any, rateLimit?: any): Promise<unknown>;
         
     | 
| 
      
 14 
     | 
    
         
            +
                fetch(url: string, options: any, retries: number, args?: any): Promise<any>;
         
     | 
| 
      
 15 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1,97 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { unwrap } from "../util/index.mjs";
         
     | 
| 
      
 2 
     | 
    
         
            +
            export default class Fetcher {
         
     | 
| 
      
 3 
     | 
    
         
            +
                retry;
         
     | 
| 
      
 4 
     | 
    
         
            +
                baseUrl;
         
     | 
| 
      
 5 
     | 
    
         
            +
                onResponse;
         
     | 
| 
      
 6 
     | 
    
         
            +
                customize0;
         
     | 
| 
      
 7 
     | 
    
         
            +
                constructor({ retry = 5, baseUrl, onResponse, customize }) {
         
     | 
| 
      
 8 
     | 
    
         
            +
                    this.retry = retry;
         
     | 
| 
      
 9 
     | 
    
         
            +
                    this.baseUrl = baseUrl;
         
     | 
| 
      
 10 
     | 
    
         
            +
                    this.onResponse = onResponse;
         
     | 
| 
      
 11 
     | 
    
         
            +
                    if (customize)
         
     | 
| 
      
 12 
     | 
    
         
            +
                        this.customize0 = customize;
         
     | 
| 
      
 13 
     | 
    
         
            +
                }
         
     | 
| 
      
 14 
     | 
    
         
            +
                async customize(options = {}, args = {}) {
         
     | 
| 
      
 15 
     | 
    
         
            +
                    if (this.customize0)
         
     | 
| 
      
 16 
     | 
    
         
            +
                        await this.customize0(options, args);
         
     | 
| 
      
 17 
     | 
    
         
            +
                }
         
     | 
| 
      
 18 
     | 
    
         
            +
                async onError(e, url, options, retries, args, rateLimit) {
         
     | 
| 
      
 19 
     | 
    
         
            +
                    var local = this;
         
     | 
| 
      
 20 
     | 
    
         
            +
                    return new Promise((resolve, reject) => {
         
     | 
| 
      
 21 
     | 
    
         
            +
                        setTimeout(async () => {
         
     | 
| 
      
 22 
     | 
    
         
            +
                            try {
         
     | 
| 
      
 23 
     | 
    
         
            +
                                resolve(await local.fetch(url, options, retries, args));
         
     | 
| 
      
 24 
     | 
    
         
            +
                            }
         
     | 
| 
      
 25 
     | 
    
         
            +
                            catch (e) {
         
     | 
| 
      
 26 
     | 
    
         
            +
                                reject(e);
         
     | 
| 
      
 27 
     | 
    
         
            +
                            }
         
     | 
| 
      
 28 
     | 
    
         
            +
                        }, rateLimit ? 10000 : 500);
         
     | 
| 
      
 29 
     | 
    
         
            +
                    });
         
     | 
| 
      
 30 
     | 
    
         
            +
                }
         
     | 
| 
      
 31 
     | 
    
         
            +
                async fetch(url, options = {}, retries, args = {}) {
         
     | 
| 
      
 32 
     | 
    
         
            +
                    var local = this, baseUrl = local.baseUrl;
         
     | 
| 
      
 33 
     | 
    
         
            +
                    if (retries == null)
         
     | 
| 
      
 34 
     | 
    
         
            +
                        retries = local.retry;
         
     | 
| 
      
 35 
     | 
    
         
            +
                    let theURL = !baseUrl
         
     | 
| 
      
 36 
     | 
    
         
            +
                        ? url
         
     | 
| 
      
 37 
     | 
    
         
            +
                        : `${baseUrl?.endsWith("/") ? baseUrl : baseUrl + "/"}${url}`.replace(/\/\/+/gi, "/");
         
     | 
| 
      
 38 
     | 
    
         
            +
                    try {
         
     | 
| 
      
 39 
     | 
    
         
            +
                        options.url = url;
         
     | 
| 
      
 40 
     | 
    
         
            +
                        await local.customize(options, args);
         
     | 
| 
      
 41 
     | 
    
         
            +
                        url = options.url;
         
     | 
| 
      
 42 
     | 
    
         
            +
                        delete options.url;
         
     | 
| 
      
 43 
     | 
    
         
            +
                        theURL = !baseUrl
         
     | 
| 
      
 44 
     | 
    
         
            +
                            ? url
         
     | 
| 
      
 45 
     | 
    
         
            +
                            : `${baseUrl?.endsWith("/") ? baseUrl : baseUrl + "/"}${url}`.replace(/\/\/+/gi, "/");
         
     | 
| 
      
 46 
     | 
    
         
            +
                        if (!options?.headers || !options?.headers?.Accept) {
         
     | 
| 
      
 47 
     | 
    
         
            +
                            options.headers = {
         
     | 
| 
      
 48 
     | 
    
         
            +
                                ...options.headers,
         
     | 
| 
      
 49 
     | 
    
         
            +
                                Accept: "application/json",
         
     | 
| 
      
 50 
     | 
    
         
            +
                            };
         
     | 
| 
      
 51 
     | 
    
         
            +
                        }
         
     | 
| 
      
 52 
     | 
    
         
            +
                        if (!options?.headers || !options?.headers?.["Content-type"]) {
         
     | 
| 
      
 53 
     | 
    
         
            +
                            options.headers = {
         
     | 
| 
      
 54 
     | 
    
         
            +
                                ...options.headers,
         
     | 
| 
      
 55 
     | 
    
         
            +
                                "Content-type": "application/json",
         
     | 
| 
      
 56 
     | 
    
         
            +
                            };
         
     | 
| 
      
 57 
     | 
    
         
            +
                        }
         
     | 
| 
      
 58 
     | 
    
         
            +
                        if (!(options?.method === "GET" || options?.method === "HEAD") &&
         
     | 
| 
      
 59 
     | 
    
         
            +
                            options?.body &&
         
     | 
| 
      
 60 
     | 
    
         
            +
                            !(typeof options.body === "string") &&
         
     | 
| 
      
 61 
     | 
    
         
            +
                            options?.headers?.["Content-type"] === "application/json") {
         
     | 
| 
      
 62 
     | 
    
         
            +
                            options.body = JSON.stringify(options.body);
         
     | 
| 
      
 63 
     | 
    
         
            +
                        }
         
     | 
| 
      
 64 
     | 
    
         
            +
                        const timeout = Math.min(options?.timeout || 30 * 60 * 1000, 30 * 60 * 1000);
         
     | 
| 
      
 65 
     | 
    
         
            +
                        const ret = await fetch(theURL, {
         
     | 
| 
      
 66 
     | 
    
         
            +
                            ...options,
         
     | 
| 
      
 67 
     | 
    
         
            +
                            signal: AbortSignal.timeout(timeout),
         
     | 
| 
      
 68 
     | 
    
         
            +
                        });
         
     | 
| 
      
 69 
     | 
    
         
            +
                        const status = await ret.status;
         
     | 
| 
      
 70 
     | 
    
         
            +
                        if (status > 399) {
         
     | 
| 
      
 71 
     | 
    
         
            +
                            const text = await ret.text();
         
     | 
| 
      
 72 
     | 
    
         
            +
                            const e = new Error(status + " " + text);
         
     | 
| 
      
 73 
     | 
    
         
            +
                            e.status = status;
         
     | 
| 
      
 74 
     | 
    
         
            +
                            throw e;
         
     | 
| 
      
 75 
     | 
    
         
            +
                        }
         
     | 
| 
      
 76 
     | 
    
         
            +
                        if (local.onResponse) {
         
     | 
| 
      
 77 
     | 
    
         
            +
                            await local.onResponse(ret);
         
     | 
| 
      
 78 
     | 
    
         
            +
                        }
         
     | 
| 
      
 79 
     | 
    
         
            +
                        return unwrap(ret, options);
         
     | 
| 
      
 80 
     | 
    
         
            +
                    }
         
     | 
| 
      
 81 
     | 
    
         
            +
                    catch (e) {
         
     | 
| 
      
 82 
     | 
    
         
            +
                        // too many requests
         
     | 
| 
      
 83 
     | 
    
         
            +
                        if (e.status === 429) {
         
     | 
| 
      
 84 
     | 
    
         
            +
                            return local.onError(e, url, options, retries, args, true);
         
     | 
| 
      
 85 
     | 
    
         
            +
                        }
         
     | 
| 
      
 86 
     | 
    
         
            +
                        // bad request
         
     | 
| 
      
 87 
     | 
    
         
            +
                        if (e.status === 400 || e.status === 422) {
         
     | 
| 
      
 88 
     | 
    
         
            +
                            throw e;
         
     | 
| 
      
 89 
     | 
    
         
            +
                        }
         
     | 
| 
      
 90 
     | 
    
         
            +
                        --retries;
         
     | 
| 
      
 91 
     | 
    
         
            +
                        console.log(theURL, e);
         
     | 
| 
      
 92 
     | 
    
         
            +
                        if (retries <= 0)
         
     | 
| 
      
 93 
     | 
    
         
            +
                            throw e;
         
     | 
| 
      
 94 
     | 
    
         
            +
                        return local.onError(e, url, options, retries, args);
         
     | 
| 
      
 95 
     | 
    
         
            +
                    }
         
     | 
| 
      
 96 
     | 
    
         
            +
                }
         
     | 
| 
      
 97 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            export {};
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            export {};
         
     | 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import Fetcher from "./fetcher.mjs";
         
     | 
| 
      
 2 
     | 
    
         
            +
            declare class OAuthFetcher extends Fetcher {
         
     | 
| 
      
 3 
     | 
    
         
            +
                oauth: any;
         
     | 
| 
      
 4 
     | 
    
         
            +
                _getToken: any;
         
     | 
| 
      
 5 
     | 
    
         
            +
                constructor({ oauth, retry, getToken, baseUrl, onResponse, customize }: {
         
     | 
| 
      
 6 
     | 
    
         
            +
                    oauth: any;
         
     | 
| 
      
 7 
     | 
    
         
            +
                    retry?: number | undefined;
         
     | 
| 
      
 8 
     | 
    
         
            +
                    getToken: any;
         
     | 
| 
      
 9 
     | 
    
         
            +
                    baseUrl: any;
         
     | 
| 
      
 10 
     | 
    
         
            +
                    onResponse: any;
         
     | 
| 
      
 11 
     | 
    
         
            +
                    customize: any;
         
     | 
| 
      
 12 
     | 
    
         
            +
                });
         
     | 
| 
      
 13 
     | 
    
         
            +
                getToken(force: any): Promise<any>;
         
     | 
| 
      
 14 
     | 
    
         
            +
                onError(e: any, url: any, options: any, retries: any, args: any, rateLimit: any): Promise<unknown>;
         
     | 
| 
      
 15 
     | 
    
         
            +
                periodicRefresh(): Promise<void>;
         
     | 
| 
      
 16 
     | 
    
         
            +
                customize(options: any, args?: any): Promise<void>;
         
     | 
| 
      
 17 
     | 
    
         
            +
            }
         
     | 
| 
      
 18 
     | 
    
         
            +
            export declare class OAuth {
         
     | 
| 
      
 19 
     | 
    
         
            +
                _data: any;
         
     | 
| 
      
 20 
     | 
    
         
            +
                saveOAuthResult: any;
         
     | 
| 
      
 21 
     | 
    
         
            +
                obtainViaRefreshToken: any;
         
     | 
| 
      
 22 
     | 
    
         
            +
                clients: any[];
         
     | 
| 
      
 23 
     | 
    
         
            +
                constructor(data: any, saveOAuthResult: any, getRefreshToken: any);
         
     | 
| 
      
 24 
     | 
    
         
            +
                data(): any;
         
     | 
| 
      
 25 
     | 
    
         
            +
                accessToken(): any;
         
     | 
| 
      
 26 
     | 
    
         
            +
                refreshToken(): any;
         
     | 
| 
      
 27 
     | 
    
         
            +
                update(accessToken: any, refreshToken: any): Promise<void>;
         
     | 
| 
      
 28 
     | 
    
         
            +
                periodicRefresh(): Promise<void>;
         
     | 
| 
      
 29 
     | 
    
         
            +
                invalidate(err: any): Promise<void>;
         
     | 
| 
      
 30 
     | 
    
         
            +
                getClient(arg?: any): OAuthFetcher;
         
     | 
| 
      
 31 
     | 
    
         
            +
            }
         
     | 
| 
      
 32 
     | 
    
         
            +
            export {};
         
     | 
| 
         @@ -0,0 +1,114 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import Fetcher from "./fetcher.mjs";
         
     | 
| 
      
 2 
     | 
    
         
            +
            class OAuthFetcher extends Fetcher {
         
     | 
| 
      
 3 
     | 
    
         
            +
                oauth;
         
     | 
| 
      
 4 
     | 
    
         
            +
                _getToken;
         
     | 
| 
      
 5 
     | 
    
         
            +
                constructor({ oauth, retry = 5, getToken, baseUrl, onResponse, customize }) {
         
     | 
| 
      
 6 
     | 
    
         
            +
                    super({ retry, baseUrl, onResponse, customize });
         
     | 
| 
      
 7 
     | 
    
         
            +
                    this.oauth = oauth;
         
     | 
| 
      
 8 
     | 
    
         
            +
                    this._getToken = getToken;
         
     | 
| 
      
 9 
     | 
    
         
            +
                }
         
     | 
| 
      
 10 
     | 
    
         
            +
                async getToken(force) {
         
     | 
| 
      
 11 
     | 
    
         
            +
                    var local = this, oauth = local.oauth;
         
     | 
| 
      
 12 
     | 
    
         
            +
                    if (local._getToken)
         
     | 
| 
      
 13 
     | 
    
         
            +
                        return local._getToken(force);
         
     | 
| 
      
 14 
     | 
    
         
            +
                    if (!force && oauth.accessToken())
         
     | 
| 
      
 15 
     | 
    
         
            +
                        return oauth.accessToken();
         
     | 
| 
      
 16 
     | 
    
         
            +
                    const refreshToken = oauth.refreshToken();
         
     | 
| 
      
 17 
     | 
    
         
            +
                    try {
         
     | 
| 
      
 18 
     | 
    
         
            +
                        if (!refreshToken) {
         
     | 
| 
      
 19 
     | 
    
         
            +
                            throw new Error("have no access_token and no refresh_token");
         
     | 
| 
      
 20 
     | 
    
         
            +
                        }
         
     | 
| 
      
 21 
     | 
    
         
            +
                        const ret = await oauth.obtainViaRefreshToken(oauth.refreshToken());
         
     | 
| 
      
 22 
     | 
    
         
            +
                        if (ret.access_token) {
         
     | 
| 
      
 23 
     | 
    
         
            +
                            oauth.update(ret.access_token, ret.refresh_token);
         
     | 
| 
      
 24 
     | 
    
         
            +
                            return ret.access_token;
         
     | 
| 
      
 25 
     | 
    
         
            +
                        }
         
     | 
| 
      
 26 
     | 
    
         
            +
                        else {
         
     | 
| 
      
 27 
     | 
    
         
            +
                            throw new Error("could not obtain access token via refresh token");
         
     | 
| 
      
 28 
     | 
    
         
            +
                        }
         
     | 
| 
      
 29 
     | 
    
         
            +
                    }
         
     | 
| 
      
 30 
     | 
    
         
            +
                    catch (e) {
         
     | 
| 
      
 31 
     | 
    
         
            +
                        oauth.invalidate(e);
         
     | 
| 
      
 32 
     | 
    
         
            +
                        throw e;
         
     | 
| 
      
 33 
     | 
    
         
            +
                    }
         
     | 
| 
      
 34 
     | 
    
         
            +
                }
         
     | 
| 
      
 35 
     | 
    
         
            +
                async onError(e, url, options, retries, args, rateLimit) {
         
     | 
| 
      
 36 
     | 
    
         
            +
                    var local = this;
         
     | 
| 
      
 37 
     | 
    
         
            +
                    return new Promise((resolve, reject) => {
         
     | 
| 
      
 38 
     | 
    
         
            +
                        setTimeout(async () => {
         
     | 
| 
      
 39 
     | 
    
         
            +
                            try {
         
     | 
| 
      
 40 
     | 
    
         
            +
                                resolve(await local.fetch(url, options, retries, {
         
     | 
| 
      
 41 
     | 
    
         
            +
                                    forceTokenRefresh: e.status === 401,
         
     | 
| 
      
 42 
     | 
    
         
            +
                                }));
         
     | 
| 
      
 43 
     | 
    
         
            +
                            }
         
     | 
| 
      
 44 
     | 
    
         
            +
                            catch (e) {
         
     | 
| 
      
 45 
     | 
    
         
            +
                                reject(e);
         
     | 
| 
      
 46 
     | 
    
         
            +
                            }
         
     | 
| 
      
 47 
     | 
    
         
            +
                        }, rateLimit ? 10000 : 500);
         
     | 
| 
      
 48 
     | 
    
         
            +
                    });
         
     | 
| 
      
 49 
     | 
    
         
            +
                }
         
     | 
| 
      
 50 
     | 
    
         
            +
                async periodicRefresh() {
         
     | 
| 
      
 51 
     | 
    
         
            +
                    const local = this, oauth = local.oauth;
         
     | 
| 
      
 52 
     | 
    
         
            +
                    console.log("refreshing oauth token, have token", !!oauth.refreshToken());
         
     | 
| 
      
 53 
     | 
    
         
            +
                    if (!oauth.refreshToken())
         
     | 
| 
      
 54 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 55 
     | 
    
         
            +
                    await local.getToken(true);
         
     | 
| 
      
 56 
     | 
    
         
            +
                    console.log("refreshed oauth token");
         
     | 
| 
      
 57 
     | 
    
         
            +
                }
         
     | 
| 
      
 58 
     | 
    
         
            +
                async customize(options, args = {}) {
         
     | 
| 
      
 59 
     | 
    
         
            +
                    const local = this;
         
     | 
| 
      
 60 
     | 
    
         
            +
                    if (this.customize0)
         
     | 
| 
      
 61 
     | 
    
         
            +
                        await this.customize0(options, args);
         
     | 
| 
      
 62 
     | 
    
         
            +
                    const token = await local.getToken(args.forceTokenRefresh);
         
     | 
| 
      
 63 
     | 
    
         
            +
                    options.headers = {
         
     | 
| 
      
 64 
     | 
    
         
            +
                        ...options.headers,
         
     | 
| 
      
 65 
     | 
    
         
            +
                        Authorization: `Bearer ${token}`,
         
     | 
| 
      
 66 
     | 
    
         
            +
                    };
         
     | 
| 
      
 67 
     | 
    
         
            +
                }
         
     | 
| 
      
 68 
     | 
    
         
            +
            }
         
     | 
| 
      
 69 
     | 
    
         
            +
            export class OAuth {
         
     | 
| 
      
 70 
     | 
    
         
            +
                _data;
         
     | 
| 
      
 71 
     | 
    
         
            +
                saveOAuthResult;
         
     | 
| 
      
 72 
     | 
    
         
            +
                obtainViaRefreshToken;
         
     | 
| 
      
 73 
     | 
    
         
            +
                clients;
         
     | 
| 
      
 74 
     | 
    
         
            +
                constructor(data, saveOAuthResult, getRefreshToken) {
         
     | 
| 
      
 75 
     | 
    
         
            +
                    this._data = data || {};
         
     | 
| 
      
 76 
     | 
    
         
            +
                    this.saveOAuthResult = saveOAuthResult;
         
     | 
| 
      
 77 
     | 
    
         
            +
                    this.obtainViaRefreshToken = getRefreshToken;
         
     | 
| 
      
 78 
     | 
    
         
            +
                    this.clients = [];
         
     | 
| 
      
 79 
     | 
    
         
            +
                }
         
     | 
| 
      
 80 
     | 
    
         
            +
                data() {
         
     | 
| 
      
 81 
     | 
    
         
            +
                    return this._data;
         
     | 
| 
      
 82 
     | 
    
         
            +
                }
         
     | 
| 
      
 83 
     | 
    
         
            +
                accessToken() {
         
     | 
| 
      
 84 
     | 
    
         
            +
                    return this._data.access_token;
         
     | 
| 
      
 85 
     | 
    
         
            +
                }
         
     | 
| 
      
 86 
     | 
    
         
            +
                refreshToken() {
         
     | 
| 
      
 87 
     | 
    
         
            +
                    return this._data.refresh_token;
         
     | 
| 
      
 88 
     | 
    
         
            +
                }
         
     | 
| 
      
 89 
     | 
    
         
            +
                async update(accessToken, refreshToken) {
         
     | 
| 
      
 90 
     | 
    
         
            +
                    this._data.access_token = accessToken;
         
     | 
| 
      
 91 
     | 
    
         
            +
                    if (refreshToken) {
         
     | 
| 
      
 92 
     | 
    
         
            +
                        this._data.refresh_token = refreshToken;
         
     | 
| 
      
 93 
     | 
    
         
            +
                    }
         
     | 
| 
      
 94 
     | 
    
         
            +
                    await this.saveOAuthResult(this._data);
         
     | 
| 
      
 95 
     | 
    
         
            +
                }
         
     | 
| 
      
 96 
     | 
    
         
            +
                async periodicRefresh() {
         
     | 
| 
      
 97 
     | 
    
         
            +
                    const clients = this.clients;
         
     | 
| 
      
 98 
     | 
    
         
            +
                    console.log("refreshing oauth clients", clients.length);
         
     | 
| 
      
 99 
     | 
    
         
            +
                    for (let i = 0; i < clients.length; ++i) {
         
     | 
| 
      
 100 
     | 
    
         
            +
                        const client = clients[0];
         
     | 
| 
      
 101 
     | 
    
         
            +
                        await client.periodicRefresh();
         
     | 
| 
      
 102 
     | 
    
         
            +
                    }
         
     | 
| 
      
 103 
     | 
    
         
            +
                }
         
     | 
| 
      
 104 
     | 
    
         
            +
                async invalidate(err) {
         
     | 
| 
      
 105 
     | 
    
         
            +
                    if (true)
         
     | 
| 
      
 106 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 107 
     | 
    
         
            +
                    //if (this._data.access_token === "invalid") return;
         
     | 
| 
      
 108 
     | 
    
         
            +
                }
         
     | 
| 
      
 109 
     | 
    
         
            +
                getClient(arg = {}) {
         
     | 
| 
      
 110 
     | 
    
         
            +
                    const client = new OAuthFetcher({ ...arg, oauth: this });
         
     | 
| 
      
 111 
     | 
    
         
            +
                    this.clients.push(client);
         
     | 
| 
      
 112 
     | 
    
         
            +
                    return client;
         
     | 
| 
      
 113 
     | 
    
         
            +
                }
         
     | 
| 
      
 114 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -1,16 +1,17 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            import { Dispatcher } from "./dispatcher/index.mjs";
         
     | 
| 
      
 2 
     | 
    
         
            +
            declare class Connector {
         
     | 
| 
      
 3 
     | 
    
         
            +
                id: any;
         
     | 
| 
      
 4 
     | 
    
         
            +
                version: any;
         
     | 
| 
      
 5 
     | 
    
         
            +
                name: any;
         
     | 
| 
      
 6 
     | 
    
         
            +
                icon: any;
         
     | 
| 
      
 7 
     | 
    
         
            +
                dispatcher?: Dispatcher;
         
     | 
| 
       2 
8 
     | 
    
         
             
                constructor({ version, id, name, icon }: {
         
     | 
| 
       3 
9 
     | 
    
         
             
                    version: any;
         
     | 
| 
       4 
10 
     | 
    
         
             
                    id: any;
         
     | 
| 
       5 
11 
     | 
    
         
             
                    name: any;
         
     | 
| 
       6 
12 
     | 
    
         
             
                    icon: any;
         
     | 
| 
       7 
13 
     | 
    
         
             
                });
         
     | 
| 
       8 
     | 
    
         
            -
                id: any;
         
     | 
| 
       9 
     | 
    
         
            -
                version: any;
         
     | 
| 
       10 
     | 
    
         
            -
                name: any;
         
     | 
| 
       11 
     | 
    
         
            -
                icon: any;
         
     | 
| 
       12 
14 
     | 
    
         
             
                configure(): Dispatcher;
         
     | 
| 
       13 
     | 
    
         
            -
                dispatcher: Dispatcher | undefined;
         
     | 
| 
       14 
15 
     | 
    
         
             
                run(): Promise<void>;
         
     | 
| 
       15 
16 
     | 
    
         
             
            }
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
            export { Connector };
         
     |