Adding type definitions for typescript (#72)
* Adding type definitions for typescript
* Requested changes
* Adding type support for sequences
diff --git a/lib/main.d.ts b/lib/main.d.ts
new file mode 100644
index 0000000..f2815e6
--- /dev/null
+++ b/lib/main.d.ts
@@ -0,0 +1,294 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements; and to You under the Apache License, Version 2.0.
+
+import * as Swagger from 'swagger-schema-official'
+
+export = openwhisk;
+
+declare function openwhisk(options?: openwhisk.Options): openwhisk.Client;
+
+declare namespace openwhisk {
+ interface Options {
+ api?: string;
+ api_key?: string;
+ apihost?: string;
+ namespace?: string;
+ ignore_certs?: boolean;
+ apigw_token?: string;
+ apigw_space_guid?: string;
+ }
+
+ // Client
+
+ interface Client {
+ actions: Actions;
+ activations: Activations;
+ namespaces: Namespaces;
+ packages: Packages;
+ rules: Rules;
+ triggers: Triggers;
+ feeds: Feeds;
+ routes: Routes;
+ }
+
+ // Ressources
+
+ interface Actions {
+ list(options?: { namespace?: string; skip?: number; limit?: number; }): Promise<ActionDesc[]>;
+ get(options: string): Promise<Action>
+ get(options: { name: string; namespace?: string }): Promise<Action>;
+ get(options: (string | { name: string; namespace?: string })[]): Promise<Action[]>;
+ invoke(options: string): Promise<{ activationId: string }>
+ invoke(options: { name: string; namespace?: string; blocking: true; params?: Dict; result: true; }): Promise<Dict>;
+ invoke(options: { name: string; namespace?: string; blocking: true; params?: Dict; result?: false; }): Promise<Activation<Dict>>;
+ invoke(options: { name: string; namespace?: string; blocking?: false; params?: Dict; result?: boolean; }): Promise<{ activationId: string }>;
+ invoke(options: (string | { name: string; namespace?: string; blocking?: boolean; params?: Dict; result?: boolean; })[]): Promise<{ activationId: string }[]>;
+ invoke<In extends Dict, Out extends Dict>(options: { name: string; namespace?: string; blocking: true; params?: In; result: true; }): Promise<Out>;
+ invoke<In extends Dict, Out extends Dict>(options: { name: string; namespace?: string; blocking: true; params?: In; result?: false; }): Promise<Activation<Out>>;
+ invoke<In extends Dict, Out extends Dict>(options: { name: string; namespace?: string; blocking?: false; params?: In; result?: boolean; }): Promise<{ activationId: string }>;
+ create(options: { name: string; namespace?: string; action: (string | Buffer | Action); kind?: Kind; overwrite?: boolean; params?: Dict; version?: string; }): Promise<Action>;
+ //create(options: { name: string; namespace?: string; action: (string | Buffer | Action); kind?: Kind; overwrite?: boolean; params?: Dict; version?: string; }[]): Promise<Action[]>;
+ update(options: { name: string; namespace?: string; action: (string | Buffer | Action); kind?: Kind; params?: Dict; version?: string; }): Promise<Action>;
+ //update(options: ({ name: string; namespace?: string; action: (string | Buffer | Action); kind?: Kind; params?: Dict; version?: string; })[]): Promise<Action[]>;
+ delete(options: string): Promise<Action>;
+ delete(options: { name: string; namespace?: string; }): Promise<Action>;
+ delete(options: (string | { name: string; namespace?: string; })[]): Promise<Action[]>;
+ }
+
+ interface Activations {
+ list(options?: { namespace?: string; name?: string; skip?: number; limit?: number; upto?: number; docs?: boolean; since?: number }): Promise<ActivationDesc[]>;
+ get<T extends Dict>(options: string): Promise<Activation<T>>;
+ get<T extends Dict>(options: { name: string; namespace?: string }): Promise<Activation<T>>;
+ get(options: string): Promise<Activation<Dict>>;
+ get(options: { name: string; namespace?: string }): Promise<Activation<Dict>>;
+ //get(options: (string | { name: string; namespace?: string })[]): Promise<Activation<Dict>[]>;
+ logs(options: { name: string; namespace?: string }): Promise<{ logs: String[] }>;
+ result<T extends Dict>(options: { name: string; namespace?: string }): Promise<Response<T>>;
+ result(options: { name: string; namespace?: string }): Promise<Response<Dict>>;
+ }
+
+ interface Namespaces {
+ list(): Promise<string[]>;
+ get(options: string): Promise<Namespace>
+ get(options: { namespace: string }): Promise<Namespace>
+ //get(options: (string | { namespace: string })[]): Promise<Namespace[]>
+ }
+
+ interface Packages {
+ list(options?: { namespace?: string; skip?: number; limit?: number; public?: boolean; }): Promise<PackageDesc[]>;
+ get(options: string): Promise<Package>
+ get(options: { name: string; namespace?: string }): Promise<Package>;
+ get(options: (string | { name: string; namespace?: string })[]): Promise<Package[]>;
+ create(options: { name: string; namespace?: string; package?: Package; overwrite?: boolean }): Promise<Package>;
+ update(options: { name: string; namespace?: string; package?: Package }): Promise<Package>;
+ delete(options: string): Promise<Package>
+ delete(options: { name: string; namespace?: string; }): Promise<Package>;
+ delete(options: (string | { name: string; namespace?: string; })[]): Promise<Package[]>;
+ }
+
+ interface Rules {
+ list(options?: { namespace?: string; skip?: number; limit?: number; }): Promise<RuleDesc[]>;
+ get(options: string): Promise<Rule>;
+ get(options: { name: string; namespace?: string; }): Promise<Rule>;
+ get(options: (string | { name: string; namespace?: string; })[]): Promise<Rule[]>;
+ create(options: { name: string; namespace?: string; action: string; trigger: string; status?: Status; overwrite?: boolean }): Promise<Rule>;
+ update(options: { name: string; namespace?: string; action: string; trigger: string; status?: Status }): Promise<Rule>;
+ delete(options: string): Promise<Rule>
+ delete(options: { name: string; namespace?: string; }): Promise<Rule>;
+ delete(options: (string | { name: string; namespace?: string; })[]): Promise<Rule[]>;
+ enable(options: { name: string; namespace?: string; }): Promise<String>;
+ disable(options: { name: string; namespace?: string; }): Promise<String>;
+ }
+
+ interface Triggers {
+ list(options?: { namespace?: string; skip?: number; limit?: number; }): Promise<TriggerDesc[]>;
+ get(options: string): Promise<Trigger>
+ get(options: { name: string; namespace?: string; }): Promise<Trigger>;
+ get(options: (string | { name: string; namespace?: string; })[]): Promise<Trigger[]>;
+ invoke(options: string): Promise<{ activationId: string }>
+ invoke(options: { name: string; namespace?: string; params?: Dict }): Promise<{ activationId: string }>
+ invoke(options: (string | { name: string; namespace?: string; params?: Dict })[]): Promise<{ activationId: string }[]>
+ invoke<T extends Dict>(options: { name: string; namespace?: string; params?: T }): Promise<{ activationId: string }>
+ create(options: { name: string; namespace?: string; trigger?: Trigger; overwrite?: boolean; }): Promise<Trigger>;
+ update(options: { name: string; namespace?: string; trigger?: Trigger }): Promise<Trigger>;
+ delete(options: string): Promise<Trigger>
+ delete(options: { name: string; namespace?: string; }): Promise<Trigger>;
+ delete(options: (string | { name: string; namespace?: string; })[]): Promise<Trigger[]>;
+ }
+
+ interface Feeds {
+ create(options: { name: string; trigger: string; namespace?: string; params?: Dict }): Promise<Activation<FeedActionDesc>>;
+ delete(options: { name: string; trigger: string; namespace?: string; }): Promise<Activation<FeedActionDesc>>;
+ feed(event: Event, options: { name: string; trigger: string; namespace?: string; }): Promise<Activation<FeedActionDesc>>;
+ }
+
+ interface Routes {
+ list(options?: { relpath?: string, basepath?: string, operation?: string, limit?: number, skip?: number }): Promise<{ apis: Route[] }>;
+ delete(options: { basepath: string; relpath?: string, operation?: Operation }): Promise<{}>;
+ create(options: { basepath?: string; relpath: string, operation: Operation, action: string }): Promise<Api>;
+ }
+
+ // Descriptions
+
+ interface ShortDesc {
+ name: string;
+ annotations?: KeyVal[];
+ version?: string;
+ }
+
+ interface Desc extends ShortDesc {
+ publish?: boolean;
+ namespace?: string;
+ }
+
+ type ActionDesc = Desc
+
+ interface ActivationDesc extends Desc {
+ activationId: string;
+ }
+
+ interface PackageDesc extends Desc {
+ binding?: boolean;
+ }
+
+ type RuleDesc = Desc
+
+ type TriggerDesc = Desc
+
+ interface FeedActionDesc {
+ lifecycleEvent: Event;
+ authKey: string;
+ triggerName: string;
+ }
+
+ // Entities
+
+ interface Action extends ActionDesc {
+ parameters?: KeyVal[];
+ limits?: Limits;
+ exec: Exec | Sequence;
+ }
+
+ interface Activation<T extends Dict> extends ActivationDesc {
+ subject: string;
+ start: number;
+ end: number;
+ duration: number;
+ response?: Response<T>;
+ logs: string[];
+ }
+
+ interface Namespace {
+ actions?: ActionDesc[];
+ packages?: PackageDesc[];
+ rules?: RuleDesc[];
+ triggers?: TriggerDesc[];
+ }
+
+ interface Package extends Desc {
+ actions?: ShortDesc[];
+ feeds?: ShortDesc[];
+ parameters?: KeyVal[];
+ binding?: {} | Package;
+ }
+
+ interface Rule extends RuleDesc {
+ trigger: PathName;
+ status: Status;
+ action: PathName;
+ }
+
+ interface Trigger extends TriggerDesc {
+ parameters?: KeyVal[];
+ limits?: any;
+ }
+
+ interface Route {
+ id: string;
+ key: string;
+ value: Api;
+ }
+
+ // Other
+
+ interface Dict {
+ [key: string]: any
+ }
+
+ interface Exec {
+ kind: Kind;
+ code: string;
+ binary?: boolean
+ }
+
+ interface Sequence {
+ kind: "sequence";
+ components: string[];
+ }
+
+ type Kind =
+ "" |
+ "nodejs:default" |
+ "nodejs:6" |
+ "python:default" |
+ "python:3" |
+ "python:2" |
+ "swift:default" |
+ "swift:3.1.1" |
+ "php:default" |
+ "php:7.1";
+
+ interface Limits {
+ timeout: number;
+ memory: number;
+ logs: number;
+ }
+
+ interface Response<T extends Dict> {
+ status: "success" | "failure";
+ statusCode?: number;
+ success: boolean;
+ result: T
+ }
+
+ interface KeyVal {
+ key: string;
+ value: any;
+ }
+
+ interface PathName {
+ path: string;
+ name: string;
+ }
+
+ type Status =
+ "" |
+ "active" |
+ "inactive" |
+ "activating" |
+ "deactivating";
+
+ type Event =
+ "" |
+ "CREATE" |
+ "DELETE" |
+ "PAUSE" |
+ "UNPAUSE"
+
+ type Operation =
+ "" |
+ "GET" |
+ "POST" |
+ "PUT" |
+ "PATCH" |
+ "DELETE"
+
+ interface Api {
+ namespace: string;
+ gwApiActivated: boolean;
+ tenantId: boolean;
+ gwApiUrl: string;
+ apidoc: Swagger.Spec;
+ }
+
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index e3cdec8..8a7f3e1 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,7 @@
"version": "3.6.0",
"description": "JavaScript client library for the OpenWhisk platform",
"main": "lib/main.js",
+ "typings": "lib/main.d.ts",
"engines": {
"node": ">=4.0.0"
},
@@ -41,7 +42,9 @@
"proxyquire": "1.7.4"
},
"dependencies": {
- "request-promise": "^2.0.1"
+ "request-promise": "^2.0.1",
+ "@types/node": "^8.0.26",
+ "@types/swagger-schema-official": "^2.0.6"
},
"babel": {
"presets": [
@@ -62,4 +65,4 @@
"babel-core/register"
]
}
-}
+}
\ No newline at end of file