@loxtep/sdk 0.1.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/CHANGELOG.md +30 -0
- package/README.md +274 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +4 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/jwt.d.ts +10 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/auth/jwt.js +24 -0
- package/dist/auth/jwt.js.map +1 -0
- package/dist/auth/login.d.ts +49 -0
- package/dist/auth/login.d.ts.map +1 -0
- package/dist/auth/login.js +131 -0
- package/dist/auth/login.js.map +1 -0
- package/dist/auth/token-manager.d.ts +30 -0
- package/dist/auth/token-manager.d.ts.map +1 -0
- package/dist/auth/token-manager.js +61 -0
- package/dist/auth/token-manager.js.map +1 -0
- package/dist/checkpoint/index.d.ts +6 -0
- package/dist/checkpoint/index.d.ts.map +1 -0
- package/dist/checkpoint/index.js +5 -0
- package/dist/checkpoint/index.js.map +1 -0
- package/dist/checkpoint/memory-store.d.ts +6 -0
- package/dist/checkpoint/memory-store.d.ts.map +1 -0
- package/dist/checkpoint/memory-store.js +16 -0
- package/dist/checkpoint/memory-store.js.map +1 -0
- package/dist/checkpoint/types.d.ts +14 -0
- package/dist/checkpoint/types.d.ts.map +1 -0
- package/dist/checkpoint/types.js +5 -0
- package/dist/checkpoint/types.js.map +1 -0
- package/dist/cli/auth-resolve.d.ts +19 -0
- package/dist/cli/auth-resolve.d.ts.map +1 -0
- package/dist/cli/auth-resolve.js +25 -0
- package/dist/cli/auth-resolve.js.map +1 -0
- package/dist/cli/commands/bus-cmd.d.ts +6 -0
- package/dist/cli/commands/bus-cmd.d.ts.map +1 -0
- package/dist/cli/commands/bus-cmd.js +19 -0
- package/dist/cli/commands/bus-cmd.js.map +1 -0
- package/dist/cli/commands/config-cmd.d.ts +105 -0
- package/dist/cli/commands/config-cmd.d.ts.map +1 -0
- package/dist/cli/commands/config-cmd.js +334 -0
- package/dist/cli/commands/config-cmd.js.map +1 -0
- package/dist/cli/commands/connections-cmd.d.ts +19 -0
- package/dist/cli/commands/connections-cmd.d.ts.map +1 -0
- package/dist/cli/commands/connections-cmd.js +39 -0
- package/dist/cli/commands/connections-cmd.js.map +1 -0
- package/dist/cli/commands/data-assets-cmd.d.ts +12 -0
- package/dist/cli/commands/data-assets-cmd.d.ts.map +1 -0
- package/dist/cli/commands/data-assets-cmd.js +75 -0
- package/dist/cli/commands/data-assets-cmd.js.map +1 -0
- package/dist/cli/commands/data-contracts-cmd.d.ts +12 -0
- package/dist/cli/commands/data-contracts-cmd.d.ts.map +1 -0
- package/dist/cli/commands/data-contracts-cmd.js +28 -0
- package/dist/cli/commands/data-contracts-cmd.js.map +1 -0
- package/dist/cli/commands/data-products-cmd.d.ts +15 -0
- package/dist/cli/commands/data-products-cmd.d.ts.map +1 -0
- package/dist/cli/commands/data-products-cmd.js +30 -0
- package/dist/cli/commands/data-products-cmd.js.map +1 -0
- package/dist/cli/commands/domains-cmd.d.ts +12 -0
- package/dist/cli/commands/domains-cmd.d.ts.map +1 -0
- package/dist/cli/commands/domains-cmd.js +28 -0
- package/dist/cli/commands/domains-cmd.js.map +1 -0
- package/dist/cli/commands/flows-cmd.d.ts +19 -0
- package/dist/cli/commands/flows-cmd.d.ts.map +1 -0
- package/dist/cli/commands/flows-cmd.js +37 -0
- package/dist/cli/commands/flows-cmd.js.map +1 -0
- package/dist/cli/commands/login.d.ts +28 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +110 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +5 -0
- package/dist/cli/commands/logout.d.ts.map +1 -0
- package/dist/cli/commands/logout.js +9 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/metrics-cmd.d.ts +15 -0
- package/dist/cli/commands/metrics-cmd.d.ts.map +1 -0
- package/dist/cli/commands/metrics-cmd.js +21 -0
- package/dist/cli/commands/metrics-cmd.js.map +1 -0
- package/dist/cli/commands/observe-cmd.d.ts +10 -0
- package/dist/cli/commands/observe-cmd.d.ts.map +1 -0
- package/dist/cli/commands/observe-cmd.js +10 -0
- package/dist/cli/commands/observe-cmd.js.map +1 -0
- package/dist/cli/commands/pipelines-cmd.d.ts +17 -0
- package/dist/cli/commands/pipelines-cmd.d.ts.map +1 -0
- package/dist/cli/commands/pipelines-cmd.js +52 -0
- package/dist/cli/commands/pipelines-cmd.js.map +1 -0
- package/dist/cli/commands/promises-cmd.d.ts +11 -0
- package/dist/cli/commands/promises-cmd.d.ts.map +1 -0
- package/dist/cli/commands/promises-cmd.js +53 -0
- package/dist/cli/commands/promises-cmd.js.map +1 -0
- package/dist/cli/commands/queue-cmd.d.ts +13 -0
- package/dist/cli/commands/queue-cmd.d.ts.map +1 -0
- package/dist/cli/commands/queue-cmd.js +21 -0
- package/dist/cli/commands/queue-cmd.js.map +1 -0
- package/dist/cli/commands/standards-cmd.d.ts +12 -0
- package/dist/cli/commands/standards-cmd.d.ts.map +1 -0
- package/dist/cli/commands/standards-cmd.js +28 -0
- package/dist/cli/commands/standards-cmd.js.map +1 -0
- package/dist/cli/commands/whoami.d.ts +24 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/commands/whoami.js +46 -0
- package/dist/cli/commands/whoami.js.map +1 -0
- package/dist/cli/commands/workflows-cmd.d.ts +18 -0
- package/dist/cli/commands/workflows-cmd.d.ts.map +1 -0
- package/dist/cli/commands/workflows-cmd.js +32 -0
- package/dist/cli/commands/workflows-cmd.js.map +1 -0
- package/dist/cli/create-cli-client.d.ts +32 -0
- package/dist/cli/create-cli-client.d.ts.map +1 -0
- package/dist/cli/create-cli-client.js +143 -0
- package/dist/cli/create-cli-client.js.map +1 -0
- package/dist/cli/credentials.d.ts +25 -0
- package/dist/cli/credentials.d.ts.map +1 -0
- package/dist/cli/credentials.js +70 -0
- package/dist/cli/credentials.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +424 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client/catalog-types.d.ts +22 -0
- package/dist/client/catalog-types.d.ts.map +1 -0
- package/dist/client/catalog-types.js +5 -0
- package/dist/client/catalog-types.js.map +1 -0
- package/dist/client/catalog.d.ts +9 -0
- package/dist/client/catalog.d.ts.map +1 -0
- package/dist/client/catalog.js +29 -0
- package/dist/client/catalog.js.map +1 -0
- package/dist/client/connection-types.d.ts +98 -0
- package/dist/client/connection-types.d.ts.map +1 -0
- package/dist/client/connection-types.js +18 -0
- package/dist/client/connection-types.js.map +1 -0
- package/dist/client/connections.d.ts +18 -0
- package/dist/client/connections.d.ts.map +1 -0
- package/dist/client/connections.js +66 -0
- package/dist/client/connections.js.map +1 -0
- package/dist/client/connectors-types.d.ts +61 -0
- package/dist/client/connectors-types.d.ts.map +1 -0
- package/dist/client/connectors-types.js +6 -0
- package/dist/client/connectors-types.js.map +1 -0
- package/dist/client/connectors.d.ts +27 -0
- package/dist/client/connectors.d.ts.map +1 -0
- package/dist/client/connectors.js +71 -0
- package/dist/client/connectors.js.map +1 -0
- package/dist/client/consumptions-types.d.ts +80 -0
- package/dist/client/consumptions-types.d.ts.map +1 -0
- package/dist/client/consumptions-types.js +5 -0
- package/dist/client/consumptions-types.js.map +1 -0
- package/dist/client/consumptions.d.ts +14 -0
- package/dist/client/consumptions.d.ts.map +1 -0
- package/dist/client/consumptions.js +47 -0
- package/dist/client/consumptions.js.map +1 -0
- package/dist/client/data-assets-types.d.ts +150 -0
- package/dist/client/data-assets-types.d.ts.map +1 -0
- package/dist/client/data-assets-types.js +5 -0
- package/dist/client/data-assets-types.js.map +1 -0
- package/dist/client/data-assets.d.ts +31 -0
- package/dist/client/data-assets.d.ts.map +1 -0
- package/dist/client/data-assets.js +182 -0
- package/dist/client/data-assets.js.map +1 -0
- package/dist/client/data-product-resolver.d.ts +92 -0
- package/dist/client/data-product-resolver.d.ts.map +1 -0
- package/dist/client/data-product-resolver.js +165 -0
- package/dist/client/data-product-resolver.js.map +1 -0
- package/dist/client/data-products-types.d.ts +182 -0
- package/dist/client/data-products-types.d.ts.map +1 -0
- package/dist/client/data-products-types.js +5 -0
- package/dist/client/data-products-types.js.map +1 -0
- package/dist/client/data-products.d.ts +63 -0
- package/dist/client/data-products.d.ts.map +1 -0
- package/dist/client/data-products.js +461 -0
- package/dist/client/data-products.js.map +1 -0
- package/dist/client/discovery-types.d.ts +74 -0
- package/dist/client/discovery-types.d.ts.map +1 -0
- package/dist/client/discovery-types.js +6 -0
- package/dist/client/discovery-types.js.map +1 -0
- package/dist/client/discovery.d.ts +14 -0
- package/dist/client/discovery.d.ts.map +1 -0
- package/dist/client/discovery.js +57 -0
- package/dist/client/discovery.js.map +1 -0
- package/dist/client/domains-types.d.ts +46 -0
- package/dist/client/domains-types.d.ts.map +1 -0
- package/dist/client/domains-types.js +6 -0
- package/dist/client/domains-types.js.map +1 -0
- package/dist/client/domains.d.ts +11 -0
- package/dist/client/domains.d.ts.map +1 -0
- package/dist/client/domains.js +39 -0
- package/dist/client/domains.js.map +1 -0
- package/dist/client/flow-queue-resolve.d.ts +9 -0
- package/dist/client/flow-queue-resolve.d.ts.map +1 -0
- package/dist/client/flow-queue-resolve.js +17 -0
- package/dist/client/flow-queue-resolve.js.map +1 -0
- package/dist/client/flow-types.d.ts +112 -0
- package/dist/client/flow-types.d.ts.map +1 -0
- package/dist/client/flow-types.js +6 -0
- package/dist/client/flow-types.js.map +1 -0
- package/dist/client/flows.d.ts +33 -0
- package/dist/client/flows.d.ts.map +1 -0
- package/dist/client/flows.js +293 -0
- package/dist/client/flows.js.map +1 -0
- package/dist/client/index.d.ts +28 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +3 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/instances-types.d.ts +40 -0
- package/dist/client/instances-types.d.ts.map +1 -0
- package/dist/client/instances-types.js +6 -0
- package/dist/client/instances-types.js.map +1 -0
- package/dist/client/instances.d.ts +29 -0
- package/dist/client/instances.d.ts.map +1 -0
- package/dist/client/instances.js +41 -0
- package/dist/client/instances.js.map +1 -0
- package/dist/client/loxtep-client.d.ts +111 -0
- package/dist/client/loxtep-client.d.ts.map +1 -0
- package/dist/client/loxtep-client.js +262 -0
- package/dist/client/loxtep-client.js.map +1 -0
- package/dist/client/observe-types.d.ts +17 -0
- package/dist/client/observe-types.d.ts.map +1 -0
- package/dist/client/observe-types.js +5 -0
- package/dist/client/observe-types.js.map +1 -0
- package/dist/client/observe.d.ts +15 -0
- package/dist/client/observe.d.ts.map +1 -0
- package/dist/client/observe.js +22 -0
- package/dist/client/observe.js.map +1 -0
- package/dist/client/pipelines-types.d.ts +3 -0
- package/dist/client/pipelines-types.d.ts.map +1 -0
- package/dist/client/pipelines-types.js +3 -0
- package/dist/client/pipelines-types.js.map +1 -0
- package/dist/client/pipelines.d.ts +3 -0
- package/dist/client/pipelines.d.ts.map +1 -0
- package/dist/client/pipelines.js +3 -0
- package/dist/client/pipelines.js.map +1 -0
- package/dist/client/procedures-types.d.ts +25 -0
- package/dist/client/procedures-types.d.ts.map +1 -0
- package/dist/client/procedures-types.js +6 -0
- package/dist/client/procedures-types.js.map +1 -0
- package/dist/client/procedures.d.ts +19 -0
- package/dist/client/procedures.d.ts.map +1 -0
- package/dist/client/procedures.js +33 -0
- package/dist/client/procedures.js.map +1 -0
- package/dist/client/process-intelligence-types.d.ts +45 -0
- package/dist/client/process-intelligence-types.d.ts.map +1 -0
- package/dist/client/process-intelligence-types.js +6 -0
- package/dist/client/process-intelligence-types.js.map +1 -0
- package/dist/client/process-intelligence.d.ts +17 -0
- package/dist/client/process-intelligence.d.ts.map +1 -0
- package/dist/client/process-intelligence.js +50 -0
- package/dist/client/process-intelligence.js.map +1 -0
- package/dist/client/projects-types.d.ts +79 -0
- package/dist/client/projects-types.d.ts.map +1 -0
- package/dist/client/projects-types.js +6 -0
- package/dist/client/projects-types.js.map +1 -0
- package/dist/client/projects.d.ts +19 -0
- package/dist/client/projects.d.ts.map +1 -0
- package/dist/client/projects.js +53 -0
- package/dist/client/projects.js.map +1 -0
- package/dist/client/promises-types.d.ts +56 -0
- package/dist/client/promises-types.d.ts.map +1 -0
- package/dist/client/promises-types.js +6 -0
- package/dist/client/promises-types.js.map +1 -0
- package/dist/client/promises.d.ts +11 -0
- package/dist/client/promises.d.ts.map +1 -0
- package/dist/client/promises.js +41 -0
- package/dist/client/promises.js.map +1 -0
- package/dist/client/quality-types.d.ts +62 -0
- package/dist/client/quality-types.d.ts.map +1 -0
- package/dist/client/quality-types.js +5 -0
- package/dist/client/quality-types.js.map +1 -0
- package/dist/client/quality.d.ts +12 -0
- package/dist/client/quality.d.ts.map +1 -0
- package/dist/client/quality.js +57 -0
- package/dist/client/quality.js.map +1 -0
- package/dist/client/queue-types.d.ts +84 -0
- package/dist/client/queue-types.d.ts.map +1 -0
- package/dist/client/queue-types.js +5 -0
- package/dist/client/queue-types.js.map +1 -0
- package/dist/client/queues.d.ts +61 -0
- package/dist/client/queues.d.ts.map +1 -0
- package/dist/client/queues.js +138 -0
- package/dist/client/queues.js.map +1 -0
- package/dist/client/schemas-types.d.ts +27 -0
- package/dist/client/schemas-types.d.ts.map +1 -0
- package/dist/client/schemas-types.js +5 -0
- package/dist/client/schemas-types.js.map +1 -0
- package/dist/client/schemas.d.ts +11 -0
- package/dist/client/schemas.d.ts.map +1 -0
- package/dist/client/schemas.js +22 -0
- package/dist/client/schemas.js.map +1 -0
- package/dist/client/standards-types.d.ts +45 -0
- package/dist/client/standards-types.d.ts.map +1 -0
- package/dist/client/standards-types.js +6 -0
- package/dist/client/standards-types.js.map +1 -0
- package/dist/client/standards.d.ts +11 -0
- package/dist/client/standards.d.ts.map +1 -0
- package/dist/client/standards.js +41 -0
- package/dist/client/standards.js.map +1 -0
- package/dist/client/stubs.d.ts +35 -0
- package/dist/client/stubs.d.ts.map +1 -0
- package/dist/client/stubs.js +30 -0
- package/dist/client/stubs.js.map +1 -0
- package/dist/client/templates-types.d.ts +70 -0
- package/dist/client/templates-types.d.ts.map +1 -0
- package/dist/client/templates-types.js +7 -0
- package/dist/client/templates-types.js.map +1 -0
- package/dist/client/templates.d.ts +12 -0
- package/dist/client/templates.d.ts.map +1 -0
- package/dist/client/templates.js +38 -0
- package/dist/client/templates.js.map +1 -0
- package/dist/client/thesaurus-types.d.ts +28 -0
- package/dist/client/thesaurus-types.d.ts.map +1 -0
- package/dist/client/thesaurus-types.js +5 -0
- package/dist/client/thesaurus-types.js.map +1 -0
- package/dist/client/thesaurus.d.ts +11 -0
- package/dist/client/thesaurus.d.ts.map +1 -0
- package/dist/client/thesaurus.js +35 -0
- package/dist/client/thesaurus.js.map +1 -0
- package/dist/client/types.d.ts +80 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/versions-types.d.ts +47 -0
- package/dist/client/versions-types.d.ts.map +1 -0
- package/dist/client/versions-types.js +9 -0
- package/dist/client/versions-types.js.map +1 -0
- package/dist/client/versions.d.ts +14 -0
- package/dist/client/versions.d.ts.map +1 -0
- package/dist/client/versions.js +14 -0
- package/dist/client/versions.js.map +1 -0
- package/dist/client/workflows-types.d.ts +56 -0
- package/dist/client/workflows-types.d.ts.map +1 -0
- package/dist/client/workflows-types.js +6 -0
- package/dist/client/workflows-types.js.map +1 -0
- package/dist/client/workflows.d.ts +15 -0
- package/dist/client/workflows.d.ts.map +1 -0
- package/dist/client/workflows.js +50 -0
- package/dist/client/workflows.js.map +1 -0
- package/dist/config/api-path.d.ts +17 -0
- package/dist/config/api-path.d.ts.map +1 -0
- package/dist/config/api-path.js +57 -0
- package/dist/config/api-path.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +9 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/load.d.ts +12 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +152 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/paths.d.ts +5 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +11 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/platform-request-url.d.ts +35 -0
- package/dist/config/platform-request-url.d.ts.map +1 -0
- package/dist/config/platform-request-url.js +100 -0
- package/dist/config/platform-request-url.js.map +1 -0
- package/dist/config/resolve-sdk-urls.d.ts +39 -0
- package/dist/config/resolve-sdk-urls.d.ts.map +1 -0
- package/dist/config/resolve-sdk-urls.js +130 -0
- package/dist/config/resolve-sdk-urls.js.map +1 -0
- package/dist/config/save.d.ts +7 -0
- package/dist/config/save.d.ts.map +1 -0
- package/dist/config/save.js +26 -0
- package/dist/config/save.js.map +1 -0
- package/dist/config/streams-partial.d.ts +9 -0
- package/dist/config/streams-partial.d.ts.map +1 -0
- package/dist/config/streams-partial.js +30 -0
- package/dist/config/streams-partial.js.map +1 -0
- package/dist/config/types.d.ts +37 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +11 -0
- package/dist/config/types.js.map +1 -0
- package/dist/errors/auth.d.ts +10 -0
- package/dist/errors/auth.d.ts.map +1 -0
- package/dist/errors/auth.js +26 -0
- package/dist/errors/auth.js.map +1 -0
- package/dist/errors/base.d.ts +15 -0
- package/dist/errors/base.d.ts.map +1 -0
- package/dist/errors/base.js +32 -0
- package/dist/errors/base.js.map +1 -0
- package/dist/errors/index.d.ts +15 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +14 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/parse-http.d.ts +13 -0
- package/dist/errors/parse-http.d.ts.map +1 -0
- package/dist/errors/parse-http.js +68 -0
- package/dist/errors/parse-http.js.map +1 -0
- package/dist/errors/rate-limit.d.ts +17 -0
- package/dist/errors/rate-limit.d.ts.map +1 -0
- package/dist/errors/rate-limit.js +23 -0
- package/dist/errors/rate-limit.js.map +1 -0
- package/dist/errors/resource.d.ts +18 -0
- package/dist/errors/resource.d.ts.map +1 -0
- package/dist/errors/resource.js +32 -0
- package/dist/errors/resource.js.map +1 -0
- package/dist/errors/streaming.d.ts +19 -0
- package/dist/errors/streaming.d.ts.map +1 -0
- package/dist/errors/streaming.js +32 -0
- package/dist/errors/streaming.js.map +1 -0
- package/dist/errors/types.d.ts +44 -0
- package/dist/errors/types.d.ts.map +1 -0
- package/dist/errors/types.js +2 -0
- package/dist/errors/types.js.map +1 -0
- package/dist/errors/validation.d.ts +23 -0
- package/dist/errors/validation.d.ts.map +1 -0
- package/dist/errors/validation.js +37 -0
- package/dist/errors/validation.js.map +1 -0
- package/dist/http/client.d.ts +51 -0
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/client.js +164 -0
- package/dist/http/client.js.map +1 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +3 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/signer.d.ts +15 -0
- package/dist/http/signer.d.ts.map +1 -0
- package/dist/http/signer.js +55 -0
- package/dist/http/signer.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/rstreams/configuration.d.ts +11 -0
- package/dist/rstreams/configuration.d.ts.map +1 -0
- package/dist/rstreams/configuration.js +43 -0
- package/dist/rstreams/configuration.js.map +1 -0
- package/dist/rstreams/event-bridge.d.ts +16 -0
- package/dist/rstreams/event-bridge.d.ts.map +1 -0
- package/dist/rstreams/event-bridge.js +45 -0
- package/dist/rstreams/event-bridge.js.map +1 -0
- package/dist/rstreams/leo-runtime.d.ts +9 -0
- package/dist/rstreams/leo-runtime.d.ts.map +1 -0
- package/dist/rstreams/leo-runtime.js +14 -0
- package/dist/rstreams/leo-runtime.js.map +1 -0
- package/dist/streaming/index.d.ts +2 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +2 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/transformer.d.ts +15 -0
- package/dist/streaming/transformer.d.ts.map +1 -0
- package/dist/streaming/transformer.js +25 -0
- package/dist/streaming/transformer.js.map +1 -0
- package/dist/types/generated-api.d.ts +146 -0
- package/dist/types/generated-api.d.ts.map +1 -0
- package/dist/types/generated-api.js +7 -0
- package/dist/types/generated-api.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/docs/event-replay-cookbook.md +152 -0
- package/docs/getting-started.md +332 -0
- package/docs/quick-reference.md +256 -0
- package/docs/sdk-bus-rbac-threat-model.md +46 -0
- package/docs/sdk-control-vs-data-plane.md +32 -0
- package/docs/sdk-ingestion-export-guide.md +480 -0
- package/docs/sdk-mcp-mapping.md +20 -0
- package/docs/sdk-pairing.md +42 -0
- package/docs/sdk-rest-vs-bus.md +131 -0
- package/package.json +85 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# SDK Getting Started Guide
|
|
2
|
+
|
|
3
|
+
Get from zero to your first event in under 5 minutes. This guide walks you
|
|
4
|
+
through installing the Loxtep SDK, authenticating, and writing your first event
|
|
5
|
+
to a data product — all with a single method call.
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
- [Prerequisites](#prerequisites)
|
|
10
|
+
- [Step 1: Install the SDK](#step-1-install-the-sdk)
|
|
11
|
+
- [Step 2: Log In](#step-2-log-in)
|
|
12
|
+
- [Step 3: Write Your First Event](#step-3-write-your-first-event)
|
|
13
|
+
- [Step 4: Read Events Back](#step-4-read-events-back)
|
|
14
|
+
- [Complete Example](#complete-example)
|
|
15
|
+
- [Troubleshooting](#troubleshooting)
|
|
16
|
+
- [Next Steps](#next-steps)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
Before you begin, make sure you have:
|
|
23
|
+
|
|
24
|
+
| Requirement | Details |
|
|
25
|
+
|-------------|---------|
|
|
26
|
+
| **Node.js 22+** | Required for the Node.js SDK (`@loxtep/sdk`). Check with `node --version`. |
|
|
27
|
+
| **Loxtep account** | You need an account with the **developer** role. Ask your org admin if you don't have one. |
|
|
28
|
+
| **A deployed data product** | Your organization must have at least one data product deployed to an instance. |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Step 1: Install the SDK
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install @loxtep/sdk
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Or with your preferred package manager:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pnpm add @loxtep/sdk
|
|
42
|
+
# or
|
|
43
|
+
yarn add @loxtep/sdk
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Verify the installation:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npx loxtep --version
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Step 2: Log In
|
|
55
|
+
|
|
56
|
+
Authenticate with your Loxtep account. This stores credentials locally so the
|
|
57
|
+
SDK can make API calls on your behalf.
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx loxtep login
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Follow the prompts to enter your email and password. On success you'll see:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
✓ Logged in successfully. Credentials saved to ~/.loxtep/credentials.json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Alternative: use an environment variable.** If you're running in CI/CD or a
|
|
70
|
+
container, set the token directly instead of using `loxtep login`:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
export LOXTEP_AUTH_TOKEN="your-jwt-token"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The SDK checks `LOXTEP_AUTH_TOKEN` first, then falls back to
|
|
77
|
+
`~/.loxtep/credentials.json`.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Step 3: Write Your First Event
|
|
82
|
+
|
|
83
|
+
With the new data-product-centric API, you write events by referencing a data
|
|
84
|
+
product by name. The SDK resolves all the plumbing (queue names, bot IDs, stream
|
|
85
|
+
bus configuration) automatically.
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { LoxtepClient } from '@loxtep/sdk';
|
|
89
|
+
|
|
90
|
+
const client = new LoxtepClient({
|
|
91
|
+
api_url: process.env.LOXTEP_API_URL,
|
|
92
|
+
auth: { type: 'jwt', token: process.env.LOXTEP_TOKEN },
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// Write events to a data product by name
|
|
96
|
+
const writer = await client.data_products.get_writer('my-data-product');
|
|
97
|
+
writer.write({ id: '123', name: 'Alice' });
|
|
98
|
+
await writer.close();
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
That's it. No workflow IDs, no deployment lookups, no queue name conventions.
|
|
102
|
+
The SDK resolves the data product's runtime bindings, connects to the correct
|
|
103
|
+
stream bus, and writes directly to the data product queue.
|
|
104
|
+
|
|
105
|
+
### What happens under the hood
|
|
106
|
+
|
|
107
|
+
1. The SDK looks up the data product by name via the platform API
|
|
108
|
+
2. It reads the `deployment_bindings` to find the queue name, bot ID, and instance
|
|
109
|
+
3. It resolves the stream bus configuration from the instance record
|
|
110
|
+
4. It initializes the stream SDK and returns a writer pointed at the correct queue
|
|
111
|
+
|
|
112
|
+
### Writer options
|
|
113
|
+
|
|
114
|
+
You can customize the writer behavior with an options object:
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const writer = await client.data_products.get_writer('my-data-product', {
|
|
118
|
+
bot_id: 'custom-bot-id', // Override the resolved bot identity
|
|
119
|
+
batch_size: 500, // Events per batch (default: 100)
|
|
120
|
+
max_retries: 5, // Retry attempts on failure (default: 3)
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Step 4: Read Events Back
|
|
127
|
+
|
|
128
|
+
Reading from a data product is just as simple:
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
const reader = await client.data_products.get_reader('my-data-product');
|
|
132
|
+
|
|
133
|
+
for await (const event of reader) {
|
|
134
|
+
console.log('Received:', event);
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
The reader yields events as an async iterable. By default it generates a
|
|
139
|
+
reader bot ID of `sdk-reader-{data-product-name}` for checkpoint tracking.
|
|
140
|
+
|
|
141
|
+
### Reader options
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
const reader = await client.data_products.get_reader('my-data-product', {
|
|
145
|
+
bot_id: 'my-consumer', // Custom reader identity for checkpointing
|
|
146
|
+
from: 'z/2024/01/01', // Start position (default: latest checkpoint)
|
|
147
|
+
batch_size: 200, // Events per batch (default: 100)
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Complete Example
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
// first-event.ts
|
|
157
|
+
// Run: npx tsx first-event.ts
|
|
158
|
+
|
|
159
|
+
import { LoxtepClient } from '@loxtep/sdk';
|
|
160
|
+
|
|
161
|
+
async function main() {
|
|
162
|
+
const client = new LoxtepClient({
|
|
163
|
+
api_url: process.env.LOXTEP_API_URL,
|
|
164
|
+
auth: { type: 'jwt', token: process.env.LOXTEP_TOKEN },
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// Write an event to a data product
|
|
168
|
+
const writer = await client.data_products.get_writer('my-data-product');
|
|
169
|
+
|
|
170
|
+
writer.write({
|
|
171
|
+
id: `event-${Date.now()}`,
|
|
172
|
+
timestamp: new Date().toISOString(),
|
|
173
|
+
payload: { message: 'Hello from the Loxtep SDK!' },
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
await writer.close();
|
|
177
|
+
console.log('✓ Event written');
|
|
178
|
+
|
|
179
|
+
// Read it back
|
|
180
|
+
const reader = await client.data_products.get_reader('my-data-product', {
|
|
181
|
+
bot_id: 'quickstart-reader',
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
for await (const event of reader) {
|
|
185
|
+
console.log('✓ Event received:', JSON.stringify(event, null, 2));
|
|
186
|
+
break; // Just read the first one to verify
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
console.log('Done!');
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
main().catch(console.error);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Troubleshooting
|
|
198
|
+
|
|
199
|
+
### Data product not found
|
|
200
|
+
|
|
201
|
+
**Symptom:** `NotFoundError: Data product 'my-data-product' not found`
|
|
202
|
+
|
|
203
|
+
**Cause:** The SDK could not find a data product matching the name you provided.
|
|
204
|
+
|
|
205
|
+
**Fix:**
|
|
206
|
+
|
|
207
|
+
1. Verify the data product name is spelled correctly (names are case-sensitive).
|
|
208
|
+
2. Check that the data product's workflow has been deployed to an instance.
|
|
209
|
+
3. If you're using a UUID, confirm it matches an existing data product ID.
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# List data products in your organization
|
|
213
|
+
npx loxtep data-products list
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
### Data product not deployed
|
|
219
|
+
|
|
220
|
+
**Symptom:** `StreamingError: Data product 'my-data-product' is not deployed.
|
|
221
|
+
Deploy the workflow first.`
|
|
222
|
+
|
|
223
|
+
**Cause:** The data product exists in the workflow graph but has not been
|
|
224
|
+
deployed to an instance. Runtime bindings (queue name, bot ID) are only
|
|
225
|
+
available after deployment.
|
|
226
|
+
|
|
227
|
+
**Fix:**
|
|
228
|
+
|
|
229
|
+
1. Deploy the workflow containing the data product:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
npx loxtep deploy <workflow-id>
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
2. Or deploy via the Loxtep UI: **Workflows** → select your workflow → **Deploy**.
|
|
236
|
+
|
|
237
|
+
3. If using an AI assistant with MCP, use the `deploy_workflow` tool.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
### Unable to resolve stream configuration
|
|
242
|
+
|
|
243
|
+
**Symptom:** `StreamingError: Failed to resolve stream config for instance
|
|
244
|
+
<instance-id>`
|
|
245
|
+
|
|
246
|
+
**Cause:** The SDK resolved the data product and its instance, but could not
|
|
247
|
+
retrieve the stream bus resource names (DynamoDB tables, Kinesis stream, S3
|
|
248
|
+
bucket) from the instance record.
|
|
249
|
+
|
|
250
|
+
**Fix:**
|
|
251
|
+
|
|
252
|
+
1. Verify the instance is fully provisioned and running in the Loxtep UI.
|
|
253
|
+
2. Check that your account has `instances:read` permission on the target instance.
|
|
254
|
+
3. If the instance was recently created, wait a few minutes for provisioning to
|
|
255
|
+
complete — CloudFormation stack outputs may not be available immediately.
|
|
256
|
+
4. Contact your platform admin if the instance shows as provisioned but
|
|
257
|
+
resolution still fails.
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
### Multiple data products match
|
|
262
|
+
|
|
263
|
+
**Symptom:** `AmbiguityError: Multiple data products match 'my-data-product'.
|
|
264
|
+
Found matches on instances: [instance-a, instance-b]`
|
|
265
|
+
|
|
266
|
+
**Cause:** The same data product name exists on multiple instances and the SDK
|
|
267
|
+
cannot determine which one you mean.
|
|
268
|
+
|
|
269
|
+
**Fix:**
|
|
270
|
+
|
|
271
|
+
1. Set `instance_id` in the client options to scope resolution to a specific
|
|
272
|
+
instance:
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
const client = new LoxtepClient({
|
|
276
|
+
api_url: process.env.LOXTEP_API_URL,
|
|
277
|
+
auth: { type: 'jwt', token: process.env.LOXTEP_TOKEN },
|
|
278
|
+
instance_id: process.env.LOXTEP_INSTANCE_ID,
|
|
279
|
+
});
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
2. Or use the data product's UUID instead of its name:
|
|
283
|
+
|
|
284
|
+
```typescript
|
|
285
|
+
const writer = await client.data_products.get_writer('09fa202b-...');
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
### Missing Auth Token
|
|
291
|
+
|
|
292
|
+
**Symptom:** `AuthenticationError: No authentication token found`
|
|
293
|
+
|
|
294
|
+
**Cause:** The SDK cannot find a JWT token. Neither `LOXTEP_TOKEN` is set
|
|
295
|
+
nor `~/.loxtep/credentials.json` exists.
|
|
296
|
+
|
|
297
|
+
**Fix:**
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# Option 1: Log in interactively
|
|
301
|
+
npx loxtep login
|
|
302
|
+
|
|
303
|
+
# Option 2: Set the token directly
|
|
304
|
+
export LOXTEP_TOKEN="your-jwt-token"
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Next Steps
|
|
310
|
+
|
|
311
|
+
Now that you've written and read your first event, explore these resources:
|
|
312
|
+
|
|
313
|
+
| Resource | Description |
|
|
314
|
+
|----------|-------------|
|
|
315
|
+
| [Architecture Guide](./sdk-ingestion-export-guide.md) | Deep dive into how SDK ingestion and export works under the hood |
|
|
316
|
+
| [Quick Reference Card](./quick-reference.md) | Single-page cheat sheet for common SDK operations |
|
|
317
|
+
| [SDK REST vs Bus](./sdk-rest-vs-bus.md) | Understanding control plane vs data plane configuration |
|
|
318
|
+
| [Event Replay Cookbook](./event-replay-cookbook.md) | Patterns for replaying and reprocessing historical events |
|
|
319
|
+
|
|
320
|
+
### Lower-level API
|
|
321
|
+
|
|
322
|
+
If you need explicit control over bot IDs, queue names, or stream configuration,
|
|
323
|
+
the `flows.get_writer` API is still available as a lower-level escape hatch:
|
|
324
|
+
|
|
325
|
+
```typescript
|
|
326
|
+
const writer = await client.flows.get_writer('<flow_id>', {
|
|
327
|
+
bot_id: 'my-custom-bot',
|
|
328
|
+
output_queue_name: 'specific-queue-name',
|
|
329
|
+
});
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
See the [SDK README](../README.md) for the full API surface.
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# SDK Quick Reference Card
|
|
2
|
+
|
|
3
|
+
Concise cheat sheet for common Loxtep SDK operations. For full walkthroughs,
|
|
4
|
+
see the [Getting Started Guide](./getting-started.md) and the
|
|
5
|
+
[Architecture Guide](./sdk-ingestion-export-guide.md).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Client Initialization
|
|
10
|
+
|
|
11
|
+
### Node.js
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { LoxtepClient } from '@loxtep/sdk';
|
|
15
|
+
|
|
16
|
+
const client = new LoxtepClient({
|
|
17
|
+
api_url: process.env.LOXTEP_API_URL,
|
|
18
|
+
organization_id: process.env.LOXTEP_ORGANIZATION_ID,
|
|
19
|
+
project_id: process.env.LOXTEP_PROJECT_ID,
|
|
20
|
+
instance_id: process.env.LOXTEP_INSTANCE_ID,
|
|
21
|
+
region: process.env.LOXTEP_REGION,
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Python
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
import os
|
|
29
|
+
from loxtep import LoxtepClient
|
|
30
|
+
|
|
31
|
+
client = LoxtepClient(
|
|
32
|
+
api_url=os.environ["LOXTEP_API_URL"],
|
|
33
|
+
organization_id=os.environ["LOXTEP_ORGANIZATION_ID"],
|
|
34
|
+
project_id=os.environ["LOXTEP_PROJECT_ID"],
|
|
35
|
+
instance_id=os.environ["LOXTEP_INSTANCE_ID"],
|
|
36
|
+
region=os.environ["LOXTEP_REGION"],
|
|
37
|
+
)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
> If you ran `loxtep init`, the SDK reads defaults from
|
|
41
|
+
> `~/.loxtep/config.json` — you can use `new LoxtepClient()` with no args.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Writing Events
|
|
46
|
+
|
|
47
|
+
### Node.js
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
const writer = await client.flows.get_writer('<flow_id>', {
|
|
51
|
+
bot_id: 'my-bot',
|
|
52
|
+
output_queue_name: 'raw-events',
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
writer.write({ id: 'evt-1', payload: { key: 'value' } });
|
|
56
|
+
writer.write({ id: 'evt-2', payload: { key: 'value' } });
|
|
57
|
+
|
|
58
|
+
await writer.close(); // flushes all buffered events
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Python
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
writer = client.flows.get_writer("<flow_id>", {
|
|
65
|
+
"bot_id": "my-bot",
|
|
66
|
+
"output_queue_name": "raw-events",
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
writer.write({"id": "evt-1", "payload": {"key": "value"}})
|
|
70
|
+
writer.write({"id": "evt-2", "payload": {"key": "value"}})
|
|
71
|
+
|
|
72
|
+
writer.close() # flushes all buffered events
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Reading Events
|
|
78
|
+
|
|
79
|
+
### Node.js
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
const reader = await client.queues.open_reader({
|
|
83
|
+
bot_id: 'my-reader',
|
|
84
|
+
queue_name: 'raw-events',
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
for await (const event of reader.read()) {
|
|
88
|
+
console.log(event);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
reader.close();
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Python
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
reader = client.queues.open_reader({
|
|
98
|
+
"bot_id": "my-reader",
|
|
99
|
+
"queue_name": "raw-events",
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
for event in reader.read():
|
|
103
|
+
print(event)
|
|
104
|
+
|
|
105
|
+
reader.close()
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Data Products
|
|
111
|
+
|
|
112
|
+
### Stream Live Events
|
|
113
|
+
|
|
114
|
+
#### Node.js
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const stream = await client.data_products.stream('<data_product_id>', {
|
|
118
|
+
bot_id: 'my-stream-bot',
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
for await (const event of stream) {
|
|
122
|
+
console.log(event);
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
#### Python
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
stream = client.data_products.stream("<data_product_id>", {
|
|
130
|
+
"bot_id": "my-stream-bot",
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
for event in stream:
|
|
134
|
+
print(event)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Replay Historical Events
|
|
138
|
+
|
|
139
|
+
#### Node.js
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
const events = await client.data_products.replay('<data_product_id>', {
|
|
143
|
+
start: '2024-01-01T00:00:00Z',
|
|
144
|
+
end: '2024-01-02T00:00:00Z',
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### Python
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
events = client.data_products.replay("<data_product_id>", {
|
|
152
|
+
"start": "2024-01-01T00:00:00Z",
|
|
153
|
+
"end": "2024-01-02T00:00:00Z",
|
|
154
|
+
})
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### List and Get Data Products
|
|
158
|
+
|
|
159
|
+
#### Node.js
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
const products = await client.data_products.list();
|
|
163
|
+
const product = await client.data_products.get('<data_product_id>');
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
#### Python
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
products = client.data_products.list()
|
|
170
|
+
product = client.data_products.get("<data_product_id>")
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Flows and Connectors
|
|
176
|
+
|
|
177
|
+
### List Flows
|
|
178
|
+
|
|
179
|
+
#### Node.js
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
const flows = await client.flows.list();
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
#### Python
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
flows = client.flows.list()
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Get Connector
|
|
192
|
+
|
|
193
|
+
#### Node.js
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
const connector = await client.connectors.get('<connector_id>');
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### Python
|
|
200
|
+
|
|
201
|
+
```python
|
|
202
|
+
connector = client.connectors.get("<connector_id>")
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Quick Reference Table
|
|
208
|
+
|
|
209
|
+
| Task | Node.js | Python |
|
|
210
|
+
|------|---------|--------|
|
|
211
|
+
| **Init client** | `new LoxtepClient(options)` | `LoxtepClient(**options)` |
|
|
212
|
+
| **Write events** | `client.flows.get_writer(flow_id, opts)` → `writer.write(evt)` → `writer.close()` | Same API |
|
|
213
|
+
| **Read events** | `client.queues.open_reader({ bot_id, queue_name })` → `reader.read()` → `reader.close()` | Same API |
|
|
214
|
+
| **Stream live** | `client.data_products.stream(id, opts)` | Same API |
|
|
215
|
+
| **Replay history** | `client.data_products.replay(id, opts)` | Same API |
|
|
216
|
+
| **List data products** | `client.data_products.list()` | Same API |
|
|
217
|
+
| **Get data product** | `client.data_products.get(id)` | Same API |
|
|
218
|
+
| **List flows** | `client.flows.list()` | Same API |
|
|
219
|
+
| **Get connector** | `client.connectors.get(id)` | Same API |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## CLI Shortcuts
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Log in
|
|
227
|
+
npx loxtep login
|
|
228
|
+
|
|
229
|
+
# Initialize config
|
|
230
|
+
npx loxtep init
|
|
231
|
+
|
|
232
|
+
# Export connector config (shell, json, or env format)
|
|
233
|
+
npx loxtep config export --from-connector "<connector_id>" --format sh
|
|
234
|
+
npx loxtep config export --from-connector "<connector_id>" --format json
|
|
235
|
+
npx loxtep config export --from-connector "<connector_id>" --format env
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Auth Precedence
|
|
241
|
+
|
|
242
|
+
The SDK resolves authentication in this order:
|
|
243
|
+
|
|
244
|
+
1. `LOXTEP_AUTH_TOKEN` environment variable
|
|
245
|
+
2. `~/.loxtep/credentials.json` (from `loxtep login`)
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Further Reading
|
|
250
|
+
|
|
251
|
+
| Resource | Description |
|
|
252
|
+
|----------|-------------|
|
|
253
|
+
| [Getting Started Guide](./getting-started.md) | Zero-to-first-event walkthrough |
|
|
254
|
+
| [Architecture Guide](./sdk-ingestion-export-guide.md) | Control plane vs data plane, data flow diagrams |
|
|
255
|
+
| [SDK REST vs Bus](./sdk-rest-vs-bus.md) | Configuration surfaces and credential handling |
|
|
256
|
+
| [Event Replay Cookbook](./event-replay-cookbook.md) | Patterns for replaying historical events |
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Bus access — threat model and direction
|
|
2
|
+
|
|
3
|
+
## Assets
|
|
4
|
+
|
|
5
|
+
- **API JWT:** org-scoped, audited via normal app auth; used only on **SigV4
|
|
6
|
+
REST**.
|
|
7
|
+
- **Loxtep stream bus:** Kinesis/Dynamo/S3 tables and streams from your
|
|
8
|
+
**instance / stack** env; accessed with the **stream runtime** and **AWS
|
|
9
|
+
credentials** (not JWT alone).
|
|
10
|
+
|
|
11
|
+
## Threats
|
|
12
|
+
|
|
13
|
+
1. **Confused deputy:** treating a user JWT as proof of bus access would let any
|
|
14
|
+
token holder touch queues if they guessed names.
|
|
15
|
+
2. **Over-privileged CI:** long-lived IAM keys on developer laptops co-located
|
|
16
|
+
with refresh tokens double the blast radius.
|
|
17
|
+
3. **Silent god credentials:** implicit `~/.aws/credentials` for the bus account
|
|
18
|
+
without org policy mapping.
|
|
19
|
+
|
|
20
|
+
## Mitigations (target)
|
|
21
|
+
|
|
22
|
+
- **Separate issuance:** bus-capable material is issued only through **platform
|
|
23
|
+
APIs** evaluated with the **same RBAC** as REST (resource + action), with
|
|
24
|
+
**short TTL** and **scoped** policy (queue/bot prefixes).
|
|
25
|
+
- **Revocation:** disabling org role or bus grant immediately stops new
|
|
26
|
+
issuance; in-flight TTL bounded.
|
|
27
|
+
- **Audit:** who received bus credentials, when, for which instance/data
|
|
28
|
+
product.
|
|
29
|
+
- **No hand-rolled per-customer IAM** in app code; use STS assume-role or a
|
|
30
|
+
documented `bus session` API when shipped.
|
|
31
|
+
|
|
32
|
+
## Current state (honest)
|
|
33
|
+
|
|
34
|
+
- SDK expects operators to configure the **stream data plane** + **AWS** per
|
|
35
|
+
environment, or to call **`GET /observe/stream-config`** (same Observe
|
|
36
|
+
**proxy** path as `GET /observe/sdk-config`) with **`instances:read`** to
|
|
37
|
+
receive allowlisted **Leo/RStreams resource identifiers** resolved in the
|
|
38
|
+
**instance account** (not a JWT substitute for IAM on the bus).
|
|
39
|
+
- **`loxtep bus login`** is a **placeholder** until a platform **bus session**
|
|
40
|
+
(or STS exchange) endpoint ships; see CLI help output.
|
|
41
|
+
|
|
42
|
+
## ADR stub
|
|
43
|
+
|
|
44
|
+
**Decision (interim):** ship the Loxtep **stream** data plane in the SDK with
|
|
45
|
+
env/stack-based bus config; document JWT vs bus split; add RBAC-gated issuance
|
|
46
|
+
in a follow-up release when the API exists.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Control plane vs data plane (SDK)
|
|
2
|
+
|
|
3
|
+
## Control plane (REST)
|
|
4
|
+
|
|
5
|
+
- **SigV4-signed HTTP** to the API gateway **plus** `x-jwt-token` (org/user
|
|
6
|
+
JWT).
|
|
7
|
+
- Used for: catalogs, data product CRUD, flow definitions, deploy, checkpoints
|
|
8
|
+
**metadata**, `data_products.replay`, query, contracts, MCP-proxy style
|
|
9
|
+
`discovery` calls, etc.
|
|
10
|
+
- **AWS credentials** are still required for SigV4 unless your environment
|
|
11
|
+
injects them (CLI uses a documented dummy pair only where the gateway allows
|
|
12
|
+
it).
|
|
13
|
+
|
|
14
|
+
## Data plane (Loxtep streams)
|
|
15
|
+
|
|
16
|
+
- **Live** events: `flows.get_writer().close()`, `queues.open_reader` /
|
|
17
|
+
`open_writer`, and `data_products.stream` when `bot_id` + configured bus — all
|
|
18
|
+
go through the Loxtep **stream runtime** (DynamoDB / Kinesis / S3, etc. per
|
|
19
|
+
your stack) via `LoxtepClientOptions.streams` and instance env, or a prebuild
|
|
20
|
+
passed as `streams_sdk`.
|
|
21
|
+
- **Not** “JWT ⇒ bus.” Bus access uses **AWS principals** scoped to the stream
|
|
22
|
+
infrastructure. Platform **RBAC** should gate _who_ may receive short-lived
|
|
23
|
+
bus material (see
|
|
24
|
+
[sdk-bus-rbac-threat-model.md](./sdk-bus-rbac-threat-model.md)); today
|
|
25
|
+
operators wire stack access and env.
|
|
26
|
+
|
|
27
|
+
## Project vs queue
|
|
28
|
+
|
|
29
|
+
- **Project** scopes control-plane APIs: list flows, deploy workflow graphs,
|
|
30
|
+
resolve ingestion queue names from flow metadata.
|
|
31
|
+
- **Queue** is the runtime unit on the bus: readers/writers are always
|
|
32
|
+
`bot_id` + `queue_name` on the stream data plane.
|