IBM Cloud

  • npm i @pi-r/ibm

Storage

Note

Uses S3 [1] compatibility API (AWS v2) and signature iam.

Interface

import type { ConfigurationOptions } from "ibm-cos-sdk/lib/config-base";

interface IBMStorage extends CloudStorage {
    service: "ibm"
    credential: string | IBMStorageCredential;
    bucket: string;
}

interface IBMStorageCredential extends ConfigurationOptions {
    apiKeyId: string;
    serviceInstanceId: string;
    region: string;
    endpoint?: string;
}

Authentication

{
  "dataSource": {
    "credential": "main", // squared.cloud.json
    /* OR */
    "credential": {
      "apiKeyId": "**********",
      "serviceInstanceId": "**********",
      "region": "jp-tok",
      /* OR */
      "endpoint": "https://s3.<region>.cloud-object-storage.appdomain.cloud"
    }
  }
}

Example usage

{
  "selector": "html", // Any resource
  "cloudStorage": [{
    "service": "ibm",
    "bucket": "nodejs-001",
    "credential": {/* Authentication */},
    "admin": {
      /* Same as AWS */
      "configBucket": {/* Except "policy{putBucketPolicy}" | "tags" | "retentionPolicy" */}
    },
    "upload": {/* Same as AWS */},
    "download": {/* Same as AWS */}
  }]
}

Database

Interface

import type { PostAll, PostFind, PostSearch, PostView } from "@pi-r/ibm/types";

import type { UserOptions } from "ibm-cloud-sdk-core";
import type { PostDocumentParams } from "@ibm-cloud/cloudant/cloudant/v1";
import type { Options as BearerTokenOptions } from "ibm-cloud-sdk-core/auth/authenticators/bearer-token-authenticator";
import type { Options as ContainerOptions } from "ibm-cloud-sdk-core/auth/authenticators/container-authenticator";
import type { Options as IamOptions } from "ibm-cloud-sdk-core/auth/authenticators/iam-authenticator";
import type { Options as VpcOptions } from "ibm-cloud-sdk-core/auth/authenticators/vpc-instance-authenticator";

interface IBMDatabaseQuery extends CloudDatabase {
    source: "cloud";
    service: "ibm";
    credential: string | IBMDatabaseCredential;
    query?: PostFind | PostSearch | PostView;
    update?: PostDocumentParams;
    params?: PostDocumentParams | PostAll;
    partitionKey?: string;
}

interface IBMDatabaseCredential extends AuthValue, UserOptions, Partial<IamOptions>, ContainerOptions, VpcOptions, BearerTokenOptions {
    authType?: "basic" | "iam" | "bearertoken" | "container" | "vpc" | "mcsp" | "cp4d" | "couchdb";
    authUrl?: string;
}

Authentication

{
  "dataSource": {
    "credential": "main", // squared.cloud.json
    /* OR */
    "credential": {
      "url": "https://<username>.cloudantnosqldb.appdomain.cloud" // Required (except with "authUrl")

      "username": "**********", // basic
      "password": "**********",
      "serviceName": "nodejs", // Default is "CLOUDANT"
      /* OR */
      "apikey": "**********", // iam
      /* OR */
      "bearerToken": "**********", // bearertoken
      /* OR */
      "authType": "couchdb",
      "username": "**********",
      "password": "**********",
      /* OR */
      "authType": "container", // "vpc" | "mcsp" | "cp4d"
      "authUrl": "https://iam.cloud.ibm.com", // Used in place of Authenticator.url property
      "iamProfileName": "iam-user123" // All properties are identical
    }
  }
}

Example usage

{
  "selector": "h1",
  "type": "text",
  "dataSource": {
    "source": "cloud",
    "service": "oci",
    "credential": {/* Authentication */},

    /* ibm.getDocument */
    "name": "demo", // "db" property
    "id": "1", // "docId" property

    /* OR */
    "query": { // ibm.postFind
      "db": "demo", // When using "name" (optional)
      "selector": {
        "id": { "$eq": "1" }
      },
      "partitionKey": "" // ibm.postPartitionFind
    },
    "query": { // ibm.postView
      "db": "demo",
      "ddoc": "demo-doc",
      "view": "demo-view", //
      "partitionKey": "" // ibm.postPartitionView
    },
    "query": { // ibm.postSearch
      "db": "demo",
      "ddoc": "demo-doc",
      "index": "demo-index",
      "query": "id:'1' AND title:'Bristol'", // Lucene syntax
      "partitionKey": "" // ibm.postPartitionSearch
    },
    /* OR */
    "query": { // ibm.postViewQueries
      "db": "demo",
      "ddoc": "demo-doc",
      "view": "demo-view",
      "queries": [{ "key": "1" }] // ViewQuery[]
    },

    /* When "query" undefined */

    "params": { // ibm.postAllDocs
      "db": "demo"
    },
    "params": { // ibm.postPartitionAllDocs
      "db": "demo",
      "partitionKey": "Partition1"
    },
    "params": { // ibm.postBulkGet
      "db": "demo",
      "docs": [{ "id": "1" }] // BulkGetQueryDocument[]
    },
    "params": { // ibm.postAllDocsQueries
      "db": "demo",
      "queries": [{ "key": "1" }] // AllDocsQuery[]
    },

    "value": "<b>${title}</b>: ${description}",

    "update": { // ibm.postDocument{PostDocumentParams}
      "document": {/* Record<string, any> */}
    },
    "id": "1" // Same as item being retrieved
  }
}

Added in version 0.7.0:

  • CLOUD_UPLOAD_STREAM attribute in ICloudServiceClient was enabled.

  • CLOUD_UPLOAD_CHUNK attribute in ICloudServiceClient was enabled.

  • configBucket.cors using CORSConfiguration was implemented.

  • configBucket.lifecycle using LifecycleConfiguration was implemented.