@zapier/zapier-sdk 0.18.3 → 0.19.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 +41 -0
- package/README.md +44 -32
- package/dist/index.cjs +658 -693
- package/dist/index.d.mts +272 -138
- package/dist/index.d.ts +2541 -40
- package/dist/index.mjs +638 -692
- package/package.json +14 -13
- package/dist/api/auth.d.ts +0 -19
- package/dist/api/auth.d.ts.map +0 -1
- package/dist/api/auth.js +0 -70
- package/dist/api/auth.test.d.ts +0 -2
- package/dist/api/auth.test.d.ts.map +0 -1
- package/dist/api/auth.test.js +0 -220
- package/dist/api/client.d.ts +0 -9
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.integration.test.d.ts +0 -5
- package/dist/api/client.integration.test.d.ts.map +0 -1
- package/dist/api/client.integration.test.js +0 -318
- package/dist/api/client.js +0 -374
- package/dist/api/client.methods.test.d.ts +0 -2
- package/dist/api/client.methods.test.d.ts.map +0 -1
- package/dist/api/client.methods.test.js +0 -158
- package/dist/api/client.test.d.ts +0 -2
- package/dist/api/client.test.d.ts.map +0 -1
- package/dist/api/client.test.js +0 -96
- package/dist/api/debug.d.ts +0 -14
- package/dist/api/debug.d.ts.map +0 -1
- package/dist/api/debug.js +0 -131
- package/dist/api/debug.test.d.ts +0 -2
- package/dist/api/debug.test.d.ts.map +0 -1
- package/dist/api/debug.test.js +0 -59
- package/dist/api/index.d.ts +0 -30
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -43
- package/dist/api/polling.d.ts +0 -46
- package/dist/api/polling.d.ts.map +0 -1
- package/dist/api/polling.js +0 -139
- package/dist/api/polling.test.d.ts +0 -2
- package/dist/api/polling.test.d.ts.map +0 -1
- package/dist/api/polling.test.js +0 -318
- package/dist/api/router.d.ts +0 -16
- package/dist/api/router.d.ts.map +0 -1
- package/dist/api/router.js +0 -31
- package/dist/api/router.test.d.ts +0 -2
- package/dist/api/router.test.d.ts.map +0 -1
- package/dist/api/router.test.js +0 -103
- package/dist/api/schemas.d.ts +0 -531
- package/dist/api/schemas.d.ts.map +0 -1
- package/dist/api/schemas.js +0 -389
- package/dist/api/types.d.ts +0 -82
- package/dist/api/types.d.ts.map +0 -1
- package/dist/api/types.js +0 -1
- package/dist/auth.d.ts +0 -52
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -72
- package/dist/auth.test.d.ts +0 -2
- package/dist/auth.test.d.ts.map +0 -1
- package/dist/auth.test.js +0 -102
- package/dist/constants.d.ts +0 -14
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -42
- package/dist/plugins/api/index.d.ts +0 -12
- package/dist/plugins/api/index.d.ts.map +0 -1
- package/dist/plugins/api/index.js +0 -24
- package/dist/plugins/apps/index.d.ts +0 -15
- package/dist/plugins/apps/index.d.ts.map +0 -1
- package/dist/plugins/apps/index.js +0 -112
- package/dist/plugins/apps/schemas.d.ts +0 -42
- package/dist/plugins/apps/schemas.d.ts.map +0 -1
- package/dist/plugins/apps/schemas.js +0 -14
- package/dist/plugins/eventEmission/builders.d.ts +0 -14
- package/dist/plugins/eventEmission/builders.d.ts.map +0 -1
- package/dist/plugins/eventEmission/builders.js +0 -109
- package/dist/plugins/eventEmission/index.d.ts +0 -38
- package/dist/plugins/eventEmission/index.d.ts.map +0 -1
- package/dist/plugins/eventEmission/index.js +0 -336
- package/dist/plugins/eventEmission/index.test.d.ts +0 -5
- package/dist/plugins/eventEmission/index.test.d.ts.map +0 -1
- package/dist/plugins/eventEmission/index.test.js +0 -581
- package/dist/plugins/eventEmission/transport.d.ts +0 -27
- package/dist/plugins/eventEmission/transport.d.ts.map +0 -1
- package/dist/plugins/eventEmission/transport.js +0 -104
- package/dist/plugins/eventEmission/transport.test.d.ts +0 -5
- package/dist/plugins/eventEmission/transport.test.d.ts.map +0 -1
- package/dist/plugins/eventEmission/transport.test.js +0 -164
- package/dist/plugins/eventEmission/types.d.ts +0 -63
- package/dist/plugins/eventEmission/types.d.ts.map +0 -1
- package/dist/plugins/eventEmission/types.js +0 -1
- package/dist/plugins/eventEmission/utils.d.ts +0 -45
- package/dist/plugins/eventEmission/utils.d.ts.map +0 -1
- package/dist/plugins/eventEmission/utils.js +0 -114
- package/dist/plugins/fetch/index.d.ts +0 -36
- package/dist/plugins/fetch/index.d.ts.map +0 -1
- package/dist/plugins/fetch/index.js +0 -62
- package/dist/plugins/fetch/schemas.d.ts +0 -19
- package/dist/plugins/fetch/schemas.d.ts.map +0 -1
- package/dist/plugins/fetch/schemas.js +0 -31
- package/dist/plugins/findFirstAuthentication/index.d.ts +0 -21
- package/dist/plugins/findFirstAuthentication/index.d.ts.map +0 -1
- package/dist/plugins/findFirstAuthentication/index.js +0 -36
- package/dist/plugins/findFirstAuthentication/index.test.d.ts +0 -2
- package/dist/plugins/findFirstAuthentication/index.test.d.ts.map +0 -1
- package/dist/plugins/findFirstAuthentication/index.test.js +0 -177
- package/dist/plugins/findFirstAuthentication/schemas.d.ts +0 -20
- package/dist/plugins/findFirstAuthentication/schemas.d.ts.map +0 -1
- package/dist/plugins/findFirstAuthentication/schemas.js +0 -18
- package/dist/plugins/findUniqueAuthentication/index.d.ts +0 -21
- package/dist/plugins/findUniqueAuthentication/index.d.ts.map +0 -1
- package/dist/plugins/findUniqueAuthentication/index.js +0 -39
- package/dist/plugins/findUniqueAuthentication/index.test.d.ts +0 -2
- package/dist/plugins/findUniqueAuthentication/index.test.d.ts.map +0 -1
- package/dist/plugins/findUniqueAuthentication/index.test.js +0 -159
- package/dist/plugins/findUniqueAuthentication/schemas.d.ts +0 -20
- package/dist/plugins/findUniqueAuthentication/schemas.d.ts.map +0 -1
- package/dist/plugins/findUniqueAuthentication/schemas.js +0 -18
- package/dist/plugins/getAction/index.d.ts +0 -25
- package/dist/plugins/getAction/index.d.ts.map +0 -1
- package/dist/plugins/getAction/index.js +0 -42
- package/dist/plugins/getAction/index.test.d.ts +0 -2
- package/dist/plugins/getAction/index.test.d.ts.map +0 -1
- package/dist/plugins/getAction/index.test.js +0 -211
- package/dist/plugins/getAction/schemas.d.ts +0 -30
- package/dist/plugins/getAction/schemas.d.ts.map +0 -1
- package/dist/plugins/getAction/schemas.js +0 -12
- package/dist/plugins/getApp/index.d.ts +0 -21
- package/dist/plugins/getApp/index.d.ts.map +0 -1
- package/dist/plugins/getApp/index.js +0 -44
- package/dist/plugins/getApp/index.test.d.ts +0 -2
- package/dist/plugins/getApp/index.test.d.ts.map +0 -1
- package/dist/plugins/getApp/index.test.js +0 -157
- package/dist/plugins/getApp/schemas.d.ts +0 -16
- package/dist/plugins/getApp/schemas.d.ts.map +0 -1
- package/dist/plugins/getApp/schemas.js +0 -8
- package/dist/plugins/getAuthentication/index.d.ts +0 -21
- package/dist/plugins/getAuthentication/index.d.ts.map +0 -1
- package/dist/plugins/getAuthentication/index.js +0 -29
- package/dist/plugins/getAuthentication/index.test.d.ts +0 -2
- package/dist/plugins/getAuthentication/index.test.d.ts.map +0 -1
- package/dist/plugins/getAuthentication/index.test.js +0 -106
- package/dist/plugins/getAuthentication/schemas.d.ts +0 -7
- package/dist/plugins/getAuthentication/schemas.d.ts.map +0 -1
- package/dist/plugins/getAuthentication/schemas.js +0 -1
- package/dist/plugins/getInputFieldsSchema/index.d.ts +0 -23
- package/dist/plugins/getInputFieldsSchema/index.d.ts.map +0 -1
- package/dist/plugins/getInputFieldsSchema/index.js +0 -53
- package/dist/plugins/getInputFieldsSchema/index.test.d.ts +0 -2
- package/dist/plugins/getInputFieldsSchema/index.test.d.ts.map +0 -1
- package/dist/plugins/getInputFieldsSchema/index.test.js +0 -291
- package/dist/plugins/getInputFieldsSchema/schemas.d.ts +0 -28
- package/dist/plugins/getInputFieldsSchema/schemas.d.ts.map +0 -1
- package/dist/plugins/getInputFieldsSchema/schemas.js +0 -13
- package/dist/plugins/getProfile/index.d.ts +0 -25
- package/dist/plugins/getProfile/index.d.ts.map +0 -1
- package/dist/plugins/getProfile/index.js +0 -39
- package/dist/plugins/getProfile/schemas.d.ts +0 -13
- package/dist/plugins/getProfile/schemas.d.ts.map +0 -1
- package/dist/plugins/getProfile/schemas.js +0 -6
- package/dist/plugins/listActions/index.d.ts +0 -30
- package/dist/plugins/listActions/index.d.ts.map +0 -1
- package/dist/plugins/listActions/index.js +0 -75
- package/dist/plugins/listActions/index.test.d.ts +0 -2
- package/dist/plugins/listActions/index.test.d.ts.map +0 -1
- package/dist/plugins/listActions/index.test.js +0 -453
- package/dist/plugins/listActions/schemas.d.ts +0 -35
- package/dist/plugins/listActions/schemas.d.ts.map +0 -1
- package/dist/plugins/listActions/schemas.js +0 -22
- package/dist/plugins/listApps/index.d.ts +0 -25
- package/dist/plugins/listApps/index.d.ts.map +0 -1
- package/dist/plugins/listApps/index.js +0 -69
- package/dist/plugins/listApps/index.test.d.ts +0 -2
- package/dist/plugins/listApps/index.test.d.ts.map +0 -1
- package/dist/plugins/listApps/index.test.js +0 -141
- package/dist/plugins/listApps/schemas.d.ts +0 -26
- package/dist/plugins/listApps/schemas.d.ts.map +0 -1
- package/dist/plugins/listApps/schemas.js +0 -19
- package/dist/plugins/listAuthentications/index.d.ts +0 -24
- package/dist/plugins/listAuthentications/index.d.ts.map +0 -1
- package/dist/plugins/listAuthentications/index.js +0 -77
- package/dist/plugins/listAuthentications/index.test.d.ts +0 -2
- package/dist/plugins/listAuthentications/index.test.d.ts.map +0 -1
- package/dist/plugins/listAuthentications/index.test.js +0 -832
- package/dist/plugins/listAuthentications/schemas.d.ts +0 -30
- package/dist/plugins/listAuthentications/schemas.d.ts.map +0 -1
- package/dist/plugins/listAuthentications/schemas.js +0 -32
- package/dist/plugins/listInputFieldChoices/index.d.ts +0 -33
- package/dist/plugins/listInputFieldChoices/index.d.ts.map +0 -1
- package/dist/plugins/listInputFieldChoices/index.js +0 -115
- package/dist/plugins/listInputFieldChoices/index.test.d.ts +0 -2
- package/dist/plugins/listInputFieldChoices/index.test.d.ts.map +0 -1
- package/dist/plugins/listInputFieldChoices/index.test.js +0 -717
- package/dist/plugins/listInputFieldChoices/schemas.d.ts +0 -43
- package/dist/plugins/listInputFieldChoices/schemas.d.ts.map +0 -1
- package/dist/plugins/listInputFieldChoices/schemas.js +0 -65
- package/dist/plugins/listInputFields/index.d.ts +0 -34
- package/dist/plugins/listInputFields/index.d.ts.map +0 -1
- package/dist/plugins/listInputFields/index.js +0 -204
- package/dist/plugins/listInputFields/index.test.d.ts +0 -2
- package/dist/plugins/listInputFields/index.test.d.ts.map +0 -1
- package/dist/plugins/listInputFields/index.test.js +0 -359
- package/dist/plugins/listInputFields/schemas.d.ts +0 -35
- package/dist/plugins/listInputFields/schemas.d.ts.map +0 -1
- package/dist/plugins/listInputFields/schemas.js +0 -23
- package/dist/plugins/manifest/index.d.ts +0 -85
- package/dist/plugins/manifest/index.d.ts.map +0 -1
- package/dist/plugins/manifest/index.js +0 -376
- package/dist/plugins/manifest/index.test.d.ts +0 -2
- package/dist/plugins/manifest/index.test.d.ts.map +0 -1
- package/dist/plugins/manifest/index.test.js +0 -1139
- package/dist/plugins/manifest/schemas.d.ts +0 -57
- package/dist/plugins/manifest/schemas.d.ts.map +0 -1
- package/dist/plugins/manifest/schemas.js +0 -50
- package/dist/plugins/registry/index.d.ts +0 -21
- package/dist/plugins/registry/index.d.ts.map +0 -1
- package/dist/plugins/registry/index.js +0 -117
- package/dist/plugins/request/index.d.ts +0 -21
- package/dist/plugins/request/index.d.ts.map +0 -1
- package/dist/plugins/request/index.js +0 -76
- package/dist/plugins/request/index.test.d.ts +0 -2
- package/dist/plugins/request/index.test.d.ts.map +0 -1
- package/dist/plugins/request/index.test.js +0 -337
- package/dist/plugins/request/schemas.d.ts +0 -54
- package/dist/plugins/request/schemas.d.ts.map +0 -1
- package/dist/plugins/request/schemas.js +0 -41
- package/dist/plugins/runAction/index.d.ts +0 -33
- package/dist/plugins/runAction/index.d.ts.map +0 -1
- package/dist/plugins/runAction/index.js +0 -108
- package/dist/plugins/runAction/index.test.d.ts +0 -2
- package/dist/plugins/runAction/index.test.d.ts.map +0 -1
- package/dist/plugins/runAction/index.test.js +0 -333
- package/dist/plugins/runAction/schemas.d.ts +0 -34
- package/dist/plugins/runAction/schemas.d.ts.map +0 -1
- package/dist/plugins/runAction/schemas.js +0 -23
- package/dist/resolvers/actionKey.d.ts +0 -15
- package/dist/resolvers/actionKey.d.ts.map +0 -1
- package/dist/resolvers/actionKey.js +0 -19
- package/dist/resolvers/actionType.d.ts +0 -10
- package/dist/resolvers/actionType.d.ts.map +0 -1
- package/dist/resolvers/actionType.js +0 -21
- package/dist/resolvers/appKey.d.ts +0 -3
- package/dist/resolvers/appKey.d.ts.map +0 -1
- package/dist/resolvers/appKey.js +0 -5
- package/dist/resolvers/authenticationId.d.ts +0 -9
- package/dist/resolvers/authenticationId.d.ts.map +0 -1
- package/dist/resolvers/authenticationId.js +0 -42
- package/dist/resolvers/index.d.ts +0 -8
- package/dist/resolvers/index.d.ts.map +0 -1
- package/dist/resolvers/index.js +0 -8
- package/dist/resolvers/inputFieldKey.d.ts +0 -11
- package/dist/resolvers/inputFieldKey.d.ts.map +0 -1
- package/dist/resolvers/inputFieldKey.js +0 -47
- package/dist/resolvers/inputs.d.ts +0 -17
- package/dist/resolvers/inputs.d.ts.map +0 -1
- package/dist/resolvers/inputs.js +0 -50
- package/dist/schemas/Action.d.ts +0 -24
- package/dist/schemas/Action.d.ts.map +0 -1
- package/dist/schemas/Action.js +0 -40
- package/dist/schemas/App.d.ts +0 -57
- package/dist/schemas/App.d.ts.map +0 -1
- package/dist/schemas/App.js +0 -31
- package/dist/schemas/Auth.d.ts +0 -55
- package/dist/schemas/Auth.d.ts.map +0 -1
- package/dist/schemas/Auth.js +0 -33
- package/dist/schemas/Field.d.ts +0 -61
- package/dist/schemas/Field.d.ts.map +0 -1
- package/dist/schemas/Field.js +0 -116
- package/dist/schemas/Run.d.ts +0 -3
- package/dist/schemas/Run.d.ts.map +0 -1
- package/dist/schemas/Run.js +0 -31
- package/dist/schemas/UserProfile.d.ts +0 -13
- package/dist/schemas/UserProfile.d.ts.map +0 -1
- package/dist/schemas/UserProfile.js +0 -32
- package/dist/sdk.d.ts +0 -146
- package/dist/sdk.d.ts.map +0 -1
- package/dist/sdk.js +0 -112
- package/dist/sdk.test.d.ts +0 -2
- package/dist/sdk.test.d.ts.map +0 -1
- package/dist/sdk.test.js +0 -255
- package/dist/services/implementations.d.ts +0 -63
- package/dist/services/implementations.d.ts.map +0 -1
- package/dist/services/implementations.js +0 -80
- package/dist/temporary-internal-core/handlers/listApps.d.ts +0 -67
- package/dist/temporary-internal-core/handlers/listApps.d.ts.map +0 -1
- package/dist/temporary-internal-core/handlers/listApps.js +0 -134
- package/dist/temporary-internal-core/handlers/listApps.test.d.ts +0 -2
- package/dist/temporary-internal-core/handlers/listApps.test.d.ts.map +0 -1
- package/dist/temporary-internal-core/handlers/listApps.test.js +0 -367
- package/dist/temporary-internal-core/index.d.ts +0 -18
- package/dist/temporary-internal-core/index.d.ts.map +0 -1
- package/dist/temporary-internal-core/index.js +0 -18
- package/dist/temporary-internal-core/schemas/apps/index.d.ts +0 -175
- package/dist/temporary-internal-core/schemas/apps/index.d.ts.map +0 -1
- package/dist/temporary-internal-core/schemas/apps/index.js +0 -97
- package/dist/temporary-internal-core/schemas/errors/index.d.ts +0 -139
- package/dist/temporary-internal-core/schemas/errors/index.d.ts.map +0 -1
- package/dist/temporary-internal-core/schemas/errors/index.js +0 -129
- package/dist/temporary-internal-core/schemas/implementations/index.d.ts +0 -127
- package/dist/temporary-internal-core/schemas/implementations/index.d.ts.map +0 -1
- package/dist/temporary-internal-core/schemas/implementations/index.js +0 -79
- package/dist/temporary-internal-core/types/handler.d.ts +0 -51
- package/dist/temporary-internal-core/types/handler.d.ts.map +0 -1
- package/dist/temporary-internal-core/types/handler.js +0 -8
- package/dist/temporary-internal-core/types/index.d.ts +0 -5
- package/dist/temporary-internal-core/types/index.d.ts.map +0 -1
- package/dist/temporary-internal-core/types/index.js +0 -4
- package/dist/temporary-internal-core/utils/app-locators.d.ts +0 -34
- package/dist/temporary-internal-core/utils/app-locators.d.ts.map +0 -1
- package/dist/temporary-internal-core/utils/app-locators.js +0 -39
- package/dist/temporary-internal-core/utils/string-utils.d.ts +0 -28
- package/dist/temporary-internal-core/utils/string-utils.d.ts.map +0 -1
- package/dist/temporary-internal-core/utils/string-utils.js +0 -52
- package/dist/temporary-internal-core/utils/transformations.d.ts +0 -18
- package/dist/temporary-internal-core/utils/transformations.d.ts.map +0 -1
- package/dist/temporary-internal-core/utils/transformations.js +0 -36
- package/dist/types/domain.d.ts +0 -52
- package/dist/types/domain.d.ts.map +0 -1
- package/dist/types/domain.js +0 -1
- package/dist/types/domain.test.d.ts +0 -2
- package/dist/types/domain.test.d.ts.map +0 -1
- package/dist/types/domain.test.js +0 -39
- package/dist/types/errors.d.ts +0 -143
- package/dist/types/errors.d.ts.map +0 -1
- package/dist/types/errors.js +0 -187
- package/dist/types/events.d.ts +0 -38
- package/dist/types/events.d.ts.map +0 -1
- package/dist/types/events.js +0 -7
- package/dist/types/functions.d.ts +0 -27
- package/dist/types/functions.d.ts.map +0 -1
- package/dist/types/functions.js +0 -1
- package/dist/types/plugin.d.ts +0 -75
- package/dist/types/plugin.d.ts.map +0 -1
- package/dist/types/plugin.js +0 -9
- package/dist/types/properties.d.ts +0 -33
- package/dist/types/properties.d.ts.map +0 -1
- package/dist/types/properties.js +0 -52
- package/dist/types/sdk.d.ts +0 -69
- package/dist/types/sdk.d.ts.map +0 -1
- package/dist/types/sdk.js +0 -4
- package/dist/types/telemetry-events.d.ts +0 -105
- package/dist/types/telemetry-events.d.ts.map +0 -1
- package/dist/types/telemetry-events.js +0 -8
- package/dist/utils/array-utils.d.ts +0 -31
- package/dist/utils/array-utils.d.ts.map +0 -1
- package/dist/utils/array-utils.js +0 -36
- package/dist/utils/array-utils.test.d.ts +0 -2
- package/dist/utils/array-utils.test.d.ts.map +0 -1
- package/dist/utils/array-utils.test.js +0 -107
- package/dist/utils/batch-utils.d.ts +0 -72
- package/dist/utils/batch-utils.d.ts.map +0 -1
- package/dist/utils/batch-utils.js +0 -162
- package/dist/utils/batch-utils.test.d.ts +0 -2
- package/dist/utils/batch-utils.test.d.ts.map +0 -1
- package/dist/utils/batch-utils.test.js +0 -476
- package/dist/utils/domain-utils.d.ts +0 -66
- package/dist/utils/domain-utils.d.ts.map +0 -1
- package/dist/utils/domain-utils.js +0 -164
- package/dist/utils/domain-utils.test.d.ts +0 -2
- package/dist/utils/domain-utils.test.d.ts.map +0 -1
- package/dist/utils/domain-utils.test.js +0 -346
- package/dist/utils/file-utils.d.ts +0 -4
- package/dist/utils/file-utils.d.ts.map +0 -1
- package/dist/utils/file-utils.js +0 -74
- package/dist/utils/file-utils.test.d.ts +0 -2
- package/dist/utils/file-utils.test.d.ts.map +0 -1
- package/dist/utils/file-utils.test.js +0 -51
- package/dist/utils/function-utils.d.ts +0 -73
- package/dist/utils/function-utils.d.ts.map +0 -1
- package/dist/utils/function-utils.js +0 -245
- package/dist/utils/function-utils.test.d.ts +0 -2
- package/dist/utils/function-utils.test.d.ts.map +0 -1
- package/dist/utils/function-utils.test.js +0 -110
- package/dist/utils/id-utils.d.ts +0 -13
- package/dist/utils/id-utils.d.ts.map +0 -1
- package/dist/utils/id-utils.js +0 -22
- package/dist/utils/id-utils.test.d.ts +0 -2
- package/dist/utils/id-utils.test.d.ts.map +0 -1
- package/dist/utils/id-utils.test.js +0 -22
- package/dist/utils/pagination-utils.d.ts +0 -37
- package/dist/utils/pagination-utils.d.ts.map +0 -1
- package/dist/utils/pagination-utils.js +0 -165
- package/dist/utils/pagination-utils.test.d.ts +0 -17
- package/dist/utils/pagination-utils.test.d.ts.map +0 -1
- package/dist/utils/pagination-utils.test.js +0 -461
- package/dist/utils/retry-utils.d.ts +0 -45
- package/dist/utils/retry-utils.d.ts.map +0 -1
- package/dist/utils/retry-utils.js +0 -51
- package/dist/utils/retry-utils.test.d.ts +0 -2
- package/dist/utils/retry-utils.test.d.ts.map +0 -1
- package/dist/utils/retry-utils.test.js +0 -90
- package/dist/utils/schema-utils.d.ts +0 -69
- package/dist/utils/schema-utils.d.ts.map +0 -1
- package/dist/utils/schema-utils.js +0 -72
- package/dist/utils/string-utils.d.ts +0 -40
- package/dist/utils/string-utils.d.ts.map +0 -1
- package/dist/utils/string-utils.js +0 -69
- package/dist/utils/string-utils.test.d.ts +0 -2
- package/dist/utils/string-utils.test.d.ts.map +0 -1
- package/dist/utils/string-utils.test.js +0 -59
- package/dist/utils/telemetry-utils.d.ts +0 -44
- package/dist/utils/telemetry-utils.d.ts.map +0 -1
- package/dist/utils/telemetry-utils.js +0 -55
- package/dist/utils/telemetry-utils.test.d.ts +0 -2
- package/dist/utils/telemetry-utils.test.d.ts.map +0 -1
- package/dist/utils/telemetry-utils.test.js +0 -94
- package/dist/utils/url-utils.d.ts +0 -19
- package/dist/utils/url-utils.d.ts.map +0 -1
- package/dist/utils/url-utils.js +0 -62
- package/dist/utils/url-utils.test.d.ts +0 -2
- package/dist/utils/url-utils.test.d.ts.map +0 -1
- package/dist/utils/url-utils.test.js +0 -103
- package/dist/utils/validation.d.ts +0 -4
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -30
- package/dist/utils/validation.test.d.ts +0 -2
- package/dist/utils/validation.test.d.ts.map +0 -1
- package/dist/utils/validation.test.js +0 -44
package/dist/api/polling.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Polling Utilities
|
|
3
|
-
*
|
|
4
|
-
* This module provides utilities for polling HTTP endpoints until completion,
|
|
5
|
-
* with configurable retry logic and exponential backoff.
|
|
6
|
-
*/
|
|
7
|
-
import { ZapierTimeoutError, ZapierApiError, ZapierValidationError, } from "../types/errors";
|
|
8
|
-
import { setTimeout } from "timers/promises";
|
|
9
|
-
import { calculateWaitTime, MAX_CONSECUTIVE_ERRORS, } from "../utils/retry-utils";
|
|
10
|
-
// Constants
|
|
11
|
-
const DEFAULT_TIMEOUT_MS = 180000;
|
|
12
|
-
const DEFAULT_SUCCESS_STATUS = 200;
|
|
13
|
-
const DEFAULT_PENDING_STATUS = 202;
|
|
14
|
-
const DEFAULT_INITIAL_DELAY_MS = 50;
|
|
15
|
-
const DEFAULT_MAX_POLLING_INTERVAL_MS = 10000;
|
|
16
|
-
const MAX_TIMEOUT_BUFFER_MS = 10000;
|
|
17
|
-
// Polling stages: [threshold_ms, interval_ms]
|
|
18
|
-
// Note: These are default stages, actual hard timeout is enforced separately below
|
|
19
|
-
const DEFAULT_POLLING_STAGES = [
|
|
20
|
-
[125, 125], // Up to 125ms: poll every 125ms
|
|
21
|
-
[375, 250], // Up to 375ms: poll every 250ms
|
|
22
|
-
[875, 500], // Up to 875ms: poll every 500ms
|
|
23
|
-
[10000, 1000], // Up to 10s: poll every 1s
|
|
24
|
-
[30000, 2500], // Up to 30s: poll every 2.5s
|
|
25
|
-
[60000, 5000], // Up to 60s: poll every 5s
|
|
26
|
-
];
|
|
27
|
-
const processResponse = async (response, successStatus, pendingStatus, resultExtractor, errorCount) => {
|
|
28
|
-
// Handle other error responses
|
|
29
|
-
if (!response.ok) {
|
|
30
|
-
return {
|
|
31
|
-
status: "continue" /* PollStatus.Continue */,
|
|
32
|
-
// If for some reason the status is pending, we don't want to increment the error count
|
|
33
|
-
errorCount: response.status === pendingStatus ? errorCount : errorCount + 1,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
// Check for successful completion
|
|
37
|
-
if (response.status === successStatus) {
|
|
38
|
-
try {
|
|
39
|
-
const resultJson = await response.json();
|
|
40
|
-
return {
|
|
41
|
-
result: resultExtractor(resultJson),
|
|
42
|
-
status: "success" /* PollStatus.Success */,
|
|
43
|
-
errorCount: 0,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
throw new ZapierApiError("Result extractor failed to parse successful response as JSON", {
|
|
48
|
-
statusCode: response.status,
|
|
49
|
-
cause: error,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// If it's not pending, it's unexpected
|
|
54
|
-
if (response.status !== pendingStatus) {
|
|
55
|
-
throw new ZapierApiError(`Unexpected response status during polling: ${response.status}`, {
|
|
56
|
-
statusCode: response.status,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
// It's still pending, so we continue polling
|
|
60
|
-
return {
|
|
61
|
-
status: "continue" /* PollStatus.Continue */,
|
|
62
|
-
errorCount: 0,
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Polls an endpoint until completion, timeout, or error
|
|
67
|
-
* @param options Configuration options for polling
|
|
68
|
-
* @returns The extracted result from the successful response
|
|
69
|
-
* @throws {ZapierValidationError} When the input parameters are invalid
|
|
70
|
-
* @throws {ZapierTimeoutError} When the operation times out
|
|
71
|
-
* @throws {ZapierApiError} When the API returns consecutive errors
|
|
72
|
-
*/
|
|
73
|
-
export async function pollUntilComplete(options) {
|
|
74
|
-
const { fetchPoll, timeoutMs = DEFAULT_TIMEOUT_MS, initialDelay = DEFAULT_INITIAL_DELAY_MS, successStatus = DEFAULT_SUCCESS_STATUS, pendingStatus = DEFAULT_PENDING_STATUS, resultExtractor = (response) => response, } = options;
|
|
75
|
-
// Validate input parameters
|
|
76
|
-
if (timeoutMs <= 0) {
|
|
77
|
-
throw new ZapierValidationError("Timeout must be greater than 0", {
|
|
78
|
-
details: { timeoutMs },
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
if (initialDelay < 0) {
|
|
82
|
-
throw new ZapierValidationError("Initial delay must be non-negative", {
|
|
83
|
-
details: { initialDelay },
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
const startTime = Date.now();
|
|
87
|
-
let attempts = 0;
|
|
88
|
-
let errorCount = 0;
|
|
89
|
-
// Build polling stages with the actual timeout appended
|
|
90
|
-
const pollingStages = [
|
|
91
|
-
...DEFAULT_POLLING_STAGES,
|
|
92
|
-
[timeoutMs + MAX_TIMEOUT_BUFFER_MS, DEFAULT_MAX_POLLING_INTERVAL_MS], // Up to timeout + 10s: poll every 10s
|
|
93
|
-
];
|
|
94
|
-
// Apply initial delay if specified
|
|
95
|
-
if (initialDelay > 0) {
|
|
96
|
-
await setTimeout(initialDelay);
|
|
97
|
-
}
|
|
98
|
-
while (true) {
|
|
99
|
-
attempts++;
|
|
100
|
-
const elapsedTime = Date.now() - startTime;
|
|
101
|
-
// Find the current polling stage
|
|
102
|
-
const pollingInterval = pollingStages.find(([maxTimeForStage, _interval]) => {
|
|
103
|
-
return elapsedTime < maxTimeForStage;
|
|
104
|
-
});
|
|
105
|
-
// If there isn't a current stage, throw timeout error
|
|
106
|
-
if (!pollingInterval) {
|
|
107
|
-
throw new ZapierTimeoutError(`Operation timed out after ${Math.floor(elapsedTime / 1000)}s (${attempts} attempts)`, {
|
|
108
|
-
attempts,
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
// Wait before polling (except on first attempt)
|
|
112
|
-
if (attempts > 1) {
|
|
113
|
-
const waitTime = calculateWaitTime(pollingInterval[1], errorCount);
|
|
114
|
-
await setTimeout(waitTime);
|
|
115
|
-
}
|
|
116
|
-
// Perform the poll request
|
|
117
|
-
try {
|
|
118
|
-
const response = await fetchPoll();
|
|
119
|
-
const { result, errorCount: newErrorCount, status, } = await processResponse(response, successStatus, pendingStatus, resultExtractor, errorCount);
|
|
120
|
-
errorCount = newErrorCount;
|
|
121
|
-
if (status === "success" /* PollStatus.Success */) {
|
|
122
|
-
return result;
|
|
123
|
-
}
|
|
124
|
-
if (errorCount >= MAX_CONSECUTIVE_ERRORS) {
|
|
125
|
-
// Too many consecutive errors, fail
|
|
126
|
-
throw new ZapierApiError(`Poll request failed: ${response.status} ${response.statusText}`, { statusCode: response.status });
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
catch (error) {
|
|
130
|
-
errorCount++;
|
|
131
|
-
if (errorCount >= MAX_CONSECUTIVE_ERRORS) {
|
|
132
|
-
throw new ZapierApiError(`Failed to poll after ${errorCount} consecutive errors: ${error instanceof Error ? error.message : String(error)}`, {
|
|
133
|
-
cause: error,
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
// Continue polling if status is pending
|
|
138
|
-
}
|
|
139
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"polling.test.d.ts","sourceRoot":"","sources":["../../src/api/polling.test.ts"],"names":[],"mappings":""}
|
package/dist/api/polling.test.js
DELETED
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { pollUntilComplete } from "./polling";
|
|
3
|
-
import { ZapierTimeoutError, ZapierApiError, ZapierValidationError, } from "../types/errors";
|
|
4
|
-
// Mock the timers/promises module
|
|
5
|
-
vi.mock("timers/promises", () => ({
|
|
6
|
-
setTimeout: vi.fn(() => Promise.resolve()),
|
|
7
|
-
}));
|
|
8
|
-
describe("pollUntilComplete", () => {
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
vi.clearAllMocks();
|
|
11
|
-
});
|
|
12
|
-
afterEach(() => {
|
|
13
|
-
vi.clearAllMocks();
|
|
14
|
-
});
|
|
15
|
-
describe("successful polling", () => {
|
|
16
|
-
it("should return immediately on first successful response", async () => {
|
|
17
|
-
const mockResponse = {
|
|
18
|
-
ok: true,
|
|
19
|
-
status: 200,
|
|
20
|
-
json: vi.fn().mockResolvedValue({ data: "success" }),
|
|
21
|
-
};
|
|
22
|
-
const fetchPoll = vi.fn().mockResolvedValue(mockResponse);
|
|
23
|
-
const result = await pollUntilComplete({ fetchPoll });
|
|
24
|
-
expect(result).toEqual({ data: "success" });
|
|
25
|
-
expect(fetchPoll).toHaveBeenCalledTimes(1);
|
|
26
|
-
});
|
|
27
|
-
it("should poll until success status is received", async () => {
|
|
28
|
-
const pendingResponse = {
|
|
29
|
-
ok: true,
|
|
30
|
-
status: 202,
|
|
31
|
-
};
|
|
32
|
-
const successResponse = {
|
|
33
|
-
ok: true,
|
|
34
|
-
status: 200,
|
|
35
|
-
json: vi.fn().mockResolvedValue({ data: "complete" }),
|
|
36
|
-
};
|
|
37
|
-
const fetchPoll = vi
|
|
38
|
-
.fn()
|
|
39
|
-
.mockResolvedValueOnce(pendingResponse)
|
|
40
|
-
.mockResolvedValueOnce(pendingResponse)
|
|
41
|
-
.mockResolvedValueOnce(successResponse);
|
|
42
|
-
const result = await pollUntilComplete({ fetchPoll });
|
|
43
|
-
expect(result).toEqual({ data: "complete" });
|
|
44
|
-
expect(fetchPoll).toHaveBeenCalledTimes(3);
|
|
45
|
-
});
|
|
46
|
-
it("should use custom success and pending status codes", async () => {
|
|
47
|
-
const pendingResponse = {
|
|
48
|
-
ok: true,
|
|
49
|
-
status: 301,
|
|
50
|
-
};
|
|
51
|
-
const successResponse = {
|
|
52
|
-
ok: true,
|
|
53
|
-
status: 204,
|
|
54
|
-
json: vi.fn().mockResolvedValue({ done: true }),
|
|
55
|
-
};
|
|
56
|
-
const fetchPoll = vi
|
|
57
|
-
.fn()
|
|
58
|
-
.mockResolvedValueOnce(pendingResponse)
|
|
59
|
-
.mockResolvedValueOnce(successResponse);
|
|
60
|
-
const result = await pollUntilComplete({
|
|
61
|
-
fetchPoll,
|
|
62
|
-
successStatus: 204,
|
|
63
|
-
pendingStatus: 301,
|
|
64
|
-
});
|
|
65
|
-
expect(result).toEqual({ done: true });
|
|
66
|
-
expect(fetchPoll).toHaveBeenCalledTimes(2);
|
|
67
|
-
});
|
|
68
|
-
it("should apply result extractor function", async () => {
|
|
69
|
-
const mockResponse = {
|
|
70
|
-
ok: true,
|
|
71
|
-
status: 200,
|
|
72
|
-
json: vi.fn().mockResolvedValue({
|
|
73
|
-
nested: { data: { value: "extracted" } },
|
|
74
|
-
}),
|
|
75
|
-
};
|
|
76
|
-
const fetchPoll = vi.fn().mockResolvedValue(mockResponse);
|
|
77
|
-
const resultExtractor = (response) => response.nested.data.value;
|
|
78
|
-
const result = await pollUntilComplete({
|
|
79
|
-
fetchPoll,
|
|
80
|
-
resultExtractor,
|
|
81
|
-
});
|
|
82
|
-
expect(result).toBe("extracted");
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
describe("initial delay", () => {
|
|
86
|
-
it("should wait for initial delay before first poll", async () => {
|
|
87
|
-
const mockResponse = {
|
|
88
|
-
ok: true,
|
|
89
|
-
status: 200,
|
|
90
|
-
json: vi.fn().mockResolvedValue({ data: "success" }),
|
|
91
|
-
};
|
|
92
|
-
const fetchPoll = vi.fn().mockResolvedValue(mockResponse);
|
|
93
|
-
const { setTimeout: mockSetTimeout } = await import("timers/promises");
|
|
94
|
-
const result = await pollUntilComplete({
|
|
95
|
-
fetchPoll,
|
|
96
|
-
initialDelay: 500,
|
|
97
|
-
});
|
|
98
|
-
expect(result).toEqual({ data: "success" });
|
|
99
|
-
expect(fetchPoll).toHaveBeenCalledTimes(1);
|
|
100
|
-
// Verify setTimeout was called with the initial delay
|
|
101
|
-
expect(mockSetTimeout).toHaveBeenCalledWith(500);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
describe("error handling", () => {
|
|
105
|
-
it("should retry on transient network errors", async () => {
|
|
106
|
-
const successResponse = {
|
|
107
|
-
ok: true,
|
|
108
|
-
status: 200,
|
|
109
|
-
json: vi.fn().mockResolvedValue({ data: "recovered" }),
|
|
110
|
-
};
|
|
111
|
-
const fetchPoll = vi
|
|
112
|
-
.fn()
|
|
113
|
-
.mockRejectedValueOnce(new Error("Network error"))
|
|
114
|
-
.mockRejectedValueOnce(new Error("Network error"))
|
|
115
|
-
.mockResolvedValueOnce(successResponse);
|
|
116
|
-
const result = await pollUntilComplete({ fetchPoll });
|
|
117
|
-
expect(result).toEqual({ data: "recovered" });
|
|
118
|
-
expect(fetchPoll).toHaveBeenCalledTimes(3);
|
|
119
|
-
});
|
|
120
|
-
it("should fail after MAX_CONSECUTIVE_ERRORS network failures", async () => {
|
|
121
|
-
const fetchPoll = vi
|
|
122
|
-
.fn()
|
|
123
|
-
.mockRejectedValue(new Error("Persistent network error"));
|
|
124
|
-
await expect(pollUntilComplete({ fetchPoll })).rejects.toThrow(ZapierApiError);
|
|
125
|
-
expect(fetchPoll).toHaveBeenCalledTimes(3);
|
|
126
|
-
});
|
|
127
|
-
it("should retry on HTTP error responses", async () => {
|
|
128
|
-
const errorResponse = {
|
|
129
|
-
ok: false,
|
|
130
|
-
status: 500,
|
|
131
|
-
statusText: "Internal Server Error",
|
|
132
|
-
};
|
|
133
|
-
const successResponse = {
|
|
134
|
-
ok: true,
|
|
135
|
-
status: 200,
|
|
136
|
-
json: vi.fn().mockResolvedValue({ data: "recovered" }),
|
|
137
|
-
};
|
|
138
|
-
const fetchPoll = vi
|
|
139
|
-
.fn()
|
|
140
|
-
.mockResolvedValueOnce(errorResponse)
|
|
141
|
-
.mockResolvedValueOnce(errorResponse)
|
|
142
|
-
.mockResolvedValueOnce(successResponse);
|
|
143
|
-
const result = await pollUntilComplete({ fetchPoll });
|
|
144
|
-
expect(result).toEqual({ data: "recovered" });
|
|
145
|
-
expect(fetchPoll).toHaveBeenCalledTimes(3);
|
|
146
|
-
});
|
|
147
|
-
it("should fail after MAX_CONSECUTIVE_ERRORS HTTP failures", async () => {
|
|
148
|
-
const errorResponse = {
|
|
149
|
-
ok: false,
|
|
150
|
-
status: 503,
|
|
151
|
-
statusText: "Service Unavailable",
|
|
152
|
-
};
|
|
153
|
-
const fetchPoll = vi.fn().mockResolvedValue(errorResponse);
|
|
154
|
-
await expect(pollUntilComplete({ fetchPoll })).rejects.toThrow(ZapierApiError);
|
|
155
|
-
expect(fetchPoll).toHaveBeenCalledTimes(3);
|
|
156
|
-
});
|
|
157
|
-
it("should throw error for unexpected response status", async () => {
|
|
158
|
-
const unexpectedResponse = {
|
|
159
|
-
ok: true,
|
|
160
|
-
status: 301, // Not success (200) or pending (202)
|
|
161
|
-
};
|
|
162
|
-
const fetchPoll = vi.fn().mockResolvedValue(unexpectedResponse);
|
|
163
|
-
await expect(pollUntilComplete({ fetchPoll })).rejects.toThrow("Unexpected response status");
|
|
164
|
-
// Will retry 3 times before failing
|
|
165
|
-
expect(fetchPoll).toHaveBeenCalledTimes(3);
|
|
166
|
-
});
|
|
167
|
-
it("should throw error if successful response is not valid JSON", async () => {
|
|
168
|
-
const mockResponse = {
|
|
169
|
-
ok: true,
|
|
170
|
-
status: 200,
|
|
171
|
-
json: vi.fn().mockRejectedValue(new Error("Invalid JSON")),
|
|
172
|
-
};
|
|
173
|
-
const fetchPoll = vi.fn().mockResolvedValue(mockResponse);
|
|
174
|
-
await expect(pollUntilComplete({ fetchPoll })).rejects.toThrow("Failed to poll after 3 consecutive errors");
|
|
175
|
-
// Will retry 3 times before failing
|
|
176
|
-
expect(fetchPoll).toHaveBeenCalledTimes(3);
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
describe("timeout behavior", () => {
|
|
180
|
-
it("should timeout after specified duration", async () => {
|
|
181
|
-
// Mock Date.now to simulate time passing
|
|
182
|
-
const originalDateNow = Date.now;
|
|
183
|
-
let currentTime = 1000;
|
|
184
|
-
Date.now = vi.fn(() => currentTime);
|
|
185
|
-
const pendingResponse = {
|
|
186
|
-
ok: true,
|
|
187
|
-
status: 202,
|
|
188
|
-
};
|
|
189
|
-
const fetchPoll = vi.fn().mockImplementation(() => {
|
|
190
|
-
// Simulate time passing with each poll
|
|
191
|
-
currentTime += 500;
|
|
192
|
-
return Promise.resolve(pendingResponse);
|
|
193
|
-
});
|
|
194
|
-
try {
|
|
195
|
-
await expect(pollUntilComplete({
|
|
196
|
-
fetchPoll,
|
|
197
|
-
timeoutMs: 1000,
|
|
198
|
-
initialDelay: 0,
|
|
199
|
-
})).rejects.toThrow(ZapierTimeoutError);
|
|
200
|
-
}
|
|
201
|
-
finally {
|
|
202
|
-
Date.now = originalDateNow;
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
it("should use default timeout when not specified", async () => {
|
|
206
|
-
// Mock Date.now to simulate time passing beyond default timeout
|
|
207
|
-
const originalDateNow = Date.now;
|
|
208
|
-
let currentTime = 1000;
|
|
209
|
-
Date.now = vi.fn(() => currentTime);
|
|
210
|
-
const pendingResponse = {
|
|
211
|
-
ok: true,
|
|
212
|
-
status: 202,
|
|
213
|
-
};
|
|
214
|
-
const fetchPoll = vi.fn().mockImplementation(() => {
|
|
215
|
-
// Simulate time passing beyond default timeout (180 seconds + buffer)
|
|
216
|
-
currentTime += 50000;
|
|
217
|
-
return Promise.resolve(pendingResponse);
|
|
218
|
-
});
|
|
219
|
-
try {
|
|
220
|
-
await expect(pollUntilComplete({
|
|
221
|
-
fetchPoll,
|
|
222
|
-
initialDelay: 0,
|
|
223
|
-
})).rejects.toThrow(ZapierTimeoutError);
|
|
224
|
-
}
|
|
225
|
-
finally {
|
|
226
|
-
Date.now = originalDateNow;
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
describe("input validation", () => {
|
|
231
|
-
it("should throw error for invalid timeout", async () => {
|
|
232
|
-
const fetchPoll = vi.fn();
|
|
233
|
-
await expect(pollUntilComplete({
|
|
234
|
-
fetchPoll,
|
|
235
|
-
timeoutMs: 0,
|
|
236
|
-
})).rejects.toThrow(ZapierValidationError);
|
|
237
|
-
await expect(pollUntilComplete({
|
|
238
|
-
fetchPoll,
|
|
239
|
-
timeoutMs: -1000,
|
|
240
|
-
})).rejects.toThrow(/Timeout must be greater than 0/);
|
|
241
|
-
});
|
|
242
|
-
it("should throw error for negative initial delay", async () => {
|
|
243
|
-
const fetchPoll = vi.fn();
|
|
244
|
-
await expect(pollUntilComplete({
|
|
245
|
-
fetchPoll,
|
|
246
|
-
initialDelay: -100,
|
|
247
|
-
})).rejects.toThrow(ZapierValidationError);
|
|
248
|
-
await expect(pollUntilComplete({
|
|
249
|
-
fetchPoll,
|
|
250
|
-
initialDelay: -1,
|
|
251
|
-
})).rejects.toThrow(/Initial delay must be non-negative/);
|
|
252
|
-
});
|
|
253
|
-
});
|
|
254
|
-
describe("edge cases", () => {
|
|
255
|
-
it("should handle rapid status changes", async () => {
|
|
256
|
-
const responses = [
|
|
257
|
-
{ ok: true, status: 202 },
|
|
258
|
-
{ ok: false, status: 500 },
|
|
259
|
-
{ ok: true, status: 202 },
|
|
260
|
-
{
|
|
261
|
-
ok: true,
|
|
262
|
-
status: 200,
|
|
263
|
-
json: vi.fn().mockResolvedValue({ data: "success" }),
|
|
264
|
-
},
|
|
265
|
-
];
|
|
266
|
-
let index = 0;
|
|
267
|
-
const fetchPoll = vi.fn().mockImplementation(() => {
|
|
268
|
-
const response = responses[index];
|
|
269
|
-
index++;
|
|
270
|
-
return Promise.resolve(response);
|
|
271
|
-
});
|
|
272
|
-
const result = await pollUntilComplete({ fetchPoll });
|
|
273
|
-
expect(result).toEqual({ data: "success" });
|
|
274
|
-
expect(fetchPoll).toHaveBeenCalledTimes(4);
|
|
275
|
-
});
|
|
276
|
-
it("should handle immediate success with no initial delay", async () => {
|
|
277
|
-
const mockResponse = {
|
|
278
|
-
ok: true,
|
|
279
|
-
status: 200,
|
|
280
|
-
json: vi.fn().mockResolvedValue({ instant: true }),
|
|
281
|
-
};
|
|
282
|
-
const fetchPoll = vi.fn().mockResolvedValue(mockResponse);
|
|
283
|
-
const result = await pollUntilComplete({
|
|
284
|
-
fetchPoll,
|
|
285
|
-
initialDelay: 0,
|
|
286
|
-
});
|
|
287
|
-
expect(result).toEqual({ instant: true });
|
|
288
|
-
expect(fetchPoll).toHaveBeenCalledTimes(1);
|
|
289
|
-
});
|
|
290
|
-
it("should handle very short timeout", async () => {
|
|
291
|
-
// Mock Date.now to simulate time passing
|
|
292
|
-
const originalDateNow = Date.now;
|
|
293
|
-
let currentTime = 1000;
|
|
294
|
-
Date.now = vi.fn(() => currentTime);
|
|
295
|
-
const pendingResponse = {
|
|
296
|
-
ok: true,
|
|
297
|
-
status: 202,
|
|
298
|
-
};
|
|
299
|
-
const fetchPoll = vi.fn().mockImplementation(() => {
|
|
300
|
-
// Simulate time passing beyond the short timeout
|
|
301
|
-
currentTime += 200;
|
|
302
|
-
return Promise.resolve(pendingResponse);
|
|
303
|
-
});
|
|
304
|
-
try {
|
|
305
|
-
await expect(pollUntilComplete({
|
|
306
|
-
fetchPoll,
|
|
307
|
-
timeoutMs: 100,
|
|
308
|
-
initialDelay: 0,
|
|
309
|
-
})).rejects.toThrow(ZapierTimeoutError);
|
|
310
|
-
// Should have made at least 1 attempt before timing out
|
|
311
|
-
expect(fetchPoll.mock.calls.length).toBeGreaterThanOrEqual(1);
|
|
312
|
-
}
|
|
313
|
-
finally {
|
|
314
|
-
Date.now = originalDateNow;
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
});
|
|
318
|
-
});
|
package/dist/api/router.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { type Handler } from "../temporary-internal-core";
|
|
2
|
-
export interface Route {
|
|
3
|
-
method: string;
|
|
4
|
-
pattern: RegExp;
|
|
5
|
-
handler: Handler<any, any, any>;
|
|
6
|
-
paramMap: string[];
|
|
7
|
-
}
|
|
8
|
-
export declare function findMatchingRoute(routeList: Route[], method: string, path: string): {
|
|
9
|
-
handler: Handler<any, any, any>;
|
|
10
|
-
params: Record<string, string>;
|
|
11
|
-
} | null;
|
|
12
|
-
export declare function matchRoute(method: string, path: string): {
|
|
13
|
-
handler: Handler<any, any, any>;
|
|
14
|
-
params: Record<string, string>;
|
|
15
|
-
} | null;
|
|
16
|
-
//# sourceMappingURL=router.d.ts.map
|
package/dist/api/router.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/api/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1E,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAWD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,KAAK,EAAE,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM;;;SAsBb;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;SAEtD"}
|
package/dist/api/router.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { handleListApps } from "../temporary-internal-core";
|
|
2
|
-
const routes = [
|
|
3
|
-
{
|
|
4
|
-
method: "GET",
|
|
5
|
-
pattern: /^\/api\/v0\/apps$/,
|
|
6
|
-
handler: handleListApps,
|
|
7
|
-
paramMap: [],
|
|
8
|
-
},
|
|
9
|
-
];
|
|
10
|
-
export function findMatchingRoute(routeList, method, path) {
|
|
11
|
-
for (const route of routeList) {
|
|
12
|
-
if (route.method !== method) {
|
|
13
|
-
continue;
|
|
14
|
-
}
|
|
15
|
-
const match = path.match(route.pattern);
|
|
16
|
-
if (match) {
|
|
17
|
-
const params = {};
|
|
18
|
-
route.paramMap.forEach((name, index) => {
|
|
19
|
-
params[name] = match[index + 1];
|
|
20
|
-
});
|
|
21
|
-
return {
|
|
22
|
-
handler: route.handler,
|
|
23
|
-
params,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
export function matchRoute(method, path) {
|
|
30
|
-
return findMatchingRoute(routes, method, path);
|
|
31
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"router.test.d.ts","sourceRoot":"","sources":["../../src/api/router.test.ts"],"names":[],"mappings":""}
|
package/dist/api/router.test.js
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { matchRoute, findMatchingRoute } from "./router";
|
|
3
|
-
import { handleListApps } from "../temporary-internal-core";
|
|
4
|
-
describe("Router", () => {
|
|
5
|
-
describe("matchRoute (Integration)", () => {
|
|
6
|
-
it("should match GET /api/v0/apps", () => {
|
|
7
|
-
const match = matchRoute("GET", "/api/v0/apps");
|
|
8
|
-
expect(match).not.toBeNull();
|
|
9
|
-
expect(match?.handler).toBe(handleListApps);
|
|
10
|
-
expect(match?.params).toEqual({});
|
|
11
|
-
});
|
|
12
|
-
it("should not match POST /api/v0/apps", () => {
|
|
13
|
-
const match = matchRoute("POST", "/api/v0/apps");
|
|
14
|
-
expect(match).toBeNull();
|
|
15
|
-
});
|
|
16
|
-
it("should not match unknown paths", () => {
|
|
17
|
-
expect(matchRoute("GET", "/api/v0/unknown")).toBeNull();
|
|
18
|
-
expect(matchRoute("GET", "/")).toBeNull();
|
|
19
|
-
});
|
|
20
|
-
it("should not match partial paths if regex is anchored", () => {
|
|
21
|
-
// The regex is /^\/api\/v0\/apps$/ so it shouldn't match suffix
|
|
22
|
-
expect(matchRoute("GET", "/api/v0/apps/something")).toBeNull();
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
describe("findMatchingRoute (Unit)", () => {
|
|
26
|
-
const mockHandler = vi.fn();
|
|
27
|
-
const testRoutes = [
|
|
28
|
-
{
|
|
29
|
-
method: "GET",
|
|
30
|
-
pattern: /^\/items$/,
|
|
31
|
-
handler: mockHandler,
|
|
32
|
-
paramMap: [],
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
method: "GET",
|
|
36
|
-
pattern: /^\/items\/(\d+)$/,
|
|
37
|
-
handler: mockHandler,
|
|
38
|
-
paramMap: ["id"],
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
method: "POST",
|
|
42
|
-
pattern: /^\/items$/,
|
|
43
|
-
handler: mockHandler,
|
|
44
|
-
paramMap: [],
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
method: "GET",
|
|
48
|
-
pattern: /^\/users\/(\w+)\/posts\/(\d+)$/,
|
|
49
|
-
handler: mockHandler,
|
|
50
|
-
paramMap: ["userId", "postId"],
|
|
51
|
-
},
|
|
52
|
-
];
|
|
53
|
-
it("should match exact path", () => {
|
|
54
|
-
const match = findMatchingRoute(testRoutes, "GET", "/items");
|
|
55
|
-
expect(match).not.toBeNull();
|
|
56
|
-
expect(match?.handler).toBe(mockHandler);
|
|
57
|
-
expect(match?.params).toEqual({});
|
|
58
|
-
});
|
|
59
|
-
it("should extract single parameter", () => {
|
|
60
|
-
const match = findMatchingRoute(testRoutes, "GET", "/items/123");
|
|
61
|
-
expect(match).not.toBeNull();
|
|
62
|
-
expect(match?.params).toEqual({ id: "123" });
|
|
63
|
-
});
|
|
64
|
-
it("should extract multiple parameters", () => {
|
|
65
|
-
const match = findMatchingRoute(testRoutes, "GET", "/users/alice/posts/456");
|
|
66
|
-
expect(match).not.toBeNull();
|
|
67
|
-
expect(match?.params).toEqual({ userId: "alice", postId: "456" });
|
|
68
|
-
});
|
|
69
|
-
it("should respect HTTP method", () => {
|
|
70
|
-
// GET /items exists
|
|
71
|
-
expect(findMatchingRoute(testRoutes, "GET", "/items")).not.toBeNull();
|
|
72
|
-
// POST /items exists
|
|
73
|
-
expect(findMatchingRoute(testRoutes, "POST", "/items")).not.toBeNull();
|
|
74
|
-
// PUT /items does not exist
|
|
75
|
-
expect(findMatchingRoute(testRoutes, "PUT", "/items")).toBeNull();
|
|
76
|
-
});
|
|
77
|
-
it("should not match if regex does not match", () => {
|
|
78
|
-
// /items/abc does not match /^\/items\/(\d+)$/ (\d+ is digits only)
|
|
79
|
-
expect(findMatchingRoute(testRoutes, "GET", "/items/abc")).toBeNull();
|
|
80
|
-
});
|
|
81
|
-
it("should handle empty route list", () => {
|
|
82
|
-
expect(findMatchingRoute([], "GET", "/anything")).toBeNull();
|
|
83
|
-
});
|
|
84
|
-
it("should return first matching route", () => {
|
|
85
|
-
const overlappingRoutes = [
|
|
86
|
-
{
|
|
87
|
-
method: "GET",
|
|
88
|
-
pattern: /^\/overlapping$/,
|
|
89
|
-
handler: mockHandler,
|
|
90
|
-
paramMap: [],
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
method: "GET",
|
|
94
|
-
pattern: /^\/overlapping$/, // duplicate pattern
|
|
95
|
-
handler: () => Promise.resolve("second"),
|
|
96
|
-
paramMap: [],
|
|
97
|
-
},
|
|
98
|
-
];
|
|
99
|
-
const match = findMatchingRoute(overlappingRoutes, "GET", "/overlapping");
|
|
100
|
-
expect(match?.handler).toBe(mockHandler); // Should match the first one
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
});
|