@seamapi/nextlove-sdk-generator 1.4.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/LICENSE.txt +20 -0
- package/README.md +16 -0
- package/index.d.ts +6 -0
- package/index.js +7 -0
- package/index.js.map +1 -0
- package/lib/cli.d.ts +2 -0
- package/lib/cli.js +53 -0
- package/lib/cli.js.map +1 -0
- package/lib/fs-util/index.d.ts +2 -0
- package/lib/fs-util/index.js +3 -0
- package/lib/fs-util/index.js.map +1 -0
- package/lib/fs-util/populate-fs.d.ts +1 -0
- package/lib/fs-util/populate-fs.js +11 -0
- package/lib/fs-util/populate-fs.js.map +1 -0
- package/lib/fs-util/write-fs.d.ts +1 -0
- package/lib/fs-util/write-fs.js +10 -0
- package/lib/fs-util/write-fs.js.map +1 -0
- package/lib/generate-csharp-sdk/codegen.d.ts +235 -0
- package/lib/generate-csharp-sdk/codegen.js +432 -0
- package/lib/generate-csharp-sdk/codegen.js.map +1 -0
- package/lib/generate-csharp-sdk/constants.d.ts +1 -0
- package/lib/generate-csharp-sdk/constants.js +2 -0
- package/lib/generate-csharp-sdk/constants.js.map +1 -0
- package/lib/generate-csharp-sdk/generate-csharp-sdk.d.ts +1 -0
- package/lib/generate-csharp-sdk/generate-csharp-sdk.js +81 -0
- package/lib/generate-csharp-sdk/generate-csharp-sdk.js.map +1 -0
- package/lib/generate-csharp-sdk/generate-csproj.d.ts +1 -0
- package/lib/generate-csharp-sdk/generate-csproj.js +45 -0
- package/lib/generate-csharp-sdk/generate-csproj.js.map +1 -0
- package/lib/generate-csharp-sdk/templates/dataclass.d.ts +24 -0
- package/lib/generate-csharp-sdk/templates/dataclass.js +468 -0
- package/lib/generate-csharp-sdk/templates/dataclass.js.map +1 -0
- package/lib/generate-csharp-sdk/templates/fs/csharp-testing.sln +34 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ApiResponse.cs +159 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ClientUtils.cs +280 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ExceptionFactory.cs +12 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/GlobalSeamRequestConfiguration.cs +60 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/HttpMethod.cs +29 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IAsynchronousSeam.cs +142 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IReadableSeamRequestConfiguration.cs +68 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ISynchronousSeam.cs +103 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Multimap.cs +286 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RequestOptions.cs +74 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RetryConfiguration.cs +21 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Seam.cs +1070 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamException.cs +64 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamRequestConfiguration.cs +662 -0
- package/lib/generate-csharp-sdk/templates/fs/src/Seam/Model/AsbtractModelSchema.cs +62 -0
- package/lib/generate-php-sdk/generate-php-sdk.d.ts +1 -0
- package/lib/generate-php-sdk/generate-php-sdk.js +127 -0
- package/lib/generate-php-sdk/generate-php-sdk.js.map +1 -0
- package/lib/generate-php-sdk/index.d.ts +1 -0
- package/lib/generate-php-sdk/index.js +2 -0
- package/lib/generate-php-sdk/index.js.map +1 -0
- package/lib/generate-php-sdk/templates/composer.json.template.d.ts +2 -0
- package/lib/generate-php-sdk/templates/composer.json.template.js +25 -0
- package/lib/generate-php-sdk/templates/composer.json.template.js.map +1 -0
- package/lib/generate-php-sdk/templates/env.example.template.d.ts +2 -0
- package/lib/generate-php-sdk/templates/env.example.template.js +4 -0
- package/lib/generate-php-sdk/templates/env.example.template.js.map +1 -0
- package/lib/generate-php-sdk/templates/gitignore.template.d.ts +2 -0
- package/lib/generate-php-sdk/templates/gitignore.template.js +6 -0
- package/lib/generate-php-sdk/templates/gitignore.template.js.map +1 -0
- package/lib/generate-php-sdk/templates/package.json.template.d.ts +2 -0
- package/lib/generate-php-sdk/templates/package.json.template.js +12 -0
- package/lib/generate-php-sdk/templates/package.json.template.js.map +1 -0
- package/lib/generate-php-sdk/templates/readme.md.template.d.ts +2 -0
- package/lib/generate-php-sdk/templates/readme.md.template.js +86 -0
- package/lib/generate-php-sdk/templates/readme.md.template.js.map +1 -0
- package/lib/generate-php-sdk/templates/smoke-test.template.d.ts +2 -0
- package/lib/generate-php-sdk/templates/smoke-test.template.js +30 -0
- package/lib/generate-php-sdk/templates/smoke-test.template.js.map +1 -0
- package/lib/generate-php-sdk/templates/test-fixture.template.d.ts +2 -0
- package/lib/generate-php-sdk/templates/test-fixture.template.js +21 -0
- package/lib/generate-php-sdk/templates/test-fixture.template.js.map +1 -0
- package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.d.ts +16 -0
- package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.js +97 -0
- package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.js.map +1 -0
- package/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.d.ts +2 -0
- package/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.js +95 -0
- package/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.js.map +1 -0
- package/lib/generate-php-sdk/utils/generate-resource-object-class.d.ts +8 -0
- package/lib/generate-php-sdk/utils/generate-resource-object-class.js +73 -0
- package/lib/generate-php-sdk/utils/generate-resource-object-class.js.map +1 -0
- package/lib/generate-php-sdk/utils/generate-seam-client.d.ts +7 -0
- package/lib/generate-php-sdk/utils/generate-seam-client.js +103 -0
- package/lib/generate-php-sdk/utils/generate-seam-client.js.map +1 -0
- package/lib/generate-php-sdk/utils/get-php-type.d.ts +1 -0
- package/lib/generate-php-sdk/utils/get-php-type.js +17 -0
- package/lib/generate-php-sdk/utils/get-php-type.js.map +1 -0
- package/lib/generate-php-sdk/utils/php-client.d.ts +31 -0
- package/lib/generate-php-sdk/utils/php-client.js +130 -0
- package/lib/generate-php-sdk/utils/php-client.js.map +1 -0
- package/lib/generate-python-sdk/class-file.d.ts +20 -0
- package/lib/generate-python-sdk/class-file.js +75 -0
- package/lib/generate-python-sdk/class-file.js.map +1 -0
- package/lib/generate-python-sdk/generate-python-sdk.d.ts +1 -0
- package/lib/generate-python-sdk/generate-python-sdk.js +117 -0
- package/lib/generate-python-sdk/generate-python-sdk.js.map +1 -0
- package/lib/generate-python-sdk/index.d.ts +1 -0
- package/lib/generate-python-sdk/index.js +2 -0
- package/lib/generate-python-sdk/index.js.map +1 -0
- package/lib/generate-python-sdk/map-python-type.d.ts +2 -0
- package/lib/generate-python-sdk/map-python-type.js +26 -0
- package/lib/generate-python-sdk/map-python-type.js.map +1 -0
- package/lib/generate-python-sdk/templates/conftest.py.template.d.ts +2 -0
- package/lib/generate-python-sdk/templates/conftest.py.template.js +12 -0
- package/lib/generate-python-sdk/templates/conftest.py.template.js.map +1 -0
- package/lib/generate-python-sdk/templates/pyproject.toml.template.d.ts +2 -0
- package/lib/generate-python-sdk/templates/pyproject.toml.template.js +21 -0
- package/lib/generate-python-sdk/templates/pyproject.toml.template.js.map +1 -0
- package/lib/generate-python-sdk/templates/readme.md.template.d.ts +2 -0
- package/lib/generate-python-sdk/templates/readme.md.template.js +48 -0
- package/lib/generate-python-sdk/templates/readme.md.template.js.map +1 -0
- package/lib/generate-python-sdk/templates/routes.py.template.d.ts +2 -0
- package/lib/generate-python-sdk/templates/routes.py.template.js +13 -0
- package/lib/generate-python-sdk/templates/routes.py.template.js.map +1 -0
- package/lib/generate-python-sdk/templates/seam.py.template.d.ts +2 -0
- package/lib/generate-python-sdk/templates/seam.py.template.js +74 -0
- package/lib/generate-python-sdk/templates/seam.py.template.js.map +1 -0
- package/lib/generate-python-sdk/templates/snippets/abstract-routes.template.d.ts +2 -0
- package/lib/generate-python-sdk/templates/snippets/abstract-routes.template.js +9 -0
- package/lib/generate-python-sdk/templates/snippets/abstract-routes.template.js.map +1 -0
- package/lib/generate-python-sdk/templates/snippets/abstract-seam.template.d.ts +2 -0
- package/lib/generate-python-sdk/templates/snippets/abstract-seam.template.js +9 -0
- package/lib/generate-python-sdk/templates/snippets/abstract-seam.template.js.map +1 -0
- package/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.d.ts +5 -0
- package/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.js +10 -0
- package/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.js.map +1 -0
- package/lib/generate-python-sdk/templates/test_smoke.py.template.d.ts +2 -0
- package/lib/generate-python-sdk/templates/test_smoke.py.template.js +13 -0
- package/lib/generate-python-sdk/templates/test_smoke.py.template.js.map +1 -0
- package/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.d.ts +2 -0
- package/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.js +28 -0
- package/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.js.map +1 -0
- package/lib/generate-ruby-sdk/generate-ruby-sdk.d.ts +1 -0
- package/lib/generate-ruby-sdk/generate-ruby-sdk.js +132 -0
- package/lib/generate-ruby-sdk/generate-ruby-sdk.js.map +1 -0
- package/lib/generate-ruby-sdk/index.d.ts +1 -0
- package/lib/generate-ruby-sdk/index.js +2 -0
- package/lib/generate-ruby-sdk/index.js.map +1 -0
- package/lib/generate-ruby-sdk/request.rb.template.d.ts +1 -0
- package/lib/generate-ruby-sdk/request.rb.template.js +2 -0
- package/lib/generate-ruby-sdk/request.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/ruby-client.d.ts +35 -0
- package/lib/generate-ruby-sdk/ruby-client.js +59 -0
- package/lib/generate-ruby-sdk/ruby-client.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/base_client.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/base_client.rb.template.js +22 -0
- package/lib/generate-ruby-sdk/templates/base_client.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/base_resource.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/base_resource.rb.template.js +59 -0
- package/lib/generate-ruby-sdk/templates/base_resource.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/client.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/client.rb.template.js +74 -0
- package/lib/generate-ruby-sdk/templates/client.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/gemfile.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/gemfile.template.js +7 -0
- package/lib/generate-ruby-sdk/templates/gemfile.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/logger.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/logger.rb.template.js +13 -0
- package/lib/generate-ruby-sdk/templates/logger.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/rakefile.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/rakefile.template.js +23 -0
- package/lib/generate-ruby-sdk/templates/rakefile.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/readme.md.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/readme.md.template.js +184 -0
- package/lib/generate-ruby-sdk/templates/readme.md.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/request.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/request.rb.template.js +71 -0
- package/lib/generate-ruby-sdk/templates/request.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/resource_error.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/resource_error.rb.template.js +8 -0
- package/lib/generate-ruby-sdk/templates/resource_error.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.js +10 -0
- package/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.js +8 -0
- package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.js +10 -0
- package/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.js +41 -0
- package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.d.ts +6 -0
- package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.js +15 -0
- package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/version.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/version.rb.template.js +6 -0
- package/lib/generate-ruby-sdk/templates/version.rb.template.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -0
- package/lib/openapi/flatten-obj-schema.d.ts +5 -0
- package/lib/openapi/flatten-obj-schema.js +86 -0
- package/lib/openapi/flatten-obj-schema.js.map +1 -0
- package/lib/openapi/get-parameter-and-response-schema.d.ts +20 -0
- package/lib/openapi/get-parameter-and-response-schema.js +42 -0
- package/lib/openapi/get-parameter-and-response-schema.js.map +1 -0
- package/lib/openapi/index.d.ts +2 -0
- package/lib/openapi/index.js +3 -0
- package/lib/openapi/index.js.map +1 -0
- package/lib/types.d.ts +91 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/package.json +95 -0
- package/src/index.ts +6 -0
- package/src/lib/cli.ts +71 -0
- package/src/lib/fs-util/index.ts +2 -0
- package/src/lib/fs-util/populate-fs.ts +14 -0
- package/src/lib/fs-util/write-fs.ts +10 -0
- package/src/lib/generate-csharp-sdk/codegen.ts +648 -0
- package/src/lib/generate-csharp-sdk/constants.ts +1 -0
- package/src/lib/generate-csharp-sdk/generate-csharp-sdk.ts +126 -0
- package/src/lib/generate-csharp-sdk/generate-csproj.ts +45 -0
- package/src/lib/generate-csharp-sdk/templates/dataclass.ts +973 -0
- package/src/lib/generate-csharp-sdk/templates/fs/csharp-testing.sln +34 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ApiResponse.cs +159 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ClientUtils.cs +280 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ExceptionFactory.cs +12 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/GlobalSeamRequestConfiguration.cs +60 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/HttpMethod.cs +29 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IAsynchronousSeam.cs +142 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IReadableSeamRequestConfiguration.cs +68 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ISynchronousSeam.cs +103 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Multimap.cs +286 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RequestOptions.cs +74 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RetryConfiguration.cs +21 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Seam.cs +1070 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamException.cs +64 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamRequestConfiguration.cs +662 -0
- package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Model/AsbtractModelSchema.cs +62 -0
- package/src/lib/generate-php-sdk/generate-php-sdk.ts +176 -0
- package/src/lib/generate-php-sdk/index.ts +1 -0
- package/src/lib/generate-php-sdk/templates/composer.json.template.ts +24 -0
- package/src/lib/generate-php-sdk/templates/env.example.template.ts +3 -0
- package/src/lib/generate-php-sdk/templates/gitignore.template.ts +5 -0
- package/src/lib/generate-php-sdk/templates/package.json.template.ts +11 -0
- package/src/lib/generate-php-sdk/templates/readme.md.template.ts +85 -0
- package/src/lib/generate-php-sdk/templates/smoke-test.template.ts +29 -0
- package/src/lib/generate-php-sdk/templates/test-fixture.template.ts +20 -0
- package/src/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.ts +160 -0
- package/src/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.ts +128 -0
- package/src/lib/generate-php-sdk/utils/generate-resource-object-class.ts +105 -0
- package/src/lib/generate-php-sdk/utils/generate-seam-client.ts +115 -0
- package/src/lib/generate-php-sdk/utils/get-php-type.ts +21 -0
- package/src/lib/generate-php-sdk/utils/php-client.ts +189 -0
- package/src/lib/generate-python-sdk/class-file.ts +114 -0
- package/src/lib/generate-python-sdk/generate-python-sdk.ts +147 -0
- package/src/lib/generate-python-sdk/index.ts +1 -0
- package/src/lib/generate-python-sdk/map-python-type.ts +29 -0
- package/src/lib/generate-python-sdk/templates/conftest.py.template.ts +11 -0
- package/src/lib/generate-python-sdk/templates/pyproject.toml.template.ts +20 -0
- package/src/lib/generate-python-sdk/templates/readme.md.template.ts +47 -0
- package/src/lib/generate-python-sdk/templates/routes.py.template.ts +13 -0
- package/src/lib/generate-python-sdk/templates/seam.py.template.ts +73 -0
- package/src/lib/generate-python-sdk/templates/snippets/abstract-routes.template.ts +9 -0
- package/src/lib/generate-python-sdk/templates/snippets/abstract-seam.template.ts +8 -0
- package/src/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.ts +15 -0
- package/src/lib/generate-python-sdk/templates/test_smoke.py.template.ts +12 -0
- package/src/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.ts +27 -0
- package/src/lib/generate-ruby-sdk/generate-ruby-sdk.ts +153 -0
- package/src/lib/generate-ruby-sdk/index.ts +1 -0
- package/src/lib/generate-ruby-sdk/request.rb.template.ts +0 -0
- package/src/lib/generate-ruby-sdk/ruby-client.ts +81 -0
- package/src/lib/generate-ruby-sdk/templates/base_client.rb.template.ts +21 -0
- package/src/lib/generate-ruby-sdk/templates/base_resource.rb.template.ts +58 -0
- package/src/lib/generate-ruby-sdk/templates/client.rb.template.ts +73 -0
- package/src/lib/generate-ruby-sdk/templates/gemfile.template.ts +6 -0
- package/src/lib/generate-ruby-sdk/templates/logger.rb.template.ts +12 -0
- package/src/lib/generate-ruby-sdk/templates/rakefile.template.ts +22 -0
- package/src/lib/generate-ruby-sdk/templates/readme.md.template.ts +183 -0
- package/src/lib/generate-ruby-sdk/templates/request.rb.template.ts +70 -0
- package/src/lib/generate-ruby-sdk/templates/resource_error.rb.template.ts +7 -0
- package/src/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.ts +9 -0
- package/src/lib/generate-ruby-sdk/templates/resource_warning.rb.template.ts +7 -0
- package/src/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.ts +9 -0
- package/src/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.ts +40 -0
- package/src/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.ts +24 -0
- package/src/lib/generate-ruby-sdk/templates/version.rb.template.ts +5 -0
- package/src/lib/index.ts +2 -0
- package/src/lib/openapi/flatten-obj-schema.ts +124 -0
- package/src/lib/openapi/get-parameter-and-response-schema.ts +59 -0
- package/src/lib/openapi/index.ts +2 -0
- package/src/lib/types.ts +96 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AllOfSchema,
|
|
3
|
+
ArraySchema,
|
|
4
|
+
ObjSchema,
|
|
5
|
+
OneOfSchema,
|
|
6
|
+
PrimitiveSchema,
|
|
7
|
+
PropertySchema,
|
|
8
|
+
} from "lib/types.js"
|
|
9
|
+
|
|
10
|
+
export function deepFlattenOneOfAndAllOfSchema(schema: PropertySchema) {
|
|
11
|
+
if ("oneOf" in schema) {
|
|
12
|
+
return flattenOneOf(schema)
|
|
13
|
+
} else if ("allOf" in schema) {
|
|
14
|
+
return flattenAllOf(schema)
|
|
15
|
+
} else if (
|
|
16
|
+
"type" in schema &&
|
|
17
|
+
schema.type === "object" &&
|
|
18
|
+
schema.properties
|
|
19
|
+
) {
|
|
20
|
+
return flattenObject(schema)
|
|
21
|
+
} else if ("type" in schema && schema.type === "array" && schema.items) {
|
|
22
|
+
return flattenArray(schema)
|
|
23
|
+
} else {
|
|
24
|
+
// For primitive types, return the schema as is
|
|
25
|
+
return schema
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function flattenOneOf(one_of_schema: OneOfSchema): ObjSchema | PrimitiveSchema {
|
|
30
|
+
const flattened_schema = {
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {},
|
|
33
|
+
required: [],
|
|
34
|
+
} as ObjSchema
|
|
35
|
+
|
|
36
|
+
for (const sub_schema of one_of_schema.oneOf) {
|
|
37
|
+
const flattened_sub_schema = deepFlattenOneOfAndAllOfSchema(sub_schema)
|
|
38
|
+
|
|
39
|
+
// Check if the sub-schema is a primitive schema
|
|
40
|
+
if (
|
|
41
|
+
"type" in flattened_sub_schema &&
|
|
42
|
+
!("properties" in flattened_sub_schema)
|
|
43
|
+
) {
|
|
44
|
+
return { type: flattened_sub_schema.type } as PrimitiveSchema
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if ("$ref" in flattened_sub_schema) {
|
|
48
|
+
console.error("$ref not currently supported when flattening oneOf")
|
|
49
|
+
continue
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Merge properties
|
|
53
|
+
Object.assign(flattened_schema.properties, flattened_sub_schema.properties)
|
|
54
|
+
|
|
55
|
+
// Update required array with common properties
|
|
56
|
+
flattened_schema.required =
|
|
57
|
+
flattened_schema.required.length === 0
|
|
58
|
+
? flattened_sub_schema.required
|
|
59
|
+
: flattened_schema.required.filter((prop) =>
|
|
60
|
+
flattened_sub_schema.required.includes(prop)
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return flattened_schema
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function flattenAllOf(all_of_schema: AllOfSchema): ObjSchema | PrimitiveSchema {
|
|
68
|
+
const flattened_schema = {
|
|
69
|
+
type: "object",
|
|
70
|
+
properties: {},
|
|
71
|
+
required: [],
|
|
72
|
+
} as ObjSchema
|
|
73
|
+
|
|
74
|
+
for (const sub_Schema of all_of_schema.allOf) {
|
|
75
|
+
const flattened_sub_schema = deepFlattenOneOfAndAllOfSchema(sub_Schema)
|
|
76
|
+
|
|
77
|
+
// Check if the sub-schema is a primitive schema
|
|
78
|
+
if (
|
|
79
|
+
"type" in flattened_sub_schema &&
|
|
80
|
+
!("properties" in flattened_sub_schema)
|
|
81
|
+
) {
|
|
82
|
+
return { type: flattened_sub_schema.type } as PrimitiveSchema
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if ("$ref" in flattened_sub_schema) {
|
|
86
|
+
console.error("$ref not currently supported when flattening allOf")
|
|
87
|
+
continue
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Merge properties
|
|
91
|
+
Object.assign(flattened_schema.properties, flattened_sub_schema.properties)
|
|
92
|
+
|
|
93
|
+
// Merge required array
|
|
94
|
+
flattened_schema.required = [
|
|
95
|
+
...new Set([
|
|
96
|
+
...flattened_schema.required,
|
|
97
|
+
...flattened_sub_schema.required,
|
|
98
|
+
]),
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return flattened_schema
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function flattenObject(obj_schema: ObjSchema) {
|
|
106
|
+
const flattened_schema = {
|
|
107
|
+
type: "object",
|
|
108
|
+
properties: {},
|
|
109
|
+
required: obj_schema.required || [],
|
|
110
|
+
} as ObjSchema
|
|
111
|
+
|
|
112
|
+
for (const prop in obj_schema.properties) {
|
|
113
|
+
flattened_schema.properties[prop] = deepFlattenOneOfAndAllOfSchema(
|
|
114
|
+
obj_schema.properties[prop]!
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return flattened_schema
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function flattenArray(array_schema: ArraySchema): ArraySchema {
|
|
122
|
+
const flattened_schema = {
|
|
123
|
+
type: "array",
|
|
124
|
+
items: deepFlattenOneOfAndAllOfSchema(array_schema.items),
|
|
125
|
+
} as ArraySchema
|
|
126
|
+
|
|
127
|
+
return flattened_schema
|
|
128
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { PropertySchemaWithReferenceObject } from "./deep-extract-resource-object-schemas.js"
|
|
2
|
+
import { getPhpType } from "./get-php-type.js"
|
|
3
|
+
|
|
4
|
+
interface Params {
|
|
5
|
+
resource_name: string
|
|
6
|
+
resource_properties: Record<string, PropertySchemaWithReferenceObject>
|
|
7
|
+
required_property_names: string[]
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const generateResourceObjectClass = ({
|
|
11
|
+
resource_name,
|
|
12
|
+
resource_properties,
|
|
13
|
+
required_property_names,
|
|
14
|
+
}: Params) => {
|
|
15
|
+
const generateTypeDefinition = (
|
|
16
|
+
prop_name: string,
|
|
17
|
+
prop_schema: PropertySchemaWithReferenceObject
|
|
18
|
+
) => {
|
|
19
|
+
const is_object_referencing_resource =
|
|
20
|
+
"type" in prop_schema &&
|
|
21
|
+
prop_schema.type === "object" &&
|
|
22
|
+
"reference_object_type_name" in prop_schema
|
|
23
|
+
|
|
24
|
+
const is_array_referencing_resource =
|
|
25
|
+
"type" in prop_schema &&
|
|
26
|
+
prop_schema.type === "array" &&
|
|
27
|
+
"reference_object_type_name" in prop_schema
|
|
28
|
+
|
|
29
|
+
if (is_object_referencing_resource) {
|
|
30
|
+
return `${prop_name}: ${
|
|
31
|
+
prop_schema.reference_object_type_name
|
|
32
|
+
}::from_json($json->${prop_name})${
|
|
33
|
+
required_property_names.includes(prop_name) ? "," : " ?? null,"
|
|
34
|
+
}`
|
|
35
|
+
} else if (is_array_referencing_resource) {
|
|
36
|
+
return `${prop_name}: array_map(
|
|
37
|
+
fn ($${prop_name[0]}) => ${prop_schema.reference_object_type_name}::from_json($${prop_name[0]}),
|
|
38
|
+
$json->${prop_name} ?? []
|
|
39
|
+
),`
|
|
40
|
+
} else {
|
|
41
|
+
return `${prop_name}: $json->${prop_name}${
|
|
42
|
+
required_property_names.includes(prop_name) ? "," : " ?? null,"
|
|
43
|
+
}`
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const generateFromJsonMethod = () => {
|
|
48
|
+
return `
|
|
49
|
+
public static function from_json(mixed $json): ${resource_name}|null
|
|
50
|
+
{
|
|
51
|
+
if (!$json) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return new self(
|
|
55
|
+
${Object.entries(resource_properties)
|
|
56
|
+
.map(([prop, prop_schema]) =>
|
|
57
|
+
generateTypeDefinition(prop, prop_schema)
|
|
58
|
+
)
|
|
59
|
+
.join("\n ")}
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
`
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const generateConstructor = () => {
|
|
66
|
+
return `
|
|
67
|
+
public function __construct(
|
|
68
|
+
${Object.entries(resource_properties)
|
|
69
|
+
.map(([prop_name, prop_schema]) => {
|
|
70
|
+
const is_object_referencing_resource =
|
|
71
|
+
"type" in prop_schema &&
|
|
72
|
+
prop_schema.type === "object" &&
|
|
73
|
+
"reference_object_type_name" in prop_schema
|
|
74
|
+
const php_type = is_object_referencing_resource
|
|
75
|
+
? prop_schema.reference_object_type_name
|
|
76
|
+
: getPhpType("type" in prop_schema ? prop_schema.type : "mixed")
|
|
77
|
+
|
|
78
|
+
return `public ${php_type}${
|
|
79
|
+
php_type === "mixed"
|
|
80
|
+
? ""
|
|
81
|
+
: required_property_names.includes(prop_name)
|
|
82
|
+
? ""
|
|
83
|
+
: " | null"
|
|
84
|
+
} $${prop_name},`
|
|
85
|
+
})
|
|
86
|
+
.join("\n ")}
|
|
87
|
+
) {
|
|
88
|
+
}
|
|
89
|
+
`
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const phpClass = `<?php
|
|
93
|
+
|
|
94
|
+
namespace Seam\\Objects;
|
|
95
|
+
|
|
96
|
+
class ${resource_name}
|
|
97
|
+
{
|
|
98
|
+
${generateFromJsonMethod()}
|
|
99
|
+
|
|
100
|
+
${generateConstructor()}
|
|
101
|
+
}
|
|
102
|
+
`
|
|
103
|
+
|
|
104
|
+
return phpClass
|
|
105
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { PhpClient } from "./php-client.js"
|
|
2
|
+
|
|
3
|
+
interface Params {
|
|
4
|
+
resource_clients: PhpClient[]
|
|
5
|
+
resource_object_names: string[]
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const generateSeamClient = ({
|
|
9
|
+
resource_clients,
|
|
10
|
+
resource_object_names,
|
|
11
|
+
}: Params) => {
|
|
12
|
+
const parent_resource_clients = resource_clients.filter(
|
|
13
|
+
(c) => c.is_parent_client
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
return `<?php
|
|
17
|
+
|
|
18
|
+
namespace Seam;
|
|
19
|
+
|
|
20
|
+
${resource_object_names.map((n) => `use Seam\\Objects\\${n};`).join("\n")}
|
|
21
|
+
|
|
22
|
+
use GuzzleHttp\\Client as HTTPClient;
|
|
23
|
+
use \\Exception as Exception;
|
|
24
|
+
|
|
25
|
+
class SeamClient
|
|
26
|
+
{
|
|
27
|
+
${parent_resource_clients
|
|
28
|
+
.map((c) => `public ${c.client_name}Client $${c.namespace};`)
|
|
29
|
+
.join("\n ")}
|
|
30
|
+
|
|
31
|
+
public string $api_key;
|
|
32
|
+
public HTTPClient $client;
|
|
33
|
+
|
|
34
|
+
public function __construct(
|
|
35
|
+
$api_key,
|
|
36
|
+
$endpoint = "https://connect.getseam.com",
|
|
37
|
+
$throw_http_errors = false
|
|
38
|
+
) {
|
|
39
|
+
$this->api_key = $api_key;
|
|
40
|
+
$this->client = new HTTPClient([
|
|
41
|
+
"base_uri" => $endpoint,
|
|
42
|
+
"timeout" => 60.0,
|
|
43
|
+
"headers" => [
|
|
44
|
+
"Authorization" => "Bearer " . $this->api_key,
|
|
45
|
+
"User-Agent" => "Seam PHP Client 0.0.1",
|
|
46
|
+
],
|
|
47
|
+
"http_errors" => $throw_http_errors,
|
|
48
|
+
]);
|
|
49
|
+
${parent_resource_clients
|
|
50
|
+
.map((c) => `$this->${c.namespace} = new ${c.client_name}Client($this);`)
|
|
51
|
+
.join("\n ")}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public function request(
|
|
55
|
+
$method,
|
|
56
|
+
$path,
|
|
57
|
+
$json = null,
|
|
58
|
+
$query = null,
|
|
59
|
+
$inner_object = null
|
|
60
|
+
) {
|
|
61
|
+
$options = [
|
|
62
|
+
"json" => $json,
|
|
63
|
+
"query" => $query,
|
|
64
|
+
];
|
|
65
|
+
$options = array_filter($options, fn ($option) => $option !== null);
|
|
66
|
+
|
|
67
|
+
// TODO handle request errors
|
|
68
|
+
$response = $this->client->request($method, $path, $options);
|
|
69
|
+
$statusCode = $response->getStatusCode();
|
|
70
|
+
|
|
71
|
+
$res_json = null;
|
|
72
|
+
try {
|
|
73
|
+
$res_json = json_decode($response->getBody());
|
|
74
|
+
} catch (Exception $ignoreError) {
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (($res_json->error ?? null) != null) {
|
|
78
|
+
throw new Exception(
|
|
79
|
+
"Error Calling \\"" .
|
|
80
|
+
$method .
|
|
81
|
+
" " .
|
|
82
|
+
$path .
|
|
83
|
+
"\\" : " .
|
|
84
|
+
($res_json->error->type ?? "") .
|
|
85
|
+
": " .
|
|
86
|
+
$res_json->error->message
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if ($statusCode >= 400) {
|
|
91
|
+
throw new Exception(
|
|
92
|
+
"HTTP Error: [" . $statusCode . "] " . $method . " " . $path
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if ($inner_object) {
|
|
97
|
+
if (!is_array($res_json->$inner_object) && ($res_json->$inner_object ?? null) == null) {
|
|
98
|
+
throw new Exception(
|
|
99
|
+
'Missing Inner Object "' .
|
|
100
|
+
$inner_object .
|
|
101
|
+
'" for ' .
|
|
102
|
+
$method .
|
|
103
|
+
" " .
|
|
104
|
+
$path
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
return $res_json->$inner_object;
|
|
108
|
+
}
|
|
109
|
+
return $res_json;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
${resource_clients.map((c) => c.serialize()).join("\n\n")}
|
|
114
|
+
`
|
|
115
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const getPhpType = (zod_type: string) => {
|
|
2
|
+
switch (zod_type) {
|
|
3
|
+
case "string":
|
|
4
|
+
return "string"
|
|
5
|
+
|
|
6
|
+
case "number":
|
|
7
|
+
return "float"
|
|
8
|
+
|
|
9
|
+
case "boolean":
|
|
10
|
+
return "bool"
|
|
11
|
+
|
|
12
|
+
case "object":
|
|
13
|
+
return "mixed"
|
|
14
|
+
|
|
15
|
+
case "array":
|
|
16
|
+
return "array"
|
|
17
|
+
|
|
18
|
+
default:
|
|
19
|
+
return "mixed"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
export type PhpClientMethodParameter = {
|
|
2
|
+
name: string
|
|
3
|
+
type: string
|
|
4
|
+
required?: boolean | undefined
|
|
5
|
+
position?: number | undefined
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type PhpClientMethod = {
|
|
9
|
+
method_name: string
|
|
10
|
+
path: string
|
|
11
|
+
parameters: PhpClientMethodParameter[]
|
|
12
|
+
return_resource: string
|
|
13
|
+
return_path: string
|
|
14
|
+
is_array_response: boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type ClientName = string
|
|
18
|
+
type Namespace = string
|
|
19
|
+
export type PhpClientIdentifiers = {
|
|
20
|
+
client_name: ClientName
|
|
21
|
+
namespace: Namespace
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export class PhpClient {
|
|
25
|
+
methods: PhpClientMethod[] = []
|
|
26
|
+
|
|
27
|
+
constructor(
|
|
28
|
+
public client_name: ClientName,
|
|
29
|
+
public namespace: Namespace,
|
|
30
|
+
public is_parent_client: boolean,
|
|
31
|
+
public child_client_identifiers: PhpClientIdentifiers[]
|
|
32
|
+
) {
|
|
33
|
+
this.methods = []
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
addMethod(method: PhpClientMethod) {
|
|
37
|
+
this.methods.push(method)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
serialize() {
|
|
41
|
+
const has_child_clients = this.child_client_identifiers.length > 0
|
|
42
|
+
|
|
43
|
+
return [
|
|
44
|
+
`class ${this.client_name}Client`,
|
|
45
|
+
`{`,
|
|
46
|
+
` private SeamClient $seam;`,
|
|
47
|
+
` ${
|
|
48
|
+
has_child_clients
|
|
49
|
+
? this.child_client_identifiers
|
|
50
|
+
.map((i) => ` public ${i.client_name}Client $${i.namespace};`)
|
|
51
|
+
.join("\n")
|
|
52
|
+
: ""
|
|
53
|
+
}`,
|
|
54
|
+
` public function __construct(SeamClient $seam)`,
|
|
55
|
+
` {`,
|
|
56
|
+
` $this->seam = $seam;`,
|
|
57
|
+
` ${
|
|
58
|
+
has_child_clients
|
|
59
|
+
? this.child_client_identifiers
|
|
60
|
+
.map(
|
|
61
|
+
(i) =>
|
|
62
|
+
`$this->${i.namespace} = new ${i.client_name}Client($seam);`
|
|
63
|
+
)
|
|
64
|
+
.join("\n")
|
|
65
|
+
: ""
|
|
66
|
+
}`,
|
|
67
|
+
` }`,
|
|
68
|
+
"",
|
|
69
|
+
...this.methods.map(
|
|
70
|
+
({
|
|
71
|
+
method_name,
|
|
72
|
+
path,
|
|
73
|
+
parameters,
|
|
74
|
+
return_resource,
|
|
75
|
+
return_path,
|
|
76
|
+
is_array_response,
|
|
77
|
+
}) => {
|
|
78
|
+
const does_method_use_action_attempt =
|
|
79
|
+
return_resource === "ActionAttempt" &&
|
|
80
|
+
this.client_name !== "ActionAttempts"
|
|
81
|
+
const method_return_type = is_array_response
|
|
82
|
+
? "array"
|
|
83
|
+
: return_resource
|
|
84
|
+
? return_resource
|
|
85
|
+
: "void"
|
|
86
|
+
|
|
87
|
+
return [
|
|
88
|
+
"",
|
|
89
|
+
` public function ${method_name}(`,
|
|
90
|
+
` ${parameters
|
|
91
|
+
.sort(
|
|
92
|
+
(a, b) =>
|
|
93
|
+
(a.position ?? a.required ? 1000 : 9999) -
|
|
94
|
+
(b.position ?? b.required ? 1000 : 9999)
|
|
95
|
+
)
|
|
96
|
+
.map((p) => `${p.type} $${p.name}${p.required ? "" : " = null"}`)
|
|
97
|
+
.concat(
|
|
98
|
+
does_method_use_action_attempt
|
|
99
|
+
? ["bool $wait_for_action_attempt = true"]
|
|
100
|
+
: []
|
|
101
|
+
)
|
|
102
|
+
.join(",\n ")}`,
|
|
103
|
+
` ): ${method_return_type} {`,
|
|
104
|
+
|
|
105
|
+
` $request_payload = [];`,
|
|
106
|
+
``,
|
|
107
|
+
|
|
108
|
+
`${parameters
|
|
109
|
+
.map((p) =>
|
|
110
|
+
[
|
|
111
|
+
` if ($${p.name} !== null) {`,
|
|
112
|
+
` $request_payload["${p.name}"] = $${p.name};`,
|
|
113
|
+
` }`,
|
|
114
|
+
].join("\n")
|
|
115
|
+
)
|
|
116
|
+
.join("\n")}`,
|
|
117
|
+
``,
|
|
118
|
+
|
|
119
|
+
` ${return_resource ? "$res = " : ""}$this->seam->request(`,
|
|
120
|
+
` "POST",`,
|
|
121
|
+
` "${path}",`,
|
|
122
|
+
` json: $request_payload,`,
|
|
123
|
+
` ${return_path ? `inner_object: "${return_path}",` : ""}`,
|
|
124
|
+
` );`,
|
|
125
|
+
``,
|
|
126
|
+
|
|
127
|
+
does_method_use_action_attempt
|
|
128
|
+
? [
|
|
129
|
+
" if (!$wait_for_action_attempt) {",
|
|
130
|
+
` return ${return_resource}::from_json($res);`,
|
|
131
|
+
" }",
|
|
132
|
+
].join("\n")
|
|
133
|
+
: "",
|
|
134
|
+
``,
|
|
135
|
+
does_method_use_action_attempt
|
|
136
|
+
? [
|
|
137
|
+
` $action_attempt = $this->seam->action_attempts->poll_until_ready(`,
|
|
138
|
+
` $res->action_attempt_id`,
|
|
139
|
+
` );`,
|
|
140
|
+
``,
|
|
141
|
+
` return $action_attempt;`,
|
|
142
|
+
].join("\n")
|
|
143
|
+
: "",
|
|
144
|
+
``,
|
|
145
|
+
|
|
146
|
+
return_resource && !does_method_use_action_attempt
|
|
147
|
+
? ` return ${
|
|
148
|
+
is_array_response
|
|
149
|
+
? `array_map(fn ($r) => ${return_resource}::from_json($r), $res);`
|
|
150
|
+
: `${return_resource}::from_json($res);`
|
|
151
|
+
}`
|
|
152
|
+
: "",
|
|
153
|
+
` }`,
|
|
154
|
+
].join("\n")
|
|
155
|
+
}
|
|
156
|
+
),
|
|
157
|
+
this.client_name === "ActionAttempts"
|
|
158
|
+
? [
|
|
159
|
+
" public function poll_until_ready(string $action_attempt_id): ActionAttempt",
|
|
160
|
+
" {",
|
|
161
|
+
" $seam = $this->seam;",
|
|
162
|
+
" $time_waiting = 0.0;",
|
|
163
|
+
" $action_attempt = $seam->action_attempts->get($action_attempt_id);",
|
|
164
|
+
"",
|
|
165
|
+
' while ($action_attempt->status == "pending") {',
|
|
166
|
+
" $action_attempt = $seam->action_attempts->get(",
|
|
167
|
+
" $action_attempt->action_attempt_id",
|
|
168
|
+
" );",
|
|
169
|
+
" if ($time_waiting > 20.0) {",
|
|
170
|
+
' throw new Exception("Timed out waiting for access code to be created");',
|
|
171
|
+
" }",
|
|
172
|
+
" $time_waiting += 0.4;",
|
|
173
|
+
" usleep(400000); // sleep for 0.4 seconds",
|
|
174
|
+
" }",
|
|
175
|
+
"",
|
|
176
|
+
' if ($action_attempt->status == "failed") {',
|
|
177
|
+
" throw new Exception(",
|
|
178
|
+
' "Action Attempt failed: " . $action_attempt->error->message',
|
|
179
|
+
" );",
|
|
180
|
+
" }",
|
|
181
|
+
"",
|
|
182
|
+
" return $action_attempt;",
|
|
183
|
+
" }",
|
|
184
|
+
].join("\n")
|
|
185
|
+
: "",
|
|
186
|
+
"}",
|
|
187
|
+
].join("\n")
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
export type ClassFileMethod = {
|
|
2
|
+
method_name: string
|
|
3
|
+
path: string
|
|
4
|
+
parameters: Array<{
|
|
5
|
+
name: string
|
|
6
|
+
type: string
|
|
7
|
+
position?: number | undefined
|
|
8
|
+
}>
|
|
9
|
+
return_path: string[]
|
|
10
|
+
return_resource: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class ClassFile {
|
|
14
|
+
name: string
|
|
15
|
+
namespace: string | undefined
|
|
16
|
+
methods: ClassFileMethod[]
|
|
17
|
+
|
|
18
|
+
constructor(name: string, namespace?: string | undefined) {
|
|
19
|
+
this.name = name
|
|
20
|
+
this.namespace = namespace
|
|
21
|
+
this.methods = []
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
addMethod(method: ClassFileMethod) {
|
|
25
|
+
this.methods.push(method)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
serializeToAbstractClassWithoutImports(): string {
|
|
29
|
+
return [
|
|
30
|
+
`class Abstract${this.name}(abc.ABC):`,
|
|
31
|
+
this.methods.length === 0 ? ` pass` : "",
|
|
32
|
+
...this.methods.map(({ method_name, parameters }) =>
|
|
33
|
+
[
|
|
34
|
+
"",
|
|
35
|
+
"",
|
|
36
|
+
`@abc.abstractmethod`,
|
|
37
|
+
`def ${method_name}(self, ${parameters
|
|
38
|
+
.sort((a, b) => (a.position ?? 9999) - (b.position ?? 9999))
|
|
39
|
+
.map(({ name, type, position }) =>
|
|
40
|
+
position !== undefined
|
|
41
|
+
? `${name}: ${type}`
|
|
42
|
+
: `${name}: Optional[${type}] = None`
|
|
43
|
+
)
|
|
44
|
+
.join(", ")}):`,
|
|
45
|
+
` raise NotImplementedError()`,
|
|
46
|
+
]
|
|
47
|
+
.map((s) => ` ${s}`)
|
|
48
|
+
.join("\n")
|
|
49
|
+
),
|
|
50
|
+
].join("\n")
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
serializeToClass(): string {
|
|
54
|
+
return [
|
|
55
|
+
`from seamapi.types import (${[
|
|
56
|
+
`Abstract${this.name}`,
|
|
57
|
+
`AbstractSeam as Seam`,
|
|
58
|
+
...Array.from(
|
|
59
|
+
new Set(
|
|
60
|
+
this.methods.map((m) =>
|
|
61
|
+
m.return_resource.replace(/^List\[/, "").replace(/\]$/, "")
|
|
62
|
+
)
|
|
63
|
+
)
|
|
64
|
+
),
|
|
65
|
+
].join(",")})`,
|
|
66
|
+
`from typing import (Optional, Any)`,
|
|
67
|
+
"",
|
|
68
|
+
`class ${this.name}(Abstract${this.name}):`,
|
|
69
|
+
// TODO DOCSTRING
|
|
70
|
+
` seam: Seam`,
|
|
71
|
+
"",
|
|
72
|
+
` def __init__(self, seam: Seam):`,
|
|
73
|
+
` self.seam = seam`,
|
|
74
|
+
"",
|
|
75
|
+
...this.methods.map(
|
|
76
|
+
({ method_name, path, return_resource, return_path, parameters }) => {
|
|
77
|
+
const is_return_resource_a_list = return_resource.startsWith("List[")
|
|
78
|
+
const list_item_type = return_resource.slice(5, -1)
|
|
79
|
+
return [
|
|
80
|
+
"",
|
|
81
|
+
"",
|
|
82
|
+
`def ${method_name}(self, ${parameters
|
|
83
|
+
.sort((a, b) => (a.position ?? 9999) - (b.position ?? 9999))
|
|
84
|
+
.map(({ name, type, position }) =>
|
|
85
|
+
position !== undefined
|
|
86
|
+
? `${name}: ${type}`
|
|
87
|
+
: `${name}: Optional[${type}] = None`
|
|
88
|
+
)
|
|
89
|
+
.join(", ")}):`,
|
|
90
|
+
` json_payload = {}`,
|
|
91
|
+
...parameters.map(
|
|
92
|
+
({ name }) =>
|
|
93
|
+
` if ${name} is not None:\n json_payload["${name}"] = ${name}`
|
|
94
|
+
),
|
|
95
|
+
` res = self.seam.make_request(`,
|
|
96
|
+
` "POST",`,
|
|
97
|
+
` "${path}",`,
|
|
98
|
+
` json=json_payload`,
|
|
99
|
+
` )`,
|
|
100
|
+
is_return_resource_a_list
|
|
101
|
+
? ` return [${list_item_type}.from_dict(item) for item in res["${return_path.join(
|
|
102
|
+
'"]["'
|
|
103
|
+
)}"]]`
|
|
104
|
+
: ` return ${return_resource}.from_dict(res["${return_path.join(
|
|
105
|
+
'"]["'
|
|
106
|
+
)}"])`,
|
|
107
|
+
]
|
|
108
|
+
.map((s) => ` ${s}`)
|
|
109
|
+
.join("\n")
|
|
110
|
+
}
|
|
111
|
+
),
|
|
112
|
+
].join("\n")
|
|
113
|
+
}
|
|
114
|
+
}
|